diff --git a/devices/qemu/default.nix b/devices/qemu/default.nix index a53f25d..8473d38 100644 --- a/devices/qemu/default.nix +++ b/devices/qemu/default.nix @@ -77,8 +77,14 @@ networkInterfaces = let inherit (config.system.service.network) link; in { - wan = link.build { ifname = "eth0"; }; - lan = link.build { ifname = "eth1"; }; + wan = link.build { + devpath = "/devices/pci0000:00/0000:00:13.0/virtio0"; + ifname = "wan"; + }; + lan = link.build { + devpath = "/devices/pci0000:00/0000:00:14.0/virtio1"; + ifname = "lan"; + }; wlan_24 = link.build { ifname = "wlan0"; diff --git a/modules/network/default.nix b/modules/network/default.nix index ef3b95f..73650e4 100644 --- a/modules/network/default.nix +++ b/modules/network/default.nix @@ -68,7 +68,21 @@ in { ifname = mkOption { type = types.str; example = "eth0"; + description = '' + Device name as used by the kernel (as seen in "ip link" + or "ifconfig" output). If devpath is also specified, the + device will be renamed to the name provided. + ''; }; + devpath = mkOption { + type = types.nullOr types.str; + default = null; + example = "/devices/platform/soc/soc:internal-regs/f1070000.ethernet"; + description = '' + Path to the sysfs node of the device. If you provide this + and the ifname option, the device will be renamed to the + name given by ifname. + ''; }; # other "ip link add" options could go here as well mtu = mkOption { type = types.nullOr types.int; diff --git a/modules/network/link.nix b/modules/network/link.nix index d64a0d1..819d2ec 100644 --- a/modules/network/link.nix +++ b/modules/network/link.nix @@ -4,13 +4,27 @@ , serviceFns , lib }: -{ifname, mtu} : +{ + ifname +, devpath ? null +, mtu} : +# if devpath is supplied, we rename the interface at that +# path to have the specified name. let inherit (liminix.services) longrun oneshot; inherit (lib) concatStringsSep; name = "${ifname}.link"; - up = liminix.networking.ifup name ifname; + rename = if devpath != null + then '' + oldname=$(cd /sys${devpath} && cd net/ && echo *) + ip link set ''${oldname} name ${ifname} + '' + else ""; in oneshot { - inherit name up; + inherit name; + up = '' + ${rename} + ${liminix.networking.ifup name ifname} + ''; down = "ip link set down dev ${ifname}"; }