![]() |
s i s t e m a o p e r a c i o n a l m a g n u x l i n u x | ~/ · documentação · suporte · sobre |
Página seguinte
Página anterior
Índice
581. Modo Multicast e Indiscriminadoethernet,modo multicast e indiscriminado Uma outra coisa que o Donald tem trabalhado é na implementação dos ganchos do modos multicast e indiscriminado. Todos os programas de controle ISA lançados (ex. não ALPHA) agora suportam o modo indiscriminado. Donald escreve: `Primeiro eu estava planejando fazê-lo enquanto implementava tanto o /dev/* quanto a interface DDI, mas não é a maneira correta de fazer. Nós devemos só capacitar os modos multicast ou indiscriminado quando alguma coisa quiser olhar os pacotes, e fechá-los quando aquele aplicativo estiver terminado, nenhuma das maneiras está fortemente relacionada a quando o hardware é aberto ou lançado. Começarei discutindo o modo indiscriminado, que é conceituadamente fácil de implementar. Para a maioria dos hardware você só tem que configurar um bit de registro, e a partir daí você consegue todos os pacotes na linha. Bem, é quase tão fácil, pois em alguns hardware você precisa fechar a placa (potencialmente derrubar alguns pacotes), reconfigurar, e então recapacitar a placa ethernet. Isto é trabalho sujo e arriscado, mas a alternativa parece ter todos os registros de aplicações antes de você abrir a placa ethernet na hora da inicialização. OK, então isto é fácil, por isso vou mudar para algo que não é assim tão óbvio: Multicast. Ele pode ser feito de duas maneiras:
Eu acho que eu deveria relacionar o que algumas placas/chips ethernet fornecem:
Filtro Multicast Indiscriminado chip/placa ---------------------------------------- Seeq8001/3c501 Yes Binary filter (1) 3Com/3c509 Yes Binary filter (1) 8390 Yes Autodin II six bit hash (2) (3) LANCE Yes Autodin II six bit hash (2) (3) i82586 Yes Hidden Autodin II six bit hash (2) (4)
Note que nenhum destes chips fazem a filtragem perfeita, e nós ainda precisamos de um módulo de nível médio para fazer a filtragem final. Também note que em todos os casos nós temos que manter uma lista completa dos endereços multicast aceitos para recomputar a tabela hash quando ela muda. Meu primeiro passo no suporte do nível do dispositivo está detalhado no resumo do programa de controle
#ifdef HAVE_MULTICAST static void set_multicast_list(struct device *dev, int num_addrs, void *addrs); #endif . . ethercard_open() { ... #ifdef HAVE_MULTICAST dev->set_multicast_list = &set_multicast_list; #endif ... #ifdef HAVE_MULTICAST /* Set or clear the multicast filter for this adaptor. num_addrs -- -1 Promiscuous modo, receive all packets num_addrs -- 0 Normal modo, clear multicast list num_addrs > 0 Multicast modo, receive normal and MC packets, and do best-effort filtering. */ static void set_multicast_list(struct device *dev, int num_addrs, void *addrs) { ... Qualquer comentário, crítica, etc. será bem-vindo.'
Página seguinte Página anterior Índice |