Lines Matching defs:fl6
196 struct flowi6 *fl6, bool apply_ratelimit)
211 dst = ip6_route_output(net, sk, fl6);
228 peer = inet_getpeer_v6(net->ipv6.peers, &fl6->daddr);
241 struct flowi6 *fl6)
247 dst = ip6_route_output(net, sk, fl6);
277 void icmpv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
294 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr,
295 &fl6->daddr,
296 len, fl6->flowi6_proto,
307 icmp6h->icmp6_cksum = csum_ipv6_magic(&fl6->saddr,
308 &fl6->daddr,
309 len, fl6->flowi6_proto,
358 struct flowi6 *fl6)
364 err = ip6_dst_lookup(net, sk, &dst, fl6);
373 ipv6_anycast_destination(dst, &fl6->daddr)) {
382 dst = xfrm_lookup(net, dst, flowi6_to_flowi(fl6), sk, 0);
463 struct flowi6 fl6;
559 memset(&fl6, 0, sizeof(fl6));
560 fl6.flowi6_proto = IPPROTO_ICMPV6;
561 fl6.daddr = hdr->saddr;
565 fl6.saddr = *saddr;
566 } else if (!icmpv6_rt_has_prefsrc(sk, type, &fl6)) {
572 ipv6_dev_get_saddr(net, in_netdev, &fl6.daddr,
574 &fl6.saddr);
578 fl6.flowi6_mark = mark;
579 fl6.flowi6_oif = iif;
580 fl6.fl6_icmp_type = type;
581 fl6.fl6_icmp_code = code;
582 fl6.flowi6_uid = sock_net_uid(net, NULL);
583 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, NULL);
584 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6));
588 if (!icmpv6_xrlim_allow(sk, type, &fl6, apply_ratelimit))
596 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
597 fl6.flowi6_oif = READ_ONCE(np->mcast_oif);
598 else if (!fl6.flowi6_oif)
599 fl6.flowi6_oif = READ_ONCE(np->ucast_oif);
603 fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
605 dst = icmpv6_route_lookup(net, skb, sk, &fl6);
609 ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
628 &ipc6, &fl6, dst_rt6_info(dst),
633 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
733 struct flowi6 fl6;
764 memset(&fl6, 0, sizeof(fl6));
766 fl6.flowlabel = ip6_flowlabel(ipv6_hdr(skb));
768 fl6.flowi6_proto = IPPROTO_ICMPV6;
769 fl6.daddr = ipv6_hdr(skb)->saddr;
771 fl6.saddr = *saddr;
772 fl6.flowi6_oif = icmp6_iif(skb);
773 fl6.fl6_icmp_type = type;
774 fl6.flowi6_mark = mark;
775 fl6.flowi6_uid = sock_net_uid(net, NULL);
776 security_skb_classify_flow(skb, flowi6_to_flowi_common(&fl6));
784 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
785 fl6.flowi6_oif = READ_ONCE(np->mcast_oif);
786 else if (!fl6.flowi6_oif)
787 fl6.flowi6_oif = READ_ONCE(np->ucast_oif);
789 if (ip6_dst_lookup(net, sk, &dst, &fl6))
791 dst = xfrm_lookup(net, dst, flowi6_to_flowi(&fl6), sk, 0);
798 !icmpv6_xrlim_allow(sk, ICMPV6_ECHO_REPLY, &fl6, apply_ratelimit))
808 ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
818 sizeof(struct icmp6hdr), &ipc6, &fl6,
823 icmpv6_push_pending_frames(sk, &fl6, &tmp_hdr,
1047 void icmpv6_flow_init(const struct sock *sk, struct flowi6 *fl6, u8 type,
1051 memset(fl6, 0, sizeof(*fl6));
1052 fl6->saddr = *saddr;
1053 fl6->daddr = *daddr;
1054 fl6->flowi6_proto = IPPROTO_ICMPV6;
1055 fl6->fl6_icmp_type = type;
1056 fl6->fl6_icmp_code = 0;
1057 fl6->flowi6_oif = oif;
1058 security_sk_classify_flow(sk, flowi6_to_flowi_common(fl6));