From e439a4062e124ce0a29bc55c2a82ce7b94464fc6 Mon Sep 17 00:00:00 2001 From: Tomaae <23486452+tomaae@users.noreply.github.com> Date: Thu, 12 Dec 2019 09:06:15 +0100 Subject: [PATCH] updated get_nat --- .../mikrotik_router/mikrotik_controller.py | 73 ++++++++----------- 1 file changed, 29 insertions(+), 44 deletions(-) diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index d880155..43ca739 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -227,7 +227,7 @@ class MikrotikControllerData(): for uid in self.data['interface']: self.data['interface'][uid]['client-ip-address'] = "disabled" self.data['interface'][uid]['client-mac-address'] = "disabled" - return False + return mac2ip = {} bridge_used = False @@ -244,7 +244,7 @@ class MikrotikControllerData(): self.data['interface'][uid]['client-ip-address'] = from_entry(self.data['arp'][uid], 'address') self.data['interface'][uid]['client-mac-address'] = from_entry(self.data['arp'][uid], 'mac-address') - return True + return # --------------------------- # update_arp @@ -339,48 +339,33 @@ class MikrotikControllerData(): # --------------------------- def get_nat(self): """Get NAT data from Mikrotik""" -# self.data['nat'] = await from_list( -# data=self.data['nat'], -# source=await self.hass.async_add_executor_job(self.api.path, "/ip/firewall/nat"), -# key='.id', -# vals=[ -# {'name': 'name', 'source': 'dst-port'}, -# {'name': '.id'}, -# {'name': 'protocol'}, -# {'name': 'dst-port'}, -# {'name': 'in-interface', 'default': 'any'}, -# {'name': 'to-addresses'}, -# {'name': 'to-ports'}, -# {'name': 'comment'}, -# {'name': 'enabled', 'source': 'disabled', 'type': 'bool', 'reverse': True} -# ], -# only=[ -# {'key': 'action', 'value': 'dst-nat'} -# ] -# ) - - data = self.api.path("/ip/firewall/nat") - if not data: - return - - for entry in data: - if entry['action'] != 'dst-nat': - continue - - uid = entry['.id'] - if uid not in self.data['nat']: - self.data['nat'][uid] = {} - - self.data['nat'][uid]['name'] = "{}:{}".format(entry['protocol'], entry['dst-port']) - self.data['nat'][uid]['.id'] = from_entry(entry, '.id') - self.data['nat'][uid]['protocol'] = from_entry(entry, 'protocol') - self.data['nat'][uid]['dst-port'] = from_entry(entry, 'dst-port') - self.data['nat'][uid]['in-interface'] = from_entry(entry, 'in-interface', 'any') - self.data['nat'][uid]['to-addresses'] = from_entry(entry, 'to-addresses') - self.data['nat'][uid]['to-ports'] = from_entry(entry, 'to-ports') - self.data['nat'][uid]['comment'] = from_entry(entry, 'comment') - self.data['nat'][uid]['enabled'] = from_entry_bool(entry, 'disabled', default=True, reverse=True) - + self.data['nat'] = await from_list( + data=self.data['nat'], + source=await self.hass.async_add_executor_job(self.api.path, "/ip/firewall/nat"), + key='.id', + vals=[ + {'name': '.id'}, + {'name': 'protocol'}, + {'name': 'dst-port'}, + {'name': 'in-interface', 'default': 'any'}, + {'name': 'to-addresses'}, + {'name': 'to-ports'}, + {'name': 'comment'}, + {'name': 'enabled', 'source': 'disabled', 'type': 'bool', 'reverse': True} + ], + val_proc=[ + [ + {'name': 'name'}, + {'action': 'combine'}, + {'key': 'protocol'}, + {'text': ':'}, + {'key': 'dst-port'} + ] + ] + only=[ + {'key': 'action', 'value': 'dst-nat'} + ] + ) return # ---------------------------