ndisc: Remove dev argument for ndisc_send_skb().
[deliverable/linux.git] / net / ipv6 / ndisc.c
index 7ce266f34cc7ceaac34831be53a842cb671ce547..200b2b22b9ba29e49e380a1af8b92f48b0eb30dc 100644 (file)
@@ -384,22 +384,21 @@ static struct sk_buff *ndisc_alloc_skb(struct net_device *dev,
                return NULL;
        }
 
+       skb->protocol = htons(ETH_P_IPV6);
+       skb->dev = dev;
+
        skb_reserve(skb, hlen);
 
        return skb;
 }
 
-static void ip6_nd_hdr(struct sock *sk,
-                      struct sk_buff *skb, struct net_device *dev,
+static void ip6_nd_hdr(struct sk_buff *skb,
                       const struct in6_addr *saddr,
                       const struct in6_addr *daddr,
-                      int proto, int len)
+                      int hop_limit, int len)
 {
        struct ipv6hdr *hdr;
 
-       skb->protocol = htons(ETH_P_IPV6);
-       skb->dev = dev;
-
        skb_reset_network_header(skb);
        skb_put(skb, sizeof(struct ipv6hdr));
        hdr = ipv6_hdr(skb);
@@ -407,8 +406,8 @@ static void ip6_nd_hdr(struct sock *sk,
        ip6_flow_hdr(hdr, 0, 0);
 
        hdr->payload_len = htons(len);
-       hdr->nexthdr = proto;
-       hdr->hop_limit = inet6_sk(sk)->hop_limit;
+       hdr->nexthdr = IPPROTO_ICMPV6;
+       hdr->hop_limit = hop_limit;
 
        hdr->saddr = *saddr;
        hdr->daddr = *daddr;
@@ -439,7 +438,7 @@ static struct sk_buff *ndisc_build_skb(struct net_device *dev,
        if (!skb)
                return NULL;
 
-       ip6_nd_hdr(sk, skb, dev, saddr, daddr, IPPROTO_ICMPV6, len);
+       ip6_nd_hdr(skb, saddr, daddr, inet6_sk(sk)->hop_limit, len);
 
        skb->transport_header = skb->tail;
        skb_put(skb, len);
@@ -464,14 +463,14 @@ static struct sk_buff *ndisc_build_skb(struct net_device *dev,
        return skb;
 }
 
-static void ndisc_send_skb(struct sk_buff *skb, struct net_device *dev,
+static void ndisc_send_skb(struct sk_buff *skb,
                           const struct in6_addr *daddr,
                           const struct in6_addr *saddr,
                           struct icmp6hdr *icmp6h)
 {
        struct flowi6 fl6;
        struct dst_entry *dst;
-       struct net *net = dev_net(dev);
+       struct net *net = dev_net(skb->dev);
        struct sock *sk = net->ipv6.ndisc_sk;
        struct inet6_dev *idev;
        int err;
@@ -479,8 +478,8 @@ static void ndisc_send_skb(struct sk_buff *skb, struct net_device *dev,
 
        type = icmp6h->icmp6_type;
 
-       icmpv6_flow_init(sk, &fl6, type, saddr, daddr, dev->ifindex);
-       dst = icmp6_dst_alloc(dev, &fl6);
+       icmpv6_flow_init(sk, &fl6, type, saddr, daddr, skb->dev->ifindex);
+       dst = icmp6_dst_alloc(skb->dev, &fl6);
        if (IS_ERR(dst)) {
                kfree_skb(skb);
                return;
@@ -517,7 +516,7 @@ static void __ndisc_send(struct net_device *dev,
        if (!skb)
                return;
 
-       ndisc_send_skb(skb, dev, daddr, saddr, icmp6h);
+       ndisc_send_skb(skb, daddr, saddr, icmp6h);
 }
 
 static void ndisc_send_na(struct net_device *dev, struct neighbour *neigh,
@@ -1480,8 +1479,8 @@ void ndisc_send_redirect(struct sk_buff *skb, const struct in6_addr *target)
        if (!buff)
                goto release;
 
-       ip6_nd_hdr(sk, buff, dev, &saddr_buf, &ipv6_hdr(skb)->saddr,
-                  IPPROTO_ICMPV6, len);
+       ip6_nd_hdr(buff, &saddr_buf, &ipv6_hdr(skb)->saddr,
+                  inet6_sk(sk)->hop_limit, len);
 
        skb_set_transport_header(buff, skb_tail_pointer(buff) - buff->data);
        skb_put(buff, len);
This page took 0.028844 seconds and 5 git commands to generate.