[PATCH] IPv6: Source Address of MLD Message

From: $B5HF#1QL@(
Date: Thu Oct 17 2002 - 22:52:15 EST


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@linux-ipv6.org>
Credit: YOSHIFUJI Hideaki / USAGI Project <yoshfuji@linux-ipv6.org>
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@linux-ipv6.org>
GPG FP: 9022 65EB 1ECF 3AD1 0BDF  80D8 4807 F894 E062 0EEA
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Wed Oct 23 2002 - 22:00:39 EST