diff options
author | Christian Poessinger <christian@poessinger.com> | 2020-03-31 18:01:20 +0200 |
---|---|---|
committer | GitHub <noreply@github.com> | 2020-03-31 18:01:20 +0200 |
commit | 685de4c3f9d3367a25ff1320cdacaf6427f6cc80 (patch) | |
tree | 176941850c632e37b9853ee842b41188caae7cd7 /python/vyos/ifconfig/wireguard.py | |
parent | c707202f440e387310f97a75b737f482c11ef72e (diff) | |
parent | 10f31524db1623bf115f88c3a432b5c37522d2e4 (diff) | |
download | vyos-1x-685de4c3f9d3367a25ff1320cdacaf6427f6cc80.tar.gz vyos-1x-685de4c3f9d3367a25ff1320cdacaf6427f6cc80.zip |
Merge pull request #283 from thomas-mangin/T2057-wg-dump
ifconfig: T2057: Move code from interface.py to wireguard.py
Diffstat (limited to 'python/vyos/ifconfig/wireguard.py')
-rw-r--r-- | python/vyos/ifconfig/wireguard.py | 56 |
1 files changed, 50 insertions, 6 deletions
diff --git a/python/vyos/ifconfig/wireguard.py b/python/vyos/ifconfig/wireguard.py index 7f123f9b4..def5ab7c5 100644 --- a/python/vyos/ifconfig/wireguard.py +++ b/python/vyos/ifconfig/wireguard.py @@ -15,14 +15,15 @@ import os +import time +import subprocess +from datetime import timedelta -import vyos +from vyos.config import Config from vyos.ifconfig.interface import Interface -from vyos.interfaces import wireguard_dump -from datetime import timedelta -import time from hurry.filesize import size,alternative + @Interface.register class WireGuardIf(Interface): default = { @@ -108,10 +109,10 @@ class WireGuardIf(Interface): return self._cmd(cmd) def op_show_interface(self): - wgdump = wireguard_dump().get( + wgdump = self._dump().get( self.config['ifname'], None) - c = vyos.config.Config() + c = Config() c.set_level(["interfaces", "wireguard", self.config['ifname']]) description = c.return_effective_value(["description"]) ips = c.return_effective_values(["address"]) @@ -177,3 +178,46 @@ class WireGuardIf(Interface): wgpeer['persistent_keepalive'])) print() super().op_show_interface_stats() + + def _dump(self): + """Dump wireguard data in a python friendly way.""" + last_device = None + output = {} + + # Dump wireguard connection data + _f = self._cmd('wg show all dump') + for line in _f.split('\n'): + if not line: + # Skip empty lines and last line + continue + items = line.split('\t') + + if last_device != items[0]: + # We are currently entering a new node + device, private_key, public_key, listen_port, fw_mark = items + last_device = device + + output[device] = { + 'private_key': None if private_key == '(none)' else private_key, + 'public_key': None if public_key == '(none)' else public_key, + 'listen_port': int(listen_port), + 'fw_mark': None if fw_mark == 'off' else int(fw_mark), + 'peers': {}, + } + else: + # We are entering a peer + device, public_key, preshared_key, endpoint, allowed_ips, latest_handshake, transfer_rx, transfer_tx, persistent_keepalive = items + if allowed_ips == '(none)': + allowed_ips = [] + else: + allowed_ips = allowed_ips.split('\t') + output[device]['peers'][public_key] = { + 'preshared_key': None if preshared_key == '(none)' else preshared_key, + 'endpoint': None if endpoint == '(none)' else endpoint, + 'allowed_ips': allowed_ips, + 'latest_handshake': None if latest_handshake == '0' else int(latest_handshake), + 'transfer_rx': int(transfer_rx), + 'transfer_tx': int(transfer_tx), + 'persistent_keepalive': None if persistent_keepalive == 'off' else int(persistent_keepalive), + } + return output |