Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 4c9483b2 authored by David S. Miller's avatar David S. Miller
Browse files

ipv6: Convert to use flowi6 where applicable.

parent 9cce96df
Loading
Loading
Loading
Loading
+9 −9
Original line number Diff line number Diff line
@@ -231,28 +231,28 @@ static int addr6_resolve(struct sockaddr_in6 *src_in,
			 struct sockaddr_in6 *dst_in,
			 struct rdma_dev_addr *addr)
{
	struct flowi fl;
	struct flowi6 fl6;
	struct neighbour *neigh;
	struct dst_entry *dst;
	int ret;

	memset(&fl, 0, sizeof fl);
	ipv6_addr_copy(&fl.fl6_dst, &dst_in->sin6_addr);
	ipv6_addr_copy(&fl.fl6_src, &src_in->sin6_addr);
	fl.flowi_oif = addr->bound_dev_if;
	memset(&fl6, 0, sizeof fl6);
	ipv6_addr_copy(&fl6.daddr, &dst_in->sin6_addr);
	ipv6_addr_copy(&fl6.saddr, &src_in->sin6_addr);
	fl6.flowi6_oif = addr->bound_dev_if;

	dst = ip6_route_output(&init_net, NULL, &fl);
	dst = ip6_route_output(&init_net, NULL, &fl6);
	if ((ret = dst->error))
		goto put;

	if (ipv6_addr_any(&fl.fl6_src)) {
	if (ipv6_addr_any(&fl6.saddr)) {
		ret = ipv6_dev_get_saddr(&init_net, ip6_dst_idev(dst)->dev,
					 &fl.fl6_dst, 0, &fl.fl6_src);
					 &fl6.daddr, 0, &fl6.saddr);
		if (ret)
			goto put;

		src_in->sin6_family = AF_INET6;
		ipv6_addr_copy(&src_in->sin6_addr, &fl.fl6_src);
		ipv6_addr_copy(&src_in->sin6_addr, &fl6.saddr);
	}

	if (dst->dev->flags & IFF_LOOPBACK) {
+6 −6
Original line number Diff line number Diff line
@@ -3424,14 +3424,14 @@ static int cnic_get_v6_route(struct sockaddr_in6 *dst_addr,
			     struct dst_entry **dst)
{
#if defined(CONFIG_IPV6) || (defined(CONFIG_IPV6_MODULE) && defined(MODULE))
	struct flowi fl;
	struct flowi6 fl6;

	memset(&fl, 0, sizeof(fl));
	ipv6_addr_copy(&fl.fl6_dst, &dst_addr->sin6_addr);
	if (ipv6_addr_type(&fl.fl6_dst) & IPV6_ADDR_LINKLOCAL)
		fl.flowi_oif = dst_addr->sin6_scope_id;
	memset(&fl6, 0, sizeof(fl6));
	ipv6_addr_copy(&fl6.daddr, &dst_addr->sin6_addr);
	if (ipv6_addr_type(&fl6.daddr) & IPV6_ADDR_LINKLOCAL)
		fl6.flowi6_oif = dst_addr->sin6_scope_id;

	*dst = ip6_route_output(&init_net, NULL, &fl);
	*dst = ip6_route_output(&init_net, NULL, &fl6);
	if (*dst)
		return 0;
#endif
+2 −2
Original line number Diff line number Diff line
@@ -183,10 +183,10 @@ extern void icmpv6_cleanup(void);
extern void				icmpv6_param_prob(struct sk_buff *skb,
							  u8 code, int pos);

struct flowi;
struct flowi6;
struct in6_addr;
extern void				icmpv6_flow_init(struct sock *sk,
							 struct flowi *fl,
							 struct flowi6 *fl6,
							 u8 type,
							 const struct in6_addr *saddr,
							 const struct in6_addr *daddr,
+2 −2
Original line number Diff line number Diff line
@@ -183,7 +183,7 @@ struct fib6_table {

typedef struct rt6_info *(*pol_lookup_t)(struct net *,
					 struct fib6_table *,
					 struct flowi *, int);
					 struct flowi6 *, int);

/*
 *	exported functions
@@ -192,7 +192,7 @@ typedef struct rt6_info *(*pol_lookup_t)(struct net *,
extern struct fib6_table        *fib6_get_table(struct net *net, u32 id);
extern struct fib6_table        *fib6_new_table(struct net *net, u32 id);
extern struct dst_entry         *fib6_rule_lookup(struct net *net,
						  struct flowi *fl, int flags,
						  struct flowi6 *fl6, int flags,
						  pol_lookup_t lookup);

extern struct fib6_node		*fib6_lookup(struct fib6_node *root,
+1 −1
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ extern void ip6_route_input(struct sk_buff *skb);

extern struct dst_entry *	ip6_route_output(struct net *net,
						 struct sock *sk,
						 struct flowi *fl);
						 struct flowi6 *fl6);

extern int			ip6_route_init(void);
extern void			ip6_route_cleanup(void);
Loading