ffi-packets 0.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.document +5 -0
- data/.gitignore +5 -0
- data/LICENSE +20 -0
- data/README.rdoc +20 -0
- data/Rakefile +51 -0
- data/VERSION +1 -0
- data/ffi-packets.gemspec +67 -0
- data/lib/ffi/packets.rb +14 -0
- data/lib/ffi/packets/arp.rb +60 -0
- data/lib/ffi/packets/constants.rb +478 -0
- data/lib/ffi/packets/eth.rb +74 -0
- data/lib/ffi/packets/icmp.rb +294 -0
- data/lib/ffi/packets/ip.rb +227 -0
- data/lib/ffi/packets/tcp.rb +104 -0
- data/lib/ffi/packets/udp.rb +30 -0
- data/lib/ffi/packets/util.rb +54 -0
- data/spec/ffi-packets_spec.rb +7 -0
- data/spec/spec_helper.rb +9 -0
- metadata +103 -0
data/.document
ADDED
data/LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2009 Eric Monti
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
data/README.rdoc
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
= ffi-packets
|
2
|
+
|
3
|
+
A collection of packet structures defined using FFI::Structs.
|
4
|
+
|
5
|
+
This gem is designed for use with ffi bindings to raw network libraries such as libnet, libdnet, and libpcap.
|
6
|
+
|
7
|
+
== Note on Patches/Pull Requests
|
8
|
+
|
9
|
+
* Fork the project.
|
10
|
+
* Make your feature addition or bug fix.
|
11
|
+
* Add tests for it. This is important so I don't break it in a
|
12
|
+
future version unintentionally.
|
13
|
+
* Commit, do not mess with rakefile, version, or history.
|
14
|
+
(if you want to have your own version, that is fine but
|
15
|
+
bump version in a commit by itself I can ignore when I pull)
|
16
|
+
* Send me a pull request. Bonus points for topic branches.
|
17
|
+
|
18
|
+
== Copyright
|
19
|
+
|
20
|
+
Copyright (c) 2010 Eric Monti. See LICENSE for details.
|
data/Rakefile
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
|
5
|
+
begin
|
6
|
+
require 'jeweler'
|
7
|
+
Jeweler::Tasks.new do |gem|
|
8
|
+
gem.name = "ffi-packets"
|
9
|
+
gem.summary = %Q{A collection of common network packets structures}
|
10
|
+
gem.description = %Q{A collection of common network packets structures in FFI::Struct form for use with bindings to raw network libraries such as libdnet, libnet, or libpcap.}
|
11
|
+
gem.email = "emonti@matasano.com"
|
12
|
+
gem.homepage = "http://github.com/emonti/ffi-packets"
|
13
|
+
gem.authors = ["Eric Monti"]
|
14
|
+
gem.add_dependency "ffi"
|
15
|
+
gem.add_dependency "ffi_dry"
|
16
|
+
gem.add_development_dependency "rspec"
|
17
|
+
# gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
|
18
|
+
end
|
19
|
+
rescue LoadError
|
20
|
+
puts "Jeweler (or a dependency) not available. Install it with: sudo gem install jeweler"
|
21
|
+
end
|
22
|
+
|
23
|
+
require 'spec/rake/spectask'
|
24
|
+
Spec::Rake::SpecTask.new(:spec) do |spec|
|
25
|
+
spec.libs << 'lib' << 'spec'
|
26
|
+
spec.spec_files = FileList['spec/**/*_spec.rb']
|
27
|
+
end
|
28
|
+
|
29
|
+
Spec::Rake::SpecTask.new(:rcov) do |spec|
|
30
|
+
spec.libs << 'lib' << 'spec'
|
31
|
+
spec.pattern = 'spec/**/*_spec.rb'
|
32
|
+
spec.rcov = true
|
33
|
+
end
|
34
|
+
|
35
|
+
task :spec => :check_dependencies
|
36
|
+
|
37
|
+
task :default => :spec
|
38
|
+
|
39
|
+
require 'rake/rdoctask'
|
40
|
+
Rake::RDocTask.new do |rdoc|
|
41
|
+
if File.exist?('VERSION')
|
42
|
+
version = File.read('VERSION')
|
43
|
+
else
|
44
|
+
version = ""
|
45
|
+
end
|
46
|
+
|
47
|
+
rdoc.rdoc_dir = 'rdoc'
|
48
|
+
rdoc.title = "ffi-packets #{version}"
|
49
|
+
rdoc.rdoc_files.include('README*')
|
50
|
+
rdoc.rdoc_files.include('lib/**/*.rb')
|
51
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.1.0
|
data/ffi-packets.gemspec
ADDED
@@ -0,0 +1,67 @@
|
|
1
|
+
# Generated by jeweler
|
2
|
+
# DO NOT EDIT THIS FILE
|
3
|
+
# Instead, edit Jeweler::Tasks in Rakefile, and run `rake gemspec`
|
4
|
+
# -*- encoding: utf-8 -*-
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = %q{ffi-packets}
|
8
|
+
s.version = "0.1.0"
|
9
|
+
|
10
|
+
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
|
+
s.authors = ["Eric Monti"]
|
12
|
+
s.date = %q{2010-01-02}
|
13
|
+
s.description = %q{A collection of common network packets structures in FFI::Struct form for use with bindings to raw network libraries such as libdnet, libnet, or libpcap.}
|
14
|
+
s.email = %q{emonti@matasano.com}
|
15
|
+
s.extra_rdoc_files = [
|
16
|
+
"LICENSE",
|
17
|
+
"README.rdoc"
|
18
|
+
]
|
19
|
+
s.files = [
|
20
|
+
".document",
|
21
|
+
".gitignore",
|
22
|
+
"LICENSE",
|
23
|
+
"README.rdoc",
|
24
|
+
"Rakefile",
|
25
|
+
"VERSION",
|
26
|
+
"ffi-packets.gemspec",
|
27
|
+
"lib/ffi/packets.rb",
|
28
|
+
"lib/ffi/packets/arp.rb",
|
29
|
+
"lib/ffi/packets/constants.rb",
|
30
|
+
"lib/ffi/packets/eth.rb",
|
31
|
+
"lib/ffi/packets/icmp.rb",
|
32
|
+
"lib/ffi/packets/ip.rb",
|
33
|
+
"lib/ffi/packets/tcp.rb",
|
34
|
+
"lib/ffi/packets/udp.rb",
|
35
|
+
"lib/ffi/packets/util.rb",
|
36
|
+
"spec/ffi-packets_spec.rb",
|
37
|
+
"spec/spec_helper.rb"
|
38
|
+
]
|
39
|
+
s.homepage = %q{http://github.com/emonti/ffi-packets}
|
40
|
+
s.rdoc_options = ["--charset=UTF-8"]
|
41
|
+
s.require_paths = ["lib"]
|
42
|
+
s.rubygems_version = %q{1.3.5}
|
43
|
+
s.summary = %q{A collection of common network packets structures}
|
44
|
+
s.test_files = [
|
45
|
+
"spec/ffi-packets_spec.rb",
|
46
|
+
"spec/spec_helper.rb"
|
47
|
+
]
|
48
|
+
|
49
|
+
if s.respond_to? :specification_version then
|
50
|
+
current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
|
51
|
+
s.specification_version = 3
|
52
|
+
|
53
|
+
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
54
|
+
s.add_runtime_dependency(%q<ffi>, [">= 0"])
|
55
|
+
s.add_runtime_dependency(%q<ffi_dry>, [">= 0"])
|
56
|
+
s.add_development_dependency(%q<rspec>, [">= 0"])
|
57
|
+
else
|
58
|
+
s.add_dependency(%q<ffi>, [">= 0"])
|
59
|
+
s.add_dependency(%q<ffi_dry>, [">= 0"])
|
60
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
61
|
+
end
|
62
|
+
else
|
63
|
+
s.add_dependency(%q<ffi>, [">= 0"])
|
64
|
+
s.add_dependency(%q<ffi_dry>, [">= 0"])
|
65
|
+
s.add_dependency(%q<rspec>, [">= 0"])
|
66
|
+
end
|
67
|
+
end
|
data/lib/ffi/packets.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
|
2
|
+
begin ; require 'rubygems'; rescue LoadError; end
|
3
|
+
require 'ffi'
|
4
|
+
require 'ffi/dry'
|
5
|
+
|
6
|
+
require 'ffi/packets/constants'
|
7
|
+
require 'ffi/packets/util'
|
8
|
+
|
9
|
+
require 'ffi/packets/eth'
|
10
|
+
require 'ffi/packets/ip'
|
11
|
+
require 'ffi/packets/arp'
|
12
|
+
require 'ffi/packets/icmp'
|
13
|
+
require 'ffi/packets/tcp'
|
14
|
+
require 'ffi/packets/udp'
|
@@ -0,0 +1,60 @@
|
|
1
|
+
# Address resolution Protocol
|
2
|
+
|
3
|
+
module FFI::Packets
|
4
|
+
module Arp
|
5
|
+
# ARP header
|
6
|
+
#
|
7
|
+
# field :hrd, :uint16, :desc => 'format of hardware address'
|
8
|
+
# field :pro, :uint16, :desc => 'format of protocol address'
|
9
|
+
# field :hln, :uint16, :desc => 'length of hw address (ETH_ADDR_LEN)'
|
10
|
+
# field :pln, :uint16, :desc => 'length of proto address (IP_ADDR_LEN)'
|
11
|
+
# field :op, :uint16, :desc => 'operation'
|
12
|
+
#
|
13
|
+
class Hdr < ::FFI::Struct
|
14
|
+
include ::FFI::DRY::NetStructHelper
|
15
|
+
|
16
|
+
dsl_layout do
|
17
|
+
field :hrd, :uint16, :desc => 'format of hardware address'
|
18
|
+
field :pro, :uint16, :desc => 'format of protocol address'
|
19
|
+
field :hln, :uint16, :desc => 'length of hw address (ETH_ADDR_LEN)'
|
20
|
+
field :pln, :uint16, :desc => 'length of proto address (IP_ADDR_LEN)'
|
21
|
+
field :op, :uint16, :desc => 'operation'
|
22
|
+
end
|
23
|
+
|
24
|
+
# ARP operations
|
25
|
+
module Op
|
26
|
+
Constants.constants.grep(/^(ARP_OP_([A-Z][A-Z0-9_]+))$/) do
|
27
|
+
self.const_set $2, Constants.const_get($1)
|
28
|
+
end
|
29
|
+
|
30
|
+
module_function
|
31
|
+
def list
|
32
|
+
@@list ||= constants.inject({}){|h,c| h.merge! c => const_get(c) }
|
33
|
+
end
|
34
|
+
end # Op
|
35
|
+
end # Hdr
|
36
|
+
|
37
|
+
# Ethernet/IP ARP message
|
38
|
+
#
|
39
|
+
# array :sha, [:uint8, ETH_ADDR_LEN], :desc => 'sender hardware address'
|
40
|
+
# array :spa, [:uint8, IP_ADDR_LEN], :desc => 'sender protocol address'
|
41
|
+
# array :tha, [:uint8, ETH_ADDR_LEN], :desc => 'target hardware address'
|
42
|
+
# array :tpa, [:uint8, IP_ADDR_LEN], :desc => 'target protocol address'
|
43
|
+
#
|
44
|
+
class Ethip < ::FFI::Struct
|
45
|
+
include ::FFI::DRY::NetStructHelper
|
46
|
+
ETH_ADDR_LEN = Constants::ETH_ADDR_LEN
|
47
|
+
IP_ADDR_LEN = Constants::IP_ADDR_LEN
|
48
|
+
|
49
|
+
dsl_layout do
|
50
|
+
array :sha, [:uint8, ETH_ADDR_LEN], :desc => 'sender hardware address'
|
51
|
+
array :spa, [:uint8, IP_ADDR_LEN], :desc => 'sender protocol address'
|
52
|
+
array :tha, [:uint8, ETH_ADDR_LEN], :desc => 'target hardware address'
|
53
|
+
array :tpa, [:uint8, IP_ADDR_LEN], :desc => 'target protocol address'
|
54
|
+
end
|
55
|
+
|
56
|
+
end # Ethip
|
57
|
+
|
58
|
+
end # module Arp
|
59
|
+
|
60
|
+
end
|
@@ -0,0 +1,478 @@
|
|
1
|
+
module FFI::Packets
|
2
|
+
module Constants
|
3
|
+
|
4
|
+
ARP_HDR_LEN = 8 # base ARP header length
|
5
|
+
ARP_ETHIP_LEN = 20 # base ARP message length
|
6
|
+
|
7
|
+
ARP_HRD_ETH = 0x0001 # ethernet hardware
|
8
|
+
ARP_HRD_IEEE802 = 0x0006 # IEEE 802 hardware
|
9
|
+
|
10
|
+
ARP_PRO_IP = 0x0800 # IP protocol
|
11
|
+
|
12
|
+
ARP_OP_REQUEST = 1 # request to resolve ha given pa
|
13
|
+
ARP_OP_REPLY = 2 # response giving hardware address
|
14
|
+
ARP_OP_REVREQUEST = 3 # request to resolve pa given ha
|
15
|
+
ARP_OP_REVREPLY = 4 # response giving protocol address
|
16
|
+
|
17
|
+
|
18
|
+
ETH_ADDR_LEN = 6
|
19
|
+
ETH_ADDR_BITS = 48
|
20
|
+
ETH_TYPE_LEN = 2
|
21
|
+
ETH_CRC_LEN = 4
|
22
|
+
ETH_HDR_LEN = 14
|
23
|
+
ETH_LEN_MIN = 64 # minimum frame length with CRC
|
24
|
+
ETH_LEN_MAX = 1518 # maximum frame length with CRC
|
25
|
+
|
26
|
+
ETH_TYPE_PUP = 0x0200 # PUP protocol
|
27
|
+
ETH_TYPE_IP = 0x0800 # IP protocol
|
28
|
+
ETH_TYPE_ARP = 0x0806 # address resolution protocol
|
29
|
+
ETH_TYPE_REVARP = 0x8035 # reverse addr resolution protocol
|
30
|
+
ETH_TYPE_8021Q = 0x8100 # IEEE 802.1Q VLAN tagging
|
31
|
+
ETH_TYPE_IPV6 = 0x86DD # IPv6 protocol
|
32
|
+
ETH_TYPE_MPLS = 0x8847 # MPLS
|
33
|
+
ETH_TYPE_MPLS_MCAST = 0x8848 # MPLS Multicast
|
34
|
+
ETH_TYPE_PPPOEDISC = 0x8863 # PPP Over Ethernet Discovery Stage
|
35
|
+
ETH_TYPE_PPPOE = 0x8864 # PPP Over Ethernet Session Stage
|
36
|
+
ETH_TYPE_LOOPBACK = 0x9000 # used to test interfaces
|
37
|
+
ETH_ADDR_BROADCAST = "\xff\xff\xff\xff\xff\xff"
|
38
|
+
|
39
|
+
# ETH_IS_MULTICAST(ea) (*(ea) & 0x01) # is address mcast/bcast? XXX implement
|
40
|
+
|
41
|
+
|
42
|
+
ICMP_HDR_LEN = 4 # base ICMP header length
|
43
|
+
ICMP_LEN_MIN = 8 # minimum ICMP message size, with header
|
44
|
+
|
45
|
+
# ICMP Types (ICMP::Hdr->icmp_type)
|
46
|
+
# http://www.iana.org/assignments/icmp-parameters
|
47
|
+
|
48
|
+
ICMP_TYPE_ECHOREPLY = 0 # echo reply
|
49
|
+
ICMP_TYPE_UNREACH = 3 # dest unreachable, codes:
|
50
|
+
ICMP_TYPE_SRCQUENCH = 4 # packet lost, slow down
|
51
|
+
ICMP_TYPE_REDIRECT = 5 # shorter route, codes:
|
52
|
+
ICMP_TYPE_ALTHOSTADDR = 6 # alternate host address
|
53
|
+
ICMP_TYPE_ECHO = 8 # echo service
|
54
|
+
ICMP_TYPE_RTRADVERT = 9 # router advertise, codes:
|
55
|
+
ICMP_TYPE_RTRSOLICIT = 10 # router solicitation
|
56
|
+
ICMP_TYPE_TIMEXCEED = 11 # time exceeded, code:
|
57
|
+
ICMP_TYPE_PARAMPROB = 12 # ip header bad
|
58
|
+
ICMP_TYPE_TSTAMP = 13 # timestamp request
|
59
|
+
ICMP_TYPE_TSTAMPREPLY = 14 # timestamp reply
|
60
|
+
ICMP_TYPE_INFO = 15 # information request
|
61
|
+
ICMP_TYPE_INFOREPLY = 16 # information reply
|
62
|
+
ICMP_TYPE_MASK = 17 # address mask request
|
63
|
+
ICMP_TYPE_MASKREPLY = 18 # address mask reply
|
64
|
+
ICMP_TYPE_TRACEROUTE = 30 # traceroute
|
65
|
+
ICMP_TYPE_DATACONVERR = 31 # data conversion error
|
66
|
+
ICMP_TYPE_MOBILE_REDIRECT = 32 # mobile host redirect
|
67
|
+
ICMP_TYPE_IPV6_WHEREAREYOU = 33 # IPv6 where-are-you
|
68
|
+
ICMP_TYPE_IPV6_IAMHERE = 34 # IPv6 i-am-here
|
69
|
+
ICMP_TYPE_MOBILE_REG = 35 # mobile registration req
|
70
|
+
ICMP_TYPE_MOBILE_REGREPLY = 36 # mobile registration reply
|
71
|
+
ICMP_TYPE_DNS = 37 # domain name request
|
72
|
+
ICMP_TYPE_DNSREPLY = 38 # domain name reply
|
73
|
+
ICMP_TYPE_SKIP = 39 # SKIP
|
74
|
+
ICMP_TYPE_PHOTURIS = 40 # Photuris
|
75
|
+
|
76
|
+
# ICMP Sub-codes (ICMP::Hdr->icmp_code)
|
77
|
+
# http://www.iana.org/assignments/icmp-parameters
|
78
|
+
|
79
|
+
ICMP_UNREACH_NET = 0 # bad net
|
80
|
+
ICMP_UNREACH_HOST = 1 # bad host
|
81
|
+
ICMP_UNREACH_PROTO = 2 # bad protocol
|
82
|
+
ICMP_UNREACH_PORT = 3 # bad port
|
83
|
+
ICMP_UNREACH_NEEDFRAG = 4 # IP_DF caused drop
|
84
|
+
ICMP_UNREACH_SRCFAIL = 5 # src route failed
|
85
|
+
ICMP_UNREACH_NET_UNKNOWN = 6 # unknown net
|
86
|
+
ICMP_UNREACH_HOST_UNKNOWN = 7 # unknown host
|
87
|
+
ICMP_UNREACH_ISOLATED = 8 # src host isolated
|
88
|
+
ICMP_UNREACH_NET_PROHIB = 9 # for crypto devs
|
89
|
+
ICMP_UNREACH_HOST_PROHIB = 10 # ditto
|
90
|
+
ICMP_UNREACH_TOSNET = 11 # bad tos for net
|
91
|
+
ICMP_UNREACH_TOSHOST = 12 # bad tos for host
|
92
|
+
ICMP_UNREACH_FILTER_PROHIB = 13 # prohibited access
|
93
|
+
ICMP_UNREACH_HOST_PRECEDENCE = 14 # precedence error
|
94
|
+
ICMP_UNREACH_PRECEDENCE_CUTOFF = 15 # precedence cutoff
|
95
|
+
|
96
|
+
ICMP_REDIRECT_NET = 0 # for network
|
97
|
+
ICMP_REDIRECT_HOST = 1 # for host
|
98
|
+
ICMP_REDIRECT_TOSNET = 2 # for tos and net
|
99
|
+
ICMP_REDIRECT_TOSHOST = 3 # for tos and host
|
100
|
+
|
101
|
+
ICMP_RTRADVERT_NORMAL = 0 # normal
|
102
|
+
ICMP_RTRADVERT_NOROUTE_COMMON = 16 # selective routing
|
103
|
+
|
104
|
+
ICMP_TIMEXCEED_INTRANS = 0 # ttl==0 in transit
|
105
|
+
ICMP_TIMEXCEED_REASS = 1 # ttl==0 in reass
|
106
|
+
|
107
|
+
ICMP_PARAMPROB_ERRATPTR = 0 # req. opt. absent
|
108
|
+
ICMP_PARAMPROB_OPTABSENT = 1 # req. opt. absent
|
109
|
+
ICMP_PARAMPROB_LENGTH = 2 # bad length
|
110
|
+
|
111
|
+
ICMP_PHOTURIS_UNKNOWN_INDEX = 0 # unknown sec index
|
112
|
+
ICMP_PHOTURIS_AUTH_FAILED = 1 # auth failed
|
113
|
+
ICMP_PHOTURIS_DECOMPRESS_FAILED = 2 # decompress failed
|
114
|
+
ICMP_PHOTURIS_DECRYPT_FAILED = 3 # decrypt failed
|
115
|
+
ICMP_PHOTURIS_NEED_AUTHN = 4 # no authentication
|
116
|
+
ICMP_PHOTURIS_NEED_AUTHZ = 5 # no authorization
|
117
|
+
|
118
|
+
|
119
|
+
ICMP_RTR_PREF_NODEFAULT = 0x80000000 # do not use as default gw
|
120
|
+
|
121
|
+
|
122
|
+
IP_ADDR_LEN = 4 # IP address length
|
123
|
+
IP_ADDR_BITS = 32 # IP address bits
|
124
|
+
IP_HDR_LEN = 20 # base IP header length
|
125
|
+
IP_OPT_LEN = 2 # base IP option length
|
126
|
+
IP_OPT_LEN_MAX = 40
|
127
|
+
IP_HDR_LEN_MAX = (IP_HDR_LEN + IP_OPT_LEN_MAX)
|
128
|
+
IP_LEN_MAX = 65535
|
129
|
+
IP_LEN_MIN = IP_HDR_LEN
|
130
|
+
|
131
|
+
IP_TOS_DEFAULT = 0x00 # default
|
132
|
+
IP_TOS_LOWDELAY = 0x10 # low delay
|
133
|
+
IP_TOS_THROUGHPUT = 0x08 # high throughput
|
134
|
+
IP_TOS_RELIABILITY = 0x04 # high reliability
|
135
|
+
IP_TOS_LOWCOST = 0x02 # low monetary cost - XXX
|
136
|
+
IP_TOS_ECT = 0x02 # ECN-capable transport
|
137
|
+
IP_TOS_CE = 0x01 # congestion experienced
|
138
|
+
|
139
|
+
IP_TOS__PREC_ROUTINE = 0x00
|
140
|
+
IP_TOS__PREC_PRIORITY = 0x20
|
141
|
+
IP_TOS__PREC_IMMEDIATE = 0x40
|
142
|
+
IP_TOS__PREC_FLASH = 0x60
|
143
|
+
IP_TOS__PREC_FLASHOVERRIDE = 0x80
|
144
|
+
IP_TOS__PREC_CRITIC_ECP = 0xa0
|
145
|
+
IP_TOS__PREC_INTERNETCONTROL = 0xc0
|
146
|
+
IP_TOS__PREC_NETCONTROL = 0xe0
|
147
|
+
|
148
|
+
IP_RF = 0x8000 # reserved
|
149
|
+
IP_DF = 0x4000 # don't fragment
|
150
|
+
IP_MF = 0x2000 # more fragments (not last frag)
|
151
|
+
IP_OFFMASK = 0x1fff # mask for fragment offset
|
152
|
+
|
153
|
+
IP_TTL_DEFAULT = 64 # default ttl, RFC 1122, RFC 1340
|
154
|
+
IP_TTL_MAX = 255 # maximum ttl
|
155
|
+
|
156
|
+
|
157
|
+
# Protocols (proto) - http://www.iana.org/assignments/protocol-numbers
|
158
|
+
|
159
|
+
IP_PROTO_IP = 0 # dummy for IP
|
160
|
+
IP_PROTO_ICMP = 1 # ICMP
|
161
|
+
IP_PROTO_IGMP = 2 # IGMP
|
162
|
+
IP_PROTO_GGP = 3 # gateway-gateway protocol
|
163
|
+
IP_PROTO_IPIP = 4 # IP in IP
|
164
|
+
IP_PROTO_ST = 5 # ST datagram mode
|
165
|
+
IP_PROTO_TCP = 6 # TCP
|
166
|
+
IP_PROTO_CBT = 7 # CBT
|
167
|
+
IP_PROTO_EGP = 8 # exterior gateway protocol
|
168
|
+
IP_PROTO_IGP = 9 # interior gateway protocol
|
169
|
+
IP_PROTO_BBNRCC = 10 # BBN RCC monitoring
|
170
|
+
IP_PROTO_NVP = 11 # Network Voice Protocol
|
171
|
+
IP_PROTO_PUP = 12 # PARC universal packet
|
172
|
+
IP_PROTO_ARGUS = 13 # ARGUS
|
173
|
+
IP_PROTO_EMCON = 14 # EMCON
|
174
|
+
IP_PROTO_XNET = 15 # Cross Net Debugger
|
175
|
+
IP_PROTO_CHAOS = 16 # Chaos
|
176
|
+
IP_PROTO_UDP = 17 # UDP
|
177
|
+
IP_PROTO_MUX = 18 # multiplexing
|
178
|
+
IP_PROTO_DCNMEAS = 19 # DCN measurement
|
179
|
+
IP_PROTO_HMP = 20 # Host Monitoring Protocol
|
180
|
+
IP_PROTO_PRM = 21 # Packet Radio Measurement
|
181
|
+
IP_PROTO_IDP = 22 # Xerox NS IDP
|
182
|
+
IP_PROTO_TRUNK1 = 23 # Trunk-1
|
183
|
+
IP_PROTO_TRUNK2 = 24 # Trunk-2
|
184
|
+
IP_PROTO_LEAF1 = 25 # Leaf-1
|
185
|
+
IP_PROTO_LEAF2 = 26 # Leaf-2
|
186
|
+
IP_PROTO_RDP = 27 # "Reliable Datagram" proto
|
187
|
+
IP_PROTO_IRTP = 28 # Inet Reliable Transaction
|
188
|
+
IP_PROTO_TP = 29 # ISO TP class 4
|
189
|
+
IP_PROTO_NETBLT = 30 # Bulk Data Transfer
|
190
|
+
IP_PROTO_MFPNSP = 31 # MFE Network Services
|
191
|
+
IP_PROTO_MERITINP = 32 # Merit Internodal Protocol
|
192
|
+
IP_PROTO_SEP = 33 # Sequential Exchange proto
|
193
|
+
IP_PROTO_THIRDPC = 34 # Third Party Connect proto
|
194
|
+
IP_PROTO_IDPR = 35 # Interdomain Policy Route
|
195
|
+
IP_PROTO_XTP = 36 # Xpress Transfer Protocol
|
196
|
+
IP_PROTO_DDP = 37 # Datagram Delivery Proto
|
197
|
+
IP_PROTO_CMTP = 38 # IDPR Ctrl Message Trans
|
198
|
+
IP_PROTO_TPPP = 39 # TP++ Transport Protocol
|
199
|
+
IP_PROTO_IL = 40 # IL Transport Protocol
|
200
|
+
IP_PROTO_IPV6 = 41 # IPv6
|
201
|
+
IP_PROTO_SDRP = 42 # Source Demand Routing
|
202
|
+
IP_PROTO_ROUTING = 43 # IPv6 routing header
|
203
|
+
IP_PROTO_FRAGMENT = 44 # IPv6 fragmentation header
|
204
|
+
IP_PROTO_RSVP = 46 # Reservation protocol
|
205
|
+
IP_PROTO_GRE = 47 # General Routing Encap
|
206
|
+
IP_PROTO_MHRP = 48 # Mobile Host Routing
|
207
|
+
IP_PROTO_ENA = 49 # ENA
|
208
|
+
IP_PROTO_ESP = 50 # Encap Security Payload
|
209
|
+
IP_PROTO_AH = 51 # Authentication Header
|
210
|
+
IP_PROTO_INLSP = 52 # Integated Net Layer Sec
|
211
|
+
IP_PROTO_SWIPE = 53 # SWIPE
|
212
|
+
IP_PROTO_NARP = 54 # NBMA Address Resolution
|
213
|
+
IP_PROTO_MOBILE = 55 # Mobile IP, RFC 2004
|
214
|
+
IP_PROTO_TLSP = 56 # Transport Layer Security
|
215
|
+
IP_PROTO_SKIP = 57 # SKIP
|
216
|
+
IP_PROTO_ICMPV6 = 58 # ICMP for IPv6
|
217
|
+
IP_PROTO_NONE = 59 # IPv6 no next header
|
218
|
+
IP_PROTO_DSTOPTS = 60 # IPv6 destination options
|
219
|
+
IP_PROTO_ANYHOST = 61 # any host internal proto
|
220
|
+
IP_PROTO_CFTP = 62 # CFTP
|
221
|
+
IP_PROTO_ANYNET = 63 # any local network
|
222
|
+
IP_PROTO_EXPAK = 64 # SATNET and Backroom EXPAK
|
223
|
+
IP_PROTO_KRYPTOLAN = 65 # Kryptolan
|
224
|
+
IP_PROTO_RVD = 66 # MIT Remote Virtual Disk
|
225
|
+
IP_PROTO_IPPC = 67 # Inet Pluribus Packet Core
|
226
|
+
IP_PROTO_DISTFS = 68 # any distributed fs
|
227
|
+
IP_PROTO_SATMON = 69 # SATNET Monitoring
|
228
|
+
IP_PROTO_VISA = 70 # VISA Protocol
|
229
|
+
IP_PROTO_IPCV = 71 # Inet Packet Core Utility
|
230
|
+
IP_PROTO_CPNX = 72 # Comp Proto Net Executive
|
231
|
+
IP_PROTO_CPHB = 73 # Comp Protocol Heart Beat
|
232
|
+
IP_PROTO_WSN = 74 # Wang Span Network
|
233
|
+
IP_PROTO_PVP = 75 # Packet Video Protocol
|
234
|
+
IP_PROTO_BRSATMON = 76 # Backroom SATNET Monitor
|
235
|
+
IP_PROTO_SUNND = 77 # SUN ND Protocol
|
236
|
+
IP_PROTO_WBMON = 78 # WIDEBAND Monitoring
|
237
|
+
IP_PROTO_WBEXPAK = 79 # WIDEBAND EXPAK
|
238
|
+
IP_PROTO_EON = 80 # ISO CNLP
|
239
|
+
IP_PROTO_VMTP = 81 # Versatile Msg Transport
|
240
|
+
IP_PROTO_SVMTP = 82 # Secure VMTP
|
241
|
+
IP_PROTO_VINES = 83 # VINES
|
242
|
+
IP_PROTO_TTP = 84 # TTP
|
243
|
+
IP_PROTO_NSFIGP = 85 # NSFNET-IGP
|
244
|
+
IP_PROTO_DGP = 86 # Dissimilar Gateway Proto
|
245
|
+
IP_PROTO_TCF = 87 # TCF
|
246
|
+
IP_PROTO_EIGRP = 88 # EIGRP
|
247
|
+
IP_PROTO_OSPF = 89 # Open Shortest Path First
|
248
|
+
IP_PROTO_SPRITERPC = 90 # Sprite RPC Protocol
|
249
|
+
IP_PROTO_LARP = 91 # Locus Address Resolution
|
250
|
+
IP_PROTO_MTP = 92 # Multicast Transport Proto
|
251
|
+
IP_PROTO_AX25 = 93 # AX.25 Frames
|
252
|
+
IP_PROTO_IPIPENCAP = 94 # yet-another IP encap
|
253
|
+
IP_PROTO_MICP = 95 # Mobile Internet Ctrl
|
254
|
+
IP_PROTO_SCCSP = 96 # Semaphore Comm Sec Proto
|
255
|
+
IP_PROTO_ETHERIP = 97 # Ethernet in IPv4
|
256
|
+
IP_PROTO_ENCAP = 98 # encapsulation header
|
257
|
+
IP_PROTO_ANYENC = 99 # private encryption scheme
|
258
|
+
IP_PROTO_GMTP = 100 # GMTP
|
259
|
+
IP_PROTO_IFMP = 101 # Ipsilon Flow Mgmt Proto
|
260
|
+
IP_PROTO_PNNI = 102 # PNNI over IP
|
261
|
+
IP_PROTO_PIM = 103 # Protocol Indep Multicast
|
262
|
+
IP_PROTO_ARIS = 104 # ARIS
|
263
|
+
IP_PROTO_SCPS = 105 # SCPS
|
264
|
+
IP_PROTO_QNX = 106 # QNX
|
265
|
+
IP_PROTO_AN = 107 # Active Networks
|
266
|
+
IP_PROTO_IPCOMP = 108 # IP Payload Compression
|
267
|
+
IP_PROTO_SNP = 109 # Sitara Networks Protocol
|
268
|
+
IP_PROTO_COMPAQPEER = 110 # Compaq Peer Protocol
|
269
|
+
IP_PROTO_IPXIP = 111 # IPX in IP
|
270
|
+
IP_PROTO_VRRP = 112 # Virtual Router Redundancy
|
271
|
+
IP_PROTO_PGM = 113 # PGM Reliable Transport
|
272
|
+
IP_PROTO_ANY0HOP = 114 # 0-hop protocol
|
273
|
+
IP_PROTO_L2TP = 115 # Layer 2 Tunneling Proto
|
274
|
+
IP_PROTO_DDX = 116 # D-II Data Exchange (DDX)
|
275
|
+
IP_PROTO_IATP = 117 # Interactive Agent Xfer
|
276
|
+
IP_PROTO_STP = 118 # Schedule Transfer Proto
|
277
|
+
IP_PROTO_SRP = 119 # SpectraLink Radio Proto
|
278
|
+
IP_PROTO_UTI = 120 # UTI
|
279
|
+
IP_PROTO_SMP = 121 # Simple Message Protocol
|
280
|
+
IP_PROTO_SM = 122 # SM
|
281
|
+
IP_PROTO_PTP = 123 # Performance Transparency
|
282
|
+
IP_PROTO_ISIS = 124 # ISIS over IPv4
|
283
|
+
IP_PROTO_FIRE = 125 # FIRE
|
284
|
+
IP_PROTO_CRTP = 126 # Combat Radio Transport
|
285
|
+
IP_PROTO_CRUDP = 127 # Combat Radio UDP
|
286
|
+
IP_PROTO_SSCOPMCE = 128 # SSCOPMCE
|
287
|
+
IP_PROTO_IPLT = 129 # IPLT
|
288
|
+
IP_PROTO_SPS = 130 # Secure Packet Shield
|
289
|
+
IP_PROTO_PIPE = 131 # Private IP Encap in IP
|
290
|
+
IP_PROTO_SCTP = 132 # Stream Ctrl Transmission
|
291
|
+
IP_PROTO_FC = 133 # Fibre Channel
|
292
|
+
IP_PROTO_RSVPIGN = 134 # RSVP-E2E-IGNORE
|
293
|
+
IP_PROTO_RAW = 255 # Raw IP packets
|
294
|
+
|
295
|
+
IP_PROTO__RESERVED = IP_PROTO_RAW # Reserved
|
296
|
+
IP_PROTO__HOPOPTS = IP_PROTO_IP # IPv6 hop-by-hop options
|
297
|
+
IP_PROTO_3PC = IP_PROTO_THIRDPC # Third Party Connect proto
|
298
|
+
|
299
|
+
# Opt bits
|
300
|
+
|
301
|
+
IP_OPT_CONTROL = 0x00 # control
|
302
|
+
IP_OPT_DEBMEAS = 0x40 # debugging & measurement
|
303
|
+
IP_OPT_COPY = 0x80 # copy into all fragments
|
304
|
+
IP_OPT_RESERVED1 = 0x20
|
305
|
+
IP_OPT_RESERVED2 = 0x60
|
306
|
+
|
307
|
+
# Option types (otype) - http://www.iana.org/assignments/ip-parameters
|
308
|
+
#
|
309
|
+
# values renamed IP_OPT_* to IP_OTYPE_*
|
310
|
+
|
311
|
+
IP_OTYPE_EOL = 0 # terminates option list
|
312
|
+
IP_OTYPE_NOP = 1 # no operation
|
313
|
+
IP_OTYPE_SEC = (2|IP_OPT_COPY) # DoD basic security
|
314
|
+
IP_OTYPE_LSRR = (3|IP_OPT_COPY) # loose source route
|
315
|
+
IP_OTYPE_TS = (4|IP_OPT_DEBMEAS) # timestamp
|
316
|
+
IP_OTYPE_ESEC = (5|IP_OPT_COPY) # DoD extended security
|
317
|
+
IP_OTYPE_CIPSO = (6|IP_OPT_COPY) # commercial security
|
318
|
+
IP_OTYPE_RR = 7 # record route
|
319
|
+
IP_OTYPE_SATID = (8|IP_OPT_COPY) # stream ID (obsolete)
|
320
|
+
IP_OTYPE_SSRR = (9|IP_OPT_COPY) # strict source route
|
321
|
+
IP_OTYPE_ZSU = 10 # experimental measurement
|
322
|
+
IP_OTYPE_MTUP = 11 # MTU probe
|
323
|
+
IP_OTYPE_MTUR = 12 # MTU reply
|
324
|
+
IP_OTYPE_FINN = (13|IP_OPT_COPY|IP_OPT_DEBMEAS) # exp flow control
|
325
|
+
IP_OTYPE_VISA = (14|IP_OPT_COPY) # exp access control
|
326
|
+
IP_OTYPE_ENCODE = 15 # ???
|
327
|
+
IP_OTYPE_IMITD = (16|IP_OPT_COPY) # IMI traffic descriptor
|
328
|
+
IP_OTYPE_EIP = (17|IP_OPT_COPY) # extended IP, RFC 1385
|
329
|
+
IP_OTYPE_TR = (18|IP_OPT_DEBMEAS) # traceroute
|
330
|
+
IP_OTYPE_ADDEXT = (19|IP_OPT_COPY) # IPv7 ext addr, RFC 1475
|
331
|
+
IP_OTYPE_RTRALT = (20|IP_OPT_COPY) # router alert, RFC 2113
|
332
|
+
IP_OTYPE_SDB = (21|IP_OPT_COPY) # directed bcast, RFC 1770
|
333
|
+
IP_OTYPE_NSAPA = (22|IP_OPT_COPY) # NSAP addresses
|
334
|
+
IP_OTYPE_DPS = (23|IP_OPT_COPY) # dynamic packet state
|
335
|
+
IP_OTYPE_UMP = (24|IP_OPT_COPY) # upstream multicast
|
336
|
+
IP_OTYPE_MAX = 25
|
337
|
+
|
338
|
+
# Security option data - RFC 791, 3.1
|
339
|
+
|
340
|
+
IP_OPT_SEC_UNCLASS = 0x0000 # unclassified
|
341
|
+
IP_OPT_SEC_CONFID = 0xf135 # confidential
|
342
|
+
IP_OPT_SEC_EFTO = 0x789a # EFTO
|
343
|
+
IP_OPT_SEC_MMMM = 0xbc4d # MMMM
|
344
|
+
IP_OPT_SEC_PROG = 0x5e26 # PROG
|
345
|
+
IP_OPT_SEC_RESTR = 0xaf13 # restricted
|
346
|
+
IP_OPT_SEC_SECRET = 0xd788 # secret
|
347
|
+
IP_OPT_SEC_TOPSECRET = 0x6bc5 # top secret
|
348
|
+
|
349
|
+
# Timestamp option data - RFC 791, 3.1
|
350
|
+
|
351
|
+
IP_OPT_TS_TSONLY = 0 # timestamps only
|
352
|
+
IP_OPT_TS_TSADDR = 1 # IP address / timestamp pairs
|
353
|
+
IP_OPT_TS_PRESPEC = 3 # IP address / zero timestamp pairs
|
354
|
+
|
355
|
+
|
356
|
+
IP6_ADDR_LEN = 16
|
357
|
+
IP6_ADDR_BITS = 128
|
358
|
+
|
359
|
+
IP6_HDR_LEN = 40 # IPv6 header length
|
360
|
+
IP6_LEN_MIN = IP6_HDR_LEN
|
361
|
+
IP6_LEN_MAX = 65535 # non-jumbo payload
|
362
|
+
|
363
|
+
IP6_MTU_MIN = 1280 # minimum MTU (1024 + 256)
|
364
|
+
|
365
|
+
IP6_VERSION = 0x60
|
366
|
+
IP6_VERSION_MASK = 0xf0 # ip6_vfc version
|
367
|
+
|
368
|
+
|
369
|
+
# Hop limit (ip6_hlim)
|
370
|
+
IP6_HLIM_DEFAULT = 64
|
371
|
+
IP6_HLIM_MAX = 255
|
372
|
+
|
373
|
+
|
374
|
+
# Fragmentation offset, reserved, and flags (offlg)
|
375
|
+
|
376
|
+
IP6_OFF_MASK = 0xfff8 # mask out offset from offlg
|
377
|
+
IP6_RESERVED_MASK = 0x0006 # reserved bits in offlg
|
378
|
+
IP6_MORE_FRAG = 0x0001 # more-fragments flag
|
379
|
+
|
380
|
+
|
381
|
+
# XXX implement? IP6_OPT_TYPE(o)
|
382
|
+
#define IP6_OPT_TYPE(o) ((o) & 0xC0) /* high 2 bits of opt_type */
|
383
|
+
|
384
|
+
IP6_OPT_PAD1 = 0x00 # 00 0 00000
|
385
|
+
IP6_OPT_PADN = 0x01 # 00 0 00001
|
386
|
+
IP6_OPT_JUMBO = 0xC2 # 11 0 00010 = 194
|
387
|
+
IP6_OPT_JUMBO_LEN = 6
|
388
|
+
IP6_OPT_RTALERT = 0x05 # 00 0 00101
|
389
|
+
IP6_OPT_RTALERT_LEN = 4
|
390
|
+
IP6_OPT_RTALERT_MLD = 0 # Datagram contains an MLD message
|
391
|
+
IP6_OPT_RTALERT_RSVP = 1 # Datagram contains an RSVP message
|
392
|
+
IP6_OPT_RTALERT_ACTNET = 2 # contains an Active Networks msg
|
393
|
+
IP6_OPT_LEN_MIN = 2
|
394
|
+
|
395
|
+
IP6_OPT_TYPE_SKIP = 0x00 # continue processing on failure
|
396
|
+
IP6_OPT_TYPE_DISCARD = 0x40 # discard packet on failure
|
397
|
+
IP6_OPT_TYPE_FORCEICMP = 0x80 # discard and send ICMP on failure
|
398
|
+
IP6_OPT_TYPE_ICMP = 0xC0 # ...only if non-multicast dst
|
399
|
+
|
400
|
+
IP6_OPT_MUTABLE = 0x20 # option data may change en route
|
401
|
+
|
402
|
+
|
403
|
+
TCP_HDR_LEN = 20 # base TCP header length
|
404
|
+
TCP_OPT_LEN = 2 # base TCP option length
|
405
|
+
TCP_OPT_LEN_MAX = 40
|
406
|
+
TCP_HDR_LEN_MAX = (TCP_HDR_LEN + TCP_OPT_LEN_MAX)
|
407
|
+
|
408
|
+
TCP_PORT_MAX = 65535 # maximum port
|
409
|
+
TCP_WIN_MAX = 65535 # maximum (unscaled) window
|
410
|
+
|
411
|
+
TH_FIN = 0x01 # terminates data
|
412
|
+
TH_SYN = 0x02 # synchronize sequence numbers
|
413
|
+
TH_RST = 0x04 # reset connection
|
414
|
+
TH_PUSH = 0x08 # push
|
415
|
+
TH_ACK = 0x10 # acknowledgment number set
|
416
|
+
TH_URG = 0x20 # urgent pointer set
|
417
|
+
TH_ECE = 0x40 # ECN echo, RFC 3168
|
418
|
+
TH_CWR = 0x80 # congestion window reduced
|
419
|
+
|
420
|
+
|
421
|
+
# TCP FSM states
|
422
|
+
|
423
|
+
TCP_STATE_CLOSED = 0 # closed
|
424
|
+
TCP_STATE_LISTEN = 1 # listening from connection
|
425
|
+
TCP_STATE_SYN_SENT = 2 # active, have sent SYN
|
426
|
+
TCP_STATE_SYN_RECEIVED = 3 # have sent and received SYN
|
427
|
+
|
428
|
+
TCP_STATE_ESTABLISHED = 4 # established
|
429
|
+
TCP_STATE_CLOSE_WAIT = 5 # rcvd FIN, waiting for close
|
430
|
+
|
431
|
+
TCP_STATE_FIN_WAIT_1 = 6 # have closed, sent FIN
|
432
|
+
TCP_STATE_CLOSING = 7 # closed xchd FIN, await FIN-ACK
|
433
|
+
TCP_STATE_LAST_ACK = 8 # had FIN and close, await FIN-ACK
|
434
|
+
|
435
|
+
TCP_STATE_FIN_WAIT_2 = 9 # have closed, FIN is acked
|
436
|
+
TCP_STATE_TIME_WAIT = 10 # in 2*MSL quiet wait after close
|
437
|
+
|
438
|
+
TCP_STATE_MAX = 11
|
439
|
+
|
440
|
+
|
441
|
+
# Options (opt_type) - http://www.iana.org/assignments/tcp-parameters
|
442
|
+
#
|
443
|
+
# renamed TCP_OPT_* to TCP_OTYPE_*
|
444
|
+
|
445
|
+
TCP_OTYPE_EOL = 0 # end of option list
|
446
|
+
TCP_OTYPE_NOP = 1 # no operation
|
447
|
+
TCP_OTYPE_MSS = 2 # maximum segment size
|
448
|
+
TCP_OTYPE_WSCALE = 3 # window scale factor, RFC 1072
|
449
|
+
TCP_OTYPE_SACKOK = 4 # SACK permitted, RFC 2018
|
450
|
+
TCP_OTYPE_SACK = 5 # SACK, RFC 2018
|
451
|
+
TCP_OTYPE_ECHO = 6 # echo (obsolete), RFC 1072
|
452
|
+
TCP_OTYPE_ECHOREPLY = 7 # echo reply (obsolete), RFC 1072
|
453
|
+
TCP_OTYPE_TIMESTAMP = 8 # timestamp, RFC 1323
|
454
|
+
TCP_OTYPE_POCONN = 9 # partial order conn, RFC 1693
|
455
|
+
TCP_OTYPE_POSVC = 10 # partial order service, RFC 1693
|
456
|
+
TCP_OTYPE_CC = 11 # connection count, RFC 1644
|
457
|
+
TCP_OTYPE_CCNEW = 12 # CC.NEW, RFC 1644
|
458
|
+
TCP_OTYPE_CCECHO = 13 # CC.ECHO, RFC 1644
|
459
|
+
TCP_OTYPE_ALTSUM = 14 # alt checksum request, RFC 1146
|
460
|
+
TCP_OTYPE_ALTSUMDATA = 15 # alt checksum data, RFC 1146
|
461
|
+
TCP_OTYPE_SKEETER = 16 # Skeeter
|
462
|
+
TCP_OTYPE_BUBBA = 17 # Bubba
|
463
|
+
TCP_OTYPE_TRAILSUM = 18 # trailer checksum
|
464
|
+
TCP_OTYPE_MD5 = 19 # MD5 signature, RFC 2385
|
465
|
+
TCP_OTYPE_SCPS = 20 # SCPS capabilities
|
466
|
+
TCP_OTYPE_SNACK = 21 # selective negative acks
|
467
|
+
TCP_OTYPE_REC = 22 # record boundaries
|
468
|
+
TCP_OTYPE_CORRUPT = 23 # corruption experienced
|
469
|
+
TCP_OTYPE_SNAP = 24 # SNAP
|
470
|
+
TCP_OTYPE_TCPCOMP = 26 # TCP compression filter
|
471
|
+
TCP_OTYPE_MAX = 27
|
472
|
+
|
473
|
+
|
474
|
+
UDP_HDR_LEN = 8
|
475
|
+
UDP_PORT_MAX = 65535
|
476
|
+
|
477
|
+
end
|
478
|
+
end
|