++ doc update ++ nat64_static / P4 begin

This commit is contained in:
Nico Schottelius 2019-03-14 14:05:17 +01:00
parent 81bf368279
commit 472a104e2b
3 changed files with 586 additions and 30 deletions

View File

@ -98,12 +98,21 @@
| | * Send recap / mail next week | |
| | * week after 1130 Thursday | |
| | | |
| 2019-03-07 | ICMP6 checksumming works!!! | x |
| | -> more fields needed to be included! | |
| | | |
| 2019-03-08 | NAT64 1:1 table ICMP, ICMPv6 working | |
| 2019-03-13 | Tried/trying to get vagrant VM or P4* running on the notebook | |
| | | |
| 2019-03-14 | NAT64 static rewrite | |
| | - table support | |
| | - checksum not yet ported for translations | |
| | | |
| | | |
| 2019-03-30 | NAT64 1:1 table ICMP, ICMPv6 working | |
| | Will need some switch local ip addresses | |
| | | |
| | | |
| 2019-03-15 | NAT64 1:1 table TCP/UDP working | |
| 2019-04-12 | NAT64 1:1 table TCP/UDP working | |
| | | |
| | | |
| 2019-03-29 | Jool SIIT / range / offset support https://www.jool.mx/en/run-vanilla.html | |
@ -145,6 +154,440 @@
*** DONE Setup P4 base / structure
*** DONE Create minimal controller for populating tables
*** DONE Checkout / review egress settings
*** TODO Get p4 VM / vagrant running
**** DONE install libvirtd-daemon
**** DONE install ebtables
**** DONE install dnsmasq
*** TODO Get p4c & co. running on the notebook
**** DONE mininet via packages
**** DONE p4c
(virtualenv-with-site) [17:43] line:build% make install
[ 0%] Built target update_includes
[ 0%] Built target linkgraphs
[ 0%] Built target linkbmv2
[ 0%] Built target linkp4cebpf
[ 0%] Built target linkp4test
[ 1%] Built target p4c_driver
[ 4%] Built target p4ctoolkit
[ 12%] Built target irgenerator
[ 14%] Generating IR class files
[ 14%] Built target genIR
[ 18%] Built target ir
[ 18%] Built target mkv1dirs
[ 18%] Built target mkp4dirs
[ 45%] Built target frontend
[ 51%] Built target midend
[ 51%] Built target mkP4configdir
[ 64%] Built target controlplane
[ 68%] Built target bmv2backend
[ 75%] Built target p4c-bm2-psa
[ 81%] Built target p4c-bm2-ss
[ 84%] Built target p4c-ebpf
[ 87%] Built target p4test
[ 90%] Built target p4c-graphs
[ 93%] Built target gtest
[100%] Built target gtestp4c
Install the project...
-- Install configuration: "RELEASE"
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include/p4d2model.p4
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include/v1model.p4
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include/core.p4
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include/psa.p4
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4c
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/driver.py
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/util.py
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/config.py
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/__init__.py
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/main.py
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/p4c.bmv2.cfg
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4c_src/p4c.ebpf.cfg
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4c-bm2-ss
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4c-bm2-psa
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4c-ebpf
-- Up-to-date: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/share/p4c/p4include/ebpf_model.p4
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4test
-- Installing: /home/nico/vcs/master-thesis/support/p4c-installation/bin/p4c-graphs
(virtualenv-with-site) [0:42] line:build% ls /home/nico/vcs/master-thesis/support/p4c-installation/bin/
p4c p4c-bm2-psa p4c-bm2-ss p4c-ebpf p4c-graphs p4test
(virtualenv-with-site) [0:42] line:build%
**** TODO install behavioral-model
**** TODO Debug / reread the virtualbox script from the lecture
**** TODO Get p4c installed / running
https://github.com/p4lang/p4c
***** log
[16:31] line:p4c% git submodule update --init --recursive
root@line:~# apt install bison \
> build-essential \
> cmake \
> flex \
> g++ \
> libboost-dev \
> libboost-graph-dev \
> libboost-iostreams1.58-dev \
> libfl-dev \
> libgc-dev \
> libgmp-dev \
> pkg-config \
> python-ipaddr \
> python-pip \
> python-setuptools \
> tcpdump
Reading package lists... Done
Building dependency tree
Reading state information... Done
Package libboost-iostreams1.58-dev is not available, but is referred to by another package.
This may mean that the package is missing, has been obsoleted, or
is only available from another source
E: Package 'libboost-iostreams1.58-dev' has no installation candidate
root@line:~# apt install libpcap-dev libelf-dev llvm clang iproute2 net-tools
[16:33] line:p4c% . ~/vcs/master-thesis/support/virtualenv2/bin/activate
(virtualenv2) [16:35] line:p4c% pip install tenjin \
pyroute2 \
ply==3.8 \
scapy==2.4.0
***** Using newer version of libboost-iostreams1.58-dev
***** buidling
(virtualenv2) [16:36] line:p4c% mkdir build && \
cd build && \
cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3'
***** missing protobuf
(virtualenv2) [16:36] line:p4c% mkdir build && \
cd build && \
cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3'
cd build && \
cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3'-- The C compiler identification is GNU 8.3.0
-- The CXX compiler identification is GNU 8.3.0
-- Check for working C compiler: /usr/bin/cc
-- Check for working C compiler: /usr/bin/cc -- works
-- Detecting C compiler ABI info
-- Detecting C compiler ABI info - done
-- Detecting C compile features
-- Detecting C compile features - done
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Detecting CXX compile features
-- Detecting CXX compile features - done
-- Found PythonInterp: /home/nico/vcs/master-thesis/support/virtualenv2/bin/python (found version "2.7.16")
-- Found FLEX: /usr/bin/flex (found version "2.6.4")
-- Found BISON: /usr/bin/bison (found suitable version "3.3.2", minimum required is "3.0.2")
CMake Error at /usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:137 (message):
Could NOT find Protobuf (missing: Protobuf_INCLUDE_DIR) (Required is at
least version "3.0.0")
Call Stack (most recent call first):
/usr/share/cmake-3.13/Modules/FindPackageHandleStandardArgs.cmake:378 (_FPHSA_FAILURE_MESSAGE)
/usr/share/cmake-3.13/Modules/FindProtobuf.cmake:595 (FIND_PACKAGE_HANDLE_STANDARD_ARGS)
CMakeLists.txt:81 (find_package)
-- Configuring incomplete, errors occurred!
See also "/home/nico/vcs/master-thesis/support/p4c/build/CMakeFiles/CMakeOutput.log".
See also "/home/nico/vcs/master-thesis/support/p4c/build/CMakeFiles/CMakeError.log".
(virtualenv2) [16:36] line:build% apt search protobuf
(virtualenv2) [16:38] line:build% sudo apt install python-protobuf protobuf-compiler
(virtualenv2) [16:38] line:build% cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3'
-- Found Protobuf: /usr/lib/x86_64-linux-gnu/libprotobuf.a;-lpthread (found suitable version "3.6.1", minimum required is "3.0.0")
-- Boost version: 1.67.0
-- Found the following Boost libraries:
-- iostreams
-- regex
-- Found LibGc: /usr/lib/x86_64-linux-gnu/libgccpp.so (found suitable version "7.6.4", minimum required is "7.2.0")
-- Found Threads: TRUE
-- Found LibGmp: /usr/lib/x86_64-linux-gnu/libgmpxx.so
-- Looking for clock_gettime in rt
-- Looking for clock_gettime in rt - found
-- Looking for execinfo.h
-- Looking for execinfo.h - found
-- Looking for ucontext.h
-- Looking for ucontext.h - found
-- Looking for C++ include cxxabi.h
-- Looking for C++ include cxxabi.h - found
-- Looking for memchr
-- Looking for memchr - found
-- Looking for pipe2
-- Looking for pipe2 - found
-- Looking for GC_print_stats
-- Looking for GC_print_stats - found
-- Found PY_difflib: /usr/lib/python2.7/difflib.pyc
-- Found PY_shutil: /usr/lib/python2.7/shutil.pyc
-- Found PY_tempfile: /usr/lib/python2.7/tempfile.pyc
-- Found PY_subprocess: /usr/lib/python2.7/subprocess.pyc
-- Found PY_re: /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/re.pyc
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE)
-- Program 'simple_switch_CLI' (https://github.com/p4lang/behavioral-model.git) not found;
Searched .
Will not run BMv2 tests. (missing: SIMPLE_SWITCH SIMPLE_SWITCH_CLI)
-- Program 'psa_switch_CLI' (https://github.com/p4lang/behavioral-model.git) not found;
Searched .
Will not run PSA BMv2 tests. (missing: PSA_SWITCH PSA_SWITCH_CLI)
-- Performing Test _HAVE_OPTION_Wall_
-- Performing Test _HAVE_OPTION_Wall_ - Success
-- Performing Test _HAVE_OPTION_Wextra_
-- Performing Test _HAVE_OPTION_Wextra_ - Success
-- Performing Test _HAVE_OPTION_Wnooverloadedvirtual_
-- Performing Test _HAVE_OPTION_Wnooverloadedvirtual_ - Success
-- Performing Test _HAVE_OPTION_Wnodeprecated_
-- Performing Test _HAVE_OPTION_Wnodeprecated_ - Success
-- Using the GNU gold linker.
-- Available extensions
CMake Warning at backends/bmv2/CMakeLists.txt:193 (MESSAGE):
BMv2 simple switch is not available, not adding v1model BMv2 tests
CMake Warning at backends/bmv2/CMakeLists.txt:199 (MESSAGE):
BMv2 PSA switch is not available, not adding PSA BMv2 tests
-- Found LLVM 7.0.1
-- Added 14 tests to 'ebpf-kernel' (0 xfails)
-- Added 14 tests to 'ebpf-bcc' (0 xfails)
-- Added 14 tests to 'ebpf' (0 xfails)
-- Added 161 tests to 'p4' (0 xfails)
-- Added 506 tests to 'p4' (4 xfails)
-- Added 204 tests to 'p14_to_16' (0 xfails)
-- CTest parallel: -j 8
-- Configuring done
-- Generating done
-- Build files have been written to: /home/nico/vcs/master-thesis/support/p4c/build
***** testing in build directory: works
/home/nico/vcs/master-thesis/support/p4c/build
***** Changing install path
CMAKE_INSTALL_PREFIX
cmake .. '-DCMAKE_CXX_FLAGS:STRING=-O3' -DCMAKE_INSTALL_PREFIX=/home/nico/vcs/master-thesis/support/p4c-installation
**** TODO Get p4utils running (?)
**** log of python, p4app, p4c installation
[16:16] line:support% virtualenv virtualenv2
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/nico/vcs/master-thesis/support/virtualenv2/bin/python2
Also creating executable in /home/nico/vcs/master-thesis/support/virtualenv2/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
[16:16] line:support%
[16:18] line:p4-utils-nsg% . ~/vcs/master-thesis/support/virtualenv2/bin/activate
(virtualenv2) [16:19] line:p4-utils-nsg% which pip
/home/nico/vcs/master-thesis/support/virtualenv2/bin/pip
(virtualenv2) [16:19] line:p4-utils-nsg%
***** pip install -e .
****** Missing python development headers
copying psutil/tests/test_memory_leaks.py -> build/lib.linux-x86_64-2.7/psutil/tests
running build_ext
building 'psutil._psutil_linux' extension
creating build/temp.linux-x86_64-2.7
creating build/temp.linux-x86_64-2.7/psutil
x86_64-linux-gnu-gcc -pthread -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fno-strict-aliasing -Wdate-time -D_FORTIFY_SOURCE=2 -g -fdebug-prefix-map=/build/python2.7-UboFgi/python2.7-2.7.16~rc1=. -fstack-protector-strong -Wformat -Werror=format-security -fPIC -DPSUTIL_POSIX=1 -DPSUTIL_VERSION=561 -DPSUTIL_LINUX=1 -I/usr/include/python2.7 -c psutil/_psutil_common.c -o build/temp.linux-x86_64-2.7/psutil/_psutil_common.o
psutil/_psutil_common.c:9:10: fatal error: Python.h: No such file or directory
#include <Python.h>
^~~~~~~~~~
compilation terminated.
error: command 'x86_64-linux-gnu-gcc' failed with exit status 1
root@line:~# apt install python2-dev
****** installing, but missing mininet.net
(virtualenv2) [16:21] line:p4-utils-nsg% pip install -e "."
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Obtaining file:///home/nico/vcs/master-thesis/support/p4-utils-nsg
Requirement already satisfied: setuptools in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from p4utils==0.2) (40.8.0)
Requirement already satisfied: networkx in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from p4utils==0.2) (2.2)
Requirement already satisfied: ipaddress in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from p4utils==0.2) (1.0.22)
Requirement already satisfied: scapy in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from p4utils==0.2) (2.4.2)
Requirement already satisfied: psutil in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from p4utils==0.2) (5.6.1)
Requirement already satisfied: decorator>=4.3.0 in /home/nico/vcs/master-thesis/support/virtualenv2/lib/python2.7/site-packages (from networkx->p4utils==0.2) (4.3.2)
Installing collected packages: p4utils
Found existing installation: p4utils 0.2
Not uninstalling p4utils at /home/nico/vcs/master-thesis/support/p4-utils-nsg, outside environment /home/nico/vcs/master-thesis/support/virtualenv2
Can't uninstall 'p4utils'. No files were found to uninstall.
Running setup.py develop for p4utils
Successfully installed p4utils
(virtualenv2) [16:21] line:p4-utils-nsg%
**** log Try2: using virtualenv that uses site packages for using mininet
[17:13] line:support% virtualenv --system-site-packages virtualenv-with-site
Running virtualenv with interpreter /usr/bin/python2
New python executable in /home/nico/vcs/master-thesis/support/virtualenv-with-site/bin/python2
Also creating executable in /home/nico/vcs/master-thesis/support/virtualenv-with-site/bin/python
Installing setuptools, pkg_resources, pip, wheel...done.
[17:23] line:support% . ./virtualenv-with-site/bin/activate
(virtualenv-with-site) [17:23] line:support%
(virtualenv-with-site) [17:23] line:p4-utils-nsg% pip install -e .
(virtualenv-with-site) [17:23] line:p4-utils-nsg% pip install -e .
DEPRECATION: Python 2.7 will reach the end of its life on January 1st, 2020. Please upgrade your Python as Python 2.7 won't be maintained after that date. A future version of pip will drop support for Python 2.7.
Obtaining file:///home/nico/vcs/master-thesis/support/p4-utils-nsg
Requirement already satisfied: setuptools in /home/nico/vcs/master-thesis/support/virtualenv-with-site/lib/python2.7/site-packages (from p4utils==0.2) (40.8.0)
Collecting networkx (from p4utils==0.2)
Requirement already satisfied: ipaddress in /usr/lib/python2.7/dist-packages (from p4utils==0.2) (1.0.17)
Requirement already satisfied: scapy in /usr/lib/python2.7/dist-packages (from p4utils==0.2) (2.4.0)
Collecting psutil (from p4utils==0.2)
Collecting decorator>=4.3.0 (from networkx->p4utils==0.2)
Using cached https://files.pythonhosted.org/packages/f1/cd/7c8240007e9716b14679bc217a1baefa4432aa30394f7e2ec40a52b1a708/decorator-4.3.2-py2.py3-none-any.whl
Installing collected packages: decorator, networkx, psutil, p4utils
Running setup.py develop for p4utils
Successfully installed decorator-4.3.2 networkx-2.2 p4utils psutil-5.6.1
(virtualenv-with-site) [17:23] line:p4-utils-nsg% which p4run
/home/nico/vcs/master-thesis/support/virtualenv-with-site/bin/p4run
(virtualenv-with-site) [17:24] line:p4-utils-nsg%
p4c --target bmv2 --arch v1model --std p4-16 "../p4src/static-mapping.p4" -o "/home/nico/vcs/master-thesis/p4src"
../p4src/static-mapping.p4(80): [--Wwarn=unused] warning: Table ndp_answer is not used; removing
table ndp_answer {
^^^^^^^^^^
../p4src/static-mapping.p4(96): [--Wwarn=unused] warning: Table port2mcast is not used; removing
table port2mcast {
^^^^^^^^^^
../p4src/static-mapping.p4(111): [--Wwarn=unused] warning: Table addr2mcast is not used; removing
table addr2mcast {
^^^^^^^^^^
../p4src/static-mapping.p4(128): [--Wwarn=unused] warning: Table ndp is not used; removing
table ndp {
^^^
Switch port mapping:
s1: 1:h1 2:h2 3:h3 4:h4 5:sw-cpu
**** Trying local vagrant VM
***** libvirtd missing user
root@line:~# libvirtd
2019-03-12 16:39:14.556+0000: 20235: info : libvirt version: 5.0.0, package: 1 (Guido Günther <agx@sigxcpu.org> Wed, 16 Jan 2019 10:31:33 +0100)
2019-03-12 16:39:14.556+0000: 20235: info : hostname: line
2019-03-12 16:39:14.556+0000: 20235: error : virGetUserID:1038 : invalid argument: Failed to parse user 'libvirt-qemu'
2019-03-12 16:39:14.556+0000: 20235: error : virStateInitialize:662 : Initialization of QEMU state driver failed: invalid argument: Failed to parse user 'libvirt-qemu'
2019-03-12 16:39:14.556+0000: 20235: error : daemonRunStateInit:799 : Driver state initialization failed
root@line:~# useradd -m libvirt-qemu
root@line:~#
root@line:~# strace -fF -e open libvirtd
strace: deprecated option -F ignored
strace: Process 20602 attached
strace: Process 20603 attached
strace: Process 20604 attached
strace: Process 20605 attached
strace: Process 20606 attached
strace: Process 20607 attached
strace: Process 20608 attached
strace: Process 20609 attached
strace: Process 20610 attached
strace: Process 20611 attached
strace: Process 20612 attached
strace: Process 20613 attached
strace: Process 20614 attached
strace: Process 20615 attached
strace: Process 20616 attached
strace: Process 20617 attached
strace: Process 20618 attached
[pid 20618] +++ exited with 0 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20618, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20619 attached
[pid 20619] +++ exited with 0 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20619, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20620 attached
strace: Process 20621 attached
strace: Process 20622 attached
[pid 20622] +++ exited with 0 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20622, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20623 attached
[pid 20623] +++ exited with 0 +++
[pid 20621] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20623, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20624 attached
[pid 20624] +++ exited with 0 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20624, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20625 attached
[pid 20625] +++ exited with 0 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20625, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20626 attached
[pid 20626] +++ exited with 0 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20626, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20627 attached
[pid 20627] +++ exited with 0 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20627, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20628 attached
[pid 20621] +++ exited with 0 +++
strace: Process 20629 attached
strace: Process 20630 attached
strace: Process 20631 attached
strace: Process 20632 attached
strace: Process 20633 attached
[pid 20631] +++ exited with 0 +++
[pid 20633] +++ exited with 1 +++
[pid 20630] +++ exited with 0 +++
[pid 20628] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20630, si_uid=1001, si_status=0, si_utime=0, si_stime=0} ---
[pid 20632] +++ exited with 1 +++
[pid 20629] +++ exited with 1 +++
[pid 20628] +++ exited with 1 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20628, si_uid=1001, si_status=1, si_utime=1, si_stime=0} ---
2019-03-12 16:40:53.098+0000: 20617: info : libvirt version: 5.0.0, package: 1 (Guido Günther <agx@sigxcpu.org> Wed, 16 Jan 2019 10:31:33 +0100)
2019-03-12 16:40:53.098+0000: 20617: info : hostname: line
2019-03-12 16:40:53.098+0000: 20617: error : virQEMUCapsNewForBinaryInternal:4681 : internal error: Failed to probe QEMU binary with QMP: qemu-system-i386: cannot create PID file: Cannot open pid file: Permission denied
2019-03-12 16:40:53.098+0000: 20617: warning : virQEMUCapsLogProbeFailure:4628 : Failed to probe capabilities for /usr/bin/qemu-system-i386: internal error: Failed to probe QEMU binary with QMP: qemu-system-i386: cannot create PID file: Cannot open pid file: Permission denied
strace: Process 20634 attached
strace: Process 20635 attached
strace: Process 20636 attached
strace: Process 20637 attached
strace: Process 20638 attached
strace: Process 20639 attached
[pid 20637] +++ exited with 0 +++
[pid 20639] +++ exited with 1 +++
[pid 20636] +++ exited with 0 +++
[pid 20634] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20636, si_uid=1001, si_status=0, si_utime=0, si_stime=0} ---
[pid 20638] +++ exited with 1 +++
[pid 20635] +++ exited with 1 +++
[pid 20634] +++ exited with 1 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20634, si_uid=1001, si_status=1, si_utime=1, si_stime=0} ---
2019-03-12 16:40:53.145+0000: 20617: error : virQEMUCapsNewForBinaryInternal:4681 : internal error: Failed to probe QEMU binary with QMP: qemu-system-x86_64: cannot create PID file: Cannot open pid file: Permission denied
2019-03-12 16:40:53.145+0000: 20617: warning : virQEMUCapsLogProbeFailure:4628 : Failed to probe capabilities for /usr/bin/qemu-system-x86_64: internal error: Failed to probe QEMU binary with QMP: qemu-system-x86_64: cannot create PID file: Cannot open pid file: Permission denied
strace: Process 20640 attached
[pid 20640] +++ exited with 0 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20640, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20641 attached
[pid 20641] +++ exited with 0 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20641, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
strace: Process 20642 attached
[pid 20642] +++ exited with 2 +++
[pid 20601] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20642, si_uid=0, si_status=2, si_utime=0, si_stime=0} ---
strace: Process 20643 attached
[pid 20643] +++ exited with 0 +++
[pid 20617] --- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=20643, si_uid=0, si_status=0, si_utime=0, si_stime=0} ---
[pid 20617] +++ exited with 0 +++
[pid 20601] --- SIGWINCH {si_signo=SIGWINCH, si_code=SI_KERNEL} ---
^Cstrace: Process 20601 detached
strace: Process 20602 detached
strace: Process 20603 detached
strace: Process 20604 detached
strace: Process 20605 detached
strace: Process 20606 detached
strace: Process 20607 detached
strace: Process 20608 detached
strace: Process 20609 detached
strace: Process 20610 detached
strace: Process 20611 detached
strace: Process 20612 detached
strace: Process 20613 detached
strace: Process 20614 detached
strace: Process 20615 detached
strace: Process 20616 detached
strace: Process 20620 detached
**** Creating network
**** Adding hosts:
h1 h2 h3 h4
**** Adding switches:
Cannot find required executable simple_switch.
Please make sure that it is installed and available in your $PATH:
(/home/nico/vcs/master-thesis/support/virtualenv-with-site/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/home/nico/vcs/master-thesis/support/p4c/build/)
(virtualenv-with-site) root@line:/home/nico/vcs/master-thesis/p4app#
*** TODO Implement ICMP <-> ICMP6 translation
**** DONE Parse icmp
**** DONE Parse icmpv6
@ -202,10 +645,9 @@ multicast address of the target address."
***** If destination is within ff02::1:ff00:0/104, multicast
**** DONE Make switch answer icmp6 echo request for
**** TODO Make switch answer icmp echo request for
**** TODO Introduce mixed mode: switch: icmp6 echo reply, controller: NDP
**** DONE Introduce mixed mode: switch: icmp6 echo reply, controller: NDP
***** DONE try 1: reply seen, but checksum is incorrect
***** TODO try 2: analysing tagya checksumming code
***** DONE try 2: analysing tagya checksumming code
static uint16_t ip6_checksum(struct ip6 *ip6, uint32_t data_len, uint8_t proto)
{
uint32_t sum = 0;
@ -265,8 +707,6 @@ static int xlate_payload_4to6(struct pkt *p, struct ip6 *ip6)
p->icmp->cksum = ones_add(cksum, ~(129 - 0));
}
return 0;
**** DONE Add default route for v6 hosts
p4@ubuntu:~/master-thesis$ mx h1 ip -6 r
sudo: unable to resolve host ubuntu
@ -274,9 +714,11 @@ sudo: unable to resolve host ubuntu
fe80::/64 dev h1-eth0 proto kernel metric 256 pref medium
default via 2001:db8::42 dev h1-eth0 metric 1024 pref medium
p4@ubuntu:~/master-thesis$
**** TODO Add default route for v4 hosts
**** Implement IPv4 side handling
***** TODO Make switch answer icmp echo request for
***** TODO Add default route for v4 hosts
**** TODO Translate ipv6 --> ipv4 with a (freely programmable) prefix
***** TODO Insert prefix into switch
***** TODO Insert prefix into switch: v6_networks
***** TODO Implement the calculation
***** TODO Sketch the flow for session handling for icmp6 w/o packet loss
- switch receives icmp6 packet for known prefix
@ -608,7 +1050,7 @@ DEBUG:main:INCOMING: <Ether dst=33:33:ff:00:00:42 src=00:00:0a:00:00:01 type=0x
**** Requirements
*** Performance comparison
*** Feature/Functionality difference / overview / Challenges in P4
*** Feature/Functionality difference / overview / Challenges / limitations in P4
**** ICMP6: checksum over payload
- variable length, up to 65k
**** Synchronisation with the controller
@ -616,9 +1058,15 @@ DEBUG:main:INCOMING: <Ether dst=33:33:ff:00:00:42 src=00:00:0a:00:00:01 type=0x
- TYPE_CPU for ethernet
- Port ingress offset (9 vs. 16 bit)
**** Not included
- DNS64 - has already been solved in a different domain
**** (current) Limitations
***** No fragmentation support (yet)
***** No session handling (yet)
1:1 mappings. No (automatic) session.
***** IPv4 / IPv6 embedding
Currently offset based - probably not following the RFC!
***** No DNS64
has already been solved in a different domain - could even do
transparent / in network modification
*** References / Follow up
**** RFC 2460 IPv6 (Checksum https://tools.ietf.org/html/rfc2460#section-8.1)

View File

@ -46,7 +46,7 @@ class CpuHeader(Packet):
class L2Controller(object):
def __init__(self, sw_name):
# Command line mapping
self.modes = ['base', 'router']
self.modes = ['base', 'router', "range_router" ]
# Reverse maps the cpu header
self.task = dict(reversed(item) for item in cpu_fields.items())
@ -62,6 +62,7 @@ class L2Controller(object):
self.info['v4_mask'] = 24
self.info['v4_base'] = ipaddress.ip_network("10.0.0.0/8")
self.info['v4_gen'] = self.info['v4_base'].subnets(new_prefix=self.info['v4_mask'])
self.info['v4_nat64_map'] = ipaddress.ip_network("10.1.0.0/16")
self.info['switch_suffix'] = 0x42
self.info['nat64_nat_prefix'] = ipaddress.ip_network("64:ff9b::/96")
@ -78,6 +79,7 @@ class L2Controller(object):
)
self.v6_routes['router'] = self.v6_routes['base']
self.v6_routes['range_router'] = self.v6_routes['base']
self.v4_routes = {}
self.v4_routes[None] = []
@ -89,16 +91,34 @@ class L2Controller(object):
"port": port}
)
self.v4_routes['router'] = self.v4_routes['base']
self.v4_routes['range_router'] = self.v4_routes['base']
self.v6_addresses = {}
self.v6_addresses[None] = []
self.v6_addresses['base'] = []
self.v6_addresses['router'] = [ net['net'][self.info['switch_suffix']] for net in self.v6_routes['router'] ]
for mode in self.modes:
self.v6_addresses[mode] = [ net['net'][self.info['switch_suffix']] for net in self.v6_routes[mode] ]
self.v4_addresses = {}
self.v4_addresses[None] = []
self.v4_addresses['base'] = []
self.v4_addresses['router'] = [ net['net'][self.info['switch_suffix']] for net in self.v4_routes['router'] ]
for mode in self.modes:
self.v4_addresses[mode] = [ net['net'][self.info['switch_suffix']] for net in self.v4_routes[mode] ]
self.nat64_map = {}
# init default
for mode in self.modes:
self.nat64_map[mode] = []
# specific settings
for mode in ["range_router"]:
for net in self.v6_routes[mode]:
v6_net = net
v4_net = self.info['v6_nat64_map'].next()
self.nat64_map[mode].append({
"v6_network": v6_net,
"v4_network": v4_net,
"v6_nat64_prefix": self.info['nat64_nat_prefix']
})
self.init_boilerplate(sw_name)
@ -189,6 +209,22 @@ class L2Controller(object):
self.controller.table_add("v6_addresses", "controller_reply", [str(another_addr_ns)], [str(self.task['ICMP6_NS'])])
self.controller.table_add("v6_addresses", "icmp6_echo_reply", [str(another_addr)])
for nat64map in self.nat64_map[self.mode]:
self.static_nat64_mapping(**nat64map)
def static_nat64_mapping(self, v6_nat64_prefix, v6_network, v4_network):
nat64_prefix = str(v6_nat64_prefix)
net_ipv6 = str(v6_network)
net_ipv4 = str(v4_network)
log.info("NAT64 map: {} -> {} -> {}".format(v6_nat64_prefix, v6_network, v4_network))
self.controller.table_add("v6_networks", "nat64_static", nat64_prefix, [net_ipv6], [net_ipv4])
self.controller.table_add("v4_networks", "nat46_static", [net_ipv4], [net_ipv6])
def config_hosts(self):
""" Assumptions:
- all routes are networks (no /128 v6 or /32 v4
@ -204,9 +240,18 @@ class L2Controller(object):
self.config_v6_host(host, str(net), str(ipaddr), dev, router)
for v4route in self.v4_routes[self.mode]:
host = "h{}".format(v4route['port'])
dev = "{}-eth0".format(host)
net = v4route['net']
ipaddr = "{}/{}".format(net[1],net.prefixlen)
router = str(net[self.info['switch_suffix']])
self.config_v4_host(host, str(net), str(ipaddr), dev, router)
@staticmethod
def config_v6_host(host, net, ipaddr, dev, router=None):
log.debug("Config host: {} {}->{} on {}".format(host, net, ipaddr, dev))
log.debug("Config v6 host: {} {}->{} on {}".format(host, net, ipaddr, dev))
subprocess.call(["mx", host, "ip", "addr", "flush", "dev", dev])
for v6dev in [ "lo", "default", "all", dev ]:
@ -216,10 +261,18 @@ class L2Controller(object):
subprocess.call(["mx", host, "ip", "link", "set", dev, "down"])
subprocess.call(["mx", host, "ip", "link", "set", dev, "up"])
# Now add global address
subprocess.call(["mx", host, "ip", "addr", "add", ipaddr, "dev", dev])
# add default gw if in router mode
if router:
subprocess.call(["mx", host, "ip", "route", "add", "default", "via", router])
@staticmethod
def config_v4_host(host, net, ipaddr, dev, router=None):
log.debug("Config v4 host: {} {}->{} on {}".format(host, net, ipaddr, dev))
subprocess.call(["mx", host, "ip", "addr", "flush", "dev", dev])
subprocess.call(["mx", host, "ip", "addr", "add", ipaddr, "dev", dev])
if router:
subprocess.call(["mx", host, "ip", "route", "add", "default", "via", router])

View File

@ -66,15 +66,68 @@ control MyIngress(inout headers hdr,
meta.cast_length = (bit<32>) hdr.ipv6.payload_length;
}
/* this needs SESSIONS!!
- icmp6: (src addr, dst addr, ID??, )
- tcp: (src port, dst port, dst_addr, src addr)
- udp: (src port, dst port, dst_addr, src addr)
*/
// action nat64_static(ipv4_addr_t nataddr, ipv6_addr_t nat64_prefix) {
// hdr.ipv4.dst_addr = hdr.ipv6.dst_addr - nat64_prefix;
// hdr.ipv4.dst_addr = hdr.ipv6.dst_addr - nat64_prefix;
// }
action nat64_static(ipv4_addr_t v6_network, ipv4_addr_t v4_network) {
ipv6_addr_t src_offset = hdr.ipv6.src_addr - v6_network;
ipv4_addr_t src = v4_network + (ipv4_addr_t) src_offset;
ipv4_addr_t dst_offset = hdr.ipv6.dst_addr - LPM_MATCH_NETWORK_ADDRESS_IN_TABLE;
nat64_generic(src, dst);
}
action nat46_static(ipv4_addr_t v4_network, ipv6_addr_t nat64_prefix ) {
ipv6_addr_t src = hdr.ipv4.dst_addr - v4_network;
ipv6_addr_t src = hdr.ipv4.dst_addr - v4_network;
nat46_generic(src, dst);
}
/* NAT64 protocol unspecific changes */
action nat64_generic(ipv4_addr_t src, ipv4_addr_t dst) {
/* Stuff that might need to be fixed */
hdr.ipv4.version = (bit<4>)4;
hdr.ipv4.diff_serv = (bit<6>)0; // no ToS
hdr.ipv4.ecn = (bit<2>)0; // unsupported
hdr.ipv4.ihl = (bit<4>) 5; // internet header length -- needs to be dynamic!
hdr.ipv4.totalLen = (bit<16>) hdr.ipv6.payload_length + 5; // should probably also dynamic
hdr.ipv4.identification = (bit<16>) 0; // no support for fragments
hdr.ipv4.flags = (bit<3>) 0; // DF bit and more fragments, unsupported ATM
hdr.ipv4.fragOffset = (bit<13>) 0; // 0 as there are no fragments
/* Stuff that should be fine */
hdr.ethernet.ethertype = TYPE_IPV4;
hdr.ipv4.dst_addr = dst;
hdr.ipv4.src_addr = src;
hdr.ipv4.ttl = hdr.ipv6.hop_limit;
hdr.ipv4.protocol = hdr.ipv6.next_header;
hdr.ipv6.setInvalid();
hdr.ipv4.setValid();
}
/* NAT46: protocol unspecific changes */
action nat46_generic(ipv6_addr_t src, ipv6_addr_t dst) {
hdr.ethernet.ethertype=TYPE_IPV6;
hdr.ipv6.dst_addr = dst;
hdr.ipv6.src_addr = src;
hdr.ipv6.version = (bit<4>)6;
hdr.ipv6.traffic_class = (bit<8>) hdr.ipv4.diff_serv;
hdr.ipv6.flow_label = (bit<20>) 0;
hdr.ipv6.payload_length = (bit<16>) hdr.ipv4.totalLen - 20;
hdr.ipv6.next_header = hdr.ipv4.protocol;
hdr.ipv6.hop_limit = hdr.ipv4.ttl;
hdr.ipv4.setInvalid();
hdr.ipv6.setValid();
}
/********************** Reply to NDP for US ***********************************/
table ndp_answer {
@ -185,6 +238,7 @@ control MyIngress(inout headers hdr,
set_egress_port;
controller_debug;
controller_reply;
nat64_static;
NoAction;
}
size = ROUTING_TABLE_SIZE;
@ -197,6 +251,7 @@ control MyIngress(inout headers hdr,
}
actions = {
set_egress_port;
nat46_static;
NoAction;
}
size = ROUTING_TABLE_SIZE;