def process_client(self, ip_address, hostname, mac_address): """Process a client.""" made_ip_address = make_ip_address(ip_address) if ( is_link_local(made_ip_address) or is_loopback(made_ip_address) or is_invalid(made_ip_address) ): # Ignore self assigned addresses, loopback, invalid return data = self._address_data.get(ip_address) if ( data and data[MAC_ADDRESS] == mac_address and data[HOSTNAME].startswith(hostname) ): # If the address data is the same no need # to process it return self._address_data[ip_address] = {MAC_ADDRESS: mac_address, HOSTNAME: hostname} self.process_updated_address_data(ip_address, self._address_data[ip_address])
def async_process_client(self, ip_address, hostname, mac_address): """Process a client.""" made_ip_address = make_ip_address(ip_address) if ( is_link_local(made_ip_address) or is_loopback(made_ip_address) or is_invalid(made_ip_address) ): # Ignore self assigned addresses, loopback, invalid return data = self._address_data.get(ip_address) if ( data and data[MAC_ADDRESS] == mac_address and data[HOSTNAME].startswith(hostname) ): # If the address data is the same no need # to process it return data = {MAC_ADDRESS: mac_address, HOSTNAME: hostname} self._address_data[ip_address] = data lowercase_hostname = data[HOSTNAME].lower() uppercase_mac = data[MAC_ADDRESS].upper() _LOGGER.debug( "Processing updated address data for %s: mac=%s hostname=%s", ip_address, uppercase_mac, lowercase_hostname, ) for entry in self._integration_matchers: if MAC_ADDRESS in entry and not fnmatch.fnmatch( uppercase_mac, entry[MAC_ADDRESS] ): continue if HOSTNAME in entry and not fnmatch.fnmatch( lowercase_hostname, entry[HOSTNAME] ): continue _LOGGER.debug("Matched %s against %s", data, entry) discovery_flow.async_create_flow( self.hass, entry["domain"], {"source": config_entries.SOURCE_DHCP}, DhcpServiceInfo( ip=ip_address, hostname=lowercase_hostname, macaddress=data[MAC_ADDRESS], ), )
def async_process_client(self, ip_address: str, hostname: str, mac_address: str) -> None: """Process a client.""" made_ip_address = make_ip_address(ip_address) if (is_link_local(made_ip_address) or is_loopback(made_ip_address) or is_invalid(made_ip_address)): # Ignore self assigned addresses, loopback, invalid return data = self._address_data.get(ip_address) if (data and data[MAC_ADDRESS] == mac_address and data[HOSTNAME].startswith(hostname)): # If the address data is the same no need # to process it return data = {MAC_ADDRESS: mac_address, HOSTNAME: hostname} self._address_data[ip_address] = data lowercase_hostname = hostname.lower() uppercase_mac = mac_address.upper() _LOGGER.debug( "Processing updated address data for %s: mac=%s hostname=%s", ip_address, uppercase_mac, lowercase_hostname, ) matched_domains = set() device_domains = set() dev_reg: DeviceRegistry = async_get(self.hass) if device := dev_reg.async_get_device(identifiers=set(), connections={ (CONNECTION_NETWORK_MAC, uppercase_mac) }): for entry_id in device.config_entries: if entry := self.hass.config_entries.async_get_entry(entry_id): device_domains.add(entry.domain)
def test_is_invalid(): """Test invalid address.""" assert network_util.is_invalid(ip_address("0.0.0.0")) assert not network_util.is_invalid(ip_address("127.0.0.1"))