Lines Matching refs:fl4
504 static void __build_flow_key(struct flowi4 *fl4, const struct sock *sk, in __build_flow_key() argument
517 flowi4_init_output(fl4, oif, mark, tos, in __build_flow_key()
523 static void build_skb_flow_key(struct flowi4 *fl4, const struct sk_buff *skb, in build_skb_flow_key() argument
532 __build_flow_key(fl4, sk, iph, oif, tos, prot, mark, 0); in build_skb_flow_key()
535 static void build_sk_flow_key(struct flowi4 *fl4, const struct sock *sk) in build_sk_flow_key() argument
545 flowi4_init_output(fl4, sk->sk_bound_dev_if, sk->sk_mark, in build_sk_flow_key()
553 static void ip_rt_build_flow_key(struct flowi4 *fl4, const struct sock *sk, in ip_rt_build_flow_key() argument
557 build_skb_flow_key(fl4, skb, sk); in ip_rt_build_flow_key()
559 build_sk_flow_key(fl4, sk); in ip_rt_build_flow_key()
705 static void __ip_do_redirect(struct rtable *rt, struct sk_buff *skb, struct flowi4 *fl4, in __ip_do_redirect() argument
755 if (fib_lookup(net, fl4, &res, 0) == 0) { in __ip_do_redirect()
758 update_or_create_fnhe(nh, fl4->daddr, new_gw, in __ip_do_redirect()
788 struct flowi4 fl4; in ip_do_redirect() local
797 __build_flow_key(&fl4, sk, iph, oif, tos, prot, mark, 0); in ip_do_redirect()
798 __ip_do_redirect(rt, skb, &fl4, true); in ip_do_redirect()
967 static void __ip_rt_update_pmtu(struct rtable *rt, struct flowi4 *fl4, u32 mtu) in __ip_rt_update_pmtu() argument
986 if (fib_lookup(dev_net(dst->dev), fl4, &res, 0) == 0) { in __ip_rt_update_pmtu()
989 update_or_create_fnhe(nh, fl4->daddr, 0, mtu, in __ip_rt_update_pmtu()
999 struct flowi4 fl4; in ip_rt_update_pmtu() local
1001 ip_rt_build_flow_key(&fl4, sk, skb); in ip_rt_update_pmtu()
1002 __ip_rt_update_pmtu(rt, &fl4, mtu); in ip_rt_update_pmtu()
1009 struct flowi4 fl4; in ipv4_update_pmtu() local
1015 __build_flow_key(&fl4, NULL, iph, oif, in ipv4_update_pmtu()
1017 rt = __ip_route_output_key(net, &fl4); in ipv4_update_pmtu()
1019 __ip_rt_update_pmtu(rt, &fl4, mtu); in ipv4_update_pmtu()
1028 struct flowi4 fl4; in __ipv4_sk_update_pmtu() local
1031 __build_flow_key(&fl4, sk, iph, 0, 0, 0, 0, 0); in __ipv4_sk_update_pmtu()
1033 if (!fl4.flowi4_mark) in __ipv4_sk_update_pmtu()
1034 fl4.flowi4_mark = IP4_REPLY_MARK(sock_net(sk), skb->mark); in __ipv4_sk_update_pmtu()
1036 rt = __ip_route_output_key(sock_net(sk), &fl4); in __ipv4_sk_update_pmtu()
1038 __ip_rt_update_pmtu(rt, &fl4, mtu); in __ipv4_sk_update_pmtu()
1046 struct flowi4 fl4; in ipv4_sk_update_pmtu() local
1063 __build_flow_key(&fl4, sk, iph, 0, 0, 0, 0, 0); in ipv4_sk_update_pmtu()
1067 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); in ipv4_sk_update_pmtu()
1074 __ip_rt_update_pmtu((struct rtable *) rt->dst.path, &fl4, mtu); in ipv4_sk_update_pmtu()
1080 rt = ip_route_output_flow(sock_net(sk), &fl4, sk); in ipv4_sk_update_pmtu()
1100 struct flowi4 fl4; in ipv4_redirect() local
1103 __build_flow_key(&fl4, NULL, iph, oif, in ipv4_redirect()
1105 rt = __ip_route_output_key(net, &fl4); in ipv4_redirect()
1107 __ip_do_redirect(rt, skb, &fl4, false); in ipv4_redirect()
1116 struct flowi4 fl4; in ipv4_sk_redirect() local
1119 __build_flow_key(&fl4, sk, iph, 0, 0, 0, 0, 0); in ipv4_sk_redirect()
1120 rt = __ip_route_output_key(sock_net(sk), &fl4); in ipv4_sk_redirect()
1122 __ip_do_redirect(rt, skb, &fl4, false); in ipv4_sk_redirect()
1183 struct flowi4 fl4; in ip_rt_get_source() local
1188 memset(&fl4, 0, sizeof(fl4)); in ip_rt_get_source()
1189 fl4.daddr = iph->daddr; in ip_rt_get_source()
1190 fl4.saddr = iph->saddr; in ip_rt_get_source()
1191 fl4.flowi4_tos = RT_TOS(iph->tos); in ip_rt_get_source()
1192 fl4.flowi4_oif = rt->dst.dev->ifindex; in ip_rt_get_source()
1193 fl4.flowi4_iif = skb->dev->ifindex; in ip_rt_get_source()
1194 fl4.flowi4_mark = skb->mark; in ip_rt_get_source()
1197 if (fib_lookup(dev_net(rt->dst.dev), &fl4, &res, 0) == 0) in ip_rt_get_source()
1738 const struct flowi4 *fl4, in ip_mkroute_input() argument
1775 struct flowi4 fl4; in ip_route_input_slow() local
1794 fl4.flowi4_tun_key.tun_id = tun_info->key.tun_id; in ip_route_input_slow()
1796 fl4.flowi4_tun_key.tun_id = 0; in ip_route_input_slow()
1830 fl4.flowi4_oif = 0; in ip_route_input_slow()
1831 fl4.flowi4_iif = l3mdev_fib_oif_rcu(dev); in ip_route_input_slow()
1832 fl4.flowi4_mark = skb->mark; in ip_route_input_slow()
1833 fl4.flowi4_tos = tos; in ip_route_input_slow()
1834 fl4.flowi4_scope = RT_SCOPE_UNIVERSE; in ip_route_input_slow()
1835 fl4.flowi4_flags = 0; in ip_route_input_slow()
1836 fl4.daddr = daddr; in ip_route_input_slow()
1837 fl4.saddr = saddr; in ip_route_input_slow()
1838 err = fib_lookup(net, &fl4, &res, 0); in ip_route_input_slow()
1863 err = ip_mkroute_input(skb, &res, &fl4, in_dev, daddr, saddr, tos); in ip_route_input_slow()
2002 const struct flowi4 *fl4, int orig_oif, in __mkroute_output() argument
2018 if (ipv4_is_loopback(fl4->saddr) && !(dev_out->flags & IFF_LOOPBACK)) in __mkroute_output()
2021 if (ipv4_is_lbcast(fl4->daddr)) in __mkroute_output()
2023 else if (ipv4_is_multicast(fl4->daddr)) in __mkroute_output()
2025 else if (ipv4_is_zeronet(fl4->daddr)) in __mkroute_output()
2037 if (!ip_check_mc_rcu(in_dev, fl4->daddr, fl4->saddr, in __mkroute_output()
2038 fl4->flowi4_proto)) in __mkroute_output()
2068 fnhe = find_exception(nh, fl4->daddr); in __mkroute_output()
2074 ip_del_fnhe(nh, fl4->daddr); in __mkroute_output()
2081 if (unlikely(fl4->flowi4_flags & in __mkroute_output()
2121 !ipv4_is_local_multicast(fl4->daddr)) { in __mkroute_output()
2129 rt_set_nexthop(rth, fl4->daddr, res, fnhe, fi, type, 0); in __mkroute_output()
2140 struct rtable *__ip_route_output_key_hash(struct net *net, struct flowi4 *fl4, in __ip_route_output_key_hash() argument
2144 __u8 tos = RT_FL_TOS(fl4); in __ip_route_output_key_hash()
2155 orig_oif = fl4->flowi4_oif; in __ip_route_output_key_hash()
2157 fl4->flowi4_iif = LOOPBACK_IFINDEX; in __ip_route_output_key_hash()
2158 fl4->flowi4_tos = tos & IPTOS_RT_MASK; in __ip_route_output_key_hash()
2159 fl4->flowi4_scope = ((tos & RTO_ONLINK) ? in __ip_route_output_key_hash()
2163 if (fl4->saddr) { in __ip_route_output_key_hash()
2165 if (ipv4_is_multicast(fl4->saddr) || in __ip_route_output_key_hash()
2166 ipv4_is_lbcast(fl4->saddr) || in __ip_route_output_key_hash()
2167 ipv4_is_zeronet(fl4->saddr)) in __ip_route_output_key_hash()
2178 if (fl4->flowi4_oif == 0 && in __ip_route_output_key_hash()
2179 (ipv4_is_multicast(fl4->daddr) || in __ip_route_output_key_hash()
2180 ipv4_is_lbcast(fl4->daddr))) { in __ip_route_output_key_hash()
2182 dev_out = __ip_dev_find(net, fl4->saddr, false); in __ip_route_output_key_hash()
2201 fl4->flowi4_oif = dev_out->ifindex; in __ip_route_output_key_hash()
2205 if (!(fl4->flowi4_flags & FLOWI_FLAG_ANYSRC)) { in __ip_route_output_key_hash()
2207 if (!__ip_dev_find(net, fl4->saddr, false)) in __ip_route_output_key_hash()
2213 if (fl4->flowi4_oif) { in __ip_route_output_key_hash()
2214 dev_out = dev_get_by_index_rcu(net, fl4->flowi4_oif); in __ip_route_output_key_hash()
2224 if (ipv4_is_local_multicast(fl4->daddr) || in __ip_route_output_key_hash()
2225 ipv4_is_lbcast(fl4->daddr) || in __ip_route_output_key_hash()
2226 fl4->flowi4_proto == IPPROTO_IGMP) { in __ip_route_output_key_hash()
2227 if (!fl4->saddr) in __ip_route_output_key_hash()
2228 fl4->saddr = inet_select_addr(dev_out, 0, in __ip_route_output_key_hash()
2232 if (!fl4->saddr) { in __ip_route_output_key_hash()
2233 if (ipv4_is_multicast(fl4->daddr)) in __ip_route_output_key_hash()
2234 fl4->saddr = inet_select_addr(dev_out, 0, in __ip_route_output_key_hash()
2235 fl4->flowi4_scope); in __ip_route_output_key_hash()
2236 else if (!fl4->daddr) in __ip_route_output_key_hash()
2237 fl4->saddr = inet_select_addr(dev_out, 0, in __ip_route_output_key_hash()
2241 rth = l3mdev_get_rtable(dev_out, fl4); in __ip_route_output_key_hash()
2246 if (!fl4->daddr) { in __ip_route_output_key_hash()
2247 fl4->daddr = fl4->saddr; in __ip_route_output_key_hash()
2248 if (!fl4->daddr) in __ip_route_output_key_hash()
2249 fl4->daddr = fl4->saddr = htonl(INADDR_LOOPBACK); in __ip_route_output_key_hash()
2251 fl4->flowi4_oif = LOOPBACK_IFINDEX; in __ip_route_output_key_hash()
2257 err = fib_lookup(net, fl4, &res, 0); in __ip_route_output_key_hash()
2261 if (fl4->flowi4_oif && in __ip_route_output_key_hash()
2262 !netif_index_is_l3_master(net, fl4->flowi4_oif)) { in __ip_route_output_key_hash()
2281 if (fl4->saddr == 0) in __ip_route_output_key_hash()
2282 fl4->saddr = inet_select_addr(dev_out, 0, in __ip_route_output_key_hash()
2292 if (!fl4->saddr) { in __ip_route_output_key_hash()
2294 fl4->saddr = res.fi->fib_prefsrc; in __ip_route_output_key_hash()
2296 fl4->saddr = fl4->daddr; in __ip_route_output_key_hash()
2299 fl4->flowi4_oif = dev_out->ifindex; in __ip_route_output_key_hash()
2304 fib_select_path(net, &res, fl4, mp_hash); in __ip_route_output_key_hash()
2307 fl4->flowi4_oif = dev_out->ifindex; in __ip_route_output_key_hash()
2311 rth = __mkroute_output(&res, fl4, orig_oif, dev_out, flags); in __ip_route_output_key_hash()
2412 struct flowi4 *fl4, struct sk_buff *skb, u32 portid, in rt_fill_info() argument
2430 r->rtm_tos = fl4->flowi4_tos; in rt_fill_info()
2459 fl4->saddr != src) { in rt_fill_info()
2460 if (nla_put_in_addr(skb, RTA_PREFSRC, fl4->saddr)) in rt_fill_info()
2483 if (fl4->flowi4_mark && in rt_fill_info()
2484 nla_put_u32(skb, RTA_MARK, fl4->flowi4_mark)) in rt_fill_info()
2494 fl4->saddr, fl4->daddr, in rt_fill_info()
2530 struct flowi4 fl4; in inet_rtm_getroute() local
2566 memset(&fl4, 0, sizeof(fl4)); in inet_rtm_getroute()
2567 fl4.daddr = dst; in inet_rtm_getroute()
2568 fl4.saddr = src; in inet_rtm_getroute()
2569 fl4.flowi4_tos = rtm->rtm_tos; in inet_rtm_getroute()
2570 fl4.flowi4_oif = tb[RTA_OIF] ? nla_get_u32(tb[RTA_OIF]) : 0; in inet_rtm_getroute()
2571 fl4.flowi4_mark = mark; in inet_rtm_getroute()
2573 if (netif_index_is_l3_master(net, fl4.flowi4_oif)) in inet_rtm_getroute()
2574 fl4.flowi4_flags = FLOWI_FLAG_L3MDEV_SRC | FLOWI_FLAG_SKIP_NH_OIF; in inet_rtm_getroute()
2596 rt = ip_route_output_key(net, &fl4); in inet_rtm_getroute()
2613 err = rt_fill_info(net, dst, src, table_id, &fl4, skb, in inet_rtm_getroute()