Skip to content

Instantly share code, notes, and snippets.

@gdamjan
Last active March 25, 2024 19:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save gdamjan/506857c1c3dc9b29cdb1969d478033b1 to your computer and use it in GitHub Desktop.
Save gdamjan/506857c1c3dc9b29cdb1969d478033b1 to your computer and use it in GitHub Desktop.

Starting state

# br1.netdev 
[NetDev]
Kind=bridge
Name=br1
# br1.network 
[Match]
Name=br1

br1 is administratively up by default (but no-carrier):

❯ ip addr show br1
3: br1: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc noqueue state DOWN group default qlen 1000
    link/ether c2:2d:79:89:4d:38 brd ff:ff:ff:ff:ff:ff

Lets see if it works.

Setup:

sudo ip netns add ns1
sudo ip link add veth1 type veth peer name guest1
sudo ip link set guest1 name host0 netns ns1
sudo ip link set veth1 master br1
sudo ip netns exec ns1 ip addr add dev host0 10.254.0.1/24
sudo ip netns exec ns1 ip link set up dev host0
sudo ip netns exec ns1 ip link set up dev lo
sudo ip link set up veth1

sudo ip netns add ns2
sudo ip link add veth2 type veth peer name guest2
sudo ip link set guest2 name host0 netns ns2
sudo ip link set veth2 master br1
sudo ip netns exec ns2 ip addr add dev host0 10.254.0.2/24
sudo ip netns exec ns2 ip link set up dev host0
sudo ip netns exec ns2 ip link set up dev lo
sudo ip link set up veth2

Test:

sudo ip netns exec ns2 ping -c2 10.254.0.1
PING 10.254.0.1 (10.254.0.1) 56(84) bytes of data.
64 bytes from 10.254.0.1: icmp_seq=1 ttl=64 time=0.026 ms
64 bytes from 10.254.0.1: icmp_seq=2 ttl=64 time=0.084 ms

sudo ip netns exec ns1 ping -c2 10.254.0.2
PING 10.254.0.2 (10.254.0.2) 56(84) bytes of data.
64 bytes from 10.254.0.2: icmp_seq=1 ttl=64 time=0.024 ms
64 bytes from 10.254.0.2: icmp_seq=2 ttl=64 time=0.082 ms

No ip on the bridge

❯ ip addr show br1
3: br1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000
    link/ether c2:2d:79:89:4d:38 brd ff:ff:ff:ff:ff:ff
    inet6 fe80::c02d:79ff:fe89:4d38/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever

❯ ip addr show veth1
13: veth1@if12: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1 state UP group default qlen 1000
    link/ether ae:4d:19:de:b2:84 brd ff:ff:ff:ff:ff:ff link-netns ns1
    inet6 fe80::ac4d:19ff:fede:b284/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever

❯ ip addr show veth2
15: veth2@if14: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br1 state UP group default qlen 1000
    link/ether 36:16:85:ee:07:c4 brd ff:ff:ff:ff:ff:ff link-netns ns2
    inet6 fe80::3416:85ff:feee:7c4/64 scope link proto kernel_ll 
       valid_lft forever preferred_lft forever
@gdamjan
Copy link
Author

gdamjan commented Mar 25, 2024

br1.network ideally would also have

[Link]
RequiredForOnline=no

@mweinelt
Copy link

The correct online states would be enslaved on the bridge ports and carrier on the bridge itself.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment