カーネルモジュールを作成していますが、宛先アドレスと比較する必要があります。これらのアドレスを動的に追加するアドレスの配列があります。アドレスがすでに配列にある場合は削除しますが、含まれていない場合は次に使用可能なインデックスに配置します。
私のコードの抜粋は次のとおりです。
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;
}
}
}
ただし、sayを使用して関数を使用して呼び出す
compare((__be32)daddr, (__be32)saddr)
192.168.1.2と192.132.1.2のようなアドレスを比較すると、true(ここでは0)が返され、場合によってはfalse(ここでは1)が返されます。どこが間違っているのですか、それともアドレスを比較するためのより良い方法がありますか?