feat(ifwait): add ifbridgeable script
Some checks failed
build liminix / build_vm_qemu_mips (pull_request) Failing after 28s
Some checks failed
build liminix / build_vm_qemu_mips (pull_request) Failing after 28s
This enable to wait for bridgeability of a WLAN interface via `iwinfo`. Signed-off-by: Raito Bezarius <masterancpp@gmail.com>
This commit is contained in:
parent
c39bfc2bb5
commit
5590fea16e
5 changed files with 45 additions and 3 deletions
|
@ -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:
|
||||
ln -s . anoia
|
||||
|
|
|
@ -4,6 +4,7 @@
|
|||
, linotify
|
||||
, lua
|
||||
, lualinux
|
||||
, iwinfo
|
||||
, cpio
|
||||
}:
|
||||
let pname = "anoia";
|
||||
|
@ -12,7 +13,7 @@ in stdenv.mkDerivation {
|
|||
version = "0.1";
|
||||
src = ./.;
|
||||
nativeBuildInputs = [ fennel cpio ];
|
||||
buildInputs = with lua.pkgs; [ linotify lualinux ];
|
||||
buildInputs = with lua.pkgs; [ linotify lualinux iwinfo ];
|
||||
outputs = [ "out" "dev" ];
|
||||
|
||||
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 }
|
|
@ -1,11 +1,14 @@
|
|||
{
|
||||
lua
|
||||
, netlink-lua
|
||||
, lualinux
|
||||
, iwinfo
|
||||
, writeFennelScript
|
||||
, runCommand
|
||||
, anoia
|
||||
}:
|
||||
runCommand "ifwait" {} ''
|
||||
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 }
|
Loading…
Reference in a new issue