Lines Matching refs:fl6
379 const struct flowi6 *fl6) in rt6_info_hash_nhsfn() argument
381 unsigned int val = fl6->flowi6_proto; in rt6_info_hash_nhsfn()
383 val ^= ipv6_addr_hash(&fl6->daddr); in rt6_info_hash_nhsfn()
384 val ^= ipv6_addr_hash(&fl6->saddr); in rt6_info_hash_nhsfn()
387 switch (fl6->flowi6_proto) { in rt6_info_hash_nhsfn()
391 val ^= (__force u16)fl6->fl6_sport; in rt6_info_hash_nhsfn()
392 val ^= (__force u16)fl6->fl6_dport; in rt6_info_hash_nhsfn()
396 val ^= (__force u16)fl6->fl6_icmp_type; in rt6_info_hash_nhsfn()
397 val ^= (__force u16)fl6->fl6_icmp_code; in rt6_info_hash_nhsfn()
401 val ^= (__force u32)fl6->flowlabel; in rt6_info_hash_nhsfn()
409 struct flowi6 *fl6, int oif, in rt6_multipath_select() argument
415 route_choosen = rt6_info_hash_nhsfn(match->rt6i_nsiblings + 1, fl6); in rt6_multipath_select()
792 struct flowi6 *fl6, int flags) in ip6_pol_route_lookup() argument
798 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route_lookup()
801 rt = rt6_device_match(net, rt, &fl6->saddr, fl6->flowi6_oif, flags); in ip6_pol_route_lookup()
802 if (rt->rt6i_nsiblings && fl6->flowi6_oif == 0) in ip6_pol_route_lookup()
803 rt = rt6_multipath_select(rt, fl6, fl6->flowi6_oif, flags); in ip6_pol_route_lookup()
805 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route_lookup()
815 struct dst_entry *ip6_route_lookup(struct net *net, struct flowi6 *fl6, in ip6_route_lookup() argument
818 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_lookup); in ip6_route_lookup()
825 struct flowi6 fl6 = { in rt6_lookup() local
833 memcpy(&fl6.saddr, saddr, sizeof(*saddr)); in rt6_lookup()
837 dst = fib6_rule_lookup(net, &fl6, flags, ip6_pol_route_lookup); in rt6_lookup()
916 struct flowi6 *fl6, int flags) in ip6_pol_route() argument
931 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
937 rt = rt6_multipath_select(rt, fl6, oif, strict); in ip6_pol_route()
939 fn = fib6_backtrack(fn, &fl6->saddr); in ip6_pol_route()
961 nrt = rt6_alloc_cow(rt, &fl6->daddr, &fl6->saddr); in ip6_pol_route()
963 nrt = rt6_alloc_clone(rt, &fl6->daddr); in ip6_pol_route()
995 struct flowi6 *fl6, int flags) in ip6_pol_route_input() argument
997 return ip6_pol_route(net, table, fl6->flowi6_iif, fl6, flags); in ip6_pol_route_input()
1002 struct flowi6 *fl6, int flags) in ip6_route_input_lookup() argument
1004 if (rt6_need_strict(&fl6->daddr) && dev->type != ARPHRD_PIMREG) in ip6_route_input_lookup()
1007 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_input); in ip6_route_input_lookup()
1015 struct flowi6 fl6 = { in ip6_route_input() local
1024 skb_dst_set(skb, ip6_route_input_lookup(net, skb->dev, &fl6, flags)); in ip6_route_input()
1028 struct flowi6 *fl6, int flags) in ip6_pol_route_output() argument
1030 return ip6_pol_route(net, table, fl6->flowi6_oif, fl6, flags); in ip6_pol_route_output()
1034 struct flowi6 *fl6, int flags) in ip6_route_output_flags() argument
1036 fl6->flowi6_iif = LOOPBACK_IFINDEX; in ip6_route_output_flags()
1038 if ((sk && sk->sk_bound_dev_if) || rt6_need_strict(&fl6->daddr)) in ip6_route_output_flags()
1041 if (!ipv6_addr_any(&fl6->saddr)) in ip6_route_output_flags()
1046 return fib6_rule_lookup(net, fl6, flags, ip6_pol_route_output); in ip6_route_output_flags()
1172 struct flowi6 fl6; in ip6_update_pmtu() local
1174 memset(&fl6, 0, sizeof(fl6)); in ip6_update_pmtu()
1175 fl6.flowi6_oif = oif; in ip6_update_pmtu()
1176 fl6.flowi6_mark = mark ? mark : IP6_REPLY_MARK(net, skb->mark); in ip6_update_pmtu()
1177 fl6.daddr = iph->daddr; in ip6_update_pmtu()
1178 fl6.saddr = iph->saddr; in ip6_update_pmtu()
1179 fl6.flowlabel = ip6_flowinfo(iph); in ip6_update_pmtu()
1181 dst = ip6_route_output(net, NULL, &fl6); in ip6_update_pmtu()
1197 struct flowi6 fl6; member
1203 struct flowi6 *fl6, in __ip6_route_redirect() argument
1206 struct ip6rd_flowi *rdfl = (struct ip6rd_flowi *)fl6; in __ip6_route_redirect()
1221 fn = fib6_lookup(&table->tb6_root, &fl6->daddr, &fl6->saddr); in __ip6_route_redirect()
1230 if (fl6->flowi6_oif != rt->dst.dev->ifindex) in __ip6_route_redirect()
1245 fn = fib6_backtrack(fn, &fl6->saddr); in __ip6_route_redirect()
1259 const struct flowi6 *fl6, in ip6_route_redirect() argument
1265 rdfl.fl6 = *fl6; in ip6_route_redirect()
1268 return fib6_rule_lookup(net, &rdfl.fl6, in ip6_route_redirect()
1276 struct flowi6 fl6; in ip6_redirect() local
1278 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect()
1279 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect()
1280 fl6.flowi6_oif = oif; in ip6_redirect()
1281 fl6.flowi6_mark = mark; in ip6_redirect()
1282 fl6.daddr = iph->daddr; in ip6_redirect()
1283 fl6.saddr = iph->saddr; in ip6_redirect()
1284 fl6.flowlabel = ip6_flowinfo(iph); in ip6_redirect()
1286 dst = ip6_route_redirect(net, &fl6, &ipv6_hdr(skb)->saddr); in ip6_redirect()
1298 struct flowi6 fl6; in ip6_redirect_no_header() local
1300 memset(&fl6, 0, sizeof(fl6)); in ip6_redirect_no_header()
1301 fl6.flowi6_iif = LOOPBACK_IFINDEX; in ip6_redirect_no_header()
1302 fl6.flowi6_oif = oif; in ip6_redirect_no_header()
1303 fl6.flowi6_mark = mark; in ip6_redirect_no_header()
1304 fl6.daddr = msg->dest; in ip6_redirect_no_header()
1305 fl6.saddr = iph->daddr; in ip6_redirect_no_header()
1307 dst = ip6_route_redirect(net, &fl6, &iph->saddr); in ip6_redirect_no_header()
1364 struct flowi6 *fl6) in icmp6_dst_alloc() argument
1384 rt->rt6i_gateway = fl6->daddr; in icmp6_dst_alloc()
1385 rt->rt6i_dst.addr = fl6->daddr; in icmp6_dst_alloc()
1397 dst = xfrm_lookup(net, &rt->dst, flowi6_to_flowi(fl6), NULL, 0); in icmp6_dst_alloc()
2925 struct flowi6 fl6; in inet6_rtm_getroute() local
2933 memset(&fl6, 0, sizeof(fl6)); in inet6_rtm_getroute()
2939 fl6.saddr = *(struct in6_addr *)nla_data(tb[RTA_SRC]); in inet6_rtm_getroute()
2946 fl6.daddr = *(struct in6_addr *)nla_data(tb[RTA_DST]); in inet6_rtm_getroute()
2956 fl6.flowi6_mark = nla_get_u32(tb[RTA_MARK]); in inet6_rtm_getroute()
2968 fl6.flowi6_iif = iif; in inet6_rtm_getroute()
2970 if (!ipv6_addr_any(&fl6.saddr)) in inet6_rtm_getroute()
2973 rt = (struct rt6_info *)ip6_route_input_lookup(net, dev, &fl6, in inet6_rtm_getroute()
2976 fl6.flowi6_oif = oif; in inet6_rtm_getroute()
2978 rt = (struct rt6_info *)ip6_route_output(net, NULL, &fl6); in inet6_rtm_getroute()
2996 err = rt6_fill_node(net, skb, rt, &fl6.daddr, &fl6.saddr, iif, in inet6_rtm_getroute()