12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455 |
- #!/usr/bin/env python3
- import netifaces as netif
- import subprocess
- import sys
- import re
- def batctlMeshif(cmdnargs):
- # try to determine batctl version
- lines = call(['batctl', '-v'])
- version = 0
- for line in lines:
- m = re.match(r'batctl debian-([0-9]+)', line)
- if m:
- version = int(m.group(1))
- if version >= 2020:
- cmd = ['batctl', 'meshif']
- else:
- cmd = ['batctl', '-m']
- cmd.extend(cmdnargs)
- return call(cmd)
- def call(cmdnargs):
- try:
- output = subprocess.check_output(cmdnargs, stderr=subprocess.STDOUT)
- lines = output.splitlines()
- lines = [line.decode('utf-8') for line in lines]
- except subprocess.CalledProcessError as err:
- print(err)
- except:
- print(str(sys.exc_info()[0]))
- else:
- return lines
- return []
- def merge(a, b):
- if isinstance(a, dict) and isinstance(b, dict):
- d = dict(a)
- d.update({k: merge(a.get(k, None), b[k]) for k in b})
- return d
- if isinstance(a, list) and isinstance(b, list):
- return [merge(x, y) for x, y in itertools.izip_longest(a, b)]
- return a if b is None else b
- def getInterfaceMAC(interface):
- try:
- interface = netif.ifaddresses(interface)
- mac = interface[netif.AF_LINK]
- return mac[0]['addr']
- except:
- return None
|