????????定义了这个宏后,可以在ethernet_input函数中,自定义处理未知的以太网报文:
????????????????
????????
用这个钩子可以提供灵活性,以便在遇到未知的以太网协议时执行自定义的处理逻辑:
????????例如,你可以决定如何处理这些未知类型的数据包,例如将其转发到另一个接口、将其丢弃或将其传递给应用程序进行处理。等等
?1) 你还需要使能宏LWIP_HOOK_FILENAME,以包含自定义处理的头文件
????????????????
#if 1 //def __DOXYGEN__
#define LWIP_HOOK_FILENAME "path/to/my/lwip_hooks.h"
#endif
?2) 使能LWIP_HOOK_UNKNOWN_ETH_PROTOCOL,对应都具体的函数
????????????????
#if 1 //def __DOXYGEN__
#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL(pbuf, netif) myhook(pbuf,netif)
#endif
? ? ? ? 通过包含头文件的方式,不利于移植;如果调用lwip是通过lib方式调用,那这个lwip.lib移植就受限,不灵活,必须将LWIP_HOOK_FILENAME 具体的路径包含在工程里,不方便在不同工程调用。
在opt.h中
extern err_t eth_unknow_type_hook(struct pbuf* pbuf, struct netif* netif);
#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL eth_unknow_type_hook
????????这样改会 提示err_t struct pbuf* , struct netif*未定义,
????????继续改进
? ? ? ? ? ? ? ? ?|
? ? ? ? ? ? ? ? ?|
????????????????V
????????extern err_t eth_unknow_type_hook(void* pbuf, void* netif);
????????#define LWIP_HOOK_UNKNOWN_ETH_PROTOCOL eth_unknow_type_hook
????????这样改动小,也方便移植,自己在不同工程中自定义自己的eth_unknow_type_hook函数即可