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);
}
Также мое устройство с прямым порядком байтов.