Current section

Files

Jump to
nerves_init_gadget lib nerves_init_zero network_manager.ex
Raw

lib/nerves_init_zero/network_manager.ex

defmodule Nerves.InitGadget.NetworkManager do
use GenServer
require Logger
# @app Mix.Project.config[:app]
@scope [:state, :network_interface]
def start_link(iface) do
GenServer.start_link(__MODULE__, iface)
end
def init(iface) do
Logger.debug "Start Network Manager"
:os.cmd 'epmd -daemon'
SystemRegistry.register
{:ok, {iface, nil}}
end
def handle_info({:system_registry, :global, registry}, {iface, current}) do
scope = scope(iface, [:ipv4_address])
ip = get_in(registry, scope)
if ip != current do
Logger.debug "IP Address Changed"
#restart_net_kernel(ip)
configure_mdns(ip)
end
{:noreply, {iface, ip}}
end
# defp restart_net_kernel(ip) do
# Logger.debug "Restarting Net Kernel"
# :net_kernel.stop()
# :net_kernel.start([:"#{@app}@#{ip}"])
# end
defp configure_mdns(ip) do
Logger.debug "Reconfiguring mDNS IP: #{inspect ip}"
# :timer.sleep(2000)
ip =
String.split(ip, ".")
|> Enum.map(&parse_int/1)
|> List.to_tuple
Mdns.Server.stop()
Mdns.Server.start(interface: ip)
Mdns.Server.set_ip(ip)
end
defp scope(iface, append) do
@scope ++ [iface] ++ append
end
defp parse_int(str) do
{int, _} = Integer.parse(str)
int
end
end