Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 224724
b: refs/heads/master
c: b341936
h: refs/heads/master
v: v3
  • Loading branch information
David S. Miller committed Nov 30, 2010
1 parent 3f80df5 commit 4236f45
Show file tree
Hide file tree
Showing 5 changed files with 26 additions and 1 deletion.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 672f007d65f50468a4a1e55825fe58e5b035324d
refs/heads/master: b3419363808f2481b24a817f491878e1795db4c7
2 changes: 2 additions & 0 deletions trunk/include/net/ip6_fib.h
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@
#include <net/dst.h>
#include <net/flow.h>
#include <net/netlink.h>
#include <net/inetpeer.h>

#ifdef CONFIG_IPV6_MULTIPLE_TABLES
#define FIB6_TABLE_HASHSZ 256
Expand Down Expand Up @@ -109,6 +110,7 @@ struct rt6_info {
u32 rt6i_metric;

struct inet6_dev *rt6i_idev;
struct inet_peer *rt6i_peer;

#ifdef CONFIG_XFRM
u32 rt6i_flow_cache_genid;
Expand Down
3 changes: 3 additions & 0 deletions trunk/include/net/ip6_route.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,9 @@ static inline unsigned int rt6_flags2srcprefs(int flags)
return (flags >> 3) & 7;
}

extern void rt6_bind_peer(struct rt6_info *rt,
int create);

extern void ip6_route_input(struct sk_buff *skb);

extern struct dst_entry * ip6_route_output(struct net *net,
Expand Down
2 changes: 2 additions & 0 deletions trunk/net/ipv4/inetpeer.c
Original file line number Diff line number Diff line change
Expand Up @@ -532,6 +532,7 @@ static int compute_total(void)
{
return v4_peers.total + v6_peers.total;
}
EXPORT_SYMBOL_GPL(inet_getpeer);

/* Called with local BH disabled. */
static void peer_check_expire(unsigned long dummy)
Expand Down Expand Up @@ -577,3 +578,4 @@ void inet_putpeer(struct inet_peer *p)

local_bh_enable();
}
EXPORT_SYMBOL_GPL(inet_putpeer);
18 changes: 18 additions & 0 deletions trunk/net/ipv6/route.c
Original file line number Diff line number Diff line change
Expand Up @@ -188,11 +188,29 @@ static void ip6_dst_destroy(struct dst_entry *dst)
{
struct rt6_info *rt = (struct rt6_info *)dst;
struct inet6_dev *idev = rt->rt6i_idev;
struct inet_peer *peer = rt->rt6i_peer;

if (idev != NULL) {
rt->rt6i_idev = NULL;
in6_dev_put(idev);
}
if (peer) {
BUG_ON(!(rt->rt6i_flags & RTF_CACHE));
rt->rt6i_peer = NULL;
inet_putpeer(peer);
}
}

void rt6_bind_peer(struct rt6_info *rt, int create)
{
struct inet_peer *peer;

if (WARN_ON(!(rt->rt6i_flags & RTF_CACHE)))
return;

peer = inet_getpeer_v6(&rt->rt6i_dst.addr, create);
if (peer && cmpxchg(&rt->rt6i_peer, NULL, peer) != NULL)
inet_putpeer(peer);
}

static void ip6_dst_ifdown(struct dst_entry *dst, struct net_device *dev,
Expand Down

0 comments on commit 4236f45

Please sign in to comment.