0

我很难让 etherOutputHookAdd() 工作。它的对应物 etherInputHookAdd() 似乎工作正常。有问题的操作系统版本是 VxWorks 5.4 。

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

int anCounter;
STATUS etherHook(struct ifnet *pif, char *buf, int size)
{
    anCounter += 1;
    return FALSE;
}

我可以像这样从 vxworks shell 连接 etherInputHookAdd

etherInputHookAdd etherHook,"fei",0

这将返回 0(状态正常),之后检查“anCounter”变量将表明活动符合预期。但是,输出方向没有这样的运气。我已经尝试过这两个命令行

etherOutputHookAdd etherHook,"fei",0
etherOutputHookAdd etherHook

这两个都返回 OK,但钩子例程似乎根本没有被调用。我最好的假设是(1)我错过了一个初始化步骤,或者说错了,(2)etherOutputHookAdd 实现只是一个存根,(3)你不能从shell调用它,或者(4)也许我的网卡驱动程序实现是错误的。

欢迎任何解决核心问题的想法 -我如何查看我的董事会发出的内容- 都是受欢迎的。

4

3 回答 3

1

以下 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
于 2012-03-23T13:57:48.837 回答
0

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

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

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

  • 为您的驱动程序找到一个补丁,或自己打补丁
  • 完全改变策略,例如,尝试在另一边使用 etherInputHookAdd()。
于 2011-05-10T00:45:59.847 回答
0

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

  • 挂钩入站流量:muxBindMUX_PROTO_PROMISC或一起使用MUX_PROTO_OUTPUT
  • 挂钩出站流量:muxBindMUX_PROTO_OUTPUT.

您应该在这两种情况下都提供回调例程。

于 2018-11-08T08:10:40.500 回答