|
@@ -441,21 +441,6 @@ static void pndisc_destructor(struct pneigh_entry *n)
|
|
|
/*
|
|
|
* Send a Neighbour Advertisement
|
|
|
*/
|
|
|
-
|
|
|
-static inline void ndisc_flow_init(struct flowi *fl, u8 type,
|
|
|
- struct in6_addr *saddr, struct in6_addr *daddr,
|
|
|
- int oif)
|
|
|
-{
|
|
|
- memset(fl, 0, sizeof(*fl));
|
|
|
- ipv6_addr_copy(&fl->fl6_src, saddr);
|
|
|
- ipv6_addr_copy(&fl->fl6_dst, daddr);
|
|
|
- fl->proto = IPPROTO_ICMPV6;
|
|
|
- fl->fl_icmp_type = type;
|
|
|
- fl->fl_icmp_code = 0;
|
|
|
- fl->oif = oif;
|
|
|
- security_sk_classify_flow(ndisc_socket->sk, fl);
|
|
|
-}
|
|
|
-
|
|
|
static void __ndisc_send(struct net_device *dev,
|
|
|
struct neighbour *neigh,
|
|
|
struct in6_addr *daddr, struct in6_addr *saddr,
|
|
@@ -474,8 +459,8 @@ static void __ndisc_send(struct net_device *dev,
|
|
|
|
|
|
type = icmp6h->icmp6_type;
|
|
|
|
|
|
- ndisc_flow_init(&fl, type, saddr, daddr,
|
|
|
- dev->ifindex);
|
|
|
+ icmpv6_flow_init(ndisc_socket->sk, &fl, type,
|
|
|
+ saddr, daddr, dev->ifindex);
|
|
|
|
|
|
dst = ndisc_dst_alloc(dev, neigh, daddr, ip6_output);
|
|
|
if (!dst)
|
|
@@ -1439,8 +1424,8 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
- ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &ipv6_hdr(skb)->saddr,
|
|
|
- dev->ifindex);
|
|
|
+ icmpv6_flow_init(ndisc_socket->sk, &fl, NDISC_REDIRECT,
|
|
|
+ &saddr_buf, &ipv6_hdr(skb)->saddr, dev->ifindex);
|
|
|
|
|
|
dst = ip6_route_output(NULL, &fl);
|
|
|
if (dst == NULL)
|