Lines Matching refs:fl
525 static int rawv6_push_pending_frames(struct sock *sk, struct flowi *fl, in rawv6_push_pending_frames() argument
587 csum = csum_ipv6_magic(&fl->fl6_src, in rawv6_push_pending_frames()
588 &fl->fl6_dst, in rawv6_push_pending_frames()
589 total_len, fl->proto, tmp_csum); in rawv6_push_pending_frames()
591 if (csum == 0 && fl->proto == IPPROTO_UDP) in rawv6_push_pending_frames()
604 struct flowi *fl, struct rt6_info *rt, in rawv6_send_hdrinc() argument
613 ipv6_local_error(sk, EMSGSIZE, fl, rt->u.dst.dev->mtu); in rawv6_send_hdrinc()
659 static int rawv6_probe_proto_opt(struct flowi *fl, struct msghdr *msg) in rawv6_probe_proto_opt() argument
676 switch (fl->proto) { in rawv6_probe_proto_opt()
691 if (get_user(fl->fl_icmp_type, type) || in rawv6_probe_proto_opt()
692 get_user(fl->fl_icmp_code, code)) in rawv6_probe_proto_opt()
703 if (get_user(fl->fl_mh_type, &p[2 - len])) in rawv6_probe_proto_opt()
732 struct flowi fl; in rawv6_sendmsg() local
752 memset(&fl, 0, sizeof(fl)); in rawv6_sendmsg()
754 fl.mark = sk->sk_mark; in rawv6_sendmsg()
776 fl.fl6_flowlabel = sin6->sin6_flowinfo&IPV6_FLOWINFO_MASK; in rawv6_sendmsg()
777 if (fl.fl6_flowlabel&IPV6_FLOWLABEL_MASK) { in rawv6_sendmsg()
778 flowlabel = fl6_sock_lookup(sk, fl.fl6_flowlabel); in rawv6_sendmsg()
796 fl.oif = sin6->sin6_scope_id; in rawv6_sendmsg()
803 fl.fl6_flowlabel = np->flow_label; in rawv6_sendmsg()
806 if (fl.oif == 0) in rawv6_sendmsg()
807 fl.oif = sk->sk_bound_dev_if; in rawv6_sendmsg()
814 err = datagram_send_ctl(sock_net(sk), msg, &fl, opt, &hlimit, &tclass); in rawv6_sendmsg()
819 if ((fl.fl6_flowlabel&IPV6_FLOWLABEL_MASK) && !flowlabel) { in rawv6_sendmsg()
820 flowlabel = fl6_sock_lookup(sk, fl.fl6_flowlabel); in rawv6_sendmsg()
833 fl.proto = proto; in rawv6_sendmsg()
834 err = rawv6_probe_proto_opt(&fl, msg); in rawv6_sendmsg()
839 ipv6_addr_copy(&fl.fl6_dst, daddr); in rawv6_sendmsg()
841 fl.fl6_dst.s6_addr[15] = 0x1; /* :: means loopback (BSD'ism) */ in rawv6_sendmsg()
842 if (ipv6_addr_any(&fl.fl6_src) && !ipv6_addr_any(&np->saddr)) in rawv6_sendmsg()
843 ipv6_addr_copy(&fl.fl6_src, &np->saddr); in rawv6_sendmsg()
848 ipv6_addr_copy(&final, &fl.fl6_dst); in rawv6_sendmsg()
849 ipv6_addr_copy(&fl.fl6_dst, rt0->addr); in rawv6_sendmsg()
853 if (!fl.oif && ipv6_addr_is_multicast(&fl.fl6_dst)) in rawv6_sendmsg()
854 fl.oif = np->mcast_oif; in rawv6_sendmsg()
855 security_sk_classify_flow(sk, &fl); in rawv6_sendmsg()
857 err = ip6_dst_lookup(sk, &dst, &fl); in rawv6_sendmsg()
861 ipv6_addr_copy(&fl.fl6_dst, final_p); in rawv6_sendmsg()
863 err = __xfrm_lookup(sock_net(sk), &dst, &fl, sk, XFRM_LOOKUP_WAIT); in rawv6_sendmsg()
866 err = ip6_dst_blackhole(sk, &dst, &fl); in rawv6_sendmsg()
872 if (ipv6_addr_is_multicast(&fl.fl6_dst)) in rawv6_sendmsg()
891 err = rawv6_send_hdrinc(sk, msg->msg_iov, len, &fl, (struct rt6_info*)dst, msg->msg_flags); in rawv6_sendmsg()
895 len, 0, hlimit, tclass, opt, &fl, (struct rt6_info*)dst, in rawv6_sendmsg()
901 err = rawv6_push_pending_frames(sk, &fl, rp); in rawv6_sendmsg()