2011-05-06 74 views
0

我很難過,試圖讓etherOutputHookAdd()工作。其對應的etherInputHookAdd()似乎工作正常。相關的操作系統版本是VxWorks 5.4。如何使用VxWorks etherOutputHookAdd

鉤代碼看起來像這樣(我打算實際運行的代碼是更復雜,但這種供應的一個例子。)

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

我可以掛鉤etherInputHookAdd從VxWorks的殼像這樣

etherInputHookAdd etherHook,"fei",0 

這將返回0(STATUS OK),在此之後,'anCounter'變量的檢查將按照預期指示活動。但是,輸出方向沒有這樣的運氣。我已經嘗試了這兩個命令行

etherOutputHookAdd etherHook,"fei",0 
etherOutputHookAdd etherHook 

這兩個都返回OK,但鉤子程序似乎沒有被調用。我最好的假設是(1)我缺少一個初始化步驟,或者調用它錯誤,(2)etherOutputHookAdd實現只是一個存根,(3)你不能從shell調用它,或者(4)也許我的驅動程序的實施是錯誤的。

解決中心問題的任何想法 - 如何查看我的板上發送了什麼 - 歡迎光臨。

回答

0

對於那些可能跌倒這種方式的人......這是可怕的'假設4'!

事實證明,爲了使etherOutputHookAdd()正常工作,NIC設備驅動程序編寫者有責任包含對etherOutputHookRtn指向的函數的調用。所有的etherOutputHookAdd()都會將你提供的數據包處理程序添加到列表中,這樣當NIC驅動程序調用etherOutputHookRtn時,就會得到正在傳輸內容的副本。可悲的是,有許多司機在哪裏出於任何原因,這根本就沒有完成。

因此,在這種情況下,只有兩個行動方案。

  • 找到一個補丁驅動程序,或者自己修補它
  • 改變戰術完全,例如,嘗試在另一邊使用etherInputHookAdd()。
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