Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 22175
b: refs/heads/master
c: f2ffd9e
h: refs/heads/master
i:
  22173: 2776f3e
  22171: 14c30c4
  22167: d1bd333
  22159: 8db344f
  22143: 6f309b1
v: v3
  • Loading branch information
Patrick McHardy authored and David S. Miller committed Mar 21, 2006
1 parent 2954906 commit f0fa4c6
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 20 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: c49867347404c46f137a261643ed4fce4376f324
refs/heads/master: f2ffd9eeda82b476c034d733be08ecf6a87d2edf
12 changes: 12 additions & 0 deletions trunk/include/net/ipv6.h
Original file line number Diff line number Diff line change
Expand Up @@ -282,6 +282,18 @@ static inline int ipv6_addr_cmp(const struct in6_addr *a1, const struct in6_addr
return memcmp((const void *) a1, (const void *) a2, sizeof(struct in6_addr));
}

static inline int
ipv6_masked_addr_cmp(const struct in6_addr *a1, const struct in6_addr *m,
const struct in6_addr *a2)
{
unsigned int i;

for (i = 0; i < 4; i++)
if ((a1->s6_addr32[i] ^ a2->s6_addr32[i]) & m->s6_addr32[i])
return 1;
return 0;
}

static inline void ipv6_addr_copy(struct in6_addr *a1, const struct in6_addr *a2)
{
memcpy((void *) a1, (const void *) a2, sizeof(struct in6_addr));
Expand Down
22 changes: 4 additions & 18 deletions trunk/net/ipv6/netfilter/ip6_tables.c
Original file line number Diff line number Diff line change
Expand Up @@ -94,19 +94,6 @@ do { \
#define up(x) do { printk("UP:%u:" #x "\n", __LINE__); up(x); } while(0)
#endif

int
ip6_masked_addrcmp(const struct in6_addr *addr1, const struct in6_addr *mask,
const struct in6_addr *addr2)
{
int i;
for( i = 0; i < 16; i++){
if((addr1->s6_addr[i] & mask->s6_addr[i]) !=
(addr2->s6_addr[i] & mask->s6_addr[i]))
return 1;
}
return 0;
}

/* Check for an extension */
int
ip6t_ext_hdr(u8 nexthdr)
Expand Down Expand Up @@ -135,10 +122,10 @@ ip6_packet_match(const struct sk_buff *skb,

#define FWINV(bool,invflg) ((bool) ^ !!(ip6info->invflags & invflg))

if (FWINV(ip6_masked_addrcmp(&ipv6->saddr, &ip6info->smsk,
&ip6info->src), IP6T_INV_SRCIP)
|| FWINV(ip6_masked_addrcmp(&ipv6->daddr, &ip6info->dmsk,
&ip6info->dst), IP6T_INV_DSTIP)) {
if (FWINV(ipv6_masked_addr_cmp(&ipv6->saddr, &ip6info->smsk,
&ip6info->src), IP6T_INV_SRCIP)
|| FWINV(ipv6_masked_addr_cmp(&ipv6->daddr, &ip6info->dmsk,
&ip6info->dst), IP6T_INV_DSTIP)) {
dprintf("Source or dest mismatch.\n");
/*
dprintf("SRC: %u. Mask: %u. Target: %u.%s\n", ip->saddr,
Expand Down Expand Up @@ -1526,7 +1513,6 @@ EXPORT_SYMBOL(ip6t_unregister_table);
EXPORT_SYMBOL(ip6t_do_table);
EXPORT_SYMBOL(ip6t_ext_hdr);
EXPORT_SYMBOL(ipv6_find_hdr);
EXPORT_SYMBOL(ip6_masked_addrcmp);

module_init(init);
module_exit(fini);
3 changes: 2 additions & 1 deletion trunk/net/ipv6/netfilter/ip6t_policy.c
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,8 @@ static inline int
match_xfrm_state(struct xfrm_state *x, const struct ip6t_policy_elem *e)
{
#define MATCH_ADDR(x,y,z) (!e->match.x || \
((!ip6_masked_addrcmp(&e->x.a6, &e->y.a6, z)) \
((!ipv6_masked_addr_cmp(&e->x.a6, &e->y.a6, \
z)) \
^ e->invert.x))
#define MATCH(x,y) (!e->match.x || ((e->x == (y)) ^ e->invert.x))

Expand Down

0 comments on commit f0fa4c6

Please sign in to comment.