Lines Matching refs:fl6
431 const struct flowi6 *fl6) in rt6_info_hash_nhsfn() argument
433 return get_hash_from_flowi6(fl6) % candidate_count; in rt6_info_hash_nhsfn()
437 struct flowi6 *fl6, int oif, in rt6_multipath_select() argument
443 route_choosen = rt6_info_hash_nhsfn(match->rt6i_nsiblings + 1, fl6); in rt6_multipath_select()
849 struct flowi6 *fl6, int flags) in ip6_pol_route_lookup() argument
855 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
858 rt = rt6_device_match(net, rt, &fl6->saddr, fl6->flowi6_oif, flags); in ip6_pol_route_lookup()
859 if (rt->rt6i_nsiblings && fl6->flowi6_oif == 0) in ip6_pol_route_lookup()
860 rt = rt6_multipath_select(rt, fl6, fl6->flowi6_oif, flags); in ip6_pol_route_lookup()
862 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
872 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
875 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_lookup); in ip6_route_lookup()
882 struct flowi6 fl6 = { in rt6_lookup() local
890 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
894 dst = fib6_rule_lookup(net, &fl6, flags, ip6_pol_route_lookup); in rt6_lookup()
1041 struct flowi6 *fl6, int flags) in ip6_pol_route() argument
1053 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
1056 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in ip6_pol_route()
1062 rt = rt6_multipath_select(rt, fl6, oif, strict); in ip6_pol_route()
1064 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route()
1082 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
1095 uncached_rt = ip6_rt_cache_alloc(rt, &fl6->daddr, NULL); in ip6_pol_route()
1134 struct flowi6 *fl6, int flags) in ip6_pol_route_input() argument
1136 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, flags); in ip6_pol_route_input()
1141 struct flowi6 *fl6, int flags) in ip6_route_input_lookup() argument
1143 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
1146 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_input); in ip6_route_input_lookup()
1155 struct flowi6 fl6 = { in ip6_route_input() local
1166 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
1168 skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, flags)); in ip6_route_input()
1172 struct flowi6 *fl6, int flags) in ip6_pol_route_output() argument
1174 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, flags); in ip6_pol_route_output()
1178 struct flowi6 *fl6, int flags) in ip6_route_output_flags() argument
1183 dst = l3mdev_rt6_dst_by_oif(net, fl6); in ip6_route_output_flags()
1187 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags()
1189 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags()
1190 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags()
1191 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags()
1199 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_output); in ip6_route_output_flags()
1393 struct flowi6 fl6; in ip6_update_pmtu() local
1395 memset(&fl6, 0, sizeof(fl6)); in ip6_update_pmtu()
1396 fl6.flowi6_oif = oif; in ip6_update_pmtu()
1397 fl6.flowi6_mark = mark ? mark : IP6_REPLY_MARK(net, skb->mark); in ip6_update_pmtu()
1398 fl6.daddr = iph->daddr; in ip6_update_pmtu()
1399 fl6.saddr = iph->saddr; in ip6_update_pmtu()
1400 fl6.flowlabel = ip6_flowinfo(iph); in ip6_update_pmtu()
1402 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
1418 struct flowi6 fl6; member
1424 struct flowi6 *fl6, in __ip6_route_redirect() argument
1427 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
1442 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
1451 if (fl6->flowi6_oif != rt->dst.dev->ifindex) in __ip6_route_redirect()
1466 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
1480 const struct flowi6 *fl6, in ip6_route_redirect() argument
1486 rdfl.fl6 = *fl6; in ip6_route_redirect()
1489 return fib6_rule_lookup(net, &rdfl.fl6, in ip6_route_redirect()
1497 struct flowi6 fl6; in ip6_redirect() local
1499 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect()
1500 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect()
1501 fl6.flowi6_oif = oif; in ip6_redirect()
1502 fl6.flowi6_mark = mark; in ip6_redirect()
1503 fl6.daddr = iph->daddr; in ip6_redirect()
1504 fl6.saddr = iph->saddr; in ip6_redirect()
1505 fl6.flowlabel = ip6_flowinfo(iph); in ip6_redirect()
1507 dst = ip6_route_redirect(net, &fl6, &ipv6_hdr(skb)->saddr); in ip6_redirect()
1519 struct flowi6 fl6; in ip6_redirect_no_header() local
1521 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect_no_header()
1522 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect_no_header()
1523 fl6.flowi6_oif = oif; in ip6_redirect_no_header()
1524 fl6.flowi6_mark = mark; in ip6_redirect_no_header()
1525 fl6.daddr = msg->dest; in ip6_redirect_no_header()
1526 fl6.saddr = iph->daddr; in ip6_redirect_no_header()
1528 dst = ip6_route_redirect(net, &fl6, &iph->saddr); in ip6_redirect_no_header()
1590 struct flowi6 *fl6) in icmp6_dst_alloc() argument
1610 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
1611 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
1623 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
3231 struct flowi6 fl6; in inet6_rtm_getroute() local
3239 memset(&fl6, 0, sizeof(fl6)); in inet6_rtm_getroute()
3245 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
3252 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
3262 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
3274 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
3276 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
3279 rt = (struct rt6_info *)ip6_route_input_lookup(net, dev, &fl6, in inet6_rtm_getroute()
3282 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
3285 fl6.flowi6_flags = FLOWI_FLAG_L3MDEV_SRC | in inet6_rtm_getroute()
3289 rt = (struct rt6_info *)ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
3307 err = rt6_fill_node(net, skb, rt, &fl6.daddr, &fl6.saddr, iif, in inet6_rtm_getroute()