From b6f983b7de81e83fd86b663110e110781ab8a954 Mon Sep 17 00:00:00 2001 From: Andrey Konovalov Date: Thu, 26 Jan 2017 15:12:42 +0100 Subject: sys: improve ipv4 options descriptions --- sys/vnet.txt | 103 ++++++++++++++++++++++++++++++++++++++++++++++--- sys/vnet_amd64.const | 9 +++++ sys/vnet_arm64.const | 9 +++++ 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 include - -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 # 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 -- cgit mrf-deployment