Como posso usar o avahi sem uma conexão de rede?

4

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.)

    
por Oleg 25.08.2014 / 01:26

2 respostas

3

O Avahi requer que a interface tenha o sinalizador MULTICAST definido. Isto é,

ifconfig dummy0 multicast

Quando o sinalizador MULTICAST estiver definido, o avahi anunciará automaticamente os serviços nessa interface, não é necessário reiniciar ou, de outra forma, mexer na configuração do avahi, a menos que a interface não seja permitida na configuração do avahi.

    
por 03.11.2014 / 22:23
1

Eu fiz algumas pesquisas e esse ticket no rastreador de problemas do projeto Chromim parece com o que você está procurando. O ticket: Problema 288385: P2P: Escreva uma rede falsa de avahi / zeroconf para simular uma rede privada de pares tem a seguinte descrição:

Project Member Reported by [email protected], Sep 9, 2013

We want to run P2P tests on a single machine, faking the rest of the peers. This requires to isolate the avahi/zeroconf traffic to prevent seeing services from other DUTs on the same network and also expose services to the network.

The libavahi, used by p2p and update_engine, uses a private API to contact the avahi-daemon over DBus, thus replacing the avahi-daemon with a fake implementation would require to implement this interface that's not documented. Replacing the libavahi requires to compile a different version or use a fake libavahi interface that kind of looses the point of having an integration autotest test.

To fake the network of peers, another option is to create a TAP interface with a python script that fakes all the required avahi traffic, and let avahi-daemon listen ONLY on that interface during the test (we can do this through the avahi-daemon config file).

Eu olhei através deste bilhete e parece que tem todas as peças que você precisa, mas descobrir como juntá-las está faltando. Talvez você possa deixar uma linha para o projeto Chromium pedindo alguma ajuda com essas peças pode ser um bom lugar para começar.

Referências

por 25.08.2014 / 04:33