sane-vpn: fix to provide bunpen with the gateway address for "sane-vpn do none ..."

This commit is contained in:
2025-01-31 03:24:26 +00:00
parent ac58b884db
commit de070bd5d8

View File

@@ -175,6 +175,26 @@ def get_dns_resolvers_for_dev(dev: str) -> list[str]:
return nameservers
def get_addr_v4_for_dev(dev: str) -> str | None:
# output looks like IP4.ADDRESS[1]:192.168.1.72
nmcli_stdout = subprocess.check_output([
"nmcli", "-t", "-f", "IP4.ADDRESS", "device", "show", dev
]).decode("utf-8")
addrs = []
for line in nmcli_stdout.splitlines():
line = line.strip()
if not line:
continue
_fname, addr = line.split(":")
if not addr:
continue
if "/" in addr:
addr, _subnet = addr.split("/")
if not addr:
continue
addrs.append(addr)
return addrs[0] if len(addrs) else None
def get_connected_networks() -> list[str]:
# output looks like:
@@ -215,8 +235,9 @@ def get_vpn(vpn_name: str) -> VpnConfig:
return load_vpns()[vpn_name]
elif vpn_name == "none":
dev = get_default_dev()
addr_v4 = get_addr_v4_for_dev(dev)
dns = get_dns_resolvers_for_dev(dev)
return VpnConfig(dev=dev or "all", dns=dns)
return VpnConfig(dev=dev or "all", addr_v4=addr_v4, dns=dns)
elif vpn_name == "unmetered":
for dev in get_connected_networks():
dns = get_dns_resolvers_for_dev(dev)