Multicast UDP quebrado após a atualização do kernel

2

Eu tenho um sistema embarcado que está executando uma área de usuário do Gentoo com um kernel de compilação manual. O sistema adquire dados de uma placa PCI e os envia para um grupo multicast UDP.

Tudo funcionou bem com um kernel antigo (2.6.11). Agora eu atualizei para um kernel um pouco mais novo (2.6.15) para consertar um problema diferente em que a placa iria travar durante a reinicialização. Isso corrigiu a interrupção na reinicialização, mas agora o envio de dados para o grupo de difusão seletiva UDP falha.

Minhas chamadas para o envio abaixo de 2.6.15 dão erro ENOTCONN. No entanto, o link está ativo e posso enviar dados via TCP pelo link sem problemas. Meu programa não foi alterado, na verdade nem recompilei. Chamar ifconfig eth0 nos dois kernels fornece a mesma saída.

Alguma idéia do que eu poderia ter configurado incorretamente ao construir o kernel 2.6.15? Ou houve um bug ou uma alteração na API no 2.6.15? Eu não posso atualizar para nada mais jovem do que o 2.6.15, pois este é o kernel mais recente suportado pelo driver de baixa qualidade para a placa PCI no sistema.

    
por fschmitt 05.09.2011 / 10:37

2 respostas

1

Após 15 horas de depuração, encontrei o problema: O programa tentou enviar pacotes extremamente grandes onde, frequentemente, o tamanho transmitido para o sendto excedia o tamanho máximo permitido para pacotes UDP de 2 ^ 16 bytes. Agora eu adicionei alguma lógica que define o tamanho máximo do pacote passado para enviar para 50000 e tudo funciona novamente. É muito estranho trabalhar anteriormente com o kernel antigo, o Windows XP e o 7.

    
por 06.09.2011 / 11:54
0

Compare o .config do 2.6.11 e do 2.6.15. Meu palpite é que no seu novo kernel você tem CONFIG_IP_MULTICAST=n (ou possivelmente m ). Deve ser y .

    
por 05.09.2011 / 20:07