Patch from Scott Bertilson <ssb@umn.edu> to remove dependence on s6_addr32.

This commit is contained in:
pdw
2011-10-03 20:21:55 +00:00
parent cd57e76727
commit fc511cfea9
4 changed files with 18 additions and 17 deletions

View File

@@ -43,7 +43,7 @@ int hash(void* key) {
addr_pair* ap = (addr_pair*)key; addr_pair* ap = (addr_pair*)key;
if (ap->af == AF_INET6) { if (ap->af == AF_INET6) {
uint32_t* addr6 = ap->src6.s6_addr32; uint32_t* addr6 = (uint32_t*)ap->src6.s6_addr;
hash = ( hash_uint32(addr6[0]) hash = ( hash_uint32(addr6[0])
+ hash_uint32(addr6[1]) + hash_uint32(addr6[1])
@@ -51,7 +51,7 @@ int hash(void* key) {
+ hash_uint32(addr6[3]) + hash_uint32(addr6[3])
+ ap->src_port) % 0xFF; + ap->src_port) % 0xFF;
addr6 = ap->dst6.s6_addr32; addr6 = (uint32_t*)ap->dst6.s6_addr;
hash = ( hash + hash_uint32(addr6[0]) hash = ( hash + hash_uint32(addr6[0])
+ hash_uint32(addr6[1]) + hash_uint32(addr6[1])
+ hash_uint32(addr6[2]) + hash_uint32(addr6[2])

10
iftop.c
View File

@@ -328,11 +328,11 @@ static void handle_ip_packet(struct ip* iptr, int hw_dir)
/* First reduce the participating addresses using the netfilter prefix. /* First reduce the participating addresses using the netfilter prefix.
* We need scratch pads to do this. * We need scratch pads to do this.
*/ */
for (j=0; j < 4; ++j) { for (j=0; j < 16; ++j) {
scribdst.s6_addr32[j] = ip6tr->ip6_dst.s6_addr32[j] scribdst.s6_addr[j] = ip6tr->ip6_dst.s6_addr[j]
& options.netfilter6mask.s6_addr32[j]; & options.netfilter6mask.s6_addr[j];
scribsrc.s6_addr32[j] = ip6tr->ip6_src.s6_addr32[j] scribsrc.s6_addr[j] = ip6tr->ip6_src.s6_addr[j]
& options.netfilter6mask.s6_addr32[j]; & options.netfilter6mask.s6_addr[j];
} }
/* Now look for any hits. */ /* Now look for any hits. */

View File

@@ -29,7 +29,7 @@ static int __inline__ hash_uint32(uint32_t n) {
int ns_hash_hash(void* key) { int ns_hash_hash(void* key) {
int hash; int hash;
uint32_t* addr6 = ((struct in6_addr *) key)->s6_addr32; uint32_t* addr6 = (uint32_t*)((struct in6_addr *) key)->s6_addr;
hash = ( hash_uint32(addr6[0]) hash = ( hash_uint32(addr6[0])
+ hash_uint32(addr6[1]) + hash_uint32(addr6[1])

View File

@@ -163,7 +163,7 @@ void options_set_defaults() {
} }
static void die(char *msg) { static void die(char *msg) {
fprintf(stderr, msg); fprintf(stderr, "%s", msg);
exit(1); exit(1);
} }
@@ -538,18 +538,19 @@ int options_config_get_net_filter6() {
} }
else { else {
int bl, rem; int bl, rem;
const uint32_t mm = 0xffffffff; const uint8_t mm = 0xff;
uint32_t part = mm; uint8_t part = mm;
bl = n / 32; bl = n / 8;
rem = n % 32; rem = n % 8;
part <<= 32 - rem; part <<= 8 - rem;
for (j=0; j < bl; ++j) for (j=0; j < bl; ++j)
options.netfilter6mask.s6_addr32[j] = htonl(mm); options.netfilter6mask.s6_addr[j] = mm;
if (rem > 0) if (rem > 0)
options.netfilter6mask.s6_addr32[bl] = htonl(part); options.netfilter6mask.s6_addr[bl] = part;
options.netfilter6 = 1; options.netfilter6 = 1;
} }
} }
else { else {
if (inet_pton(AF_INET6, mask, &options.netfilter6mask) != 0) if (inet_pton(AF_INET6, mask, &options.netfilter6mask) != 0)