平常我們在linux下撰寫app的時候,可以使用inet_ntoa()之類的語法來將32bit的binary轉換成可讀的ip字串。但是在kernel環境下,沒有inet_ntoa之類的方法可以利用,但是我們可以利用簡單的形式作一下轉換。
這個範例利用define減少撰寫程式碼,當然你可以把它包成function。
addr是32bits類型,例如__be32。
先定義addr取哪些變數出來。
#define NIPQUAD(addr) \
((unsigned char *)&addr)[0], \
((unsigned char *)&addr)[1], \
((unsigned char *)&addr)[2], \
((unsigned char *)&addr)[3]
定義印出的ip格式。
#define NIPQUAD_FMT "%u.%u.%u.%u".
最後印出ip至console上。
printk("my address is " NIPQUAD_FMT "\n", NIPQUAD(ic_myaddr));
參考資料:
[1] Re: Is there any function similar to inet_ntoa() in Kernel or NetFilter
沒有留言:
張貼留言