Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 90276
b: refs/heads/master
c: a002c6f
h: refs/heads/master
v: v3
  • Loading branch information
YOSHIFUJI Hideaki committed Mar 25, 2008
1 parent 4983550 commit a275a15
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 42 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 3b6cdf94cd6dd0b64cc8646cf067a1ae0203276d
refs/heads/master: a002c6fd714b1710aaf64e26db3f3f18bf8e8384
55 changes: 14 additions & 41 deletions trunk/net/ipv6/xfrm6_input.c
Original file line number Diff line number Diff line change
Expand Up @@ -59,9 +59,6 @@ int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
xfrm_address_t *saddr, u8 proto)
{
struct xfrm_state *x = NULL;
int wildcard = 0;
xfrm_address_t *xany;
int nh = 0;
int i = 0;

/* Allocate new secpath or COW existing one. */
Expand All @@ -83,27 +80,23 @@ int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,
goto drop;
}

xany = (xfrm_address_t *)&in6addr_any;

for (i = 0; i < 3; i++) {
xfrm_address_t *dst, *src;

switch (i) {
case 0:
dst = daddr;
src = saddr;
break;
case 1:
/* lookup state with wild-card source address */
wildcard = 1;
dst = daddr;
src = xany;
src = (xfrm_address_t *)&in6addr_any;
break;
case 2:
default:
/* lookup state with wild-card addresses */
wildcard = 1; /* XXX */
dst = xany;
src = xany;
dst = (xfrm_address_t *)&in6addr_any;
src = (xfrm_address_t *)&in6addr_any;
break;
}

Expand All @@ -113,39 +106,19 @@ int xfrm6_input_addr(struct sk_buff *skb, xfrm_address_t *daddr,

spin_lock(&x->lock);

if (wildcard) {
if ((x->props.flags & XFRM_STATE_WILDRECV) == 0) {
spin_unlock(&x->lock);
xfrm_state_put(x);
x = NULL;
continue;
}
}

if (unlikely(x->km.state != XFRM_STATE_VALID)) {
if ((!i || (x->props.flags & XFRM_STATE_WILDRECV)) &&
likely(x->km.state == XFRM_STATE_VALID) &&
!xfrm_state_check_expire(x)) {
spin_unlock(&x->lock);
xfrm_state_put(x);
x = NULL;
continue;
}
if (xfrm_state_check_expire(x)) {
if (x->type->input(x, skb) > 0) {
/* found a valid state */
break;
}
} else
spin_unlock(&x->lock);
xfrm_state_put(x);
x = NULL;
continue;
}

spin_unlock(&x->lock);

nh = x->type->input(x, skb);
if (nh <= 0) {
xfrm_state_put(x);
x = NULL;
continue;
}

/* Found a state */
break;
xfrm_state_put(x);
x = NULL;
}

if (!x) {
Expand Down

0 comments on commit a275a15

Please sign in to comment.