Есть SoC под Linux со встроенным Ethernet портом, и кроме того, по интерфейсу MII, подключен свитч RTL8305.
Открывается сокет SOCK_RAW или SOCK_DGRAM и через него отправляются пакеты.
256 пакетов - пауза, 256 пакетов - пауза и т. д.
Со встроенным портом - нет проблем, я вижу все отправляемые пакеты.
С того который через свитч идут пакеты с номерами:
с 00 по 09,
с 41 по 4A,
с 82 по 8B,
с C3 по CC.
Т. е. десять пакетов проходят потом 50 не проходят.
sendto - ошибок не возвращает.
Подскажите куда копать? Спасибо.
int eth_Open()
{
int result = -1;
ether_fd = socket (AF_PACKET, SOCK_DGRAM, htons(ETH_P_ALL));
ether_haddr.sll_family = AF_PACKET;
ether_haddr.sll_protocol = htons(ETH_P_ALL);
ether_haddr.sll_ifindex = ethatpifc_fd;
ether_haddr.sll_addr[0] = 0x00;
ether_haddr.sll_addr[1] = 0x10;
ether_haddr.sll_addr[2] = 0xC6;
ether_haddr.sll_addr[3] = 0xA5;
ether_haddr.sll_addr[4] = 0xEB;
ether_haddr.sll_addr[5] = 0x68;
ether_haddr.sll_halen = 6;
result = 0;
return result;
}
int eth_Send(unsigned char *buffer, int len)
{
int result = -1;
if ((ether_fd != -1) && (buffer != NULL) && (len > 0))
{
result = sendto(ether_fd, buffer, len, 0, (struct sockaddr *)ðer_haddr, sizeof(ether_haddr));
}
if (result == -1)
{
printf("eth_Send.c/sendto() ERR returns %d (%d/%s)\r\n", result, errno, strerror(errno));
}
else result = 0;
return result;
}