Lines Matching refs:fl6
269 int ip6_xmit(const struct sock *sk, struct sk_buff *skb, struct flowi6 *fl6,
274 struct in6_addr *first_hop = &fl6->daddr;
278 u8 proto = fl6->flowi6_proto;
309 &fl6->saddr);
324 ip6_flow_hdr(hdr, tclass, ip6_make_flowlabel(net, skb, fl6->flowlabel,
325 ip6_autoflowlabel(net, np), fl6));
331 hdr->saddr = fl6->saddr;
362 ipv6_local_error((struct sock *)sk, EMSGSIZE, fl6, mtu);
1035 const struct flowi6 *fl6)
1066 if (ip6_rt_check(&rt->rt6i_dst, &fl6->daddr, np->daddr_cache) ||
1068 ip6_rt_check(&rt->rt6i_src, &fl6->saddr, np->saddr_cache) ||
1070 (!(fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) &&
1071 (fl6->flowi6_oif && fl6->flowi6_oif != dst->dev->ifindex))) {
1081 struct dst_entry **dst, struct flowi6 *fl6)
1099 if (ipv6_addr_any(&fl6->saddr) && (!*dst || !(*dst)->error)) {
1105 *dst = ip6_route_output(net, sk, fl6);
1110 err = ip6_route_get_saddr(net, from, &fl6->daddr,
1112 &fl6->saddr);
1127 if (fl6->flowi6_oif)
1132 *dst = ip6_route_output_flags(net, sk, fl6, flags);
1150 rt6_nexthop(rt, &fl6->daddr));
1159 ifp = ipv6_get_ifaddr(net, &fl6->saddr,
1172 memcpy(&fl_gw6, fl6, sizeof(struct flowi6));
1181 if (ipv6_addr_v4mapped(&fl6->saddr) &&
1182 !(ipv6_addr_v4mapped(&fl6->daddr) || ipv6_addr_any(&fl6->daddr))) {
1203 * @fl6: flow to lookup
1210 struct flowi6 *fl6)
1213 return ip6_dst_lookup_tail(net, sk, dst, fl6);
1221 * @fl6: flow to lookup
1229 struct dst_entry *ip6_dst_lookup_flow(struct net *net, const struct sock *sk, struct flowi6 *fl6,
1235 err = ip6_dst_lookup_tail(net, sk, &dst, fl6);
1239 fl6->daddr = *final_dst;
1241 return xfrm_lookup_route(net, dst, flowi6_to_flowi(fl6), sk, 0);
1248 * @fl6: flow to lookup
1263 struct dst_entry *ip6_sk_dst_lookup_flow(struct sock *sk, struct flowi6 *fl6,
1269 dst = ip6_sk_dst_check(sk, dst, fl6);
1273 dst = ip6_dst_lookup_flow(sock_net(sk), sk, fl6, final_dst);
1275 ip6_sk_dst_store_flow(sk, dst_clone(dst), fl6);
1310 struct flowi6 fl6;
1321 memset(&fl6, 0, sizeof(fl6));
1322 fl6.flowi6_mark = skb->mark;
1323 fl6.flowi6_proto = protocol;
1324 fl6.daddr = info->key.u.ipv6.dst;
1325 fl6.saddr = info->key.u.ipv6.src;
1327 fl6.flowlabel = ip6_make_flowinfo(prio, info->key.label);
1329 dst = ipv6_stub->ipv6_dst_lookup_flow(net, sock->sk, &fl6,
1332 netdev_dbg(dev, "no route to %pI6\n", &fl6.daddr);
1336 netdev_dbg(dev, "circular route to %pI6\n", &fl6.daddr);
1342 dst_cache_set_ip6(dst_cache, dst, &fl6.saddr);
1344 *saddr = fl6.saddr;
1387 struct rt6_info *rt, struct flowi6 *fl6)
1432 cork->fl.u.ip6 = *fl6;
1461 struct flowi6 *fl6,
1529 ipv6_local_rxpmtu(sk, fl6, mtu - headersize +
1542 ipv6_local_error(sk, EMSGSIZE, fl6, pmtu);
1815 struct ipcm6_cookie *ipc6, struct flowi6 *fl6,
1830 ipc6, rt, fl6);
1838 fl6 = &inet->cork.fl.u.ip6;
1842 return __ip6_append_data(sk, fl6, &sk->sk_write_queue, &inet->cork.base,
1881 struct flowi6 *fl6 = &cork->fl.u.ip6;
1882 unsigned char proto = fl6->flowi6_proto;
1906 *final_dst = fl6->daddr;
1911 ipv6_push_nfrag_opts(skb, opt, &proto, &final_dst, &fl6->saddr);
1918 ip6_make_flowlabel(net, skb, fl6->flowlabel,
1919 ip6_autoflowlabel(net, np), fl6));
1922 hdr->saddr = fl6->saddr;
1937 !(fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH))
1938 icmp6_type = fl6->fl6_icmp_type;
2010 struct ipcm6_cookie *ipc6, struct flowi6 *fl6,
2029 err = ip6_setup_cork(sk, cork, &v6_cork, ipc6, rt, fl6);
2037 err = __ip6_append_data(sk, fl6, &queue, &cork->base, &v6_cork,