sys/freebsd: add support for various network protocols

Add support for Ethernet, IPv4, ICMP, IPv6, ICMP6, TCP, and UDP.
This work is based on the corresponding Linux support.
This commit is contained in:
Michael Tuexen 2019-05-01 18:44:30 +02:00 committed by Michael Tüxen
parent 618456b4f4
commit 7516d9fa93
4 changed files with 2461 additions and 9 deletions

View File

@ -20,7 +20,7 @@
#if GOARCH_amd64
#define GOARCH "amd64"
#define SYZ_REVISION "4b5db889742657ae7fe970feaa45dbf6b13e405b"
#define SYZ_REVISION "e540c106993372e0b27ed5e2d9ec82c4eed76447"
#define SYZ_EXECUTOR_USES_FORK_SERVER 1
#define SYZ_EXECUTOR_USES_SHMEM 1
#define SYZ_PAGE_SIZE 4096

File diff suppressed because it is too large Load Diff

View File

@ -2,10 +2,18 @@
# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
include <sys/types.h>
include <sys/param.h>
include <sys/socket.h>
include <net/ethernet.h>
include <net/if_arp.h>
include <netinet/in.h>
include <netinet/ip.h>
include <netinet/ip_icmp.h>
include <netinet/ip6.h>
include <netinet/icmp6.h>
include <netinet/tcp.h>
syz_emit_ethernet(len len[packet], packet ptr[in, array[int8]])
syz_emit_ethernet(len len[packet], packet ptr[in, eth_packet])
resource tcp_seq_num[int32]: 0x41424344
@ -19,7 +27,129 @@ tcp_resources {
syz_extract_tcp_res(res ptr[out, tcp_resources], seq_inc int32, ack_inc int32)
syz_extract_tcp_res$synack(res ptr[out, tcp_resources], seq_inc const[1], ack_inc const[0])
# This corresponds to LOCAL_IPV4 ("172.20.%d.170" % pid) in executor/common.h
################################################################################
################################### Ethernet ###################################
################################################################################
# https://en.wikipedia.org/wiki/Ethernet_frame#Structure
# https://en.wikipedia.org/wiki/IEEE_802.1Q
type mac_addr_t[LAST] {
a0 array[const[0xaa, int8], 5]
a1 LAST
} [packed]
mac_addr [
empty array[const[0x0, int8], 6]
local mac_addr_t[const[0xaa, int8]]
remote mac_addr_t[const[0xbb, int8]]
broadcast array[const[0xff, int8], 6]
random array[int8, 6]
]
vlan_tag_ad {
tpid const[ETHERTYPE_QINQ, int16be]
pcp int16:3
dei int16:1
vid int16:12[0:4]
} [packed]
vlan_tag_q {
tpid const[ETHERTYPE_VLAN, int16be]
pcp int16:3
dei int16:1
vid int16:12[0:4]
} [packed]
vlan_tag {
tag_ad array[vlan_tag_ad, 0:1]
tag_q vlan_tag_q
} [packed]
eth_packet {
dst_mac mac_addr
src_mac mac_addr
vtag array[vlan_tag, 0:1]
payload eth_payload
} [packed]
eth_payload {
eth2 eth2_packet
} [packed]
################################################################################
################################## Ethernet 2 ##################################
################################################################################
# https://en.wikipedia.org/wiki/Ethernet_frame#Ethernet_II
ether_types = ETHERTYPE_8023, ETHERTYPE_PUP, ETHERTYPE_PUPAT, ETHERTYPE_SPRITE, ETHERTYPE_NS, ETHERTYPE_NSAT, ETHERTYPE_DLOG1, ETHERTYPE_DLOG2, ETHERTYPE_IP, ETHERTYPE_X75, ETHERTYPE_NBS, ETHERTYPE_ECMA, ETHERTYPE_CHAOS, ETHERTYPE_X25, ETHERTYPE_ARP, ETHERTYPE_NSCOMPAT, ETHERTYPE_FRARP, ETHERTYPE_UBDEBUG, ETHERTYPE_IEEEPUP, ETHERTYPE_IEEEPUPAT, ETHERTYPE_VINES, ETHERTYPE_VINESLOOP, ETHERTYPE_VINESECHO, ETHERTYPE_DCA, ETHERTYPE_VALID, ETHERTYPE_DOGFIGHT, ETHERTYPE_RCL, ETHERTYPE_NBPVCD, ETHERTYPE_NBPSCD, ETHERTYPE_NBPCREQ, ETHERTYPE_NBPCRSP, ETHERTYPE_NBPCC, ETHERTYPE_NBPCLREQ, ETHERTYPE_NBPCLRSP, ETHERTYPE_NBPDG, ETHERTYPE_NBPDGB, ETHERTYPE_NBPCLAIM, ETHERTYPE_NBPDLTE, ETHERTYPE_NBPRAS, ETHERTYPE_NBPRAR, ETHERTYPE_NBPRST, ETHERTYPE_PCS, ETHERTYPE_IMLBLDIAG, ETHERTYPE_DIDDLE, ETHERTYPE_IMLBL, ETHERTYPE_SIMNET, ETHERTYPE_DECEXPER, ETHERTYPE_MOPDL, ETHERTYPE_MOPRC, ETHERTYPE_DECnet, ETHERTYPE_LAT, ETHERTYPE_DECDIAG, ETHERTYPE_DECCUST, ETHERTYPE_SCA, ETHERTYPE_AMBER, ETHERTYPE_DECMUMPS, ETHERTYPE_TRANSETHER, ETHERTYPE_RAWFR, ETHERTYPE_UBDL, ETHERTYPE_UBNIU, ETHERTYPE_UBDIAGLOOP, ETHERTYPE_UBNMC, ETHERTYPE_UBBST, ETHERTYPE_OS9, ETHERTYPE_OS9NET, ETHERTYPE_RACAL, ETHERTYPE_PRIMENTS, ETHERTYPE_CABLETRON, ETHERTYPE_CRONUSVLN, ETHERTYPE_CRONUS, ETHERTYPE_HP, ETHERTYPE_NESTAR, ETHERTYPE_ATTSTANFORD, ETHERTYPE_EXCELAN, ETHERTYPE_SG_DIAG, ETHERTYPE_SG_NETGAMES, ETHERTYPE_SG_RESV, ETHERTYPE_SG_BOUNCE, ETHERTYPE_APOLLODOMAIN, ETHERTYPE_TYMSHARE, ETHERTYPE_TIGAN, ETHERTYPE_REVARP, ETHERTYPE_AEONIC, ETHERTYPE_IPXNEW, ETHERTYPE_LANBRIDGE, ETHERTYPE_DSMD, ETHERTYPE_ARGONAUT, ETHERTYPE_VAXELN, ETHERTYPE_DECDNS, ETHERTYPE_ENCRYPT, ETHERTYPE_DECDTS, ETHERTYPE_DECLTM, ETHERTYPE_DECNETBIOS, ETHERTYPE_DECLAST, ETHERTYPE_PLANNING, ETHERTYPE_DECAM, ETHERTYPE_EXPERDATA, ETHERTYPE_VEXP, ETHERTYPE_VPROD, ETHERTYPE_ES, ETHERTYPE_LITTLE, ETHERTYPE_COUNTERPOINT, ETHERTYPE_VEECO, ETHERTYPE_GENDYN, ETHERTYPE_ATT, ETHERTYPE_AUTOPHON, ETHERTYPE_COMDESIGN, ETHERTYPE_COMPUGRAPHIC, ETHERTYPE_MATRA, ETHERTYPE_DDE, ETHERTYPE_MERIT, ETHERTYPE_VLTLMAN, ETHERTYPE_ATALK, ETHERTYPE_SPIDER, ETHERTYPE_PACER, ETHERTYPE_APPLITEK, ETHERTYPE_SNA, ETHERTYPE_VARIAN, ETHERTYPE_RETIX, ETHERTYPE_AARP, ETHERTYPE_APOLLO, ETHERTYPE_VLAN, ETHERTYPE_BOFL, ETHERTYPE_WELLFLEET, ETHERTYPE_TALARIS, ETHERTYPE_WATERLOO, ETHERTYPE_HAYES, ETHERTYPE_VGLAB, ETHERTYPE_IPX, ETHERTYPE_NOVELL, ETHERTYPE_MUMPS, ETHERTYPE_AMOEBA, ETHERTYPE_FLIP, ETHERTYPE_VURESERVED, ETHERTYPE_LOGICRAFT, ETHERTYPE_NCD, ETHERTYPE_ALPHA, ETHERTYPE_SNMP, ETHERTYPE_TEC, ETHERTYPE_RATIONAL, ETHERTYPE_XTP, ETHERTYPE_SGITW, ETHERTYPE_HIPPI_FP, ETHERTYPE_STP, ETHERTYPE_MOTOROLA, ETHERTYPE_NETBEUI, ETHERTYPE_ACCTON, ETHERTYPE_TALARISMC, ETHERTYPE_KALPANA, ETHERTYPE_SECTRA, ETHERTYPE_IPV6, ETHERTYPE_DELTACON, ETHERTYPE_ATOMIC, ETHERTYPE_RDP, ETHERTYPE_MICP, ETHERTYPE_TCPCOMP, ETHERTYPE_IPAS, ETHERTYPE_SECUREDATA, ETHERTYPE_FLOWCONTROL, ETHERTYPE_SLOW, ETHERTYPE_PPP, ETHERTYPE_HITACHI, ETHERTYPE_TEST, ETHERTYPE_MPLS, ETHERTYPE_MPLS_MCAST, ETHERTYPE_AXIS, ETHERTYPE_PPPOEDISC, ETHERTYPE_PPPOE, ETHERTYPE_LANPROBE, ETHERTYPE_PAE, ETHERTYPE_QINQ, ETHERTYPE_LOOPBACK, ETHERTYPE_XNSSM, ETHERTYPE_TCPSM, ETHERTYPE_BCLOOP, ETHERTYPE_DEBNI, ETHERTYPE_SONIX, ETHERTYPE_VITAL
eth2_packet [
generic eth2_packet_generic
arp eth2_packet_t[ETHERTYPE_ARP, arp_packet]
ipv4 eth2_packet_t[ETHERTYPE_IP, ipv4_packet]
ipv6 eth2_packet_t[ETHERTYPE_IPV6, ipv6_packet]
] [varlen]
eth2_packet_generic {
etype flags[ether_types, int16be]
payload array[int8]
} [packed]
type eth2_packet_t[TYPE, PAYLOAD] {
etype const[TYPE, int16be]
payload PAYLOAD
} [packed]
################################################################################
###################################### ARP #####################################
################################################################################
# https://en.wikipedia.org/wiki/Address_Resolution_Protocol#Packet_structure
# https://tools.ietf.org/html/rfc826
arp_hrds = ARPHRD_ETHER, ARPHRD_IEEE802, ARPHRD_FRELAY, ARPHRD_IEEE1394, ARPHRD_INFINIBAND
arp_ops = ARPOP_REQUEST, ARPOP_REPLY, ARPOP_REVREQUEST, ARPOP_REVREPLY, ARPOP_INVREQUEST, ARPOP_INVREPLY
arp_generic_packet {
ar_hrd flags[arp_hrds, int16be]
ar_pro flags[ether_types, int16be]
ar_hln const[6, int8]
ar_pln len[ar_spa, int8]
ar_op flags[arp_ops, int16be]
ar_sha mac_addr
ar_spa array[int8, 0:16]
ar_tha mac_addr
ar_tpa array[int8, 16]
} [packed]
arp_ether_ipv4_packet {
ar_hrd const[ARPHRD_ETHER, int16be]
ar_pro const[ETHERTYPE_IP, int16be]
ar_hln const[6, int8]
ar_pln const[4, int8]
ar_op flags[arp_ops, int16be]
ar_sha mac_addr
ar_spa ipv4_addr
ar_tha mac_addr
ar_tpa ipv4_addr
} [packed]
arp_packet [
generic arp_generic_packet
ether_ipv4 arp_ether_ipv4_packet
] [varlen]
################################################################################
##################################### IPv4 #####################################
################################################################################
# https://tools.ietf.org/html/rfc791#section-3.1
# https://en.wikipedia.org/wiki/IPv4#Header
# This corresponds to LOCAL_IPV4 ("172.20.%d.170" % pid) in executor/common_bsd.h
ipv4_addr_local {
a0 const[0xac, int8]
a1 const[0x14, int8]
@ -27,7 +157,7 @@ ipv4_addr_local {
a3 const[0xaa, int8]
} [packed]
# This corresponds to LOCAL_IPV4 ("172.20.%d.187" % pid) in executor/common.h
# This corresponds to LOCAL_IPV4 ("172.20.%d.187" % pid) in executor/common_bsd.h
ipv4_addr_remote {
a0 const[0xac, int8]
a1 const[0x14, int8]
@ -54,11 +184,313 @@ ipv4_addr [
rand_addr int32be
]
# http://www.iana.org/assignments/ip-parameters/ip-parameters.xhtml#ip-parameters-1
ipv4_option [
generic ipv4_option_generic
end ipv4_option_end
noop ipv4_option_noop
lsrr ipv4_option_lsrr
ssrr ipv4_option_ssrr
rr ipv4_option_rr
timestamp ipv4_option_timestamp
ra ipv4_option_ra
] [varlen]
ipv4_option_types = IPOPT_EOL, IPOPT_NOP, IPOPT_RR, IPOPT_TS, IPOPT_SECURITY, IPOPT_LSRR, IPOPT_ESO, IPOPT_CIPSO, IPOPT_SATID, IPOPT_SSRR, IPOPT_RA
ipv4_option_generic {
type flags[ipv4_option_types, int8]
length len[parent, int8]
data array[int8, 0:16]
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
ipv4_option_end {
type const[IPOPT_EOL, int8]
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
ipv4_option_noop {
type const[IPOPT_NOP, int8]
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
ipv4_option_lsrr {
type const[IPOPT_LSRR, int8]
length len[parent, int8]
pointer int8
data array[ipv4_addr]
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
ipv4_option_ssrr {
type const[IPOPT_SSRR, int8]
length len[parent, int8]
pointer int8
data array[ipv4_addr]
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
ipv4_option_rr {
type const[IPOPT_RR, int8]
length len[parent, int8]
pointer int8
data array[ipv4_addr]
} [packed]
ipv4_option_timestamp_flags = IPOPT_TS_TSONLY, IPOPT_TS_TSANDADDR, IPOPT_TS_PRESPEC
ipv4_option_timestamp_timestamp {
addr array[ipv4_addr, 0:1]
timestamp int32be
} [packed]
# https://tools.ietf.org/html/rfc791#section-3.1
# http://www.networksorcery.com/enp/protocol/ip/option004.htm
ipv4_option_timestamp {
type const[IPOPT_TS, int8]
length len[parent, int8]
pointer int8
flg flags[ipv4_option_timestamp_flags, int8:4]
oflw int8:4
timestamps array[ipv4_option_timestamp_timestamp]
} [packed]
# https://tools.ietf.org/html/rfc2113
ipv4_option_ra {
type const[IPOPT_RA, int8]
length len[parent, int8]
value int32be
} [packed]
ipv4_options {
options array[ipv4_option]
} [packed, align_4]
ipv4_types = IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_IPV4, IPPROTO_TCP, IPPROTO_ST, IPPROTO_EGP, IPPROTO_PIGP, IPPROTO_RCCMON, IPPROTO_NVPII, IPPROTO_PUP, IPPROTO_ARGUS, IPPROTO_EMCON, IPPROTO_XNET, IPPROTO_CHAOS, IPPROTO_UDP, IPPROTO_MUX, IPPROTO_MEAS, IPPROTO_HMP, IPPROTO_PRM, IPPROTO_IDP, IPPROTO_TRUNK1, IPPROTO_TRUNK2, IPPROTO_LEAF1, IPPROTO_LEAF2, IPPROTO_RDP, IPPROTO_IRTP, IPPROTO_TP, IPPROTO_BLT, IPPROTO_NSP, IPPROTO_INP, IPPROTO_SEP, IPPROTO_3PC, IPPROTO_IDPR, IPPROTO_XTP, IPPROTO_DDP, IPPROTO_CMTP, IPPROTO_TPXX, IPPROTO_IL, IPPROTO_SDRP, IPPROTO_IDRP, IPPROTO_RSVP, IPPROTO_GRE, IPPROTO_MHRP, IPPROTO_BHA, IPPROTO_ESP, IPPROTO_AH, IPPROTO_INLSP, IPPROTO_SWIPE, IPPROTO_NHRP, IPPROTO_MOBILE, IPPROTO_TLSP, IPPROTO_SKIP, IPPROTO_AHIP, IPPROTO_CFTP, IPPROTO_HELLO, IPPROTO_SATEXPAK, IPPROTO_KRYPTOLAN, IPPROTO_RVD, IPPROTO_IPPC, IPPROTO_ADFS, IPPROTO_SATMON, IPPROTO_VISA, IPPROTO_IPCV, IPPROTO_CPNX, IPPROTO_CPHB, IPPROTO_WSN, IPPROTO_PVP, IPPROTO_BRSATMON, IPPROTO_ND, IPPROTO_WBMON, IPPROTO_WBEXPAK, IPPROTO_EON, IPPROTO_VMTP, IPPROTO_SVMTP, IPPROTO_VINES, IPPROTO_TTP, IPPROTO_IGP, IPPROTO_DGP, IPPROTO_TCF, IPPROTO_IGRP, IPPROTO_OSPFIGP, IPPROTO_SRPC, IPPROTO_LARP, IPPROTO_MTP, IPPROTO_AX25, IPPROTO_IPEIP, IPPROTO_MICP, IPPROTO_SCCSP, IPPROTO_ETHERIP, IPPROTO_ENCAP, IPPROTO_APES, IPPROTO_GMTP, IPPROTO_IPCOMP, IPPROTO_IPCOMP, IPPROTO_MH, IPPROTO_UDPLITE, IPPROTO_HIP, IPPROTO_SHIM6, IPPROTO_PIM, IPPROTO_CARP, IPPROTO_PGM, IPPROTO_MPLS, IPPROTO_PFSYNC
ipv4_header {
ihl bytesize4[parent, int8:4]
version const[4, int8:4]
ecn int8:2
dscp int8:6
total_len len[ipv4_packet, int16be]
id int16be[100:104]
frag_off int16be
# TODO: frag_off is actually 13 bits, 3 bits are flags
ttl int8
protocol flags[ipv4_types, int8]
csum csum[parent, inet, int16be]
src_ip ipv4_addr
dst_ip ipv4_addr
options ipv4_options
} [packed]
ipv4_packet {
header ipv4_header
payload ipv4_payload
} [packed]
ipv4_payload [
generic array[int8]
tcp tcp_packet
udp udp_packet
icmp icmp_packet
] [varlen]
################################################################################
###################################### ICMP ####################################
################################################################################
# https://en.wikipedia.org/wiki/Internet_Control_Message_Protocol#ICMP_datagram_structure
# https://tools.ietf.org/html/rfc792
# https://tools.ietf.org/html/rfc4884#section-4.1
# http://www.iana.org/assignments/icmp-parameters/icmp-parameters.xhtml
icmp_ipv4_header {
ihl bytesize4[parent, int8:4]
version const[4, int8:4]
ecn int8:2
dscp int8:6
total_len int16be
id icmp_id
frag_off int16be
ttl int8
protocol flags[ipv4_types, int8]
csum int16be
src_ip ipv4_addr
dst_ip ipv4_addr
options ipv4_options
} [packed]
icmp_types = ICMP_ECHOREPLY, ICMP_UNREACH, ICMP_SOURCEQUENCH, ICMP_REDIRECT, ICMP_ALTHOSTADDR, ICMP_ECHO, ICMP_ROUTERADVERT, ICMP_ROUTERSOLICIT, ICMP_TIMXCEED, ICMP_PARAMPROB, ICMP_TSTAMP, ICMP_TSTAMPREPLY, ICMP_IREQ, ICMP_IREQREPLY, ICMP_MASKREQ, ICMP_MASKREPLY, ICMP_TRACEROUTE, ICMP_DATACONVERR, ICMP_MOBILE_REDIRECT, ICMP_IPV6_WHEREAREYOU, ICMP_IPV6_IAMHERE, ICMP_MOBILE_REGREQUEST, ICMP_MOBILE_REGREPLY, ICMP_SKIP, ICMP_PHOTURIS
icmp_generic_packet {
type flags[icmp_types, int8]
code int8
csum csum[parent, inet, int16be]
data array[int8]
} [packed]
icmp_echo_reply_packet {
type const[ICMP_ECHOREPLY, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id icmp_id
seq_num int16be
data array[int8]
} [packed]
type icmp_id int16be[100:104]
icmp_dest_unreach_codes = ICMP_UNREACH_NET, ICMP_UNREACH_HOST, ICMP_UNREACH_PROTOCOL, ICMP_UNREACH_PORT, ICMP_UNREACH_NEEDFRAG, ICMP_UNREACH_SRCFAIL, ICMP_UNREACH_NET_UNKNOWN, ICMP_UNREACH_HOST_UNKNOWN, ICMP_UNREACH_ISOLATED, ICMP_UNREACH_NET_PROHIB, ICMP_UNREACH_HOST_PROHIB, ICMP_UNREACH_TOSNET, ICMP_UNREACH_TOSHOST, ICMP_UNREACH_FILTER_PROHIB, ICMP_UNREACH_HOST_PRECEDENCE, ICMP_UNREACH_PRECEDENCE_CUTOFF
icmp_dest_unreach_packet {
type const[ICMP_UNREACH, int8]
code flags[icmp_dest_unreach_codes, int8]
csum csum[parent, inet, int16be]
unused const[0, int8]
length int8
mtu int16be
iph icmp_ipv4_header
data array[int8, 0:8]
} [packed]
icmp_source_quench_packet {
type const[ICMP_SOURCEQUENCH, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
unused const[0, int32]
iph icmp_ipv4_header
data array[int8, 0:8]
} [packed]
icmp_redirect_codes = ICMP_REDIRECT_NET, ICMP_REDIRECT_HOST, ICMP_REDIRECT_TOSNET, ICMP_REDIRECT_TOSHOST
icmp_redirect_packet {
type const[ICMP_REDIRECT, int8]
code flags[icmp_redirect_codes, int8]
csum csum[parent, inet, int16be]
ip ipv4_addr
iph icmp_ipv4_header
data array[int8, 0:8]
} [packed]
icmp_echo_packet {
type const[ICMP_ECHO, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id int16be
seq_num int16be
data array[int8]
} [packed]
icmp_time_exceeded_codes = ICMP_TIMXCEED_INTRANS, ICMP_TIMXCEED_REASS
icmp_time_exceeded_packet {
type const[ICMP_TIMXCEED, int8]
code flags[icmp_time_exceeded_codes, int8]
csum csum[parent, inet, int16be]
unused1 const[0, int8]
length int8
unused2 const[0, int16]
iph icmp_ipv4_header
data array[int8, 0:8]
} [packed]
icmp_parameter_prob_codes = ICMP_PARAMPROB_ERRATPTR, ICMP_PARAMPROB_OPTABSENT, ICMP_PARAMPROB_LENGTH
icmp_parameter_prob_packet {
type const[ICMP_PARAMPROB, int8]
code flags[icmp_parameter_prob_codes, int8]
csum csum[parent, inet, int16be]
pointer int8
length int8
unused const[0, int16]
iph icmp_ipv4_header
data array[int8, 0:8]
} [packed]
icmp_timestamp_packet {
type const[ICMP_TSTAMP, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id int16be
seq_num int16be
orig_ts int32be
recv_ts int32be
trans_ts int32be
} [packed]
icmp_timestamp_reply_packet {
type const[ICMP_TSTAMPREPLY, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id int16be
seq_num int16be
orig_ts int32be
recv_ts int32be
trans_ts int32be
} [packed]
icmp_info_request_packet {
type const[ICMP_IREQ, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id int16be
seq_num int16be
} [packed]
icmp_info_reply_packet {
type const[ICMP_IREQREPLY, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
id int16be
seq_num int16be
} [packed]
icmp_mask_request_packet {
type const[ICMP_MASKREQ, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
mask int32be
} [packed]
icmp_mask_reply_packet {
type const[ICMP_MASKREPLY, int8]
code const[0, int8]
csum csum[parent, inet, int16be]
mask int32be
} [packed]
icmp_packet [
generic icmp_generic_packet
echo_reply icmp_echo_reply_packet
dest_unreach icmp_dest_unreach_packet
source_quench icmp_source_quench_packet
redirect icmp_redirect_packet
echo icmp_echo_packet
time_exceeded icmp_time_exceeded_packet
parameter_prob icmp_parameter_prob_packet
timestamp icmp_timestamp_packet
timestamp_reply icmp_timestamp_reply_packet
info_request icmp_info_request_packet
info_reply icmp_info_reply_packet
mask_request icmp_mask_request_packet
mask_reply icmp_mask_reply_packet
] [varlen]
################################################################################
##################################### IPv6 #####################################
################################################################################
ipv6_types = IPPROTO_IPV4, IPPROTO_TCP, IPPROTO_ST, IPPROTO_EGP, IPPROTO_PIGP, IPPROTO_RCCMON, IPPROTO_NVPII, IPPROTO_PUP, IPPROTO_ARGUS, IPPROTO_EMCON, IPPROTO_XNET, IPPROTO_CHAOS, IPPROTO_UDP, IPPROTO_MUX, IPPROTO_MEAS, IPPROTO_HMP, IPPROTO_PRM, IPPROTO_IDP, IPPROTO_TRUNK1, IPPROTO_TRUNK2, IPPROTO_LEAF1, IPPROTO_LEAF2, IPPROTO_RDP, IPPROTO_IRTP, IPPROTO_TP, IPPROTO_BLT, IPPROTO_NSP, IPPROTO_INP, IPPROTO_SEP, IPPROTO_3PC, IPPROTO_IDPR, IPPROTO_XTP, IPPROTO_DDP, IPPROTO_CMTP, IPPROTO_TPXX, IPPROTO_IL, IPPROTO_SDRP, IPPROTO_ROUTING, IPPROTO_FRAGMENT, IPPROTO_IDRP, IPPROTO_RSVP, IPPROTO_GRE, IPPROTO_MHRP, IPPROTO_BHA, IPPROTO_ESP, IPPROTO_AH, IPPROTO_INLSP, IPPROTO_SWIPE, IPPROTO_NHRP, IPPROTO_MOBILE, IPPROTO_TLSP, IPPROTO_SKIP, IPPROTO_ICMPV6, IPPROTO_NONE, IPPROTO_DSTOPTS, IPPROTO_AHIP, IPPROTO_CFTP, IPPROTO_HELLO, IPPROTO_SATEXPAK, IPPROTO_KRYPTOLAN, IPPROTO_RVD, IPPROTO_IPPC, IPPROTO_ADFS, IPPROTO_SATMON, IPPROTO_VISA, IPPROTO_IPCV, IPPROTO_CPNX, IPPROTO_CPHB, IPPROTO_WSN, IPPROTO_PVP, IPPROTO_BRSATMON, IPPROTO_ND, IPPROTO_WBMON, IPPROTO_WBEXPAK, IPPROTO_EON, IPPROTO_VMTP, IPPROTO_SVMTP, IPPROTO_VINES, IPPROTO_TTP, IPPROTO_IGP, IPPROTO_DGP, IPPROTO_TCF, IPPROTO_IGRP, IPPROTO_OSPFIGP, IPPROTO_SRPC, IPPROTO_LARP, IPPROTO_MTP, IPPROTO_AX25, IPPROTO_IPEIP, IPPROTO_MICP, IPPROTO_SCCSP, IPPROTO_ETHERIP, IPPROTO_ENCAP, IPPROTO_APES, IPPROTO_GMTP, IPPROTO_IPCOMP, IPPROTO_IPCOMP, IPPROTO_MH, IPPROTO_UDPLITE, IPPROTO_HIP, IPPROTO_SHIM6, IPPROTO_PIM, IPPROTO_CARP, IPPROTO_PGM, IPPROTO_MPLS, IPPROTO_PFSYNC
ipv6_addr_empty {
a0 array[const[0x0, int8], 16]
}
# This corresponds to LOCAL_IPV6 ("fe80::%02hxaa" % pid) in executor/common.h
# This corresponds to LOCAL_IPV6 ("fe80::%02hxaa" % pid) in executor/common_bsd.h
ipv6_addr_local {
a0 const[0xfe, int8]
a1 const[0x80, int8]
@ -67,7 +499,7 @@ ipv6_addr_local {
a4 const[0xaa, int8]
} [packed]
# This corresponds to REMOTE_IPV6 ("fe80::%02hxbb" % pid) in executor/common.h
# This corresponds to REMOTE_IPV6 ("fe80::%02hxbb" % pid) in executor/common_bsd.h
ipv6_addr_remote {
a0 const[0xfe, int8]
a1 const[0x80, int8]
@ -81,9 +513,478 @@ ipv6_addr_loopback {
a1 const[1, int64be]
} [packed]
ipv6_addr_ipv4 {
a0 array[const[0x0, int8], 10]
a1 array[const[0xff, int8], 2]
a3 ipv4_addr
} [packed]
ipv6_addr_multicast1 {
a0 const[0xff, int8]
a1 const[0x1, int8]
a2 array[const[0x0, int8], 13]
a3 const[0x1, int8]
} [packed]
ipv6_addr_multicast2 {
a0 const[0xff, int8]
a1 const[0x2, int8]
a2 array[const[0x0, int8], 13]
a3 const[0x1, int8]
} [packed]
ipv6_addr [
rand_addr array[int8, 16]
empty ipv6_addr_empty
local ipv6_addr_local
remote ipv6_addr_remote
loopback ipv6_addr_loopback
]
ipv4 ipv6_addr_ipv4
mcast1 ipv6_addr_multicast1
mcast2 ipv6_addr_multicast2
] [size[16]]
# https://tools.ietf.org/html/rfc2402
# https://tools.ietf.org/html/rfc2406
# https://tools.ietf.org/html/rfc3775
# https://tools.ietf.org/html/rfc2460#section-4
# The length field in each of the extension headers specifies the
# length of the header in 8-octet units not including the first 8 octets.
ipv6_ext_header [
hopopts ipv6_hopots_ext_header
routing ipv6_rt_hdr
fragment ipv6_fragment_ext_header
dstopts ipv6_dstopts_ext_header
] [varlen]
ipv6_hopots_ext_header {
next_header flags[ipv6_types, int8]
length bytesize8[options, int8]
pad array[const[0, int8], 6]
options array[ipv6_tlv_option]
} [packed, align_8]
ipv6_routing_types = IPV6_RTHDR_LOOSE, IPV6_RTHDR_STRICT, IPV6_RTHDR_TYPE_0
ipv6_rt_hdr {
next_header flags[ipv6_types, int8]
length bytesize8[data, int8]
routing_type flags[ipv6_routing_types, int8]
segments_left int8
reserved const[0, int32]
data array[ipv6_addr]
} [packed, align_8]
ipv6_fragment_ext_header {
next_header flags[ipv6_types, int8]
reserved1 const[0, int8]
fragment_off_hi int8
m_flag int8:1
reserved2 const[0, int8:2]
fragment_off_lo int8:5
identification int32[100:104]
} [packed, align_8]
ipv6_dstopts_ext_header {
next_header flags[ipv6_types, int8]
length bytesize8[options, int8]
pad array[const[0, int8], 6]
options array[ipv6_tlv_option]
} [packed, align_8]
ipv6_tlv_option [
generic ipv6_tlv_generic
pad1 ipv6_tlv_pad1
padn ipv6_tlv_padn
jumbo ipv6_tlv_jumbo
enc_lim ipv6_tlv_tun_lim
ra ipv6_tlv_ra
] [varlen]
ipv6_tlv_generic {
type int8
length len[data, int8]
data array[int8]
} [packed]
ipv6_tlv_pad1 {
type const[IP6OPT_PAD1, int8]
len const[1, int8]
pad const[0, int8]
} [packed]
ipv6_tlv_padn {
type const[IP6OPT_PADN, int8]
len len[pad, int8]
pad array[const[0, int8]]
} [packed]
ipv6_tlv_jumbo {
type const[IP6OPT_JUMBO, int8]
len const[4, int8]
pkt_len int32be
} [packed]
ipv6_tlv_tun_lim {
type const[IP6OPT_TUNNEL_LIMIT, int8]
len const[1, int8]
encap_limit int8
} [packed]
ipv6_tlv_ra {
type const[IP6OPT_ROUTER_ALERT, int8]
len const[2, int8]
ra int16be
} [packed]
ipv6_packet {
priority int8:4
version const[6, int8:4]
flow_label array[int8, 3]
# TODO: flow_label is actually 20 bits, 4 bits are part of priority
length len[payload, int16be]
next_header flags[ipv6_types, int8]
hop_limit int8
src_ip ipv6_addr
dst_ip ipv6_addr
payload ipv6_packet_payload
} [packed]
ipv6_packet_payload {
ext_headers array[ipv6_ext_header]
payload ipv6_payload
} [packed]
ipv6_payload [
generic array[int8]
tcp tcp_packet
udp udp_packet
icmpv6 icmpv6_packet
] [varlen]
################################################################################
##################################### ICMPv6 ###################################
################################################################################
# https://tools.ietf.org/html/rfc4443
# http://www.iana.org/assignments/icmpv6-parameters/icmpv6-parameters.xhtml
icmpv6_ipv6_packet {
priority int8:4
version const[6, int8:4]
flow_label array[int8, 3]
length int16be
next_header flags[ipv6_types, int8]
hop_limit int8
src_ip ipv6_addr
dst_ip ipv6_addr
ext_headers array[ipv6_ext_header]
data array[int8]
} [packed]
icmpv6_dest_unreach_codes = ICMP6_DST_UNREACH_NOROUTE, ICMP6_DST_UNREACH_ADMIN, ICMP6_DST_UNREACH_NOTNEIGHBOR, ICMP6_DST_UNREACH_BEYONDSCOPE, ICMP6_DST_UNREACH_ADDR, ICMP6_DST_UNREACH_NOPORT, ICMP6_DST_UNREACH_POLICY, ICMP6_DST_UNREACH_REJECT, ICMP6_DST_UNREACH_SRCROUTE
icmpv6_dest_unreach_packet {
type const[ICMP6_DST_UNREACH, int8]
code flags[icmpv6_dest_unreach_codes, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
length int8
unused array[const[0, int8], 3]
packet icmpv6_ipv6_packet
} [packed]
icmpv6_pkt_toobig_packet {
type const[ICMP6_PACKET_TOO_BIG, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
mtu int32be
packet icmpv6_ipv6_packet
} [packed]
icmpv6_time_exceed_codes = ICMP6_TIME_EXCEED_TRANSIT, ICMP6_TIME_EXCEED_REASSEMBLY
icmpv6_time_exceed_packet {
type const[ICMP6_TIME_EXCEEDED, int8]
code flags[icmpv6_time_exceed_codes, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
length int8
unused array[const[0, int8], 3]
packet icmpv6_ipv6_packet
} [packed]
icmpv6_param_prob_codes = ICMP6_PARAMPROB_HEADER, ICMP6_PARAMPROB_NEXTHEADER, ICMP6_PARAMPROB_OPTION
icmpv6_param_prob_packet {
type const[ICMP6_PARAM_PROB, int8]
code flags[icmpv6_param_prob_codes, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
pointer int32be
packet icmpv6_ipv6_packet
} [packed]
icmpv6_echo_request_packet {
type const[ICMP6_ECHO_REQUEST, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
id int16be
seq_num int16be
data array[int8]
} [packed]
icmpv6_echo_reply_packet {
type const[ICMP6_ECHO_REPLY, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
id int16be
seq_num int16be
data array[int8]
} [packed]
icmpv6_mld_types = MLD_LISTENER_QUERY, MLD_LISTENER_REPORT, MLD_LISTENER_REDUCTION
# https://tools.ietf.org/html/rfc2710#section-3
icmpv6_mld_packet {
type flags[icmpv6_mld_types, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
mrd int16be
unused int16
addr ipv6_addr
} [packed]
icmpv6_ni_types = ICMP6_NI_QUERY, ICMP6_NI_REPLY
# https://tools.ietf.org/html/rfc4620#section-4
icmpv6_ni_packet {
type flags[icmpv6_ni_types, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
qtype int16be
flags int16be
nonce int64be
data array[int8]
} [packed]
icmpv6_ndisc_option_types = ND_OPT_SOURCE_LINKADDR, ND_OPT_TARGET_LINKADDR, ND_OPT_PREFIX_INFORMATION, ND_OPT_REDIRECTED_HEADER, ND_OPT_MTU, ND_OPT_NONCE, ND_OPT_ROUTE_INFO, ND_OPT_RDNSS, ND_OPT_DNSSL
# https://tools.ietf.org/html/rfc4861#section-4.6
icmpv6_ndisc_option {
option_type flags[icmpv6_ndisc_option_types, int8]
length bytesize8[parent, int8]
# TODO: define the option formats
data array[int8]
} [packed]
# https://tools.ietf.org/html/rfc4861#section-4.1
icmpv6_ndisc_router_solicit_packet {
type const[ND_ROUTER_SOLICIT, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
unused array[const[0, int8], 4]
options array[icmpv6_ndisc_option]
} [packed]
# https://tools.ietf.org/html/rfc4861#section-4.2
icmpv6_ndisc_router_advert_packet {
type const[ND_ROUTER_ADVERT, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
cur_hop_limit int8
# TODO: Implement bitflags for the router advert flags
router_flags int8
router_lifetime int16
reachable_time int32
retrans_time int32
options array[icmpv6_ndisc_option]
} [packed]
# https://tools.ietf.org/html/rfc4861#section-4.3
icmpv6_ndisc_neigh_solicit_packet {
type const[ND_NEIGHBOR_SOLICIT, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
target_addr ipv6_addr
options array[icmpv6_ndisc_option]
} [packed]
# https://tools.ietf.org/html/rfc4861#section-4.4
icmpv6_ndisc_neigh_advert_packet {
type const[ND_NEIGHBOR_ADVERT, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
# TODO: Implement bitflags for the neighbor advert flags
neighbor_flags int8
unused array[const[0, int8], 3]
target_addr ipv6_addr
options array[icmpv6_ndisc_option]
} [packed]
# https://tools.ietf.org/html/rfc4861#section-4.5
icmpv6_ndisc_redir_packet {
type const[ND_REDIRECT, int8]
code const[0, int8]
csum csum[parent, pseudo, IPPROTO_ICMPV6, int16be]
unused array[const[0, int8], 4]
target_addr ipv6_addr
dst_addr ipv6_addr
options array[icmpv6_ndisc_option]
} [packed]
icmpv6_packet [
dest_unreach icmpv6_dest_unreach_packet
pkt_toobig icmpv6_pkt_toobig_packet
time_exceed icmpv6_time_exceed_packet
param_prob icmpv6_param_prob_packet
echo_request icmpv6_echo_request_packet
echo_reply icmpv6_echo_reply_packet
mld icmpv6_mld_packet
ni icmpv6_ni_packet
ndisc_rs icmpv6_ndisc_router_solicit_packet
ndisc_ra icmpv6_ndisc_router_advert_packet
ndisc_na icmpv6_ndisc_neigh_advert_packet
ndisc_ns icmpv6_ndisc_neigh_solicit_packet
ndisc_redir icmpv6_ndisc_redir_packet
] [varlen]
################################################################################
###################################### TCP #####################################
################################################################################
# https://tools.ietf.org/html/rfc793#section-3.1
# https://en.wikipedia.org/wiki/Transmission_Control_Protocol#TCP_segment_structure
# http://www.iana.org/assignments/tcp-parameters/tcp-parameters.xhtml
tcp_option [
generic tcp_generic_option
nop tcp_nop_option
eol tcp_eol_option
mss tcp_mss_option
window tcp_window_option
sack_perm tcp_sack_perm_option
sack tcp_sack_option
timestamp tcp_timestamp_option
md5sig tcp_md5sig_option
fastopen tcp_fastopen_option
] [varlen]
tcp_option_types = TCPOPT_EOL, TCPOPT_NOP, TCPOPT_MAXSEG, TCPOPT_WINDOW, TCPOPT_SACK_PERMITTED, TCPOPT_SACK, TCPOPT_TIMESTAMP, TCPOPT_SIGNATURE, TCPOPT_FAST_OPEN
tcp_generic_option {
type flags[tcp_option_types, int8]
length len[parent, int8]
data array[int8, 0:16]
} [packed]
# https://tools.ietf.org/html/rfc793#section-3.1
tcp_eol_option {
type const[TCPOPT_EOL, int8]
} [packed]
# https://tools.ietf.org/html/rfc793#section-3.1
tcp_nop_option {
type const[TCPOPT_NOP, int8]
} [packed]
# https://tools.ietf.org/html/rfc793#section-3.1
tcp_mss_option {
type const[TCPOPT_MAXSEG, int8]
length len[parent, int8]
seg_size int16
} [packed]
# https://tools.ietf.org/html/rfc7323#section-2
tcp_window_option {
type const[TCPOPT_WINDOW, int8]
length len[parent, int8]
shift int8
} [packed]
# https://tools.ietf.org/html/rfc2018#section-2
tcp_sack_perm_option {
type const[TCPOPT_SACK_PERMITTED, int8]
length len[parent, int8]
} [packed]
# https://tools.ietf.org/html/rfc2018#section-3
tcp_sack_option {
type const[TCPOPT_SACK, int8]
length len[parent, int8]
data array[int32be]
} [packed]
# https://tools.ietf.org/html/rfc7323#section-3
tcp_timestamp_option {
type const[TCPOPT_TIMESTAMP, int8]
length len[parent, int8]
tsval int32be
tsecr int32be
} [packed]
# https://tools.ietf.org/html/rfc2385#section-3.0
tcp_md5sig_option {
type const[TCPOPT_SIGNATURE, int8]
length len[parent, int8]
md5 array[int8, 16]
} [packed]
# https://tools.ietf.org/html/rfc7413#section-4.1.1
tcp_fastopen_option {
type const[TCPOPT_FAST_OPEN, int8]
length len[parent, int8]
data array[int8, 0:16]
} [packed]
tcp_options {
options array[tcp_option]
} [packed, align_4]
tcp_flags = 0, TH_FIN, TH_SYN, TH_RST, TH_PUSH, TH_ACK, TH_URG, TH_ECE, TH_CWR
tcp_header {
src_port sock_port
dst_port sock_port
seq_num tcp_seq_num
ack_num tcp_seq_num
ns int8:1
reserved const[0, int8:3]
data_off bytesize4[parent, int8:4]
flags flags[tcp_flags, int8]
window_size int16be
csum csum[tcp_packet, pseudo, IPPROTO_TCP, int16be]
urg_ptr int16be
options tcp_options
} [packed]
tcp_packet {
header tcp_header
payload tcp_payload
} [packed]
tcp_payload {
payload array[int8]
} [packed]
################################################################################
###################################### UDP #####################################
################################################################################
# https://tools.ietf.org/html/rfc768
# https://en.wikipedia.org/wiki/User_Datagram_Protocol#Packet_structure
udp_header {
src_port sock_port
dst_port sock_port
length len[parent, int16be]
csum csum[parent, pseudo, IPPROTO_UDP, int16be]
} [packed]
udp_packet {
header udp_header
payload udp_payload
} [packed]
udp_payload {
payload array[int8]
} [packed]

View File

@ -0,0 +1,425 @@
# AUTOGENERATED FILE
ARPHRD_ETHER = 1
ARPHRD_FRELAY = 15
ARPHRD_IEEE1394 = 24
ARPHRD_IEEE802 = 6
ARPHRD_INFINIBAND = 32
ARPOP_INVREPLY = 9
ARPOP_INVREQUEST = 8
ARPOP_REPLY = 2
ARPOP_REQUEST = 1
ARPOP_REVREPLY = 4
ARPOP_REVREQUEST = 3
ETHERTYPE_8023 = 4
ETHERTYPE_AARP = 33011
ETHERTYPE_ACCTON = 33680
ETHERTYPE_AEONIC = 32822
ETHERTYPE_ALPHA = 33098
ETHERTYPE_AMBER = 24584
ETHERTYPE_AMOEBA = 33093
ETHERTYPE_APOLLO = 33015
ETHERTYPE_APOLLODOMAIN = 32793
ETHERTYPE_APPLITEK = 32967
ETHERTYPE_ARGONAUT = 32826
ETHERTYPE_ARP = 2054
ETHERTYPE_ATALK = 32923
ETHERTYPE_ATOMIC = 34527
ETHERTYPE_ATT = 32873
ETHERTYPE_ATTSTANFORD = 32776
ETHERTYPE_AUTOPHON = 32874
ETHERTYPE_AXIS = 34902
ETHERTYPE_BCLOOP = 36867
ETHERTYPE_BOFL = 33026
ETHERTYPE_CABLETRON = 28724
ETHERTYPE_CHAOS = 2052
ETHERTYPE_COMDESIGN = 32876
ETHERTYPE_COMPUGRAPHIC = 32877
ETHERTYPE_COUNTERPOINT = 32866
ETHERTYPE_CRONUS = 32772
ETHERTYPE_CRONUSVLN = 32771
ETHERTYPE_DCA = 4660
ETHERTYPE_DDE = 32891
ETHERTYPE_DEBNI = 43690
ETHERTYPE_DECAM = 32840
ETHERTYPE_DECCUST = 24582
ETHERTYPE_DECDIAG = 24581
ETHERTYPE_DECDNS = 32828
ETHERTYPE_DECDTS = 32830
ETHERTYPE_DECEXPER = 24576
ETHERTYPE_DECLAST = 32833
ETHERTYPE_DECLTM = 32831
ETHERTYPE_DECMUMPS = 24585
ETHERTYPE_DECNETBIOS = 32832
ETHERTYPE_DECnet = 24579
ETHERTYPE_DELTACON = 34526
ETHERTYPE_DIDDLE = 17185
ETHERTYPE_DLOG1 = 1632
ETHERTYPE_DLOG2 = 1633
ETHERTYPE_DOGFIGHT = 6537
ETHERTYPE_DSMD = 32825
ETHERTYPE_ECMA = 2051
ETHERTYPE_ENCRYPT = 32829
ETHERTYPE_ES = 32861
ETHERTYPE_EXCELAN = 32784
ETHERTYPE_EXPERDATA = 32841
ETHERTYPE_FLIP = 33094
ETHERTYPE_FLOWCONTROL = 34824
ETHERTYPE_FRARP = 2056
ETHERTYPE_GENDYN = 32872
ETHERTYPE_HAYES = 33072
ETHERTYPE_HIPPI_FP = 33152
ETHERTYPE_HITACHI = 34848
ETHERTYPE_HP = 32773
ETHERTYPE_IEEEPUP = 2560
ETHERTYPE_IEEEPUPAT = 2561
ETHERTYPE_IMLBL = 19522
ETHERTYPE_IMLBLDIAG = 16972
ETHERTYPE_IP = 2048
ETHERTYPE_IPAS = 34668
ETHERTYPE_IPV6 = 34525
ETHERTYPE_IPX = 33079
ETHERTYPE_IPXNEW = 32823
ETHERTYPE_KALPANA = 34178
ETHERTYPE_LANBRIDGE = 32824
ETHERTYPE_LANPROBE = 34952
ETHERTYPE_LAT = 24580
ETHERTYPE_LITTLE = 32864
ETHERTYPE_LOGICRAFT = 33096
ETHERTYPE_LOOPBACK = 36864
ETHERTYPE_MATRA = 32890
ETHERTYPE_MERIT = 32892
ETHERTYPE_MICP = 34618
ETHERTYPE_MOPDL = 24577
ETHERTYPE_MOPRC = 24578
ETHERTYPE_MOTOROLA = 33165
ETHERTYPE_MPLS = 34887
ETHERTYPE_MPLS_MCAST = 34888
ETHERTYPE_MUMPS = 33087
ETHERTYPE_NBPCC = 15364
ETHERTYPE_NBPCLAIM = 15369
ETHERTYPE_NBPCLREQ = 15365
ETHERTYPE_NBPCLRSP = 15366
ETHERTYPE_NBPCREQ = 15362
ETHERTYPE_NBPCRSP = 15363
ETHERTYPE_NBPDG = 15367
ETHERTYPE_NBPDGB = 15368
ETHERTYPE_NBPDLTE = 15370
ETHERTYPE_NBPRAR = 15372
ETHERTYPE_NBPRAS = 15371
ETHERTYPE_NBPRST = 15373
ETHERTYPE_NBPSCD = 15361
ETHERTYPE_NBPVCD = 15360
ETHERTYPE_NBS = 2050
ETHERTYPE_NCD = 33097
ETHERTYPE_NESTAR = 32774
ETHERTYPE_NETBEUI = 33169
ETHERTYPE_NOVELL = 33080
ETHERTYPE_NS = 1536
ETHERTYPE_NSAT = 1537
ETHERTYPE_NSCOMPAT = 2055
ETHERTYPE_OS9 = 28679
ETHERTYPE_OS9NET = 28681
ETHERTYPE_PACER = 32966
ETHERTYPE_PAE = 34958
ETHERTYPE_PCS = 16962
ETHERTYPE_PLANNING = 32836
ETHERTYPE_PPP = 34827
ETHERTYPE_PPPOE = 34916
ETHERTYPE_PPPOEDISC = 34915
ETHERTYPE_PRIMENTS = 28721
ETHERTYPE_PUP = 512
ETHERTYPE_PUPAT = 512
ETHERTYPE_QINQ = 34984
ETHERTYPE_RACAL = 28720
ETHERTYPE_RATIONAL = 33104
ETHERTYPE_RAWFR = 25945
ETHERTYPE_RCL = 6549
ETHERTYPE_RDP = 34617
ETHERTYPE_RETIX = 33010
ETHERTYPE_REVARP = 32821
ETHERTYPE_SCA = 24583
ETHERTYPE_SECTRA = 34523
ETHERTYPE_SECUREDATA = 34669
ETHERTYPE_SGITW = 33150
ETHERTYPE_SG_BOUNCE = 32790
ETHERTYPE_SG_DIAG = 32787
ETHERTYPE_SG_NETGAMES = 32788
ETHERTYPE_SG_RESV = 32789
ETHERTYPE_SIMNET = 21000
ETHERTYPE_SLOW = 34825
ETHERTYPE_SNA = 32981
ETHERTYPE_SNMP = 33100
ETHERTYPE_SONIX = 64245
ETHERTYPE_SPIDER = 32927
ETHERTYPE_SPRITE = 1280
ETHERTYPE_STP = 33153
ETHERTYPE_TALARIS = 33067
ETHERTYPE_TALARISMC = 34091
ETHERTYPE_TCPCOMP = 34667
ETHERTYPE_TCPSM = 36866
ETHERTYPE_TEC = 33103
ETHERTYPE_TEST = 34850
ETHERTYPE_TIGAN = 32815
ETHERTYPE_TRANSETHER = 25944
ETHERTYPE_TYMSHARE = 32814
ETHERTYPE_UBBST = 28677
ETHERTYPE_UBDEBUG = 2304
ETHERTYPE_UBDIAGLOOP = 28674
ETHERTYPE_UBDL = 28672
ETHERTYPE_UBNIU = 28673
ETHERTYPE_UBNMC = 28675
ETHERTYPE_VALID = 5632
ETHERTYPE_VARIAN = 32989
ETHERTYPE_VAXELN = 32827
ETHERTYPE_VEECO = 32871
ETHERTYPE_VEXP = 32859
ETHERTYPE_VGLAB = 33073
ETHERTYPE_VINES = 2989
ETHERTYPE_VINESECHO = 2991
ETHERTYPE_VINESLOOP = 2990
ETHERTYPE_VITAL = 65280
ETHERTYPE_VLAN = 33024
ETHERTYPE_VLTLMAN = 32896
ETHERTYPE_VPROD = 32860
ETHERTYPE_VURESERVED = 33095
ETHERTYPE_WATERLOO = 33072
ETHERTYPE_WELLFLEET = 33027
ETHERTYPE_X25 = 2053
ETHERTYPE_X75 = 2049
ETHERTYPE_XNSSM = 36865
ETHERTYPE_XTP = 33149
ICMP6_DST_UNREACH = 1
ICMP6_DST_UNREACH_ADDR = 3
ICMP6_DST_UNREACH_ADMIN = 1
ICMP6_DST_UNREACH_BEYONDSCOPE = 2
ICMP6_DST_UNREACH_NOPORT = 4
ICMP6_DST_UNREACH_NOROUTE = 0
ICMP6_DST_UNREACH_NOTNEIGHBOR = 2
ICMP6_DST_UNREACH_POLICY = 5
ICMP6_DST_UNREACH_REJECT = 6
ICMP6_DST_UNREACH_SRCROUTE = 7
ICMP6_ECHO_REPLY = 129
ICMP6_ECHO_REQUEST = 128
ICMP6_NI_QUERY = 139
ICMP6_NI_REPLY = 140
ICMP6_PACKET_TOO_BIG = 2
ICMP6_PARAMPROB_HEADER = 0
ICMP6_PARAMPROB_NEXTHEADER = 1
ICMP6_PARAMPROB_OPTION = 2
ICMP6_PARAM_PROB = 4
ICMP6_TIME_EXCEEDED = 3
ICMP6_TIME_EXCEED_REASSEMBLY = 1
ICMP6_TIME_EXCEED_TRANSIT = 0
ICMP_ALTHOSTADDR = 6
ICMP_DATACONVERR = 31
ICMP_ECHO = 8
ICMP_ECHOREPLY = 0
ICMP_IPV6_IAMHERE = 34
ICMP_IPV6_WHEREAREYOU = 33
ICMP_IREQ = 15
ICMP_IREQREPLY = 16
ICMP_MASKREPLY = 18
ICMP_MASKREQ = 17
ICMP_MOBILE_REDIRECT = 32
ICMP_MOBILE_REGREPLY = 36
ICMP_MOBILE_REGREQUEST = 35
ICMP_PARAMPROB = 12
ICMP_PARAMPROB_ERRATPTR = 0
ICMP_PARAMPROB_LENGTH = 2
ICMP_PARAMPROB_OPTABSENT = 1
ICMP_PHOTURIS = 40
ICMP_REDIRECT = 5
ICMP_REDIRECT_HOST = 1
ICMP_REDIRECT_NET = 0
ICMP_REDIRECT_TOSHOST = 3
ICMP_REDIRECT_TOSNET = 2
ICMP_ROUTERADVERT = 9
ICMP_ROUTERSOLICIT = 10
ICMP_SKIP = 39
ICMP_SOURCEQUENCH = 4
ICMP_TIMXCEED = 11
ICMP_TIMXCEED_INTRANS = 0
ICMP_TIMXCEED_REASS = 1
ICMP_TRACEROUTE = 30
ICMP_TSTAMP = 13
ICMP_TSTAMPREPLY = 14
ICMP_UNREACH = 3
ICMP_UNREACH_FILTER_PROHIB = 13
ICMP_UNREACH_HOST = 1
ICMP_UNREACH_HOST_PRECEDENCE = 14
ICMP_UNREACH_HOST_PROHIB = 10
ICMP_UNREACH_HOST_UNKNOWN = 7
ICMP_UNREACH_ISOLATED = 8
ICMP_UNREACH_NEEDFRAG = 4
ICMP_UNREACH_NET = 0
ICMP_UNREACH_NET_PROHIB = 9
ICMP_UNREACH_NET_UNKNOWN = 6
ICMP_UNREACH_PORT = 3
ICMP_UNREACH_PRECEDENCE_CUTOFF = 15
ICMP_UNREACH_PROTOCOL = 2
ICMP_UNREACH_SRCFAIL = 5
ICMP_UNREACH_TOSHOST = 12
ICMP_UNREACH_TOSNET = 11
IP6OPT_JUMBO = 194
IP6OPT_PAD1 = 0
IP6OPT_PADN = 1
IP6OPT_ROUTER_ALERT = 5
IP6OPT_TUNNEL_LIMIT = 4
IPOPT_CIPSO = 134
IPOPT_EOL = 0
IPOPT_ESO = 133
IPOPT_LSRR = 131
IPOPT_NOP = 1
IPOPT_RA = 148
IPOPT_RR = 7
IPOPT_SATID = 136
IPOPT_SECURITY = 130
IPOPT_SSRR = 137
IPOPT_TS = 68
IPOPT_TS_PRESPEC = 3
IPOPT_TS_TSANDADDR = 1
IPOPT_TS_TSONLY = 0
IPPROTO_3PC = 34
IPPROTO_ADFS = 68
IPPROTO_AH = 51
IPPROTO_AHIP = 61
IPPROTO_APES = 99
IPPROTO_ARGUS = 13
IPPROTO_AX25 = 93
IPPROTO_BHA = 49
IPPROTO_BLT = 30
IPPROTO_BRSATMON = 76
IPPROTO_CARP = 112
IPPROTO_CFTP = 62
IPPROTO_CHAOS = 16
IPPROTO_CMTP = 38
IPPROTO_CPHB = 73
IPPROTO_CPNX = 72
IPPROTO_DDP = 37
IPPROTO_DGP = 86
IPPROTO_DSTOPTS = 60
IPPROTO_EGP = 8
IPPROTO_EMCON = 14
IPPROTO_ENCAP = 98
IPPROTO_EON = 80
IPPROTO_ESP = 50
IPPROTO_ETHERIP = 97
IPPROTO_FRAGMENT = 44
IPPROTO_GMTP = 100
IPPROTO_GRE = 47
IPPROTO_HELLO = 63
IPPROTO_HIP = 139
IPPROTO_HMP = 20
IPPROTO_ICMP = 1
IPPROTO_ICMPV6 = 58
IPPROTO_IDP = 22
IPPROTO_IDPR = 35
IPPROTO_IDRP = 45
IPPROTO_IGMP = 2
IPPROTO_IGP = 85
IPPROTO_IGRP = 88
IPPROTO_IL = 40
IPPROTO_INLSP = 52
IPPROTO_INP = 32
IPPROTO_IPCOMP = 108
IPPROTO_IPCV = 71
IPPROTO_IPEIP = 94
IPPROTO_IPPC = 67
IPPROTO_IPV4 = 4
IPPROTO_IRTP = 28
IPPROTO_KRYPTOLAN = 65
IPPROTO_LARP = 91
IPPROTO_LEAF1 = 25
IPPROTO_LEAF2 = 26
IPPROTO_MEAS = 19
IPPROTO_MH = 135
IPPROTO_MHRP = 48
IPPROTO_MICP = 95
IPPROTO_MOBILE = 55
IPPROTO_MPLS = 137
IPPROTO_MTP = 92
IPPROTO_MUX = 18
IPPROTO_ND = 77
IPPROTO_NHRP = 54
IPPROTO_NONE = 59
IPPROTO_NSP = 31
IPPROTO_NVPII = 11
IPPROTO_OSPFIGP = 89
IPPROTO_PFSYNC = 240
IPPROTO_PGM = 113
IPPROTO_PIGP = 9
IPPROTO_PIM = 103
IPPROTO_PRM = 21
IPPROTO_PUP = 12
IPPROTO_PVP = 75
IPPROTO_RCCMON = 10
IPPROTO_RDP = 27
IPPROTO_ROUTING = 43
IPPROTO_RSVP = 46
IPPROTO_RVD = 66
IPPROTO_SATEXPAK = 64
IPPROTO_SATMON = 69
IPPROTO_SCCSP = 96
IPPROTO_SDRP = 42
IPPROTO_SEP = 33
IPPROTO_SHIM6 = 140
IPPROTO_SKIP = 57
IPPROTO_SRPC = 90
IPPROTO_ST = 7
IPPROTO_SVMTP = 82
IPPROTO_SWIPE = 53
IPPROTO_TCF = 87
IPPROTO_TCP = 6
IPPROTO_TLSP = 56
IPPROTO_TP = 29
IPPROTO_TPXX = 39
IPPROTO_TRUNK1 = 23
IPPROTO_TRUNK2 = 24
IPPROTO_TTP = 84
IPPROTO_UDP = 17
IPPROTO_UDPLITE = 136
IPPROTO_VINES = 83
IPPROTO_VISA = 70
IPPROTO_VMTP = 81
IPPROTO_WBEXPAK = 79
IPPROTO_WBMON = 78
IPPROTO_WSN = 74
IPPROTO_XNET = 15
IPPROTO_XTP = 36
IPV6_RTHDR_LOOSE = 0
IPV6_RTHDR_STRICT = 1
IPV6_RTHDR_TYPE_0 = 0
MLD_LISTENER_QUERY = 130
MLD_LISTENER_REDUCTION = 132
MLD_LISTENER_REPORT = 131
ND_NEIGHBOR_ADVERT = 136
ND_NEIGHBOR_SOLICIT = 135
ND_OPT_DNSSL = 31
ND_OPT_MTU = 5
ND_OPT_NONCE = 14
ND_OPT_PREFIX_INFORMATION = 3
ND_OPT_RDNSS = 25
ND_OPT_REDIRECTED_HEADER = 4
ND_OPT_ROUTE_INFO = 24
ND_OPT_SOURCE_LINKADDR = 1
ND_OPT_TARGET_LINKADDR = 2
ND_REDIRECT = 137
ND_ROUTER_ADVERT = 134
ND_ROUTER_SOLICIT = 133
TCPOPT_EOL = 0
TCPOPT_FAST_OPEN = 34
TCPOPT_MAXSEG = 2
TCPOPT_NOP = 1
TCPOPT_SACK = 5
TCPOPT_SACK_PERMITTED = 4
TCPOPT_SIGNATURE = 19
TCPOPT_TIMESTAMP = 8
TCPOPT_WINDOW = 3
TH_ACK = 16
TH_CWR = 128
TH_ECE = 64
TH_FIN = 1
TH_PUSH = 8
TH_RST = 4
TH_SYN = 2
TH_URG = 32