Como posso testar software que usa o avahi enquanto meu laptop está desconectado de qualquer roteador?
Todos os serviços são executados na mesma máquina, então a Avahi estaria anunciando um endereço IP de 127.0.0.1 para todos os serviços.
Como exemplo, estou usando um arquivo em /etc/avahi/services/postgresql.service
para registrar um banco de dados:
$ cat /etc/avahi/services/postgresql.service
<?xml version="1.0" standalone="no"?><!--*-nxml-*-->
<!DOCTYPE service-group SYSTEM "avahi-service.dtd">
<service-group>
<name>my_database_name</name>
<service>
<type>_postgresql._tcp</type>
<port>5432</port>
</service>
</service-group>
Quando estou conectado ao roteador, avahi-browse
mostra o serviço:
$ avahi-browse -a | grep my_database_name
+ wlan0 IPv6 my_database_name PostgreSQL Server local
+ wlan0 IPv4 my_database_name PostgreSQL Server local
Quando estou desconectado do roteador, avahi-browse
não mostra mais nenhum serviço e meu software não consegue encontrar o banco de dados:
$ avahi-browse -a
Estas são as informações da minha interface quando estou desconectado:
$ ifconfig
eth0 Link encap:Ethernet HWaddr f0:de:f1:ac:a6:37
UP BROADCAST MULTICAST MTU:1500 Metric:1
RX packets:0 errors:0 dropped:0 overruns:0 frame:0
TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:0 (0.0 B) TX bytes:0 (0.0 B)
Interrupt:20 Memory:f3900000-f3920000
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:65536 Metric:1
RX packets:3637633 errors:0 dropped:0 overruns:0 frame:0
TX packets:3637633 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1242209987 (1.2 GB) TX bytes:1242209987 (1.2 GB)
Estou executando o Ubuntu 14.04, mas talvez precise fazer isso em outras distribuições também.
Atualizar : um dos meus amigos (ocupados) me enviou o seguinte, que ainda não consegui descobrir:
Avahi, by nature will not properly bind to a loop interface. You can
either turn up a dummy interface (best solution) or turn up a
non-routable number on a physical interface. (works, but can be
problematic if you are using a transient connection.)