From b1da24b9f41f99300ee4ca4fe51c97a0a4b6d09f Mon Sep 17 00:00:00 2001 From: tomaae <23486452+tomaae@users.noreply.github.com> Date: Mon, 12 Apr 2021 11:00:08 +0200 Subject: [PATCH] Added support for pools in DHCP address #104 Added support for active addresses in DHCP --- .../mikrotik_router/mikrotik_controller.py | 35 +++++++++++++++++++ 1 file changed, 35 insertions(+) diff --git a/custom_components/mikrotik_router/mikrotik_controller.py b/custom_components/mikrotik_router/mikrotik_controller.py index 78815dd..3455f2f 100644 --- a/custom_components/mikrotik_router/mikrotik_controller.py +++ b/custom_components/mikrotik_router/mikrotik_controller.py @@ -3,6 +3,8 @@ import re import asyncio import logging +import ipaddress + from datetime import timedelta from ipaddress import ip_address, IPv4Network from mac_vendor_lookup import AsyncMacLookup @@ -58,6 +60,14 @@ from .mikrotikapi import MikrotikAPI _LOGGER = logging.getLogger(__name__) +def is_valid_ip(address): + try: + ipaddress.ip_address(address) + return True + except ValueError: + return False + + # --------------------------- # MikrotikControllerData # --------------------------- @@ -1330,7 +1340,9 @@ class MikrotikControllerData: key="mac-address", vals=[ {"name": "mac-address"}, + {"name": "active-mac-address"}, {"name": "address", "default": "unknown"}, + {"name": "active-address", "default": "unknown"}, {"name": "host-name", "default": "unknown"}, {"name": "status", "default": "unknown"}, {"name": "last-seen", "default": "unknown"}, @@ -1342,6 +1354,29 @@ class MikrotikControllerData: dhcpserver_query = False for uid in self.data["dhcp"]: + # is_valid_ip + if self.data["dhcp"][uid]["address"] != "unknown": + if not is_valid_ip(self.data["dhcp"][uid]["address"]): + self.data["dhcp"][uid]["address"] = "unknown" + + if ( + self.data["dhcp"][uid]["active-address"] + != self.data["dhcp"][uid]["address"] + and self.data["dhcp"][uid]["active-address"] != "unknown" + ): + self.data["dhcp"][uid]["address"] = self.data["dhcp"][uid][ + "active-address" + ] + + if ( + self.data["dhcp"][uid]["mac-address"] + != self.data["dhcp"][uid]["active-mac-address"] + and self.data["dhcp"][uid]["active-mac-address"] != "unknown" + ): + self.data["dhcp"][uid]["mac-address"] = self.data["dhcp"][uid][ + "active-mac-address" + ] + if ( not dhcpserver_query and self.data["dhcp"][uid]["server"] not in self.data["dhcp-server"]