Lines Matching refs:fl6
503 static int rawv6_push_pending_frames(struct sock *sk, struct flowi6 *fl6,
572 csum = csum_ipv6_magic(&fl6->saddr, &fl6->daddr,
573 total_len, fl6->flowi6_proto, tmp_csum);
575 if (csum == 0 && fl6->flowi6_proto == IPPROTO_UDP)
587 struct flowi6 *fl6, struct dst_entry **dstp,
600 ipv6_local_error(sk, EMSGSIZE, fl6, rt->dst.dev->mtu);
682 static int rawv6_probe_proto_opt(struct raw6_frag_vec *rfv, struct flowi6 *fl6)
685 switch (fl6->flowi6_proto) {
690 fl6->fl6_icmp_type = rfv->c[0];
691 fl6->fl6_icmp_code = rfv->c[1];
698 fl6->fl6_mh_type = rfv->c[2];
747 struct flowi6 fl6;
769 memset(&fl6, 0, sizeof(fl6));
771 fl6.flowi6_mark = READ_ONCE(sk->sk_mark);
772 fl6.flowi6_uid = sk->sk_uid;
776 ipc6.sockc.mark = fl6.flowi6_mark;
799 fl6.flowlabel = sin6->sin6_flowinfo&IPV6_FLOWINFO_MASK;
800 if (fl6.flowlabel&IPV6_FLOWLABEL_MASK) {
801 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
818 fl6.flowi6_oif = sin6->sin6_scope_id;
825 fl6.flowlabel = np->flow_label;
828 if (fl6.flowi6_oif == 0)
829 fl6.flowi6_oif = sk->sk_bound_dev_if;
837 err = ip6_datagram_send_ctl(sock_net(sk), sk, msg, &fl6, &ipc6);
842 if ((fl6.flowlabel&IPV6_FLOWLABEL_MASK) && !flowlabel) {
843 flowlabel = fl6_sock_lookup(sk, fl6.flowlabel);
858 fl6.flowi6_proto = proto;
859 fl6.flowi6_mark = ipc6.sockc.mark;
864 err = rawv6_probe_proto_opt(&rfv, &fl6);
870 fl6.daddr = *daddr;
872 fl6.daddr.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */
873 if (ipv6_addr_any(&fl6.saddr) && !ipv6_addr_any(&np->saddr))
874 fl6.saddr = np->saddr;
876 final_p = fl6_update_dst(&fl6, opt, &final);
878 if (!fl6.flowi6_oif && ipv6_addr_is_multicast(&fl6.daddr))
879 fl6.flowi6_oif = np->mcast_oif;
880 else if (!fl6.flowi6_oif)
881 fl6.flowi6_oif = np->ucast_oif;
882 security_sk_classify_flow(sk, flowi6_to_flowi_common(&fl6));
885 fl6.flowi6_flags |= FLOWI_FLAG_KNOWN_NH;
890 fl6.flowlabel = ip6_make_flowinfo(ipc6.tclass, fl6.flowlabel);
892 dst = ip6_dst_lookup_flow(sock_net(sk), sk, &fl6, final_p);
898 ipc6.hlimit = ip6_sk_dst_hoplimit(np, &fl6, dst);
908 err = rawv6_send_hdrinc(sk, msg, len, &fl6, &dst,
914 len, 0, &ipc6, &fl6, (struct rt6_info *)dst,
920 err = rawv6_push_pending_frames(sk, &fl6, rp);
931 dst_confirm_neigh(dst, &fl6.daddr);