summaryrefslogtreecommitdiff
path: root/python/vyos/ifconfig/wireguard.py
diff options
context:
space:
mode:
authorThomas Mangin <thomas.mangin@exa.net.uk>2020-03-30 18:05:40 +0100
committerThomas Mangin <thomas.mangin@exa.net.uk>2020-03-31 16:59:55 +0100
commit10f31524db1623bf115f88c3a432b5c37522d2e4 (patch)
tree92c09e4947c2ee15b93cc6e3034e4626f7a63ac2 /python/vyos/ifconfig/wireguard.py
parent05e79a4bb2137ee3ea563ced7f64b033c41eb438 (diff)
downloadvyos-1x-10f31524db1623bf115f88c3a432b5c37522d2e4.tar.gz
vyos-1x-10f31524db1623bf115f88c3a432b5c37522d2e4.zip
ifconfig: T2057: centralise wireguard code
Some left over wireguard code was left in the interface.py file. The code was moved into the wireguard.py file and the now empty interface.py file removed as no longer holdin any code.
Diffstat (limited to 'python/vyos/ifconfig/wireguard.py')
-rw-r--r--python/vyos/ifconfig/wireguard.py56
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