Lines Matching refs:fl6
196 struct flowi6 *fl6, bool apply_ratelimit) in icmpv6_xrlim_allow() argument
210 dst = ip6_route_output(net, sk, fl6); in icmpv6_xrlim_allow()
226 peer = inet_getpeer_v6(net->ipv6.peers, &fl6->daddr); in icmpv6_xrlim_allow()
240 struct flowi6 *fl6) in icmpv6_rt_has_prefsrc() argument
246 dst = ip6_route_output(net, sk, fl6); in icmpv6_rt_has_prefsrc()
276 void icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6, in icmpv6_push_pending_frames() argument
293 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr, in icmpv6_push_pending_frames()
294 &fl6->daddr, in icmpv6_push_pending_frames()
295 len, fl6->flowi6_proto, in icmpv6_push_pending_frames()
306 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr, in icmpv6_push_pending_frames()
307 &fl6->daddr, in icmpv6_push_pending_frames()
308 len, fl6->flowi6_proto, in icmpv6_push_pending_frames()
357 struct flowi6 *fl6) in icmpv6_route_lookup() argument
363 err = ip6_dst_lookup(net, sk, &dst, fl6); in icmpv6_route_lookup()
372 ipv6_anycast_destination(dst, &fl6->daddr)) { in icmpv6_route_lookup()
381 dst = xfrm_lookup(net, dst, flowi6_to_flowi(fl6), sk, 0); in icmpv6_route_lookup()
462 struct flowi6 fl6; in icmp6_send() local
558 memset(&fl6, 0, sizeof(fl6)); in icmp6_send()
559 fl6.flowi6_proto = IPPROTO_ICMPV6; in icmp6_send()
560 fl6.daddr = hdr->saddr; in icmp6_send()
564 fl6.saddr = *saddr; in icmp6_send()
565 } else if (!icmpv6_rt_has_prefsrc(sk, type, &fl6)) { in icmp6_send()
571 ipv6_dev_get_saddr(net, in_netdev, &fl6.daddr, in icmp6_send()
573 &fl6.saddr); in icmp6_send()
577 fl6.flowi6_mark = mark; in icmp6_send()
578 fl6.flowi6_oif = iif; in icmp6_send()
579 fl6.fl6_icmp_type = type; in icmp6_send()
580 fl6.fl6_icmp_code = code; in icmp6_send()
581 fl6.flowi6_uid = sock_net_uid(net, NULL); in icmp6_send()
582 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, NULL); in icmp6_send()
583 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6)); in icmp6_send()
587 if (!icmpv6_xrlim_allow(sk, type, &fl6, apply_ratelimit)) in icmp6_send()
595 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr)) in icmp6_send()
596 fl6.flowi6_oif = READ_ONCE(np->mcast_oif); in icmp6_send()
597 else if (!fl6.flowi6_oif) in icmp6_send()
598 fl6.flowi6_oif = READ_ONCE(np->ucast_oif); in icmp6_send()
602 fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel); in icmp6_send()
604 dst = icmpv6_route_lookup(net, skb, sk, &fl6); in icmp6_send()
608 ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst); in icmp6_send()
627 &ipc6, &fl6, dst_rt6_info(dst), in icmp6_send()
632 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr, in icmp6_send()
732 struct flowi6 fl6; in icmpv6_echo_reply() local
763 memset(&fl6, 0, sizeof(fl6)); in icmpv6_echo_reply()
765 fl6.flowlabel = ip6_flowlabel(ipv6_hdr(skb)); in icmpv6_echo_reply()
767 fl6.flowi6_proto = IPPROTO_ICMPV6; in icmpv6_echo_reply()
768 fl6.daddr = ipv6_hdr(skb)->saddr; in icmpv6_echo_reply()
770 fl6.saddr = *saddr; in icmpv6_echo_reply()
771 fl6.flowi6_oif = icmp6_iif(skb); in icmpv6_echo_reply()
772 fl6.fl6_icmp_type = type; in icmpv6_echo_reply()
773 fl6.flowi6_mark = mark; in icmpv6_echo_reply()
774 fl6.flowi6_uid = sock_net_uid(net, NULL); in icmpv6_echo_reply()
775 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6)); in icmpv6_echo_reply()
783 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr)) in icmpv6_echo_reply()
784 fl6.flowi6_oif = READ_ONCE(np->mcast_oif); in icmpv6_echo_reply()
785 else if (!fl6.flowi6_oif) in icmpv6_echo_reply()
786 fl6.flowi6_oif = READ_ONCE(np->ucast_oif); in icmpv6_echo_reply()
788 if (ip6_dst_lookup(net, sk, &dst, &fl6)) in icmpv6_echo_reply()
790 dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0); in icmpv6_echo_reply()
797 !icmpv6_xrlim_allow(sk, ICMPV6_ECHO_REPLY, &fl6, apply_ratelimit)) in icmpv6_echo_reply()
807 ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst); in icmpv6_echo_reply()
817 sizeof(struct icmp6hdr), &ipc6, &fl6, in icmpv6_echo_reply()
822 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr, in icmpv6_echo_reply()
1046 void icmpv6_flow_init(const struct sock *sk, struct flowi6 *fl6, u8 type, in icmpv6_flow_init() argument
1050 memset(fl6, 0, sizeof(*fl6)); in icmpv6_flow_init()
1051 fl6->saddr = *saddr; in icmpv6_flow_init()
1052 fl6->daddr = *daddr; in icmpv6_flow_init()
1053 fl6->flowi6_proto = IPPROTO_ICMPV6; in icmpv6_flow_init()
1054 fl6->fl6_icmp_type = type; in icmpv6_flow_init()
1055 fl6->fl6_icmp_code = 0; in icmpv6_flow_init()
1056 fl6->flowi6_oif = oif; in icmpv6_flow_init()
1057 security_sk_classify_flow(sk, flowi6_to_flowi_common(fl6)); in icmpv6_flow_init()