从取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指针及其用法?
非常感谢。