netdev
[Top] [All Lists]

[PATCH] IPv6: Source Address of MLD Message

To: linux-kernel@xxxxxxxxxxxxxxx, netdev@xxxxxxxxxxx
Subject: [PATCH] IPv6: Source Address of MLD Message
From: YOSHIFUJI Hideaki / 吉藤英明 <yoshfuji@xxxxxxxxxxxxxx>
Date: Fri, 18 Oct 2002 12:52:15 +0900 (JST)
Cc: usagi@xxxxxxxxxxxxxx
Organization: USAGI Project
Sender: netdev-bounce@xxxxxxxxxxx
Hi!

draft-ietf-magma-mld-source-02.txt clarifies that the source address of
MLD Report / Done Message MUST be unspecified address when a link-local
address is not available.  This patch follows this clarification.

This patch is against 2.4.20-pre10.

Thanks in advance.

-------------------------------------------------------------------
Patch-Name: Source Address of MLD Message
Patch-Id: FIX_2_4_20_pre10_MLD_SADDR-20021017
Patch-Author: YOSHIFUJI Hideaki / USAGI Project <yoshfuji@xxxxxxxxxxxxxx>
Credit: YOSHIFUJI Hideaki / USAGI Project <yoshfuji@xxxxxxxxxxxxxx>
Reference: draft-ietf-magma-mld-source-02.txt
-------------------------------------------------------------------
Index: net/ipv6/mcast.c
===================================================================
RCS file: /cvsroot/usagi/usagi-backport/linux24/net/ipv6/mcast.c,v
retrieving revision 1.1.1.1
retrieving revision 1.1.1.1.30.2
diff -u -r1.1.1.1 -r1.1.1.1.30.2
--- net/ipv6/mcast.c    2002/08/20 09:47:02     1.1.1.1
+++ net/ipv6/mcast.c    2002/10/17 17:33:19     1.1.1.1.30.2
@@ -18,6 +18,9 @@
 /* Changes:
  *
  *     yoshfuji        : fix format of router-alert option
+ *     YOSHIFUJI Hideaki @USAGI:
+ *             Fixed source address for MLD message based on
+ *             <draft-ietf-magma-mld-source-02.txt>.
  */
 
 #define __NO_VERSION__
@@ -451,6 +454,7 @@
        struct in6_addr *addrp;
        struct inet6_dev *idev;
        struct icmp6hdr *hdr;
+       int addr_type;
 
        /* Our own report looped back. Ignore it. */
        if (skb->pkt_type == PACKET_LOOPBACK)
@@ -462,7 +466,9 @@
        hdr = (struct icmp6hdr*) skb->h.raw;
 
        /* Drop reports with not link local source */
-       if (!(ipv6_addr_type(&skb->nh.ipv6h->saddr)&IPV6_ADDR_LINKLOCAL))
+       addr_type = ipv6_addr_type(&skb->nh.ipv6h->saddr);
+       if (addr_type != IPV6_ADDR_ANY && 
+           !(addr_type&IPV6_ADDR_LINKLOCAL))
                return -EINVAL;
 
        addrp = (struct in6_addr *) (hdr + 1);
@@ -529,11 +535,11 @@
        }
 
        if (ipv6_get_lladdr(dev, &addr_buf)) {
-#if MCAST_DEBUG >= 1
-               printk(KERN_DEBUG "igmp6: %s no linklocal address\n",
-                      dev->name);
-#endif
-               goto out;
+               /* <draft-ietf-magma-mld-source-02.txt>:
+                * use unspecified address as the source address 
+                * when a valid link-local address is not available.
+                */
+               memset(&addr_buf, 0, sizeof(addr_buf));
        }
 
        ip6_nd_hdr(sk, skb, dev, &addr_buf, snd_addr, NEXTHDR_HOP, payload_len);

-- 
Hideaki YOSHIFUJI @ USAGI Project <yoshfuji@xxxxxxxxxxxxxx>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF  80D8 4807 F894 E062 0EEA


<Prev in Thread] Current Thread [Next in Thread>