我正在编写一个内核模块,我必须与目标地址进行比较。我有一个地址数组,我想动态添加这些地址。如果地址已经在数组中,我将其删除,但如果不是,则将其放在下一个可用索引处。
我的代码片段如下:
daddr = &udp_hdr(sock_buff)->dest; /* an example address just for comparison purposes */
saddr = &udp_hdr(sock_buff)->source; /* an example address just for comparison purposes */
int compare( __be32 addr1, __be32 addr2 ) {
addr1[0] = 0xff & add1 >> 24;
addr1[1] = 0xff & add1 >> 16;
addr1[2] = 0xff & add1 >> 8;
addr1[3] = 0xff & add1;
addr2[0] = 0xff & add2 >> 24;
addr2[1] = 0xff & add2 >> 16;
addr2[2] = 0xff & add2 >> 8;
addr2[3] = 0xff & add2;
for(i=0; i<4; i++) {
if(addr1[i]==addr2[i]) {;
i++;
if(i==4) {
return 0;
break;
} else return 1;
}
}
}
然后我正在使用该功能进行比较
int compare( __be32 addr1, __be32 addr2 ) {
addr1[0] = 0xff & add1 >> 24;
addr1[1] = 0xff & add1 >> 16;
addr1[2] = 0xff & add1 >> 8;
addr1[3] = 0xff & add1;
addr2[0] = 0xff & add2 >> 24;
addr2[1] = 0xff & add2 >> 16;
addr2[2] = 0xff & add2 >> 8;
addr2[3] = 0xff & add2;
for(i=0; i<4; i++) {
if(addr1[i]==addr2[i]) {;
i++;
if(i==4) {
return 0;
break;
} else return 1;
}
}
}
但是,用函数调用说
compare((__be32)daddr, (__be32)saddr)
比较像 192.168.1.2 和 192.132.1.2 这样的地址返回 true(此处为 0),在某些情况下返回 false(此处为 1)。我哪里出错了,或者有没有更好的比较地址的方法?