{
  liminix
, lib
}:
{
  ifname
, devpath ? null
, mtu} :
# if devpath is supplied, we rename the interface at that
# path to have the specified name.
let
  inherit (liminix.services) oneshot;
  name = "${ifname}.link";
  rename = if devpath != null
           then ''
             oldname=$(cd /sys${devpath} && cd net/ && echo *)
             ip link set ''${oldname} name ${ifname}
           ''
           else "";
in oneshot {
  inherit name;
  up = ''
    ${rename}
    ${liminix.networking.ifup name ifname}
  '';
  down = "ip link set down dev ${ifname}";
}