vlans and mt300a wired network interfaces

module-based-network
Daniel Barlow 2023-03-07 19:10:12 +00:00
parent 06687a819a
commit e86e9430fc
2 changed files with 28 additions and 1 deletions

View File

@ -13,6 +13,7 @@
module = { pkgs, ...}:
let
inherit (pkgs.liminix.networking) interface;
openwrt = pkgs.fetchFromGitHub {
name = "openwrt-source";
repo = "openwrt";
@ -32,6 +33,22 @@
"${openwrt}/target/linux/ramips/dts"
];
};
networkInterfaces = {
# lan and wan ports are both behind a switch on eth0
eth = interface { device = "eth0"; };
lan = interface {
type = "vlan";
device = "eth0.1";
link = "eth0";
id = "1";
};
wan = interface {
type = "vlan";
device = "eth0.2";
id = "2";
link = "eth0";
};
};
};
boot.tftp = {
loadAddress = "0x00A00000";
@ -87,8 +104,16 @@
NET_RALINK_MDIO_MT7620 = "y";
NET_RALINK_MT7620 = "y";
# both the ethernet ports on this device (lan and wan)
# are behind a switch, so we need VLANs to do anything
# useful with them
VLAN_8021Q = "y";
SWCONFIG = "y";
SWPHY = "y";
BRIDGE_VLAN_FILTERING = "y";
BRIDGE_IGMP_SNOOPING = "y";
NET_VENDOR_RALINK = "y";
MTD = "y";

View File

@ -8,11 +8,13 @@ let
inherit (liminix.services) oneshot longrun;
inherit (lib) concatStringsSep optional;
in {
interface = { type ? "hardware", device, primary ? null, dependencies ? [] } @ args:
interface = { type ? "hardware", device, link ? null, primary ? null, id ? null, dependencies ? [] } @ args:
let ups =
[]
++ optional (type == "bridge")
"ip link add name ${device} type bridge"
++ optional (type == "vlan")
"ip link add link ${link} name ${device} type vlan id ${id}"
++ ["${ifwait}/bin/ifwait -v ${device} present"]
++ ["ip link set up dev ${device}"]
++ optional (primary != null)