Loading include/linux/icmpv6.h +8 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,14 @@ extern int icmpv6_err_convert(int type, int code, extern void icmpv6_cleanup(void); extern void icmpv6_param_prob(struct sk_buff *skb, int code, int pos); struct flowi; extern void icmpv6_flow_init(struct sock *sk, struct flowi *fl, u8 type, const struct in6_addr *saddr, const struct in6_addr *daddr, int oif); #endif #endif net/ipv6/icmp.c +16 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,22 @@ static int icmpv6_rcv(struct sk_buff *skb) return 0; } void icmpv6_flow_init(struct sock *sk, struct flowi *fl, u8 type, const struct in6_addr *saddr, const 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(sk, fl); } /* * Special lock-class for __icmpv6_sk: */ Loading net/ipv6/ndisc.c +4 −19 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) Loading Loading @@ -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) Loading Loading
include/linux/icmpv6.h +8 −0 Original line number Diff line number Diff line Loading @@ -182,6 +182,14 @@ extern int icmpv6_err_convert(int type, int code, extern void icmpv6_cleanup(void); extern void icmpv6_param_prob(struct sk_buff *skb, int code, int pos); struct flowi; extern void icmpv6_flow_init(struct sock *sk, struct flowi *fl, u8 type, const struct in6_addr *saddr, const struct in6_addr *daddr, int oif); #endif #endif
net/ipv6/icmp.c +16 −0 Original line number Diff line number Diff line Loading @@ -777,6 +777,22 @@ static int icmpv6_rcv(struct sk_buff *skb) return 0; } void icmpv6_flow_init(struct sock *sk, struct flowi *fl, u8 type, const struct in6_addr *saddr, const 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(sk, fl); } /* * Special lock-class for __icmpv6_sk: */ Loading
net/ipv6/ndisc.c +4 −19 Original line number Diff line number Diff line Loading @@ -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, Loading @@ -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) Loading Loading @@ -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) Loading