fff-layer3-vxmesh: join multple client nets with vxlan #82

Closed
jkimmel wants to merge 3 commits from jkimmel/firmware:vxmesh into master

3 Commits

Author SHA1 Message Date
Johannes Kimmel d50feeab07 fff-layer3-vxmesh: add babel MTU filters
A VXLAN Tunnel (IPv6, without inner VLAN tag) adds 70 bytes of overhead
to each packet. To support bridging our client interfaces with an MTU of
1500, VXLAN packets require a link with an MTU of 1570.

To avoid sending too large packets to peers over a link with an MTU less
than 1570, this patch adds filters to babel to ignore routes to peers
announced over small links.

Signed-off-by: Johannes Kimmel <fff@bareminimum.eu>
2021-02-17 07:14:03 +01:00
Johannes Kimmel 27e074b1ea fff-network: exclude vxmesh fdb entries in client count
This avoids counting a single client multiple times.

Neighbours behind the vxlan device are actually local to another router
and should only be counted there.

Signed-off-by: Johannes Kimmel <fff@bareminimum.eu>
2021-02-17 07:14:03 +01:00
Johannes Kimmel dd69724837 fff-layer3-vxmesh: join multple client nets with vxlan
Easily span a layer 2 network over a small group of, not necessarily
adjacent, routers.

This patch introduces a new `vxmesh` configuration section. It takes
care of setting up a shared client network using vxlan among all
configured routers.

As a result, clients can finally roam between the routers of the mesh.
It integrates well with the underlying layer 3 routing to make best use
of the infrastructure available. This way the network is not depending
on a contiguous layer 2 spanning tree topology and can make use of all
fallback mechanisms of the layer 3 underlay.

This example config ...
```
config gateway
	option peer_ip6 '2001:0db8::1' # required

...

config vxmesh
	option proto 'vxlan|vxlan6' # required
	option vid   '42'           # required

	# ...
	# any vxlan options can be included
	# ...

	# list of peers for headend replication
	list peer '2001:0db8::1'    # list can include the ip of the router
	list peer '2001:0db8::2'    # this way the complete config section
	list peer '2001:0db8::3'    # can be copied to all routers in the
	list peer '2001:0db8::4'    # group
	...
```

... will generate ...

```
config interface client
	...
	# append and remove the vxmesh0 entry
	# depending on whether a vxmesh is configured
	ifname '... vxmesh0'
	...

...

config interface 'vxmesh0'
	option proto 'vxlan6'
	option vid '42'

config vxlan_peer
	option vxlan 'vxmesh0'
	option dst '2001:0db8::2'

config vxlan_peer
	option vxlan 'vxmesh0'
	option dst '2001:0db8::3'

config vxlan_peer
	option vxlan 'vxmesh0'
	option dst '2001:0db8::4'
```

It will also take care and configure the
`dhcp.@dnsmasq[0].authoritative` setting depending on whether a vxmesh
is enabled or not.

Signed-off-by: Johannes Kimmel <fff@bareminimum.eu>
2021-02-17 07:13:57 +01:00