Message ID | 1372512649-7550-1-git-send-email-amwang@redhat.com |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On Sat, Jun 29, 2013 at 09:30:49PM +0800, Cong Wang wrote: > --- a/include/net/addrconf.h > +++ b/include/net/addrconf.h > @@ -86,6 +86,9 @@ extern int ipv6_dev_get_saddr(struct net *net, > const struct in6_addr *daddr, > unsigned int srcprefs, > struct in6_addr *saddr); > +extern int __ipv6_get_lladdr(struct inet6_dev *idev, > + struct in6_addr *addr, > + unsigned char banned_flags); > extern int ipv6_get_lladdr(struct net_device *dev, > struct in6_addr *addr, > unsigned char banned_flags); > diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c > index 4e4cc1f..611b5cc 100644 > --- a/net/ipv6/addrconf.c > +++ b/net/ipv6/addrconf.c > @@ -1444,8 +1444,8 @@ try_nextdev: > } > EXPORT_SYMBOL(ipv6_dev_get_saddr); > > -static int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, > - unsigned char banned_flags) > +int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, > + unsigned char banned_flags) > { > struct inet6_ifaddr *ifp; > int err = -EADDRNOTAVAIL; > diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c > index 72c8bfe..dd0de91 100644 If we export __ipv6_get_lladdr in a header, shouldn't we also EXPORT_SYMBOL it? I am not sure but would have done so. Thanks, Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, 2013-06-29 at 15:53 +0200, Hannes Frederic Sowa wrote: > > If we export __ipv6_get_lladdr in a header, shouldn't we also EXPORT_SYMBOL > it? I am not sure but would have done so. Why? It is used only by IPv6 module itself. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
On Sat, Jun 29, 2013 at 10:09:41PM +0800, Cong Wang wrote: > On Sat, 2013-06-29 at 15:53 +0200, Hannes Frederic Sowa wrote: > > > > If we export __ipv6_get_lladdr in a header, shouldn't we also EXPORT_SYMBOL > > it? I am not sure but would have done so. > > Why? It is used only by IPv6 module itself. Yes, you are right. We don't export ipv6_get_lladdr either, so: Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Thanks, Hannes -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Hannes Frederic Sowa <hannes@stressinduktion.org> Date: Sat, 29 Jun 2013 16:40:52 +0200 > On Sat, Jun 29, 2013 at 10:09:41PM +0800, Cong Wang wrote: >> On Sat, 2013-06-29 at 15:53 +0200, Hannes Frederic Sowa wrote: >> > >> > If we export __ipv6_get_lladdr in a header, shouldn't we also EXPORT_SYMBOL >> > it? I am not sure but would have done so. >> >> Why? It is used only by IPv6 module itself. > > Yes, you are right. We don't export ipv6_get_lladdr either, so: > > Acked-by: Hannes Frederic Sowa <hannes@stressinduktion.org> Applied, thanks! -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
diff --git a/include/net/addrconf.h b/include/net/addrconf.h index 21f70270..01b1a1a 100644 --- a/include/net/addrconf.h +++ b/include/net/addrconf.h @@ -86,6 +86,9 @@ extern int ipv6_dev_get_saddr(struct net *net, const struct in6_addr *daddr, unsigned int srcprefs, struct in6_addr *saddr); +extern int __ipv6_get_lladdr(struct inet6_dev *idev, + struct in6_addr *addr, + unsigned char banned_flags); extern int ipv6_get_lladdr(struct net_device *dev, struct in6_addr *addr, unsigned char banned_flags); diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c index 4e4cc1f..611b5cc 100644 --- a/net/ipv6/addrconf.c +++ b/net/ipv6/addrconf.c @@ -1444,8 +1444,8 @@ try_nextdev: } EXPORT_SYMBOL(ipv6_dev_get_saddr); -static int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, - unsigned char banned_flags) +int __ipv6_get_lladdr(struct inet6_dev *idev, struct in6_addr *addr, + unsigned char banned_flags) { struct inet6_ifaddr *ifp; int err = -EADDRNOTAVAIL; diff --git a/net/ipv6/mcast.c b/net/ipv6/mcast.c index 72c8bfe..dd0de91 100644 --- a/net/ipv6/mcast.c +++ b/net/ipv6/mcast.c @@ -1343,8 +1343,9 @@ static void ip6_mc_hdr(struct sock *sk, struct sk_buff *skb, hdr->daddr = *daddr; } -static struct sk_buff *mld_newpack(struct net_device *dev, int size) +static struct sk_buff *mld_newpack(struct inet6_dev *idev, int size) { + struct net_device *dev = idev->dev; struct net *net = dev_net(dev); struct sock *sk = net->ipv6.igmp_sk; struct sk_buff *skb; @@ -1369,7 +1370,7 @@ static struct sk_buff *mld_newpack(struct net_device *dev, int size) skb_reserve(skb, hlen); - if (ipv6_get_lladdr(dev, &addr_buf, IFA_F_TENTATIVE)) { + if (__ipv6_get_lladdr(idev, &addr_buf, IFA_F_TENTATIVE)) { /* <draft-ietf-magma-mld-source-05.txt>: * use unspecified address as the source address * when a valid link-local address is not available. @@ -1466,7 +1467,7 @@ static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc, struct mld2_grec *pgr; if (!skb) - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(pmc->idev, dev->mtu); if (!skb) return NULL; pgr = (struct mld2_grec *)skb_put(skb, sizeof(struct mld2_grec)); @@ -1486,7 +1487,8 @@ static struct sk_buff *add_grhead(struct sk_buff *skb, struct ifmcaddr6 *pmc, static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc, int type, int gdeleted, int sdeleted) { - struct net_device *dev = pmc->idev->dev; + struct inet6_dev *idev = pmc->idev; + struct net_device *dev = idev->dev; struct mld2_report *pmr; struct mld2_grec *pgr = NULL; struct ip6_sf_list *psf, *psf_next, *psf_prev, **psf_list; @@ -1515,7 +1517,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc, AVAILABLE(skb) < grec_size(pmc, type, gdeleted, sdeleted)) { if (skb) mld_sendpack(skb); - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(idev, dev->mtu); } } first = 1; @@ -1542,7 +1544,7 @@ static struct sk_buff *add_grec(struct sk_buff *skb, struct ifmcaddr6 *pmc, pgr->grec_nsrcs = htons(scount); if (skb) mld_sendpack(skb); - skb = mld_newpack(dev, dev->mtu); + skb = mld_newpack(idev, dev->mtu); first = 1; scount = 0; } @@ -1597,8 +1599,8 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc) struct sk_buff *skb = NULL; int type; + read_lock_bh(&idev->lock); if (!pmc) { - read_lock_bh(&idev->lock); for (pmc=idev->mc_list; pmc; pmc=pmc->next) { if (pmc->mca_flags & MAF_NOREPORT) continue; @@ -1610,7 +1612,6 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc) skb = add_grec(skb, pmc, type, 0, 0); spin_unlock_bh(&pmc->mca_lock); } - read_unlock_bh(&idev->lock); } else { spin_lock_bh(&pmc->mca_lock); if (pmc->mca_sfcount[MCAST_EXCLUDE]) @@ -1620,6 +1621,7 @@ static void mld_send_report(struct inet6_dev *idev, struct ifmcaddr6 *pmc) skb = add_grec(skb, pmc, type, 0, 0); spin_unlock_bh(&pmc->mca_lock); } + read_unlock_bh(&idev->lock); if (skb) mld_sendpack(skb); }