diff --git a/lib/towerops/snmp/wireless_client_discovery.ex b/lib/towerops/snmp/wireless_client_discovery.ex index 1cbf253f..246864f7 100644 --- a/lib/towerops/snmp/wireless_client_discovery.ex +++ b/lib/towerops/snmp/wireless_client_discovery.ex @@ -253,9 +253,21 @@ defmodule Towerops.Snmp.WirelessClientDiscovery do defp format_mac(value) when is_binary(value) do if String.contains?(value, ":") or String.contains?(value, "-") do + # String MAC with separators - normalize to ensure proper padding value |> String.downcase() - |> String.replace("-", ":") + |> String.replace(~r/[^0-9a-f]/, "") + |> case do + <> -> + "#{a}:#{b}:#{c}:#{d}:#{e}:#{f}" + + # Not 12 hex chars - try to parse as byte string + _ -> + value + |> :binary.bin_to_list() + |> Enum.map_join(":", &String.pad_leading(Integer.to_string(&1, 16), 2, "0")) + |> String.downcase() + end else value |> :binary.bin_to_list()