82 lines
2.1 KiB
Markdown
82 lines
2.1 KiB
Markdown
# etherip-kmod
|
|
|
|
Out-of-tree Linux kernel module for RFC3378 EtherIP over IPv6 endpoints.
|
|
|
|
The module registers a rtnetlink link kind named `etherip6`. A companion
|
|
`etherip6ctl` helper is included because stock iproute2 does not know how to
|
|
encode this module's private tunnel attributes.
|
|
|
|
## Build
|
|
|
|
On Arch Linux, install headers matching the kernel you will load into:
|
|
|
|
```sh
|
|
sudo pacman -S linux-headers
|
|
make
|
|
```
|
|
|
|
If you need to build against a specific headers tree:
|
|
|
|
```sh
|
|
make KDIR=/usr/lib/modules/$(uname -r)/build
|
|
```
|
|
|
|
## Load
|
|
|
|
```sh
|
|
sudo insmod etherip6.ko
|
|
```
|
|
|
|
## Create a Tunnel
|
|
|
|
```sh
|
|
sudo ./etherip6ctl add eip0 local 2001:db8:1::1 remote 2001:db8:1::2
|
|
sudo ip link set eip0 up
|
|
sudo ip addr add 192.0.2.1/30 dev eip0
|
|
```
|
|
|
|
For link-local IPv6 endpoints, specify the egress interface:
|
|
|
|
```sh
|
|
sudo ./etherip6ctl add eip0 local fe80::1 remote fe80::2 link eth0
|
|
```
|
|
|
|
Delete the device with:
|
|
|
|
```sh
|
|
sudo ./etherip6ctl del eip0
|
|
```
|
|
|
|
## Fragmentation
|
|
|
|
The transmit path permits local IPv6 fragmentation for encapsulated EtherIP
|
|
packets that exceed the outer path MTU. This lets a larger inner Ethernet
|
|
frame be split into multiple outer IPv6 fragments by the local host.
|
|
|
|
The device default MTU is 1500, but the module allows an overlay MTU up to
|
|
9000. For example, with a 1500-byte underlay and a 9000-byte overlay:
|
|
|
|
```sh
|
|
sudo ip link set eip0 mtu 9000
|
|
```
|
|
|
|
An inner 9000-byte payload is carried as a 9014-byte Ethernet frame, plus the
|
|
2-byte EtherIP header and 40-byte outer IPv6 header. The local IPv6 stack
|
|
fragments that outer packet before transmission, and the peer must reassemble
|
|
the IPv6 fragments before EtherIP decapsulation.
|
|
|
|
You can still set a smaller tunnel MTU when you want to avoid IPv6 fragments:
|
|
|
|
```sh
|
|
sudo ip link set eip0 mtu 1444
|
|
```
|
|
|
|
For a 1500-byte outer link, 1444 leaves room for the 40-byte IPv6 header,
|
|
2-byte EtherIP header, and 14-byte Ethernet header carried inside EtherIP.
|
|
|
|
## Wire Format
|
|
|
|
The outer IPv6 packet uses Next Header 97. The EtherIP header is the RFC3378
|
|
two-byte version/reserved field with version 3, followed by the complete
|
|
Ethernet frame.
|