Skip to content
Snippets Groups Projects
Commit 3e8ee19c authored by Jiří Kalvoda's avatar Jiří Kalvoda
Browse files

NET blatto-daemon

parent 295787a8
No related branches found
No related tags found
No related merge requests found
#!/usr/bin/env python3
import time
import signal
import sys, os
import socket
import json
import subprocess
def p(*args):
print(*args, flush=True)
def handler(signum, frame):
signame = signal.Signals(signum).name
p(f'Signal handler called with signal {signame} ({signum})')
signal.signal(signal.SIGHUP, handler)
signal.pthread_sigmask(signal.SIG_BLOCK, [signal.SIGHUP])
p("PID", os.getpid())
sock = socket.socket(socket.AF_INET6, socket.SOCK_DGRAM)
def ip(*args):
if args[0] in [6, -6]:
args = list(args)
args[0] = "-6"
r = subprocess.run(["ip", "-j", *args], stdout=subprocess.PIPE, encoding="utf-8")
return json.loads(r.stdout) if r.stdout else None
def iwconfig():
r = subprocess.run(["sh", "-c", "iwconfig | jc --iwconfig"], stdout=subprocess.PIPE, encoding="utf-8")
return json.loads(r.stdout) if r.stdout else None
def send(msg, target_ip):
msg = json.dumps(msg).encode("utf-8")
p(msg)
sock.sendto(b"____01"+msg, (target_ip, 12011))
def format_ip(addr_info):
return f"{addr_info['local']}/{addr_info['prefixlen']}"
def sort_ips(addrs):
return addrs
while True:
p("RUN")
ipa = ip("a")
iwc = {i["name"]: i for i in iwconfig()}
def is_blatto(i):
for ip in i["addr_info"]:
if any(ip["local"].startswith(f"2a01:510:d504:75{i}a:") for i in range(0, 10)):
return True
return False
def is_blatto_wg(i):
for ip in i["addr_info"]:
if any(ip["local"].startswith(f"2a01:510:d504:75{i}b:") for i in range(0, 10)):
return True
return False
interfaces = {}
blatto = False
for i in ipa:
if i["operstate"] in ["UP", "UNKNOWN"]:
out = {
"addr": [format_ip(ip) for ip in sort_ips(i["addr_info"])],
"mtu": i["mtu"]
}
if i["link_type"] == "ether": # WiFi or ethernet, no loopback or wireguard
if is_blatto(i):
blatto = True
if is_blatto_wg(i):
blatto_wg = {"mtu": i["mtu"]}
if i["ifname"] in iwc:
w = iwc[i["ifname"]]
out["essid"] = w["essid"]
interfaces[i["ifname"]] = out
if blatto_wg:
try:
autorouting = open("/run/wg-blatto/autorouting").read().strip()
current_routing = open("/run/wg-blatto/routing").read().strip()
wanted_routing = "no" if blatto else autorouting
p(f"blatto-wg routing: {current_routing} -> {wanted_routing}")
if wanted_routing != current_routing:
subprocess.run(["/etc/net/wg-blatto-route", wanted_routing])
current_routing = open("/run/wg-blatto/routing").read().strip()
blatto_wg["routing"] = current_routing
except FileNotFoundError as e:
p(f"blatto-wg routing: {e}")
send({"blatto-wg": blatto_wg, "blatto": blatto, "interfaces": interfaces}, "2a01:510:d504:751a::1" if blatto else "2a01:510:d504:751b::1")
p("DONE")
signal.sigtimedwait([signal.SIGHUP], 10)
#!/bin/bash
cd "$(dirname "$0")"
. ../userconfig-lib.sh
version 7
version 8
need_root
install_begin
......@@ -29,9 +29,11 @@ done
r udevadm control --reload-rules
r udevadm trigger
git_clupdate https://codeberg.org/regnarg/cdwifi-autologin.git build_git_cdwifi-autologin
r -c git_clupdate https://codeberg.org/regnarg/cdwifi-autologin.git build_git_cdwifi-autologin
confln build_git_cdwifi-autologin/cdwifi-autologin.sh /usr/bin/ cE
confln cdwifi-autologin.service /lib/systemd/system/ cr
confln blatto-daemon.py /usr/bin/net-blatto-daemon c
init-service net-blatto-daemon root /usr/bin/net-blatto-daemon "" "ExecReload=/bin/kill -HUP \$MAINPID"
install_ok
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment