2010年5月19日 星期三

Print ip string in kernel

平常我們在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

沒有留言: