aboutsummaryrefslogtreecommitdiffstats
path: root/net
diff options
context:
space:
mode:
Diffstat (limited to 'net')
-rw-r--r--net/ipv6/icmp.c16
-rw-r--r--net/ipv6/ndisc.c23
2 files changed, 20 insertions, 19 deletions
diff --git a/net/ipv6/icmp.c b/net/ipv6/icmp.c
index 12c0b85d6c46..cff74127ea32 100644
--- a/net/ipv6/icmp.c
+++ b/net/ipv6/icmp.c
@@ -777,6 +777,22 @@ drop_no_count:
777 return 0; 777 return 0;
778} 778}
779 779
780void icmpv6_flow_init(struct sock *sk, struct flowi *fl,
781 u8 type,
782 const struct in6_addr *saddr,
783 const struct in6_addr *daddr,
784 int oif)
785{
786 memset(fl, 0, sizeof(*fl));
787 ipv6_addr_copy(&fl->fl6_src, saddr);
788 ipv6_addr_copy(&fl->fl6_dst, daddr);
789 fl->proto = IPPROTO_ICMPV6;
790 fl->fl_icmp_type = type;
791 fl->fl_icmp_code = 0;
792 fl->oif = oif;
793 security_sk_classify_flow(sk, fl);
794}
795
780/* 796/*
781 * Special lock-class for __icmpv6_sk: 797 * Special lock-class for __icmpv6_sk:
782 */ 798 */
diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index 1fc33c8c7232..8db5f4a419aa 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -441,21 +441,6 @@ static void pndisc_destructor(struct pneigh_entry *n)
441/* 441/*
442 * Send a Neighbour Advertisement 442 * Send a Neighbour Advertisement
443 */ 443 */
444
445static inline void ndisc_flow_init(struct flowi *fl, u8 type,
446 struct in6_addr *saddr, struct in6_addr *daddr,
447 int oif)
448{
449 memset(fl, 0, sizeof(*fl));
450 ipv6_addr_copy(&fl->fl6_src, saddr);
451 ipv6_addr_copy(&fl->fl6_dst, daddr);
452 fl->proto = IPPROTO_ICMPV6;
453 fl->fl_icmp_type = type;
454 fl->fl_icmp_code = 0;
455 fl->oif = oif;
456 security_sk_classify_flow(ndisc_socket->sk, fl);
457}
458
459static void __ndisc_send(struct net_device *dev, 444static void __ndisc_send(struct net_device *dev,
460 struct neighbour *neigh, 445 struct neighbour *neigh,
461 struct in6_addr *daddr, struct in6_addr *saddr, 446 struct in6_addr *daddr, struct in6_addr *saddr,
@@ -474,8 +459,8 @@ static void __ndisc_send(struct net_device *dev,
474 459
475 type = icmp6h->icmp6_type; 460 type = icmp6h->icmp6_type;
476 461
477 ndisc_flow_init(&fl, type, saddr, daddr, 462 icmpv6_flow_init(ndisc_socket->sk, &fl, type,
478 dev->ifindex); 463 saddr, daddr, dev->ifindex);
479 464
480 dst = ndisc_dst_alloc(dev, neigh, daddr, ip6_output); 465 dst = ndisc_dst_alloc(dev, neigh, daddr, ip6_output);
481 if (!dst) 466 if (!dst)
@@ -1439,8 +1424,8 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh,
1439 return; 1424 return;
1440 } 1425 }
1441 1426
1442 ndisc_flow_init(&fl, NDISC_REDIRECT, &saddr_buf, &ipv6_hdr(skb)->saddr, 1427 icmpv6_flow_init(ndisc_socket->sk, &fl, NDISC_REDIRECT,
1443 dev->ifindex); 1428 &saddr_buf, &ipv6_hdr(skb)->saddr, dev->ifindex);
1444 1429
1445 dst = ip6_route_output(NULL, &fl); 1430 dst = ip6_route_output(NULL, &fl);
1446 if (dst == NULL) 1431 if (dst == NULL)