helper.py 1.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455
  1. #!/usr/bin/env python3
  2. import netifaces as netif
  3. import subprocess
  4. import sys
  5. import re
  6. def batctlMeshif(cmdnargs):
  7. # try to determine batctl version
  8. lines = call(['batctl', '-v'])
  9. version = 0
  10. for line in lines:
  11. m = re.match(r'batctl debian-([0-9]+)', line)
  12. if m:
  13. version = int(m.group(1))
  14. if version >= 2020:
  15. cmd = ['batctl', 'meshif']
  16. else:
  17. cmd = ['batctl', '-m']
  18. cmd.extend(cmdnargs)
  19. return call(cmd)
  20. def call(cmdnargs):
  21. try:
  22. output = subprocess.check_output(cmdnargs, stderr=subprocess.STDOUT)
  23. lines = output.splitlines()
  24. lines = [line.decode('utf-8') for line in lines]
  25. except subprocess.CalledProcessError as err:
  26. print(err)
  27. except:
  28. print(str(sys.exc_info()[0]))
  29. else:
  30. return lines
  31. return []
  32. def merge(a, b):
  33. if isinstance(a, dict) and isinstance(b, dict):
  34. d = dict(a)
  35. d.update({k: merge(a.get(k, None), b[k]) for k in b})
  36. return d
  37. if isinstance(a, list) and isinstance(b, list):
  38. return [merge(x, y) for x, y in itertools.izip_longest(a, b)]
  39. return a if b is None else b
  40. def getInterfaceMAC(interface):
  41. try:
  42. interface = netif.ifaddresses(interface)
  43. mac = interface[netif.AF_LINK]
  44. return mac[0]['addr']
  45. except:
  46. return None