簡體   English   中英

在Linux內核模塊中按位&的__be 32類型

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM