I'm recently analyzing the kernel source for IPv6 router.
I found that when the kernel has no forwarding entry of a packet,
the kernel sends an ICMPV6_DEST_UNREACH icmp message with
to the source of the packet.
But According to RFC 2463, If the kerenl has no forwarding entry of a
the kernel must send an ICMPV6_DEST_UNREACH icmp message with ICMPV6_NOROUTE
In my opinion, ip6_pkt_discard() should be modified as follows :
int ip6_pkt_discard(struct sk_buff *skb)
/* icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_ADDR_UNREACH, 0,
icmpv6_send(skb, ICMPV6_DEST_UNREACH, ICMPV6_NOROUTE, 0, skb->dev);
How about you ? Am I right ?
And I found another doubtable thing,
ipv6_routing_header() sends an ICMPv6 Parameter Problem message if the
extention header's length is odd value.
Then ICMPv6 Parameter Problem Message includes the pointer that indicates
the byte offset of errorneous field in a packet.
ipv6_routing_header() calculates the byte offset from the beginning of the
In my opinion, ipv6_routing_header() must calculates the byte offset from
the beginning of the
Is this right ?