bundlewrap/bundles/pppd/files/restart-pppoe-if-no-public-ip

51 lines
1.2 KiB
Python

#!/usr/bin/env python3
from datetime import datetime
from ipaddress import ip_address
from subprocess import run
from sys import exit
import netifaces
now = int(datetime.timestamp(datetime.utcnow()))
try:
with open('/var/tmp/pppd-last-restart.status', 'r') as f:
last_restart = int(f.read().strip())
except:
last_restart = 0
if now-3600 < last_restart:
exit(0)
ifaces = set()
for i in netifaces.interfaces():
if i.startswith('ppp'):
ifaces.add(i)
system_has_public_ip = False
for iface in ifaces:
for type in [netifaces.AF_INET, netifaces.AF_INET6]:
try:
ips = netifaces.ifaddresses(iface)[type]
except KeyError:
continue
for ip in ips:
try:
addr = ip_address(ip['addr'])
if not addr.is_private and not addr.is_loopback:
system_has_public_ip = True
except Exception:
# Apparently not an ip
pass
if not system_has_public_ip:
run(['systemctl', 'restart', 'pppoe'])
with open('/var/tmp/pppd-last-restart.status', 'w') as f:
f.write(str(now))
print('pppoe.service has been restarted')