diff options
| author | Dmitry Vyukov <dvyukov@google.com> | 2017-01-26 15:30:51 +0100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2017-01-26 15:30:51 +0100 |
| commit | 51ed7072cd468e7e3bec76c3412df77656bbddea (patch) | |
| tree | 92a7170f01ddd59518fb6d47ee12bb0f80381457 | |
| parent | 72353dc4f60168cc69d156bc38cffd6c6070ff12 (diff) | |
| parent | b6f983b7de81e83fd86b663110e110781ab8a954 (diff) | |
Merge pull request #120 from xairy/ipv4-options
sys: improve ipv4 options descriptions
| -rw-r--r-- | sys/vnet.txt | 103 | ||||
| -rw-r--r-- | sys/vnet_amd64.const | 9 | ||||
| -rw-r--r-- | sys/vnet_arm64.const | 9 | ||||
| -rw-r--r-- | sys/vnet_ppc64le.const | 9 |
4 files changed, 124 insertions, 6 deletions
diff --git a/sys/vnet.txt b/sys/vnet.txt index a959f8909..296d04793 100644 --- a/sys/vnet.txt +++ b/sys/vnet.txt @@ -86,6 +86,7 @@ eth2_payload { ##################################### IPv4 ##################################### ################################################################################ +# https://tools.ietf.org/html/rfc791#section-3.1 # https://en.wikipedia.org/wiki/IPv4#Header # TODO: https://en.wikipedia.org/wiki/IPsec#Authentication_Header @@ -93,8 +94,7 @@ eth2_payload { include <uapi/linux/in.h> include <uapi/linux/ip.h> - -ipv4_types = IPPROTO_IP, IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_IPIP, IPPROTO_TCP, IPPROTO_EGP, IPPROTO_PUP, IPPROTO_UDP, IPPROTO_IDP, IPPROTO_TP, IPPROTO_DCCP, IPPROTO_IPV6, IPPROTO_RSVP, IPPROTO_GRE, IPPROTO_ESP, IPPROTO_AH, IPPROTO_MTP, IPPROTO_BEETPH, IPPROTO_ENCAP, IPPROTO_PIM, IPPROTO_COMP, IPPROTO_SCTP, IPPROTO_UDPLITE, IPPROTO_MPLS, IPPROTO_RAW +include <net/cipso_ipv4.h> # This corresponds to LOCAL_IPV4 ("172.20.%d.170" % pid) in executor/common.h ipv4_addr_local { @@ -131,19 +131,110 @@ 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 + cipso ipv4_option_cipso + ra ipv4_option_ra +# IPOPT_SEC and IPOPT_SID are not supported by Linux kernel +] [varlen] + ipv4_option_types = IPOPT_END, IPOPT_NOOP, IPOPT_SEC, IPOPT_LSRR, IPOPT_TIMESTAMP, IPOPT_CIPSO, IPOPT_RR, IPOPT_SID, IPOPT_SSRR, IPOPT_RA -# TODO: describe particular options -ipv4_option { +ipv4_option_generic { type flags[ipv4_option_types, int8] - length len[data, 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_END, int8] +} [packed] + +# https://tools.ietf.org/html/rfc791#section-3.1 +ipv4_option_noop { + type const[IPOPT_NOOP, 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_TIMESTAMP, 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] + +ipv4_option_cipso_tag_types = CIPSO_V4_TAG_INVALID, CIPSO_V4_TAG_RBITMAP, CIPSO_V4_TAG_ENUM, CIPSO_V4_TAG_RANGE, CIPSO_V4_TAG_PBITMAP, CIPSO_V4_TAG_FREEFORM + +# TODO: describe particular tag types +ipv4_option_cipso_tag { + type flags[ipv4_option_cipso_tag_types, int8] + length len[parent, int8] data array[int8, 0:16] } [packed] +# https://www.ietf.org/archive/id/draft-ietf-cipso-ipsecurity-01.txt +ipv4_option_cipso { + type const[IPOPT_CIPSO, int8] + length len[parent, int8] + doi int32be + tags array[ipv4_option_cipso_tag] +} [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, 0:4] + options array[ipv4_option] } [packed, align_4] +ipv4_types = IPPROTO_IP, IPPROTO_ICMP, IPPROTO_IGMP, IPPROTO_IPIP, IPPROTO_TCP, IPPROTO_EGP, IPPROTO_PUP, IPPROTO_UDP, IPPROTO_IDP, IPPROTO_TP, IPPROTO_DCCP, IPPROTO_IPV6, IPPROTO_RSVP, IPPROTO_GRE, IPPROTO_ESP, IPPROTO_AH, IPPROTO_MTP, IPPROTO_BEETPH, IPPROTO_ENCAP, IPPROTO_PIM, IPPROTO_COMP, IPPROTO_SCTP, IPPROTO_UDPLITE, IPPROTO_MPLS, IPPROTO_RAW + ipv4_header { ihl bytesize4[parent, int8:4] version const[4, int8:4] diff --git a/sys/vnet_amd64.const b/sys/vnet_amd64.const index b48995332..cce212a4e 100644 --- a/sys/vnet_amd64.const +++ b/sys/vnet_amd64.const @@ -1,4 +1,10 @@ # AUTOGENERATED FILE +CIPSO_V4_TAG_ENUM = 2 +CIPSO_V4_TAG_FREEFORM = 7 +CIPSO_V4_TAG_INVALID = 0 +CIPSO_V4_TAG_PBITMAP = 6 +CIPSO_V4_TAG_RANGE = 5 +CIPSO_V4_TAG_RBITMAP = 1 ETH_P_1588 = 35063 ETH_P_8021AD = 34984 ETH_P_8021AH = 35047 @@ -67,6 +73,9 @@ IPOPT_SEC = 130 IPOPT_SID = 136 IPOPT_SSRR = 137 IPOPT_TIMESTAMP = 68 +IPOPT_TS_PRESPEC = 3 +IPOPT_TS_TSANDADDR = 1 +IPOPT_TS_TSONLY = 0 IPPROTO_AH = 51 IPPROTO_BEETPH = 94 IPPROTO_COMP = 108 diff --git a/sys/vnet_arm64.const b/sys/vnet_arm64.const index b48995332..cce212a4e 100644 --- a/sys/vnet_arm64.const +++ b/sys/vnet_arm64.const @@ -1,4 +1,10 @@ # AUTOGENERATED FILE +CIPSO_V4_TAG_ENUM = 2 +CIPSO_V4_TAG_FREEFORM = 7 +CIPSO_V4_TAG_INVALID = 0 +CIPSO_V4_TAG_PBITMAP = 6 +CIPSO_V4_TAG_RANGE = 5 +CIPSO_V4_TAG_RBITMAP = 1 ETH_P_1588 = 35063 ETH_P_8021AD = 34984 ETH_P_8021AH = 35047 @@ -67,6 +73,9 @@ IPOPT_SEC = 130 IPOPT_SID = 136 IPOPT_SSRR = 137 IPOPT_TIMESTAMP = 68 +IPOPT_TS_PRESPEC = 3 +IPOPT_TS_TSANDADDR = 1 +IPOPT_TS_TSONLY = 0 IPPROTO_AH = 51 IPPROTO_BEETPH = 94 IPPROTO_COMP = 108 diff --git a/sys/vnet_ppc64le.const b/sys/vnet_ppc64le.const index b48995332..cce212a4e 100644 --- a/sys/vnet_ppc64le.const +++ b/sys/vnet_ppc64le.const @@ -1,4 +1,10 @@ # AUTOGENERATED FILE +CIPSO_V4_TAG_ENUM = 2 +CIPSO_V4_TAG_FREEFORM = 7 +CIPSO_V4_TAG_INVALID = 0 +CIPSO_V4_TAG_PBITMAP = 6 +CIPSO_V4_TAG_RANGE = 5 +CIPSO_V4_TAG_RBITMAP = 1 ETH_P_1588 = 35063 ETH_P_8021AD = 34984 ETH_P_8021AH = 35047 @@ -67,6 +73,9 @@ IPOPT_SEC = 130 IPOPT_SID = 136 IPOPT_SSRR = 137 IPOPT_TIMESTAMP = 68 +IPOPT_TS_PRESPEC = 3 +IPOPT_TS_TSANDADDR = 1 +IPOPT_TS_TSONLY = 0 IPPROTO_AH = 51 IPPROTO_BEETPH = 94 IPPROTO_COMP = 108 |
