Ao analisar o código-fonte , há algumas coisas que saltam que parece ser afetado pela execução de um único comando versus vários comandos.
Primeiro, este comentário em dispatch.c
:
/*
* Wait for packets to come in using poll(). When a packet comes in,
* call receive_packet to receive the packet and possibly strip hardware
* addressing information from it, and then call through the
* bootp_packet_handler hook to try to do something with it.
*/
Parece que dhcrelay.c
faz uso de uma arquitetura de pesquisa . Este parece fazer uso de um tempo limite (baseado em tempo) ao pesquisar uma das interfaces (por exemplo: -i eth0 ou -i eth1 ).
Isto parece indicar que existe algum potencial para bloquear uma interface enquanto a outra está sendo pesquisada.
Outro trecho, desta vez dentro da função dispatch()
, está pesquisando uma das interfaces especificadas:
/* Wait for a packet or a timeout... XXX */
count = poll(fds, nfds, to_msec);
Depois que a função de pesquisa acima atingir o tempo limite ou receber um pacote dhcrelay
passa para a "próxima" interface:
/* Get the current time... */
time(&cur_time);
i = 0;
for (l = protocols; l; l = l->next) {
struct interface_info *ip = l->local;
if ((fds[i].revents & (POLLIN | POLLHUP))) {
fds[i].revents = 0;
if (ip && (l->handler != got_one ||
!ip->dead))
(*(l->handler))(l);
if (interfaces_invalidated)
break;
}
i++;
}
interfaces_invalidated = 0;
} while (1);
Observe que todo o dispatch
contém um loop while(1)
.
Então, o que isso tudo significa?
Eu diria que se você tem uma rede com muito tráfego com muitos hosts e suas concessões DHCP são relativamente curtas, então pode querer considerar a execução de 2 instâncias do dchrelay.
Se, no entanto, sua rede for relativamente pequena e seus tempos limite de concessão do DHCP forem relativamente longos, a execução de uma única instância deverá ser suficiente.
Algumas coisas adicionais a serem consideradas
- A execução de 2 instâncias permite manter arquivos de log separados para cada um.
- A execução de 2 instâncias permite que um relayer seja reiniciado sem afetar o outro.