Begin adding session tables, debug infos
This commit is contained in:
parent
879abe94c2
commit
02fc065c1d
4 changed files with 176 additions and 11 deletions
134
doc/plan.org
134
doc/plan.org
|
|
@ -228,13 +228,61 @@
|
|||
| 2019-04-23 | | |
|
||||
| | Meet Laurent | |
|
||||
| | | |
|
||||
| | General | |
|
||||
| | - Get a better understanding of what others did | |
|
||||
| | | |
|
||||
| | Review docs / specs | |
|
||||
| | - Jool EAMT/SIIT | |
|
||||
| | - Jool EAMT/SIIT fully | |
|
||||
| | | |
|
||||
| | - IPv4 embedding | |
|
||||
| | * Motivation/objective: working with real world DNS64 | |
|
||||
| | * RFC6052 suffix support | |
|
||||
| | * RFC4291 IPv4-Compatible IPv6 Address (16 0s) | |
|
||||
| | * RFC4291 IPv4-Mapped IPv6 Address (16 1s) | |
|
||||
| | | |
|
||||
| | - Session handling | |
|
||||
| | * RFC6145: Translation ip/icmp, obsoleted by RFC 7915 | |
|
||||
| | * RFC6146: NAT64 definition, only TCP, UDP, and ICMP traffic | |
|
||||
| | * RFC6052: embedding support | |
|
||||
| | * Mode: IPv6 outgoing -> "masquarading" | |
|
||||
| | * Mode: IPv4 | |
|
||||
| | | |
|
||||
| | - Translation details | |
|
||||
| | * How to handle ICMP4->icmp6 correctly (RFC7915) | |
|
||||
| | | |
|
||||
| | - Hardware | |
|
||||
| | * NetFPGA | |
|
||||
| | * Hardware machine for software comparison? | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | New todos: | |
|
||||
| | | |
|
||||
| | - Translate fragment header | |
|
||||
| | - Support MTU / packet too big | |
|
||||
| | - Support PMTU, tcp mss | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | Meeting notes | |
|
||||
| | - difference based | |
|
||||
| | - first physical access | |
|
||||
| | - tofino: if it compiles -> line rate | |
|
||||
| | - chaining switches / OS -> single port rate | |
|
||||
| | - netpfga | |
|
||||
| | - reason about what in hardware and what in software -> reason tradeoff | !!! |
|
||||
| | - table gets full | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | Follow up: | |
|
||||
| | | |
|
||||
| | - what's the MTU of an interface? have a table | |
|
||||
| | - have port/mtu | |
|
||||
| | - total packeth length -> from IP | |
|
||||
| | - tables not in data plane | |
|
||||
| | - Meeting Hendrik | |
|
||||
| | - Meeting Kamila | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | - 768k | |
|
||||
| | | |
|
||||
| | | |
|
||||
| | | |
|
||||
|
|
@ -1386,7 +1434,6 @@ Please make sure that it is installed and available in your $PATH:
|
|||
|
||||
|
||||
|
||||
|
||||
** Motivation
|
||||
TBD
|
||||
** Translation mechanisms
|
||||
|
|
@ -1775,7 +1822,6 @@ restart controller - check whether tables are applied correctly (type conversion
|
|||
start tcpdump - start test program - stop tcpdump - add
|
||||
pcap to git repo - git add-commit-push - git pull - start wireshark -
|
||||
debug packets - analyse code - goto 1
|
||||
|
||||
*** Setting up a system for working on P4 on devuan
|
||||
**** Scripts in the wild
|
||||
https://github.com/nsg-ethz/p4-learning/blob/master/vm/bin/update-p4c.sh
|
||||
|
|
@ -1786,13 +1832,42 @@ debug packets - analyse code - goto 1
|
|||
[21:24] line:~% sudo apt install libthrift-dev
|
||||
[21:26] line:~% sudo apt install thrift-compiler
|
||||
libnanomsg-dev libjudy-dev
|
||||
|
||||
*** TODO Session / dynamice mappings
|
||||
**** General
|
||||
- Have 1..n session IPv4 addresses
|
||||
- Handle outgoing IPv6: create new session
|
||||
- Handle in
|
||||
***** TODO Case IPv6 initiator
|
||||
- Mapping whole IPv4 Internet in /96 prefix
|
||||
- Session information for mapping reply
|
||||
- Timeout handling in controller
|
||||
****** TODO IPv6 udp -> IPv4
|
||||
- Got 4-5 tuple ([proto], src ip, src port, dst ip, dst port)
|
||||
- Does not / never signal end
|
||||
- Needs timeout for cleaning up
|
||||
****** TODO IPv6 tcp -> IPv4
|
||||
- Similar to udp
|
||||
- react on FIN/RST (?) -- could be an addition
|
||||
****** TODO IPv6 icmp6 -> IPv4
|
||||
- usual protocol specific changes
|
||||
- Session??
|
||||
- src ip, dst ip, code ?
|
||||
|
||||
***** TODO Case IPv4 initiator
|
||||
- Needs upper level protol
|
||||
**** TODO tcp session
|
||||
**** TODO udp session
|
||||
**** TODO tcp session
|
||||
** TODO Comparison with existing tools (Performance, Features)
|
||||
*** Features
|
||||
| What? | Description | State in P4 | References |
|
||||
|-----------+------------------------------------------+-------------------+-----------------------------------------------|
|
||||
| Jool EAMT | Mapping with tables, multiple entries | Supported | https://www.jool.mx/en/run-eam.html, RFC 7757 |
|
||||
| Jool SIIT | Mapping IPv6 to range of IPv4, one entry | Supported by EAMT | |
|
||||
| | | | |
|
||||
| What? | Description | State in P4 | References |
|
||||
|---------------------+------------------------------------------+-------------------+---------------------------------------------------------------------------------|
|
||||
| Jool EAMT | Mapping with tables, multiple entries | Supported | https://www.jool.mx/en/eamt.html, https://www.jool.mx/en/run-eam.html, RFC 7757 |
|
||||
| Jool SIIT | Mapping IPv6 to range of IPv4, one entry | Supported by EAMT | |
|
||||
| Jool Stateful NAT64 | | | https://www.jool.mx/en/intro-xlat.html#stateful-nat64 |
|
||||
| | | | https://www.jool.mx/en/run-nat64.html |
|
||||
| | | | |
|
||||
** P4 Possible Improvements / Current Challenges / Limitations
|
||||
*** DONE cannot read key from table
|
||||
**** log
|
||||
|
|
@ -1990,6 +2065,23 @@ Linux package management, handling updates, etc.
|
|||
Many constants double defined. Easy to make errors.
|
||||
|
||||
** Implementation description and limitations
|
||||
*** Implementation description [move todos here]
|
||||
**** TODO Support (non-) fragmentation
|
||||
- if DF bit is not set in ipv4
|
||||
**** TODO Supporting [different] MTUs
|
||||
- sizes of headers are different
|
||||
- packet might not fit into same mtu anymore
|
||||
- send back "ICMP Packet Too Big messages to the sender." RFC7915
|
||||
**** TODO pmtud support
|
||||
- mss change
|
||||
#+BEGIN_QUOTE
|
||||
translator MUST send a
|
||||
Packet Too Big error message or fragment the packet when the packet
|
||||
size exceeds the MTU of the next-hop interface.
|
||||
#+END_QUOTE
|
||||
|
||||
https://tools.ietf.org/html/rfc7915
|
||||
|
||||
*** Limitations
|
||||
**** IPv4 embedding (RFC6052, RFC4291)
|
||||
Supported is similar to the "IPv4-Compatible IPv6 Address" as defined by
|
||||
|
|
@ -2006,7 +2098,14 @@ Also section 2.5.5.2 "IPv4-Mapped IPv6 Address"
|
|||
|
||||
Mac addresses: bit 0 = unicast (0)/multicast(1),
|
||||
bit 1 = local (1)/global (0) - site wiki/mac
|
||||
|
||||
U/L bit is universal/local, bit 2; inverting: local = 0, global = 1
|
||||
|
||||
**** No fragmentation support (yet)
|
||||
In line with RFC7915
|
||||
#+BEGIN_QUOTE
|
||||
Fragmented ICMP/ICMPv6 packets will not be translated by IP/ICMP translators.
|
||||
#+END_QUOTE
|
||||
**** No session handling (yet)
|
||||
1:1 mappings. No (automatic) session.
|
||||
**** IPv4 / IPv6 embedding
|
||||
|
|
@ -2027,6 +2126,13 @@ bit 1 = local (1)/global (0) - site wiki/mac
|
|||
handle packet.
|
||||
Only has to be set, when packets originate from the switch/controller.
|
||||
|
||||
**** TODO No support of IPv4 options
|
||||
- header is assumed to be always 20 octets
|
||||
|
||||
|
||||
**** TODO Security issue: not checking checksums before
|
||||
- Could be implemented
|
||||
|
||||
** References / Follow up
|
||||
*** RFC 791 IPv4 https://tools.ietf.org/html/rfc791
|
||||
*** RFC 792 ICMP https://tools.ietf.org/html/rfc792
|
||||
|
|
@ -2051,8 +2157,20 @@ bit 1 = local (1)/global (0) - site wiki/mac
|
|||
*** RFC 4443 ICMPv6 https://tools.ietf.org/html/rfc4443
|
||||
*** RFC 4861: https://tools.ietf.org/html/rfc4861 Neighbor discovery
|
||||
*** RFC 6052: https://tools.ietf.org/html/rfc6052 IPv6 Addressing of IPv4/IPv6 Translators - first NAT64??
|
||||
*** RFC 6145 IP/ICMP Translation Algorithm
|
||||
- Obsoleted by 7915
|
||||
*** RFC 6146 Stateful nat http://tools.ietf.org/html/rfc6146
|
||||
- Referenced from Jool
|
||||
*** RFC 6147 DNS64 https://tools.ietf.org/html/rfc6147
|
||||
*** RFC 6586 for deployment experiences using Stateful NAT64.
|
||||
*** RFC 7757 Explicit Address Mappings for Stateless IP/ICMP Translation - https://tools.ietf.org/html/rfc7757
|
||||
*** RFC 7915 IP/ICMP Translation Algorithm https://tools.ietf.org/html/rfc7915
|
||||
- Requires RFC 6144
|
||||
- MUST support one or more address mapping algorithms, which
|
||||
are defined in Section 6.
|
||||
- does not translate IPv6 extension headers except the Fragment Header.
|
||||
|
||||
|
||||
*** EAMT/Jool: https://www.jool.mx/en/eamt.html
|
||||
*** Solicited node multicast address https://en.wikipedia.org/wiki/Solicited-node_multicast_address
|
||||
*** Scapy / IPv6: https://www.idsv6.de/Downloads/IPv6PacketCreationWithScapy.pdf
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue