[SLOF] [PATCH 1/3] net-snk: Remove bad NEIGHBOUR_SOLICITATION code in send_ipv6()

Thomas Huth thuth at redhat.com
Sat Jan 16 04:36:34 AEDT 2016

The code that checks for NEIGHBOUR_SOLICITATION packets is bad
in two ways: First, it does not check that the packet is really
an ICMPv6 packet, so it could accidentially be triggered for UDP
or TCP packets, too. Second, the fill_ethhdr() is redundant (since
it is done at the end of the function again) and also wrong (it
uses the wrong buffer pointer to fill in the ethernet header).

All we really need here is to get the right MAC address via
ip6_to_multicast_mac() - and this is handled in the following
if-statement already (NEIGHBOUR_SOLICITATIONs are always sent
as multicast in the send_neighbour_solicitation() function), so
the bad code block can simply be removed to fix the two issues.

Signed-off-by: Thomas Huth <thuth at redhat.com>
 clients/net-snk/app/netlib/ipv6.c | 10 +---------
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/clients/net-snk/app/netlib/ipv6.c b/clients/net-snk/app/netlib/ipv6.c
index 2d2d952..5b38ee0 100644
--- a/clients/net-snk/app/netlib/ipv6.c
+++ b/clients/net-snk/app/netlib/ipv6.c
@@ -530,16 +530,8 @@ send_ipv6 (int fd, void* buffer, int len)
 	n = find_neighbor (&ip_dst);
-	// If packet is a neighbor solicitation
-	if (icmp6h->type == ICMPV6_NEIGHBOUR_SOLICITATION) {
-		mac_addr = ip6_to_multicast_mac (&ip_dst);
-		fill_ethhdr( buffer-sizeof(struct ethhdr), htons(ETHERTYPE_IPv6),
-			     get_mac_address(),
-			     mac_addr);
-	}
 	// If address is a multicast address, create a proper mac address
-	else if (ip6_is_multicast (&ip_dst)) {
+	if (ip6_is_multicast (&ip_dst)) {
 		mac_addr = ip6_to_multicast_mac (&ip_dst);
 	else {

More information about the SLOF mailing list