I am developing a Linux IPv6 device driver without hardware. Therefore, I am now trying to trick the core with a fake router advertisement.
unsigned char c[] = {0x33, 0x33, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 61, 0x86, 0xdd, //IPv6 type 0x60, 0x00, 0x00, 0x00, //Version, ... 0x00, 24, //payload length 58, //next header 255, //hop limit 0xfe, 0x80, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0xff, 0xfe, 0x00, 0x00, 0x3d, //source 0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x01, //destination 134, //type 0, //code, 0x7a, 0x2c, //checksum 255, //current hop limit 0x80, //flag 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, //reachable timer 0x00, 0x00, 0x00, 0x00, 0x01, 0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 61, //source link-layer address };
I tried using Tcpdump to capture this package, which I send to the kernel. And I found that the kernel does receive this package.
13:32:59.989851 00:00:00:00:00:3d (oui Ethernet) > 33:33:00:00:00:02 (oui Unknown), ethertype IPv6 (0x86dd), length 78: (hlim 255, next-header ICMPv6 (58) payload length: 24) fe80::200:ff:fe00:3d > ip6-allnodes: [icmp6 sum ok] ICMP6, router advertisement, length 24 hop limit 255, Flags [managed], pref medium, router lifetime 65535s, reachable time 0s, retrans time 0s source link-address option (1), length 8 (1): 00:00:00:00:00:3d 0x0000: 0000 0000 003d
But after that, I use ip -6 neigh to check if the kernel has a fake node in the adjacent table. I can not find it.
What is my problem? Any idea?