Lines Matching refs:fl4

509 static void __build_flow_key(const struct net *net, struct flowi4 *fl4,  in __build_flow_key()  argument
525 flowi4_init_output(fl4, oif, mark, tos & INET_DSCP_MASK, scope, in __build_flow_key()
530 static void build_skb_flow_key(struct flowi4 *fl4, const struct sk_buff *skb, in build_skb_flow_key() argument
540 __build_flow_key(net, fl4, sk, iph, oif, tos, prot, mark, 0); in build_skb_flow_key()
543 static void build_sk_flow_key(struct flowi4 *fl4, const struct sock *sk) in build_sk_flow_key() argument
553 flowi4_init_output(fl4, sk->sk_bound_dev_if, READ_ONCE(sk->sk_mark), in build_sk_flow_key()
564 static void ip_rt_build_flow_key(struct flowi4 *fl4, const struct sock *sk, in ip_rt_build_flow_key() argument
568 build_skb_flow_key(fl4, skb, sk); in ip_rt_build_flow_key()
570 build_sk_flow_key(fl4, sk); in ip_rt_build_flow_key()
738 static void __ip_do_redirect(struct rtable *rt, struct sk_buff *skb, struct flowi4 *fl4, in __ip_do_redirect() argument
790 if (fib_lookup(net, fl4, &res, 0) == 0) { in __ip_do_redirect()
793 fib_select_path(net, &res, fl4, skb); in __ip_do_redirect()
795 update_or_create_fnhe(nhc, fl4->daddr, new_gw, in __ip_do_redirect()
826 struct flowi4 fl4; in ip_do_redirect() local
836 __build_flow_key(net, &fl4, sk, iph, oif, tos, prot, mark, 0); in ip_do_redirect()
837 __ip_do_redirect(rt, skb, &fl4, true); in ip_do_redirect()
1013 static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) in __ip_rt_update_pmtu() argument
1040 if (fib_lookup(net, fl4, &res, 0) == 0) { in __ip_rt_update_pmtu()
1043 fib_select_path(net, &res, fl4, NULL); in __ip_rt_update_pmtu()
1050 update_or_create_fnhe(nhc, fl4->daddr, 0, mtu, lock, in __ip_rt_update_pmtu()
1057 update_or_create_fnhe(nhc, fl4->daddr, 0, mtu, lock, in __ip_rt_update_pmtu()
1069 struct flowi4 fl4; in ip_rt_update_pmtu() local
1071 ip_rt_build_flow_key(&fl4, sk, skb); in ip_rt_update_pmtu()
1075 fl4.flowi4_oif = 0; in ip_rt_update_pmtu()
1077 __ip_rt_update_pmtu(rt, &fl4, mtu); in ip_rt_update_pmtu()
1084 struct flowi4 fl4; in ipv4_update_pmtu() local
1088 __build_flow_key(net, &fl4, NULL, iph, oif, iph->tos, protocol, mark, in ipv4_update_pmtu()
1090 rt = __ip_route_output_key(net, &fl4); in ipv4_update_pmtu()
1092 __ip_rt_update_pmtu(rt, &fl4, mtu); in ipv4_update_pmtu()
1101 struct flowi4 fl4; in __ipv4_sk_update_pmtu() local
1104 __build_flow_key(sock_net(sk), &fl4, sk, iph, 0, 0, 0, 0, 0); in __ipv4_sk_update_pmtu()
1106 if (!fl4.flowi4_mark) in __ipv4_sk_update_pmtu()
1107 fl4.flowi4_mark = IP4_REPLY_MARK(sock_net(sk), skb->mark); in __ipv4_sk_update_pmtu()
1109 rt = __ip_route_output_key(sock_net(sk), &fl4); in __ipv4_sk_update_pmtu()
1111 __ip_rt_update_pmtu(rt, &fl4, mtu); in __ipv4_sk_update_pmtu()
1119 struct flowi4 fl4; in ipv4_sk_update_pmtu() local
1137 __build_flow_key(net, &fl4, sk, iph, 0, 0, 0, 0, 0); in ipv4_sk_update_pmtu()
1141 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); in ipv4_sk_update_pmtu()
1148 __ip_rt_update_pmtu(dst_rtable(xfrm_dst_path(&rt->dst)), &fl4, mtu); in ipv4_sk_update_pmtu()
1154 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); in ipv4_sk_update_pmtu()
1174 struct flowi4 fl4; in ipv4_redirect() local
1177 __build_flow_key(net, &fl4, NULL, iph, oif, iph->tos, protocol, 0, 0); in ipv4_redirect()
1178 rt = __ip_route_output_key(net, &fl4); in ipv4_redirect()
1180 __ip_do_redirect(rt, skb, &fl4, false); in ipv4_redirect()
1189 struct flowi4 fl4; in ipv4_sk_redirect() local
1193 __build_flow_key(net, &fl4, sk, iph, 0, 0, 0, 0, 0); in ipv4_sk_redirect()
1194 rt = __ip_route_output_key(net, &fl4); in ipv4_sk_redirect()
1196 __ip_do_redirect(rt, skb, &fl4, false); in ipv4_sk_redirect()
1291 struct flowi4 fl4 = { in ip_rt_get_source() local
1301 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0) in ip_rt_get_source()
2031 const struct flowi4 *fl4) in fib_multipath_custom_hash_fl4() argument
2042 hash_keys.addrs.v4addrs.src = fl4->saddr; in fib_multipath_custom_hash_fl4()
2044 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_custom_hash_fl4()
2046 hash_keys.basic.ip_proto = fl4->flowi4_proto; in fib_multipath_custom_hash_fl4()
2048 if (fl4->flowi4_flags & FLOWI_FLAG_ANY_SPORT) in fib_multipath_custom_hash_fl4()
2051 hash_keys.ports.src = fl4->fl4_sport; in fib_multipath_custom_hash_fl4()
2054 hash_keys.ports.dst = fl4->fl4_dport; in fib_multipath_custom_hash_fl4()
2060 int fib_multipath_hash(const struct net *net, const struct flowi4 *fl4, in fib_multipath_hash() argument
2063 u32 multipath_hash = fl4 ? fl4->flowi4_multipath_hash : 0; in fib_multipath_hash()
2074 hash_keys.addrs.v4addrs.src = fl4->saddr; in fib_multipath_hash()
2075 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2105 hash_keys.addrs.v4addrs.src = fl4->saddr; in fib_multipath_hash()
2106 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2107 if (fl4->flowi4_flags & FLOWI_FLAG_ANY_SPORT) in fib_multipath_hash()
2110 hash_keys.ports.src = fl4->fl4_sport; in fib_multipath_hash()
2111 hash_keys.ports.dst = fl4->fl4_dport; in fib_multipath_hash()
2112 hash_keys.basic.ip_proto = fl4->flowi4_proto; in fib_multipath_hash()
2142 hash_keys.addrs.v4addrs.src = fl4->saddr; in fib_multipath_hash()
2143 hash_keys.addrs.v4addrs.dst = fl4->daddr; in fib_multipath_hash()
2151 mhash = fib_multipath_custom_hash_fl4(net, fl4); in fib_multipath_hash()
2270 struct flowi4 fl4; in ip_route_input_slow() local
2284 fl4.flowi4_tun_key.tun_id = tun_info->key.tun_id; in ip_route_input_slow()
2286 fl4.flowi4_tun_key.tun_id = 0; in ip_route_input_slow()
2330 fl4.flowi4_l3mdev = 0; in ip_route_input_slow()
2331 fl4.flowi4_oif = 0; in ip_route_input_slow()
2332 fl4.flowi4_iif = dev->ifindex; in ip_route_input_slow()
2333 fl4.flowi4_mark = skb->mark; in ip_route_input_slow()
2334 fl4.flowi4_tos = inet_dscp_to_dsfield(dscp); in ip_route_input_slow()
2335 fl4.flowi4_scope = RT_SCOPE_UNIVERSE; in ip_route_input_slow()
2336 fl4.flowi4_flags = 0; in ip_route_input_slow()
2337 fl4.daddr = daddr; in ip_route_input_slow()
2338 fl4.saddr = saddr; in ip_route_input_slow()
2339 fl4.flowi4_uid = sock_net_uid(net, NULL); in ip_route_input_slow()
2340 fl4.flowi4_multipath_hash = 0; in ip_route_input_slow()
2342 if (fib4_rules_early_flow_dissect(net, skb, &fl4, &_flkeys)) { in ip_route_input_slow()
2345 fl4.flowi4_proto = 0; in ip_route_input_slow()
2346 fl4.fl4_sport = 0; in ip_route_input_slow()
2347 fl4.fl4_dport = 0; in ip_route_input_slow()
2350 err = fib_lookup(net, &fl4, res, 0); in ip_route_input_slow()
2557 const struct flowi4 *fl4, int orig_oif, in __mkroute_output() argument
2573 if (ipv4_is_loopback(fl4->saddr) && in __mkroute_output()
2578 if (ipv4_is_lbcast(fl4->daddr)) in __mkroute_output()
2580 else if (ipv4_is_multicast(fl4->daddr)) in __mkroute_output()
2582 else if (ipv4_is_zeronet(fl4->daddr)) in __mkroute_output()
2593 if (!ip_check_mc_rcu(in_dev, fl4->daddr, fl4->saddr, in __mkroute_output()
2594 fl4->flowi4_proto)) in __mkroute_output()
2624 fnhe = find_exception(nhc, fl4->daddr); in __mkroute_output()
2630 if (unlikely(fl4->flowi4_flags & in __mkroute_output()
2663 !ipv4_is_local_multicast(fl4->daddr)) { in __mkroute_output()
2671 rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0, do_cache); in __mkroute_output()
2681 struct rtable *ip_route_output_key_hash(struct net *net, struct flowi4 *fl4, in ip_route_output_key_hash() argument
2692 fl4->flowi4_iif = LOOPBACK_IFINDEX; in ip_route_output_key_hash()
2693 fl4->flowi4_tos &= INET_DSCP_MASK; in ip_route_output_key_hash()
2696 rth = ip_route_output_key_hash_rcu(net, fl4, &res, skb); in ip_route_output_key_hash()
2703 struct rtable *ip_route_output_key_hash_rcu(struct net *net, struct flowi4 *fl4, in ip_route_output_key_hash_rcu() argument
2708 int orig_oif = fl4->flowi4_oif; in ip_route_output_key_hash_rcu()
2713 if (fl4->saddr) { in ip_route_output_key_hash_rcu()
2714 if (ipv4_is_multicast(fl4->saddr) || in ip_route_output_key_hash_rcu()
2715 ipv4_is_lbcast(fl4->saddr)) { in ip_route_output_key_hash_rcu()
2730 if (fl4->flowi4_oif == 0 && in ip_route_output_key_hash_rcu()
2731 (ipv4_is_multicast(fl4->daddr) || in ip_route_output_key_hash_rcu()
2732 ipv4_is_lbcast(fl4->daddr))) { in ip_route_output_key_hash_rcu()
2734 dev_out = __ip_dev_find(net, fl4->saddr, false); in ip_route_output_key_hash_rcu()
2753 fl4->flowi4_oif = dev_out->ifindex; in ip_route_output_key_hash_rcu()
2757 if (!(fl4->flowi4_flags & FLOWI_FLAG_ANYSRC)) { in ip_route_output_key_hash_rcu()
2759 if (!__ip_dev_find(net, fl4->saddr, false)) in ip_route_output_key_hash_rcu()
2765 if (fl4->flowi4_oif) { in ip_route_output_key_hash_rcu()
2766 dev_out = dev_get_by_index_rcu(net, fl4->flowi4_oif); in ip_route_output_key_hash_rcu()
2776 if (ipv4_is_local_multicast(fl4->daddr) || in ip_route_output_key_hash_rcu()
2777 ipv4_is_lbcast(fl4->daddr) || in ip_route_output_key_hash_rcu()
2778 fl4->flowi4_proto == IPPROTO_IGMP) { in ip_route_output_key_hash_rcu()
2779 if (!fl4->saddr) in ip_route_output_key_hash_rcu()
2780 fl4->saddr = inet_select_addr(dev_out, 0, in ip_route_output_key_hash_rcu()
2784 if (!fl4->saddr) { in ip_route_output_key_hash_rcu()
2785 if (ipv4_is_multicast(fl4->daddr)) in ip_route_output_key_hash_rcu()
2786 fl4->saddr = inet_select_addr(dev_out, 0, in ip_route_output_key_hash_rcu()
2787 fl4->flowi4_scope); in ip_route_output_key_hash_rcu()
2788 else if (!fl4->daddr) in ip_route_output_key_hash_rcu()
2789 fl4->saddr = inet_select_addr(dev_out, 0, in ip_route_output_key_hash_rcu()
2794 if (!fl4->daddr) { in ip_route_output_key_hash_rcu()
2795 fl4->daddr = fl4->saddr; in ip_route_output_key_hash_rcu()
2796 if (!fl4->daddr) in ip_route_output_key_hash_rcu()
2797 fl4->daddr = fl4->saddr = htonl(INADDR_LOOPBACK); in ip_route_output_key_hash_rcu()
2799 fl4->flowi4_oif = LOOPBACK_IFINDEX; in ip_route_output_key_hash_rcu()
2805 err = fib_lookup(net, fl4, res, 0); in ip_route_output_key_hash_rcu()
2809 if (fl4->flowi4_oif && in ip_route_output_key_hash_rcu()
2810 (ipv4_is_multicast(fl4->daddr) || !fl4->flowi4_l3mdev)) { in ip_route_output_key_hash_rcu()
2829 if (fl4->saddr == 0) in ip_route_output_key_hash_rcu()
2830 fl4->saddr = inet_select_addr(dev_out, 0, in ip_route_output_key_hash_rcu()
2840 if (!fl4->saddr) { in ip_route_output_key_hash_rcu()
2842 fl4->saddr = res->fi->fib_prefsrc; in ip_route_output_key_hash_rcu()
2844 fl4->saddr = fl4->daddr; in ip_route_output_key_hash_rcu()
2856 fl4->flowi4_oif = dev_out->ifindex; in ip_route_output_key_hash_rcu()
2861 fib_select_path(net, res, fl4, skb); in ip_route_output_key_hash_rcu()
2866 rth = __mkroute_output(res, fl4, orig_oif, dev_out, flags); in ip_route_output_key_hash_rcu()
2942 struct flowi4 *fl4, struct sk_buff *skb, u32 portid, in rt_fill_info() argument
2989 if (fl4 && !rt_is_input_route(rt) && in rt_fill_info()
2990 fl4->saddr != src) { in rt_fill_info()
2991 if (nla_put_in_addr(skb, RTA_PREFSRC, fl4->saddr)) in rt_fill_info()
3031 if (fl4) { in rt_fill_info()
3032 if (fl4->flowi4_mark && in rt_fill_info()
3033 nla_put_u32(skb, RTA_MARK, fl4->flowi4_mark)) in rt_fill_info()
3036 if (!uid_eq(fl4->flowi4_uid, INVALID_UID) && in rt_fill_info()
3039 fl4->flowi4_uid))) in rt_fill_info()
3048 fl4->saddr, fl4->daddr, in rt_fill_info()
3058 if (nla_put_u32(skb, RTA_IIF, fl4->flowi4_iif)) in rt_fill_info()
3293 struct flowi4 fl4 = {}; in inet_rtm_getroute() local
3334 fl4.daddr = dst; in inet_rtm_getroute()
3335 fl4.saddr = src; in inet_rtm_getroute()
3336 fl4.flowi4_tos = inet_dscp_to_dsfield(dscp); in inet_rtm_getroute()
3337 fl4.flowi4_oif = nla_get_u32_default(tb[RTA_OIF], 0); in inet_rtm_getroute()
3338 fl4.flowi4_mark = mark; in inet_rtm_getroute()
3339 fl4.flowi4_uid = uid; in inet_rtm_getroute()
3341 fl4.fl4_sport = sport; in inet_rtm_getroute()
3343 fl4.fl4_dport = dport; in inet_rtm_getroute()
3344 fl4.flowi4_proto = ip_proto; in inet_rtm_getroute()
3357 fl4.flowi4_iif = iif; /* for rt_fill_info */ in inet_rtm_getroute()
3367 fl4.flowi4_iif = LOOPBACK_IFINDEX; in inet_rtm_getroute()
3369 rt = ip_route_output_key_hash_rcu(net, &fl4, &res, skb); in inet_rtm_getroute()
3432 err = rt_fill_info(net, dst, src, rt, table_id, res.dscp, &fl4, in inet_rtm_getroute()