Lines Matching refs:fl6

433 					struct flowi6 *fl6, int oif,  in fib6_multipath_select()  argument
442 if (!fl6->mp_hash) in fib6_multipath_select()
443 fl6->mp_hash = rt6_multipath_hash(net, fl6, skb, NULL); in fib6_multipath_select()
445 if (fl6->mp_hash <= atomic_read(&match->fib6_nh.nh_upper_bound)) in fib6_multipath_select()
453 if (fl6->mp_hash > nh_upper_bound) in fib6_multipath_select()
1062 struct flowi6 *fl6, in ip6_pol_route_lookup() argument
1070 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in ip6_pol_route_lookup()
1074 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1080 f6i = rt6_device_match(net, f6i, &fl6->saddr, in ip6_pol_route_lookup()
1081 fl6->flowi6_oif, flags); in ip6_pol_route_lookup()
1082 if (f6i->fib6_nsiblings && fl6->flowi6_oif == 0) in ip6_pol_route_lookup()
1083 f6i = fib6_multipath_select(net, f6i, fl6, in ip6_pol_route_lookup()
1084 fl6->flowi6_oif, skb, in ip6_pol_route_lookup()
1088 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
1093 trace_fib6_table_lookup(net, f6i, table, fl6); in ip6_pol_route_lookup()
1096 rt = rt6_find_cached_rt(f6i, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
1116 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
1119 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_lookup); in ip6_route_lookup()
1127 struct flowi6 fl6 = { in rt6_lookup() local
1135 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
1139 dst = fib6_rule_lookup(net, &fl6, skb, flags, ip6_pol_route_lookup); in rt6_lookup()
1827 int oif, struct flowi6 *fl6, int strict) in fib6_table_lookup() argument
1832 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in fib6_table_lookup()
1835 if (fl6->flowi6_flags & FLOWI_FLAG_SKIP_NH_OIF) in fib6_table_lookup()
1841 fn = fib6_backtrack(fn, &fl6->saddr); in fib6_table_lookup()
1852 trace_fib6_table_lookup(net, f6i, table, fl6); in fib6_table_lookup()
1858 int oif, struct flowi6 *fl6, in ip6_pol_route() argument
1872 f6i = fib6_table_lookup(net, table, oif, fl6, strict); in ip6_pol_route()
1874 f6i = fib6_multipath_select(net, f6i, fl6, oif, skb, strict); in ip6_pol_route()
1884 rt = rt6_find_cached_rt(f6i, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
1891 } else if (unlikely((fl6->flowi6_flags & FLOWI_FLAG_KNOWN_NH) && in ip6_pol_route()
1900 uncached_rt = ip6_rt_cache_alloc(f6i, &fl6->daddr, NULL); in ip6_pol_route()
1937 struct flowi6 *fl6, in ip6_pol_route_input() argument
1941 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, skb, flags); in ip6_pol_route_input()
1946 struct flowi6 *fl6, in ip6_route_input_lookup() argument
1950 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
1953 return fib6_rule_lookup(net, fl6, skb, flags, ip6_pol_route_input); in ip6_route_input_lookup()
2006 u32 rt6_multipath_hash(const struct net *net, const struct flowi6 *fl6, in rt6_multipath_hash() argument
2019 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2020 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2021 hash_keys.tags.flow_label = (__force u32)flowi6_get_flowlabel(fl6); in rt6_multipath_hash()
2022 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2049 hash_keys.addrs.v6addrs.src = fl6->saddr; in rt6_multipath_hash()
2050 hash_keys.addrs.v6addrs.dst = fl6->daddr; in rt6_multipath_hash()
2051 hash_keys.ports.src = fl6->fl6_sport; in rt6_multipath_hash()
2052 hash_keys.ports.dst = fl6->fl6_dport; in rt6_multipath_hash()
2053 hash_keys.basic.ip_proto = fl6->flowi6_proto; in rt6_multipath_hash()
2068 struct flowi6 fl6 = { in ip6_route_input() local
2080 fl6.flowi6_tun_key.tun_id = tun_info->key.tun_id; in ip6_route_input()
2082 if (fib6_rules_early_flow_dissect(net, skb, &fl6, &_flkeys)) in ip6_route_input()
2085 if (unlikely(fl6.flowi6_proto == IPPROTO_ICMPV6)) in ip6_route_input()
2086 fl6.mp_hash = rt6_multipath_hash(net, &fl6, skb, flkeys); in ip6_route_input()
2089 ip6_route_input_lookup(net, skb->dev, &fl6, skb, flags)); in ip6_route_input()
2094 struct flowi6 *fl6, in ip6_pol_route_output() argument
2098 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, skb, flags); in ip6_pol_route_output()
2102 struct flowi6 *fl6, int flags) in ip6_route_output_flags() argument
2106 if (rt6_need_strict(&fl6->daddr)) { in ip6_route_output_flags()
2109 dst = l3mdev_link_scope_lookup(net, fl6); in ip6_route_output_flags()
2114 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags()
2116 any_src = ipv6_addr_any(&fl6->saddr); in ip6_route_output_flags()
2117 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr) || in ip6_route_output_flags()
2118 (fl6->flowi6_oif && any_src)) in ip6_route_output_flags()
2126 return fib6_rule_lookup(net, fl6, NULL, flags, ip6_pol_route_output); in ip6_route_output_flags()
2376 struct flowi6 fl6; in ip6_update_pmtu() local
2378 memset(&fl6, 0, sizeof(fl6)); in ip6_update_pmtu()
2379 fl6.flowi6_oif = oif; in ip6_update_pmtu()
2380 fl6.flowi6_mark = mark ? mark : IP6_REPLY_MARK(net, skb->mark); in ip6_update_pmtu()
2381 fl6.daddr = iph->daddr; in ip6_update_pmtu()
2382 fl6.saddr = iph->saddr; in ip6_update_pmtu()
2383 fl6.flowlabel = ip6_flowinfo(iph); in ip6_update_pmtu()
2384 fl6.flowi6_uid = uid; in ip6_update_pmtu()
2386 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
2413 const struct flowi6 *fl6) in ip6_sk_dst_store_flow() argument
2420 ipv6_addr_equal(&fl6->daddr, &sk->sk_v6_daddr) ? in ip6_sk_dst_store_flow()
2423 ipv6_addr_equal(&fl6->saddr, &np->saddr) ? in ip6_sk_dst_store_flow()
2431 struct flowi6 fl6; member
2437 struct flowi6 *fl6, in __ip6_route_redirect() argument
2441 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
2457 fn = fib6_node_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
2468 if (fl6->flowi6_oif != rt->fib6_nh.nh_dev->ifindex) in __ip6_route_redirect()
2477 &fl6->daddr, in __ip6_route_redirect()
2478 &fl6->saddr); in __ip6_route_redirect()
2498 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
2511 trace_fib6_table_lookup(net, rt, table, fl6); in __ip6_route_redirect()
2516 const struct flowi6 *fl6, in ip6_route_redirect() argument
2523 rdfl.fl6 = *fl6; in ip6_route_redirect()
2526 return fib6_rule_lookup(net, &rdfl.fl6, skb, in ip6_route_redirect()
2535 struct flowi6 fl6; in ip6_redirect() local
2537 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect()
2538 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect()
2539 fl6.flowi6_oif = oif; in ip6_redirect()
2540 fl6.flowi6_mark = mark; in ip6_redirect()
2541 fl6.daddr = iph->daddr; in ip6_redirect()
2542 fl6.saddr = iph->saddr; in ip6_redirect()
2543 fl6.flowlabel = ip6_flowinfo(iph); in ip6_redirect()
2544 fl6.flowi6_uid = uid; in ip6_redirect()
2546 dst = ip6_route_redirect(net, &fl6, skb, &ipv6_hdr(skb)->saddr); in ip6_redirect()
2558 struct flowi6 fl6; in ip6_redirect_no_header() local
2560 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect_no_header()
2561 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect_no_header()
2562 fl6.flowi6_oif = oif; in ip6_redirect_no_header()
2563 fl6.flowi6_mark = mark; in ip6_redirect_no_header()
2564 fl6.daddr = msg->dest; in ip6_redirect_no_header()
2565 fl6.saddr = iph->daddr; in ip6_redirect_no_header()
2566 fl6.flowi6_uid = sock_net_uid(net, NULL); in ip6_redirect_no_header()
2568 dst = ip6_route_redirect(net, &fl6, skb, &iph->saddr); in ip6_redirect_no_header()
2674 struct flowi6 *fl6) in icmp6_dst_alloc() argument
2694 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
2695 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
2706 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
2760 struct flowi6 fl6 = { in ip6_nh_lookup_table() local
2776 rt = ip6_pol_route(net, table, cfg->fc_ifindex, &fl6, NULL, flags); in ip6_nh_lookup_table()
4853 struct flowi6 fl6; in inet6_rtm_getroute() local
4862 memset(&fl6, 0, sizeof(fl6)); in inet6_rtm_getroute()
4864 fl6.flowlabel = ip6_make_flowinfo(rtm->rtm_tos, 0); in inet6_rtm_getroute()
4871 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
4878 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
4888 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
4891 fl6.flowi6_uid = make_kuid(current_user_ns(), in inet6_rtm_getroute()
4894 fl6.flowi6_uid = iif ? INVALID_UID : current_uid(); in inet6_rtm_getroute()
4897 fl6.fl6_sport = nla_get_be16(tb[RTA_SPORT]); in inet6_rtm_getroute()
4900 fl6.fl6_dport = nla_get_be16(tb[RTA_DPORT]); in inet6_rtm_getroute()
4904 &fl6.flowi6_proto, extack); in inet6_rtm_getroute()
4922 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
4924 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
4927 dst = ip6_route_input_lookup(net, dev, &fl6, NULL, flags); in inet6_rtm_getroute()
4931 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
4933 dst = ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
4967 err = rt6_fill_node(net, skb, from, dst, &fl6.daddr, in inet6_rtm_getroute()
4968 &fl6.saddr, iif, RTM_NEWROUTE, in inet6_rtm_getroute()