create P4 basis + smaller updates
Signed-off-by: Nico Schottelius <nico@nico-notebook.schottelius.org>
This commit is contained in:
parent
7f904bdcef
commit
b6bd281c3a
8 changed files with 151 additions and 3 deletions
9
doc/.gitignore
vendored
Normal file
9
doc/.gitignore
vendored
Normal file
|
@ -0,0 +1,9 @@
|
|||
*.pdf
|
||||
plan.tex
|
||||
*.aux
|
||||
*.glo
|
||||
*.lof
|
||||
*.log
|
||||
*.lot
|
||||
*.out
|
||||
*.toc
|
BIN
doc/Thesis.pdf
BIN
doc/Thesis.pdf
Binary file not shown.
18
doc/plan.org
18
doc/plan.org
|
@ -104,10 +104,22 @@ user@T:~# iptables -t mangle -A PREROUTING \
|
|||
**** Cisco (?)
|
||||
*** P4 based implementation
|
||||
TBD
|
||||
**** Static mappings
|
||||
- need table
|
||||
- need tcp & udp translation
|
||||
**** General
|
||||
- IPv6 subnet 2001:db8::/32
|
||||
- IPv6 hosts are in 2001:db8:6::/64
|
||||
- IPv6 default router (::/0) is 2001:db8:6::42/64
|
||||
- IPv4 mapped Internet "NAT64 prefix" 2001:db8:4444::/96 (should
|
||||
go into a table)
|
||||
- IPv4 hosts are in 10.0.4.0/24
|
||||
- IPv6 in IPv4 mapped hosts are in 10.0.6.0/24
|
||||
- IPv4 default router = 10.0.0.42
|
||||
|
||||
**** Static mappings
|
||||
- likely need table(s)
|
||||
- need tcp & udp translation
|
||||
***** Hosts
|
||||
****** Left side: IPv6
|
||||
****** Right side: IPv4
|
||||
**** Requirements
|
||||
-
|
||||
*** Performance comparison
|
||||
|
|
37
p4app/static-mapping.sh
Normal file
37
p4app/static-mapping.sh
Normal file
|
@ -0,0 +1,37 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -x
|
||||
|
||||
# cleanup
|
||||
for i in 1 2 3 4; do
|
||||
mx h$i "ip addr flush dev $dev"
|
||||
done
|
||||
|
||||
# host 1/2+42 need NDP for reaching themselves
|
||||
for i in 1 2; do
|
||||
dev="h$i-eth0"
|
||||
# add and enable ipv6
|
||||
mx h$i "sysctl net.ipv6.conf.{lo,h$i-eth0}.disable_ipv6=0"
|
||||
mx h$i "ip addr add 2001:db8:6::$i/64 dev $dev"
|
||||
mx h$i "ip -6 route add default via 2001:db8:6::42"
|
||||
|
||||
# add neighbors
|
||||
for j in 1 2 42; do
|
||||
mx h$i "ip -6 neigh add 2001:db8:6::${j} dev $dev lladdr 00:00:0a:00:00:0${j}"
|
||||
done
|
||||
done
|
||||
|
||||
# host 3/4 need ARP, also need access to .42 (virtual IP)
|
||||
for i in 3 4; do
|
||||
dev="h$i-eth0"
|
||||
mx h$i "ip addr add 10.0.0.$i/24 dev $dev"
|
||||
|
||||
# add arp
|
||||
for j in 1 2 42; do
|
||||
mx h$i "ip neigh add 10.0.0.${j} dev $dev lladdr 00:00:0a:00:00:${j}"
|
||||
done
|
||||
done
|
||||
|
||||
for i in 1 2 3 4; do
|
||||
mx h$i "ip neigh show"
|
||||
done
|
28
p4src/checksums.p4
Normal file
28
p4src/checksums.p4
Normal file
|
@ -0,0 +1,28 @@
|
|||
/* -*- P4_16 -*- */
|
||||
#ifndef CHECKSUMS_P4
|
||||
#define CHECKSUMS_P4
|
||||
|
||||
#include <core.p4>
|
||||
#include <v1model.p4>
|
||||
|
||||
#include "headers.p4"
|
||||
|
||||
/*************************************************************************
|
||||
************* C H E C K S U M V E R I F I C A T I O N *************
|
||||
*************************************************************************/
|
||||
|
||||
control MyVerifyChecksum(inout headers hdr, inout metadata meta) {
|
||||
apply {}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
************** C H E C K S U M C O M P U T A T I O N **************
|
||||
*************************************************************************/
|
||||
|
||||
control MyComputeChecksum(inout headers hdr, inout metadata meta) {
|
||||
apply {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
#endif
|
|
@ -14,6 +14,7 @@ typedef bit<9> port_t;
|
|||
const bit<16> TYPE_IPV4 = 0x0800;
|
||||
const bit<16> TYPE_IPV6 = 0x86DD;
|
||||
const bit<8> TYPE_TCP = 6;
|
||||
const bit<8> TCP_SEQ_LEN = 4;
|
||||
|
||||
|
||||
header ethernet_t {
|
||||
|
|
12
p4src/settings.p4
Normal file
12
p4src/settings.p4
Normal file
|
@ -0,0 +1,12 @@
|
|||
/* -*- P4_16 -*- */
|
||||
/* table sizes, register widths, and such */
|
||||
#ifndef SETTINGS_P4
|
||||
#define SETTINGS_P4
|
||||
|
||||
#include <core.p4>
|
||||
#include <v1model.p4>
|
||||
|
||||
#define THE_ANSWER_TO_LIFE_THE_UNIVERSE_AND_EVERYTHING 42
|
||||
|
||||
|
||||
#endif
|
49
p4src/static-mapping.p4
Normal file
49
p4src/static-mapping.p4
Normal file
|
@ -0,0 +1,49 @@
|
|||
/* -*- P4_16 -*- */
|
||||
#include <core.p4>
|
||||
#include <v1model.p4>
|
||||
|
||||
#include "headers.p4"
|
||||
#include "parsers.p4"
|
||||
#include "checksums.p4"
|
||||
#include "settings.p4"
|
||||
|
||||
|
||||
/*************************************************************************
|
||||
************** I N G R E S S P R O C E S S I N G *******************
|
||||
*************************************************************************/
|
||||
|
||||
control MyIngress(inout headers hdr,
|
||||
inout metadata meta,
|
||||
inout standard_metadata_t standard_metadata) {
|
||||
|
||||
apply {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
**************** E G R E S S P R O C E S S I N G *******************
|
||||
*************************************************************************/
|
||||
|
||||
control MyEgress(inout headers hdr,
|
||||
inout metadata meta,
|
||||
inout standard_metadata_t standard_metadata) {
|
||||
apply {
|
||||
/* set tcp header valid after modifying it -- keep this in mind*/
|
||||
// hdr.tcp.setValid();
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
/*************************************************************************
|
||||
*********************** S W I T C H *******************************
|
||||
*************************************************************************/
|
||||
|
||||
V1Switch(
|
||||
MyParser(),
|
||||
MyVerifyChecksum(),
|
||||
MyIngress(),
|
||||
MyEgress(),
|
||||
MyComputeChecksum(),
|
||||
MyDeparser()
|
||||
) main;
|
Loading…
Reference in a new issue