Merge branch 'bridgeability' into 'main'
Some checks failed
build liminix / build_vm_qemu_mips (push) Failing after 27s
Some checks failed
build liminix / build_vm_qemu_mips (push) Failing after 27s
This commit is contained in:
commit
bc1f54e701
9 changed files with 73 additions and 5 deletions
|
@ -20,6 +20,10 @@ in {
|
||||||
system.service.hostapd = mkOption {
|
system.service.hostapd = mkOption {
|
||||||
type = liminix.lib.types.serviceDefn;
|
type = liminix.lib.types.serviceDefn;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
system.service.hostapd-ready = mkOption {
|
||||||
|
type = liminix.lib.types.serviceDefn;
|
||||||
|
};
|
||||||
};
|
};
|
||||||
config = {
|
config = {
|
||||||
system.service.hostapd = liminix.callService ./service.nix {
|
system.service.hostapd = liminix.callService ./service.nix {
|
||||||
|
@ -34,5 +38,12 @@ in {
|
||||||
type = types.attrs;
|
type = types.attrs;
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
system.service.hostapd-ready = liminix.callService ./ready.nix {
|
||||||
|
interface = mkOption {
|
||||||
|
type = liminix.lib.types.interface;
|
||||||
|
description = "Interface for which to wait that the oper state Master or Master (VLAN) has been reached.";
|
||||||
|
};
|
||||||
|
};
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
16
modules/hostapd/ready.nix
Normal file
16
modules/hostapd/ready.nix
Normal file
|
@ -0,0 +1,16 @@
|
||||||
|
{
|
||||||
|
liminix
|
||||||
|
, ifwait
|
||||||
|
, lib
|
||||||
|
}:
|
||||||
|
{ interface } :
|
||||||
|
let
|
||||||
|
inherit (liminix.services) oneshot;
|
||||||
|
in oneshot {
|
||||||
|
name = "${interface.name}.wlan-oper";
|
||||||
|
up = ''
|
||||||
|
${ifwait}/bin/ifbridgeable -v $(output ${interface} ifname)
|
||||||
|
'';
|
||||||
|
|
||||||
|
dependencies = [ interface ];
|
||||||
|
}
|
|
@ -1,5 +1,5 @@
|
||||||
|
|
||||||
default: fs.lua init.lua nl.lua svc.lua net/constants.lua
|
default: wlan.lua fs.lua init.lua nl.lua svc.lua net/constants.lua
|
||||||
|
|
||||||
test:
|
test:
|
||||||
ln -s . anoia
|
ln -s . anoia
|
||||||
|
|
|
@ -4,6 +4,7 @@
|
||||||
, linotify
|
, linotify
|
||||||
, lua
|
, lua
|
||||||
, lualinux
|
, lualinux
|
||||||
|
, iwinfo
|
||||||
, cpio
|
, cpio
|
||||||
}:
|
}:
|
||||||
let pname = "anoia";
|
let pname = "anoia";
|
||||||
|
@ -12,7 +13,7 @@ in stdenv.mkDerivation {
|
||||||
version = "0.1";
|
version = "0.1";
|
||||||
src = ./.;
|
src = ./.;
|
||||||
nativeBuildInputs = [ fennel cpio ];
|
nativeBuildInputs = [ fennel cpio ];
|
||||||
buildInputs = with lua.pkgs; [ linotify lualinux ];
|
buildInputs = with lua.pkgs; [ linotify lualinux iwinfo ];
|
||||||
outputs = [ "out" "dev" ];
|
outputs = [ "out" "dev" ];
|
||||||
|
|
||||||
doCheck = true;
|
doCheck = true;
|
||||||
|
|
8
pkgs/anoia/wlan.fnl
Normal file
8
pkgs/anoia/wlan.fnl
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
(local { : nl80211 } (require :iwinfo))
|
||||||
|
|
||||||
|
(fn is-bridgeable [ifname]
|
||||||
|
(let [mode (nl80211.mode ifname)]
|
||||||
|
(or (= mode "Master") (= mode "Master (VLAN)"))
|
||||||
|
))
|
||||||
|
|
||||||
|
{ : is-bridgeable }
|
|
@ -20,7 +20,6 @@ let packages = [
|
||||||
lualinux
|
lualinux
|
||||||
netlink-lua
|
netlink-lua
|
||||||
iwinfo
|
iwinfo
|
||||||
lua.pkgs.readline
|
|
||||||
];
|
];
|
||||||
join = ps: builtins.concatStringsSep ";" ps;
|
join = ps: builtins.concatStringsSep ";" ps;
|
||||||
luapath = join (builtins.map (f:
|
luapath = join (builtins.map (f:
|
||||||
|
|
|
@ -1,11 +1,14 @@
|
||||||
{
|
{
|
||||||
lua
|
lua
|
||||||
, netlink-lua
|
, netlink-lua
|
||||||
|
, lualinux
|
||||||
|
, iwinfo
|
||||||
, writeFennelScript
|
, writeFennelScript
|
||||||
, runCommand
|
, runCommand
|
||||||
, anoia
|
, anoia
|
||||||
}:
|
}:
|
||||||
runCommand "ifwait" {} ''
|
runCommand "ifwait" {} ''
|
||||||
mkdir -p $out/bin
|
mkdir -p $out/bin
|
||||||
cp -p ${writeFennelScript "ifwait" [anoia netlink-lua] ./ifwait.fnl} $out/bin/ifwait
|
cp -p ${writeFennelScript "ifwait" [ anoia netlink-lua ] ./ifwait.fnl} $out/bin/ifwait
|
||||||
|
cp -p ${writeFennelScript "ifbridgeable" [ anoia lualinux iwinfo ] ./ifbridgeable.fnl} $out/bin/ifbridgeable
|
||||||
''
|
''
|
||||||
|
|
30
pkgs/ifwait/ifbridgeable.fnl
Normal file
30
pkgs/ifwait/ifbridgeable.fnl
Normal file
|
@ -0,0 +1,30 @@
|
||||||
|
(local wlan (require :anoia.wlan))
|
||||||
|
(local { : assoc } (require :anoia))
|
||||||
|
(local { : msleep } (require :lualinux))
|
||||||
|
|
||||||
|
(fn parse-args [args]
|
||||||
|
(match args
|
||||||
|
["-v" & rest] (assoc (parse-args rest) :verbose true)
|
||||||
|
[linkname] {:link linkname}
|
||||||
|
_ nil))
|
||||||
|
|
||||||
|
(fn run [args poll-fn]
|
||||||
|
(let [parameters
|
||||||
|
(assert (parse-args args)
|
||||||
|
(.. "Usage: ifbridgeable [-v] ifname"))]
|
||||||
|
(when parameters.verbose
|
||||||
|
(print (.. "ifbridgeable: waiting for "
|
||||||
|
parameters.link " to be bridgeable")))
|
||||||
|
|
||||||
|
(while (not (poll-fn parameters.link))
|
||||||
|
(when parameters.verbose
|
||||||
|
(print (.. "ifbridgeable: waiting for " parameters.link " to be bridgeable")))
|
||||||
|
(msleep 500)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
)
|
||||||
|
|
||||||
|
(when (not (= (. arg 0) "test"))
|
||||||
|
(run arg wlan.is-bridgeable))
|
||||||
|
|
||||||
|
{ : run }
|
|
@ -27,7 +27,7 @@ name :
|
||||||
echo "#!${lua}/bin/lua ${luaFlags}"
|
echo "#!${lua}/bin/lua ${luaFlags}"
|
||||||
echo "package.path = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luapath)} .. package.path"
|
echo "package.path = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luapath)} .. package.path"
|
||||||
echo "package.cpath = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luacpath)} .. package.cpath"
|
echo "package.cpath = ${lib.strings.escapeShellArg (builtins.concatStringsSep "" luacpath)} .. package.cpath"
|
||||||
echo "local ok, stdlib = pcall(require,'posix.stdlib'); if ok then stdlib.setenv('PATH',${lib.escapeShellArg (lib.makeBinPath packages)} .. \":\" .. os.getenv('PATH')) end"
|
echo "local ok, stdlib = pcall(require,'posix.stdlib'); if ok then stdlib.setenv('PATH', \"${lib.makeBinPath packages}\" .. \":\" .. os.getenv('PATH')) end"
|
||||||
fennel ${if correlate then "--correlate" else ""} --compile ${source}
|
fennel ${if correlate then "--correlate" else ""} --compile ${source}
|
||||||
) > ${name}.lua
|
) > ${name}.lua
|
||||||
'';
|
'';
|
||||||
|
|
Loading…
Reference in a new issue