patch-2.4.22 linux-2.4.22/net/ipv6/ip6_output.c
Next file: linux-2.4.22/net/ipv6/ipv6_sockglue.c
Previous file: linux-2.4.22/net/ipv6/ip6_input.c
Back to the patch index
Back to the overall index
- Lines: 31
- Date:
2003-08-25 04:44:44.000000000 -0700
- Orig file:
linux-2.4.21/net/ipv6/ip6_output.c
- Orig date:
2003-06-13 07:51:39.000000000 -0700
diff -urN linux-2.4.21/net/ipv6/ip6_output.c linux-2.4.22/net/ipv6/ip6_output.c
@@ -69,8 +69,11 @@
struct hh_cache *hh = dst->hh;
if (hh) {
+ int hh_alen;
+
read_lock_bh(&hh->hh_lock);
- memcpy(skb->data - 16, hh->hh_data, 16);
+ hh_alen = HH_DATA_ALIGN(hh->hh_len);
+ memcpy(skb->data - hh_alen, hh->hh_data, hh_alen);
read_unlock_bh(&hh->hh_lock);
skb_push(skb, hh->hh_len);
return hh->hh_output(skb);
@@ -107,7 +110,8 @@
if (ipv6_addr_is_multicast(&skb->nh.ipv6h->daddr)) {
if (!(dev->flags&IFF_LOOPBACK) &&
(skb->sk == NULL || skb->sk->net_pinfo.af_inet6.mc_loop) &&
- ipv6_chk_mcast_addr(dev, &skb->nh.ipv6h->daddr)) {
+ ipv6_chk_mcast_addr(dev, &skb->nh.ipv6h->daddr,
+ &skb->nh.ipv6h->saddr)) {
struct sk_buff *newskb = skb_clone(skb, GFP_ATOMIC);
/* Do not check for IFF_ALLMULTI; multicast routing
@@ -243,6 +247,7 @@
if (net_ratelimit())
printk(KERN_DEBUG "IPv6: sending pkt_too_big to self\n");
+ skb->dev = dst->dev;
icmpv6_send(skb, ICMPV6_PKT_TOOBIG, 0, dst->pmtu, skb->dev);
kfree_skb(skb);
return -EMSGSIZE;
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen (who was at: slshen@lbl.gov)