Bad codepath in ndp/src/util.rs:
// dst == None here
cksum(src, dst, ICMP6_RS_ULP_LEN, &mut out);
// but None means ff02::2 here
let dst = SocketAddrV6::new(
dst.unwrap_or(ALL_ROUTERS_MCAST),
0,
0,
ifindex,
);
cksum(None) internally uses ALL_NODES_MCAST (ff02::1), which is correct for Router Advertisements. But send_rs(None) sends Router Solicitations to ALL_ROUTERS_MCAST (ff02::2).
ICMPv6 checksums include the IPv6 pseudo-header destination, so multicast RS packets are checksummed for ff02::1 but sent to ff02::2. Receivers should drop them as invalid
Bad codepath in ndp/src/util.rs:
cksum(None)internally usesALL_NODES_MCAST(ff02::1), which is correct for Router Advertisements. Butsend_rs(None)sends Router Solicitations toALL_ROUTERS_MCAST(ff02::2).ICMPv6 checksums include the IPv6 pseudo-header destination, so multicast RS packets are checksummed for
ff02::1but sent toff02::2. Receivers should drop them as invalid