как использовать VxWorks etherOutputHookAdd - PullRequest
0 голосов
/ 06 мая 2011

Я в тупике, пытаясь заставить etherOutputHookAdd () работать. Его аналог, etherInputHookAdd (), кажется, работает нормально. Рассматриваемая версия ОС VxWorks 5.4.

Код хука выглядит так (код, который я намерен запустить, более сложный, но это служит примером.)

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

Оба они возвращаются в порядке, но процедура ловушки, кажется, вообще не вызывается. Мои лучшие гипотезы: (1) я пропускаю шаг инициализации или неправильно его называю, (2) реализация etherOutputHookAdd - просто заглушка, (3) вы просто не можете вызвать ее из оболочки, или (4) моя реализация драйвера nic глючит.

Любые идеи, которые решают центральную проблему - как мне увидеть, что отправляется с моей доски - приветствуются.

Ответы [ 3 ]

1 голос
/ 23 марта 2012

Следующие сетевые драйверы 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
0 голосов
/ 08 ноября 2018

В случае перехода на более новую версию (> 6.x) VxWorks, etherLib больше не поддерживается.Вместо этого можно использовать muxLib для аналогичной цели.

  • Перехват входящего трафика: используйте muxBind с MUX_PROTO_PROMISC или MUX_PROTO_OUTPUT.
  • Перехват исходящего трафика: используйте muxBind с MUX_PROTO_OUTPUT.

Вы должны предоставить процедуру обратного вызова в обоих случаях.

0 голосов
/ 10 мая 2011

Для тех немногих, кто мог бы споткнуться об этом .. Это была ужасная «гипотеза 4»!

Оказывается, что для правильной работы etherOutputHookAdd () он обязан драйверу устройства NICписатель, чтобы включить вызов функции, на которую указывает etherOutputHookRtn.Все, что делает etherOutputHookAdd (), это добавляет предложенный обработчик пакетов в список, чтобы, когда драйвер NIC вызывал etherOutputHookRtn, вы получали копию того, что было передано.К сожалению, есть много водителей, где по какой-либо причине это просто не было сделано.

Так что в таких случаях, как этот, есть только два варианта действий.

  • найдите исправление для вашего драйвера или исправьте его самостоятельно
  • полностью измените тактику, например, попробуйте использовать etherInputHookAdd () на другой стороне.
...