Hi Henrik,

On Mon, Mar 17, 2014 at 5:01 PM, Henrik /KaarPoSoft
<hen...@kaarposoft.dk> wrote:
> Dear all,
>
> *SUMMARY*
>
> I am trying to replace dhcpcd with systemd-networkd.
> Using systemd-networkd on a single physical interface works fine.
> However, trying to use DHCP on a bridge fails for me.
> Any help would be most appreciated.
>
>
>
> *WORKS*
>
> The single physical interface scenario which works:
>
> /etc/systemd/network/50-dhcp.network contains:
> --------------------------------------------------
> [Match]
> Name=en*
> [Network]
> DHCP=yes
> --------------------------------------------------
>
> "ip addr" shows:
> --------------------------------------------------
> 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group
> default
>     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
>     inet 127.0.0.1/8 scope host lo
>        valid_lft forever preferred_lft forever
>     inet6 ::1/128 scope host
>        valid_lft forever preferred_lft forever
> 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state
> UP group default qlen 1000
>     link/ether 10:bf:48:d7:68:e1 brd ff:ff:ff:ff:ff:ff
>     inet 192.168.99.161/24 brd 192.168.99.255 scope global eno1
>        valid_lft forever preferred_lft forever
>     inet6 fe80::12bf:48ff:fed7:68e1/64 scope link
>        valid_lft forever preferred_lft forever
> 3: enp11s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast
> state DOWN group default qlen 1000
>     link/ether 10:bf:48:d7:64:aa brd ff:ff:ff:ff:ff:ff
> 4: sit0: <NOARP> mtu 1480 qdisc noop state DOWN group default
>     link/sit 0.0.0.0 brd 0.0.0.0
> --------------------------------------------------
>
> Note: I will remove lo, enp11s0, and sit0 output from further "ip addr"
> output.
>
> So, I got an IP address and I have connectivity.
>
>
>
> *FAILS*
>
>
> Now I try to set up a simple bridge, with just one physical interface
> (eno1), trying to get the bridge to get its IP address from DHCP:
>
> --------------------------------------------------
> rm -f /etc/systemd/network/50-dhcp.network
>
> cat > /etc/systemd/network/42-br0.netdev<<EOF
> [NetDev]
> Name=br0
> Kind=bridge
> EOF
>
> cat > /etc/systemd/network/44-en.network<<EOF
> [Match]
> Name=eno1
> [Network]
> Bridge=br0
> EOF
>
> cat > /etc/systemd/network/46-br0.network<<EOF
> [Match]
> Name=br0
> [Network]
> DHCP=yes
> EOF
> --------------------------------------------------
>
> "ip addr" shows:
> --------------------------------------------------
> 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master
> br0 state UP group default qlen 1000
>     link/ether 10:bf:48:d7:68:e1 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::12bf:48ff:fed7:68e1/64 scope link
>        valid_lft forever preferred_lft forever
> 5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
> group default
>     link/ether 10:bf:48:d7:68:e1 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::78e6:aff:feca:c0ac/64 scope link
>        valid_lft forever preferred_lft forever
> --------------------------------------------------
>
> I note here, that the inet6 address for eno1 matches the MAC, whereas the
> inet6 address for br0 does NOT match the MAC for br0 (which is, by the way,
> the same as the MAC for eno1).
>
> "journalctl -b | grep DHCP" gives:
> --------------------------------------------------
> Mar 17 16:28:37 komplett-21 systemd-networkd[2678]: DHCP CLIENT: set MAC
> address to 7a:e6:0a:ca:c0:ac
> Mar 17 16:28:37 komplett-21 systemd-networkd[2678]: br0: acquiring DHCPv4
> lease
> Mar 17 16:28:37 komplett-21 systemd-networkd[2678]: DHCP CLIENT: STARTED
> Mar 17 16:28:37 komplett-21 systemd-networkd[2678]: DHCP CLIENT: DISCOVER
> Mar 17 16:28:37 komplett-21 systemd-networkd[2678]: DHCP CLIENT: STOPPED
> Mar 17 16:28:40 komplett-21 systemd-networkd[2678]: br0: acquiring DHCPv4
> lease
> Mar 17 16:28:40 komplett-21 systemd-networkd[2678]: DHCP CLIENT: STARTED
> Mar 17 16:28:40 komplett-21 systemd-networkd[2678]: DHCP CLIENT: DISCOVER
> --------------------------------------------------
>
> followed by several combinations of:
> --------------------------------------------------
> Mar 17 16:28:42 komplett-21 systemd-networkd[2678]: DHCP CLIENT: ignoring
> packet: to port 9303, which is not the DHCP client port (68)
> Mar 17 16:28:42 komplett-21 systemd-networkd[2678]: DHCP CLIENT: DISCOVER
> Mar 17 16:29:16 komplett-21 systemd-networkd[2678]: DHCP CLIENT: ignoring
> packet: to port 138, which is not the DHCP client port (68)
> --------------------------------------------------
>
> So, I do not get an IP address from DHCP, and I do NOT have connectivity.
> But I DO receive broadcasts from the LAN (ports 9303, 138, etc).
>
> I note that the systemd-networkd DHCP CLIENT says it is setting the MAC
> address to something else than what "ip addr" says the br0 IP address is
> (but the DHCP CLIENT MAC address matches the last part of the inet6
> address).
>
> Question: Where did systemd-networkd DHCP CLIENT get this MAC address?
>
>
>
> *SURPRISE*
>
>
> Now if I run "tcpdump -i br0" or "wireshark", I see that that the DHCP
> REQUEST comes from 7a:e6:0a:ca:c0:ac.
>
> I presume, that the problem is, that the bridge thinks its MAC is
> 10:bf:48:d7:68:e1 which is the same as the MAC for eno1, but that is NOT the
> same MAC address systemd-networkd DHCP is using.
>
> tcpdump does something to the br0 interface, so after running "tcpdump -i
> br0", I finally get an IP address for the bridge:
>
> --------------------------------------------------
> 2: eno1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast master
> br0 state UP group default qlen 1000
>     link/ether 10:bf:48:d7:68:e1 brd ff:ff:ff:ff:ff:ff
>     inet6 fe80::12bf:48ff:fed7:68e1/64 scope link
>        valid_lft forever preferred_lft forever
> 5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
> group default
>     link/ether 10:bf:48:d7:68:e1 brd ff:ff:ff:ff:ff:ff
>     inet 192.168.99.175/24 brd 192.168.99.255 scope global br0
>        valid_lft forever preferred_lft forever
>     inet6 fe80::78e6:aff:feca:c0ac/64 scope link
>        valid_lft forever preferred_lft forever
> --------------------------------------------------
>
> I would have thought that "tcpdump -i br0" would bring the interface into
> "Promiscuous mode", but neither the "ip addr" command, nor "netstat -i"
> indicates that either eno1 or br0 are in "Promiscuous mode".
>
>
>
> *HELP*
>
>
> Any help on what to put into the systemd configuration files to make the
> bridge DHCP work would be most appreciated.

Your configuration seems correct, and your analysis too: we were not
picking up the bridge's changing MAC address.

This should have been fixed in git (for some time, but possibly not
before the last release). I can verify that the setup you pasted above
works for me with current git. If you are still experiencing problems,
please let me know.

Cheers,

Tom
_______________________________________________
systemd-devel mailing list
systemd-devel@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/systemd-devel

Reply via email to