Network programming 如何使用VxWorks etherOutputHookAdd

Network programming 如何使用VxWorks etherOutputHookAdd,network-programming,vxworks,sniffing,Network Programming,Vxworks,Sniffing,我很难让etherOutputHookAdd()工作。它的对应项etherInputHookAdd()似乎工作正常。所讨论的操作系统版本是VxWorks 5.4 钩子代码看起来是这样的(我打算实际运行的代码更复杂,但这只是一个例子。) 我可以像这样从vxworks外壳连接etherInputHookAdd etherInputHookAdd etherHook,"fei",0 这将返回0(状态为OK),之后检查“anCounter”变量将显示预期的活动。然而,在输出方向上没有这样的运气。这两条

我很难让etherOutputHookAdd()工作。它的对应项etherInputHookAdd()似乎工作正常。所讨论的操作系统版本是VxWorks 5.4

钩子代码看起来是这样的(我打算实际运行的代码更复杂,但这只是一个例子。)

我可以像这样从vxworks外壳连接etherInputHookAdd

etherInputHookAdd etherHook,"fei",0
这将返回0(状态为OK),之后检查“anCounter”变量将显示预期的活动。然而,在输出方向上没有这样的运气。这两条命令行我都试过了

etherOutputHookAdd etherHook,"fei",0
etherOutputHookAdd etherHook
这两个都返回正常,但是hook例程似乎根本没有被调用。我最好的假设是(1)我错过了初始化步骤,或者调用错误,(2)etherOutputHookAdd实现只是一个存根,(3)您不能从shell调用它,或者(4)可能我的nic驱动程序实现有缺陷


任何能解决核心问题的想法——我如何看待董事会发出的信息——都是受欢迎的。

对于那些可能会以这种方式绊倒的少数人。。这是可怕的“假设4”

事实证明,为了使etherOutputHookAdd()正常工作,NIC设备驱动程序编写器有义务包含对etherOutputHookRtn所指向函数的调用。etherOutputHookAdd()所做的就是将您提供的数据包处理程序添加到列表中,这样当NIC驱动程序调用etherOutputHookRtn时,您就可以获得所传输内容的副本。可悲的是,有许多司机,无论出于何种原因,根本没有做到这一点

因此,在这种情况下,只有两种行动方案

  • 为您的驱动程序找到修补程序,或者自己修补
  • 完全改变策略,例如,尝试在另一端使用etherInputHookAdd()

以下VxWorks网络驱动程序支持输入钩子和输出钩子例程:

if_cpm - Motorola MC68EN360 QUICC network interface driver 
if_eex - Intel EtherExpress 16 
if_ei - Intel 82596 ethernet driver
if_elc - SMC 8013WC Ethernet driver
if_elt - 3Com 3C509 Ethernet driver
if_ene - Novell/Eagle NE2000 network driver
if_fn - Fujitsu MB86960 NICE Ethernet driver
if_ln - Advanced Micro Devices Am7990 LANCE Ethernet driver
if_sm - shared memory backplane network interface driver
if_sn - National Semiconductor DP83932B SONIC Ethernet driver
if_ultra - SMC Elite Ultra Ethernet network interface driver

if_gn - generic MUX interface layer
if_nic - National Semiconductor SNIC Chip (for HKV30)
if_sl - Serial Line IP (SLIP) network interface driver
if_ulip - network interface driver for User Level IP (VxSim)
if_loop - software loopback network interface driver
以下驱动程序仅支持输入挂钩例程:

if_cpm - Motorola MC68EN360 QUICC network interface driver 
if_eex - Intel EtherExpress 16 
if_ei - Intel 82596 ethernet driver
if_elc - SMC 8013WC Ethernet driver
if_elt - 3Com 3C509 Ethernet driver
if_ene - Novell/Eagle NE2000 network driver
if_fn - Fujitsu MB86960 NICE Ethernet driver
if_ln - Advanced Micro Devices Am7990 LANCE Ethernet driver
if_sm - shared memory backplane network interface driver
if_sn - National Semiconductor DP83932B SONIC Ethernet driver
if_ultra - SMC Elite Ultra Ethernet network interface driver

if_gn - generic MUX interface layer
if_nic - National Semiconductor SNIC Chip (for HKV30)
if_sl - Serial Line IP (SLIP) network interface driver
if_ulip - network interface driver for User Level IP (VxSim)
if_loop - software loopback network interface driver
以下驱动程序仅支持输出挂钩例程:

if_cpm - Motorola MC68EN360 QUICC network interface driver 
if_eex - Intel EtherExpress 16 
if_ei - Intel 82596 ethernet driver
if_elc - SMC 8013WC Ethernet driver
if_elt - 3Com 3C509 Ethernet driver
if_ene - Novell/Eagle NE2000 network driver
if_fn - Fujitsu MB86960 NICE Ethernet driver
if_ln - Advanced Micro Devices Am7990 LANCE Ethernet driver
if_sm - shared memory backplane network interface driver
if_sn - National Semiconductor DP83932B SONIC Ethernet driver
if_ultra - SMC Elite Ultra Ethernet network interface driver

if_gn - generic MUX interface layer
if_nic - National Semiconductor SNIC Chip (for HKV30)
if_sl - Serial Line IP (SLIP) network interface driver
if_ulip - network interface driver for User Level IP (VxSim)
if_loop - software loopback network interface driver
以下驱动程序不支持输入挂钩或输出挂钩例程:

if_cpm - Motorola MC68EN360 QUICC network interface driver 
if_eex - Intel EtherExpress 16 
if_ei - Intel 82596 ethernet driver
if_elc - SMC 8013WC Ethernet driver
if_elt - 3Com 3C509 Ethernet driver
if_ene - Novell/Eagle NE2000 network driver
if_fn - Fujitsu MB86960 NICE Ethernet driver
if_ln - Advanced Micro Devices Am7990 LANCE Ethernet driver
if_sm - shared memory backplane network interface driver
if_sn - National Semiconductor DP83932B SONIC Ethernet driver
if_ultra - SMC Elite Ultra Ethernet network interface driver

if_gn - generic MUX interface layer
if_nic - National Semiconductor SNIC Chip (for HKV30)
if_sl - Serial Line IP (SLIP) network interface driver
if_ulip - network interface driver for User Level IP (VxSim)
if_loop - software loopback network interface driver

如果您迁移到VxWorks的较新版本(>6.x),则不再支持etherLib。相反,人们可以将muxLib用于类似的目的

  • 钩住入站流量:将
    muxBind
    MUX\u PROTO\u PROMISC
    MUX\u PROTO\u输出一起使用
  • 钩住出站流量:将
    muxBind
    MUX\u协议输出一起使用
在这两种情况下都应该提供回调例程