[英]Taking bitwise & of __be 32 type in Linux Kernel Module
linux /文件夾包含ip.h頭文件,其中IP頭結構的一部分定義如下:
struct iphdr
{
// ...
__be32 saddr;
__be32 daddr;
};
我遇到一種情況,其中我有一個char *類型的源網絡掩碼。 我想檢查__be32類型的IP地址是否屬於具有char *類型地址的網絡。 我可以使用linux / inet.h中提供的in_aton()將網絡掩碼和網絡地址轉換為__be32。
char * network_addr = "192.166.0.0";
char * netmask = "255.255.0.0";
有人可以告訴我如何將布爾值&&用作__be32類型的地址,或者僅應用&&運算符將給出正確的結果。
謝謝。
您正在尋找按位AND運算符&
而不是邏輯AND運算符&&
:
__be32 addr;
__be32 addr_mask;
...
__be32 addr_masked = addr & addr_mask;
請記住,IPv4地址是32位數字:4 x 8位字節
請記住, __be32
是一個32位值,按big-endian字節順序排列,可能與主機字節順序不匹配。 查找像be32toh
這樣的字節交換例程,以將其轉換為主機字節順序以進行比較。
same_network = (my_addr & addr_mask) == (be32toh( his_addr_be) & addr_mask);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.