Recepção de quadros com destino MAC ALL ZERO

1

Estamos tentando implementar o módulo de assinatura GOOSE message (uma mensagem multicast, Generic Object Oriented Substation Event, parte do protocolo IEC61850). Em quase todos os casos, somos capazes de ler mensagens GOOSE sem qualquer atraso. Mas, intermitentemente, as mensagens GOOSE estão chegando a um aplicativo após um atraso de 3 segundos. Quando analisado o arquivo PCAP, capturado durante a situação de erro, percebe-se que a mensagem GOOSE está chegando até a camada de Rede do dispositivo sem nenhum atraso.

Estamos usando recvfrom call para buscar as mensagens da subcamada.

Versão do Linux: linux-3.8.13

Receber chamada é a seguinte:

unsigned char etherFrameRx[1518];

recvLen = recvfrom (hPktSock, etherFrameRx, sizeof(etherFrameRx),
          MSG_TRUNC, NULL, NULL);

A inicialização do soquete é a seguinte:

hPktSock = socket (PF_PACKET, SOCK_RAW, htons(ETH_P_ALL);
arg |= O_NONBLOCK;
ret = fcntl (hPktSock, F_SETFL, arg);

Enquanto o atraso é notado, (Tempo entre a recepção da mensagem na camada MAC do dispositivo e a recepção da mensagem no aplicativo), o aplicativo recebe continuamente quadros com o destino MAC 'ALL ZERO' (0: 0: 0: 0: 0: 0) E no log do Wireshark (interface eth0), não percebíamos essas mensagens. Essas mensagens anormais contínuas do kernel atrasam a recepção GOOSE.

A probabilidade de ocorrência do problema é alta após uma sincronização de tempo do dispositivo. SNTP é o mecanismo usado para sincronização de tempo.

O arquivo .pcap capturado usando o Wireshark (instalado no dispositivo Subscribing the GOOSE) durante a situação de erro é compartilhado no seguinte caminho:

[não disponível]

No log, a mensagem GOOSE é recebida em 12: 36: 11.636989. Mas o mesmo é atualizado no aplicativo em 12: 36: 14.8012

Por que o kernel do Linux está retornando quadros com Destination MAC de ALL ZERO?

    
por Smrithy TR 09.11.2017 / 07:11

0 respostas