aboutsummaryrefslogtreecommitdiffstats
path: root/sys/linux/vnet.txt
diff options
context:
space:
mode:
authorDmitry Vyukov <dvyukov@google.com>2017-12-29 18:50:08 +0100
committerDmitry Vyukov <dvyukov@google.com>2017-12-29 18:50:08 +0100
commitdde1ffd49b32cb4fb6b13f9e823cd4b7d2c852b0 (patch)
treeb2e8456614b06b8dddd9387bba75a4dc4f210bd4 /sys/linux/vnet.txt
parentc25d74ee514fe00f228a0cc7c158cf2906329ea8 (diff)
sys/linux: describe ipv6 tlv options
Diffstat (limited to 'sys/linux/vnet.txt')
-rw-r--r--sys/linux/vnet.txt78
1 files changed, 70 insertions, 8 deletions
diff --git a/sys/linux/vnet.txt b/sys/linux/vnet.txt
index 0389f7133..76893a377 100644
--- a/sys/linux/vnet.txt
+++ b/sys/linux/vnet.txt
@@ -452,6 +452,7 @@ ipv4_packet {
include <uapi/linux/in6.h>
include <uapi/linux/ipv6.h>
+include <uapi/linux/ip6_tunnel.h>
include <net/ipv6.h>
ipv6_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, IPPROTO_HOPOPTS, IPPROTO_ROUTING, IPPROTO_FRAGMENT, IPPROTO_ICMPV6, IPPROTO_NONE, IPPROTO_DSTOPTS, IPPROTO_MH, NEXTHDR_HOP, NEXTHDR_ROUTING, NEXTHDR_FRAGMENT, NEXTHDR_GRE, NEXTHDR_ESP, NEXTHDR_AUTH, NEXTHDR_ICMP, NEXTHDR_NONE, NEXTHDR_DEST, NEXTHDR_MOBILITY
@@ -491,7 +492,7 @@ ipv6_addr [
]
# TODO: Describe more types of headers
-# NEXTHDR_HOP, NEXTHDR_TCP, NEXTHDR_UDP, NEXTHDR_IPV6, NEXTHDR_ROUTING, NEXTHDR_FRAGMENT, NEXTHDR_GRE, NEXTHDR_ESP, NEXTHDR_AUTH, NEXTHDR_ICMP, NEXTHDR_NONE, NEXTHDR_DEST, NEXTHDR_SCTP, NEXTHDR_MOBILITY
+# NEXTHDR_HOP, NEXTHDR_TCP, NEXTHDR_UDP, NEXTHDR_IPV6, NEXTHDR_FRAGMENT, NEXTHDR_GRE, NEXTHDR_ESP, NEXTHDR_AUTH, NEXTHDR_ICMP, NEXTHDR_NONE, NEXTHDR_DEST, NEXTHDR_SCTP, NEXTHDR_MOBILITY
# https://tools.ietf.org/html/rfc2402
# https://tools.ietf.org/html/rfc2406
# https://tools.ietf.org/html/rfc3775
@@ -520,16 +521,16 @@ ipv6_routing_ext_header {
length bytesize8[data, int8]
routing_type flags[ipv6_routing_types, int8]
segments_left int8
- reserved int32be
+ reserved const[0, int32]
data array[ipv6_addr]
} [packed, align_8]
ipv6_fragment_ext_header {
next_header flags[ipv6_types, int8]
- reserved1 int8
+ reserved1 const[0, int8]
fragment_off_hi int8
m_flag int8:1
- reserved2 int8:2
+ reserved2 const[0, int8:2]
fragment_off_lo int8:5
identification proc[100, 4, int32]
} [packed]
@@ -541,15 +542,76 @@ ipv6_dstopts_ext_header {
options array[ipv6_tlv_option]
} [packed]
-# TODO: describe particular tlv options
-ipv6_tlv_option_types = IPV6_TLV_PAD1, IPV6_TLV_PADN, IPV6_TLV_ROUTERALERT, IPV6_TLV_CALIPSO, IPV6_TLV_JUMBO, IPV6_TLV_HAO, 0xff, 0xfe
+ipv6_tlv_option [
+ generic ipv6_tlv_generic
+ pad1 ipv6_tlv_pad1
+ padn ipv6_tlv_padn
+ ra ipv6_tlv_ra
+ jumbo ipv6_tlv_jumbo
+ calipso ipv6_tlv_calipso
+ hao ipv6_tlv_hao
+ enc_lim ipv6_tlv_enc_lim
+] [varlen]
-ipv6_tlv_option {
- type flags[ipv6_tlv_option_types, int8]
+ipv6_tlv_generic {
+ type int8
length len[data, int8]
data array[int8]
} [packed]
+ipv6_tlv_pad1 {
+ type const[IPV6_TLV_PAD1, int8]
+ len const[1, int8]
+ pad const[0, int8]
+} [packed]
+
+ipv6_tlv_padn {
+ type const[IPV6_TLV_PADN, int8]
+ len len[pad, int8]
+ pad array[const[0, int8]]
+} [packed]
+
+ipv6_tlv_ra {
+ type const[IPV6_TLV_ROUTERALERT, int8]
+ len const[2, int8]
+ ra int16be
+} [packed]
+
+ipv6_tlv_jumbo {
+ type const[IPV6_TLV_JUMBO, int8]
+ len const[4, int8]
+ pkt_len int32be
+} [packed]
+
+# https://tools.ietf.org/html/rfc5570#section-5.1
+ipv6_tlv_calipso {
+ type const[IPV6_TLV_CALIPSO, int8]
+ len bytesize[payload, int8]
+ payload ipv6_tlv_calipso_payload
+} [packed]
+
+# TODO: checksum is generally incorrect.
+# TODO: domain should be flags, but it's unclear if we have any domains registered by default.
+ipv6_tlv_calipso_payload {
+ domain int32be
+ compartment_length bytesize4[compartment_bitmap, int8]
+ sensitivity_level int8
+ checksum int16
+ compartment_bitmap array[int64]
+} [packed]
+
+ipv6_tlv_hao {
+ type const[IPV6_TLV_HAO, int8]
+ len bytesize[addr, int8]
+ addr ipv6_addr
+} [packed]
+
+ipv6_tlv_enc_lim {
+ type const[IPV6_TLV_TNL_ENCAP_LIMIT, int8]
+ len const[1, int8]
+ encap_limit int8
+} [packed]
+
ipv6_packet {
priority int8:4
version const[6, int8:4]