從取net_device中的MAC地址這是我的鉤子函數無法內核模塊
unsigned int
my_packet_pass_through_hook(const struct nf_hook_ops *ops,
struct sk_buff *skb,
const struct net_device *in,
const struct net_device *out,
int (*okfn)(struct sk_buff*)){
我在PREROUTING和POSTROUTING階段已註冊
。我只是在這個函數中轉儲net_device信息。 在PREROUTING階段,我傾銷const struct net_device *在而在POSTROUTING階段我傾銷const struct net_device * out net_devoce結構。
在這兩種情況下,我都無法打印設備的MAC地址。
printk(KERN_ALERT " Mac Addr = %s\n", iif->dev_addr);
printk(KERN_ALERT " Broadcast Addr = %s\n", iif->broadcast);
輸出
04月28日19時56分21秒節點2的內核:[466.344567] MAC ADDR =
04月28日19時56分21秒節點2的內核:[466.344568]廣播ADDR = ▒▒▒▒▒▒
請注意,我在節點2上運行我的模塊,該節點將ping從node1路由到node3。所以,所有的數據包都會被轉發。我只是在閱讀數據包的字段並且打印它時沒有反過來調整它。所以,ping是成功的。
另外,有誰能告訴我什麼是okfn fn指針及其用法?
非常感謝。