ETH_P_IPV6 в dev_start_xmit

У меня есть сетевой драйвер (называемый gtp - протокол инкапсуляции udp) в качестве модуля ядра, реализованного в системе Openwrt, и библиотека netlink для управления драйвером путем открытия сокетов и т. Д. Драйвер, кажется, работает нормально, но когда ядро ​​вызывает gtp_start_xmit() с Указатель.ndo_start_xmit(), skb, переданный этой функции, имеет протокол 0x86dd (ETH_P_IPV6) такой, что ntohs(skb->protocol)=0x86dd. Я надеялся увидеть вместо этого 0x0800 (ETH_P_IP). Я не знаю, как кадр Ethernet идет в мой драйвер с этим полем. Может ли кто-нибудь помочь мне разобраться?

Библиотека netlink открывает сокет как:

int fd1 = socket(AF_INET, SOCK_DGRAM, 0);                        
struct sockaddr_in sockaddr_fd1 = {
    .sin_family = AF_INET,
    .sin_port   = htons(3386),
    .sin_addr   = {
        .s_addr     = INADDR_ANY,
    },
};                                                                   
if (bind(fd1, (struct sockaddr *) &sockaddr_fd1,
     sizeof(sockaddr_fd1)) < 0) {
    perror("bind");
    exit(EXIT_FAILURE);
}  

Также мое устройство с прямым порядком байтов.

0 ответов

Другие вопросы по тегам