LINUX.ORG.RU

eth loopback mode, ENOBUFS

 ,


0

3

всем доброго времяпрепровождения, не получается перевести PHY сетевухи в режим loopback...
вернее уже получилось, но при попытке sendto сыпятся ошибки ENOBUFS
по-идее, нужно считывать, ну так я и считываю в параллельном треде из «socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))», которому устанавливаю «ifopts.ifr_flags |= IFF_PROMISC»....

WTF??? В смысле, ЧЯДНТ? %)

★★★★★

Последнее исправление: metawishmaster (всего исправлений: 1)

Ответ на: комментарий от dimon555

может на твоей сетевухе лупбэк не работает?

это было бы прискорбно... :-\

metawishmaster ★★★★★
() автор топика

подозреваю что многие PHY могут loopback, но каждый ли драйвер это поддерживает? ведь нужно дать соответствующую настройку регистра в PHY, а оно идет через драйвер и логику самого устройства, и где-то в середине этого пути может быть не реализовано

I-Love-Microsoft ★★★★★
()
Последнее исправление: I-Love-Microsoft (всего исправлений: 1)

ну так я и считываю в параллельном треде из «socket(AF_PACKET, SOCK_RAW, htons(ETH_P_ALL))», которому устанавливаю «ifopts.ifr_flags |= IFF_PROMISC»....

И где тут loopback?

vodz ★★★★★
()
Последнее исправление: vodz (всего исправлений: 1)
Ответ на: комментарий от I-Love-Microsoft

блин... мне уже стыдно признаваться, но вчера вечером у меня, после игр с 0-м регистром на PHY, получилось послав N пакетов получить 2*N в ответ, и, главное, успел засечь в своем наколенном подобии du-meter'a адекватные in\out по eth0 =) казалось бы победа, но я успел «сломать» то, что сделал, и с утра не получилось восстановить, ну и фиг с ним, пожзе займусь. главное, что знаю, что это можно сделать и ошибка была в конфигурации железяяки :)

metawishmaster ★★★★★
() автор топика
Последнее исправление: metawishmaster (всего исправлений: 1)
Ответ на: комментарий от metawishmaster

для этого нулевому регистру на PHY я делал |= 0x4000

может стоит через ethtool или хотя бы в коде драйвера посмотреть, вдруг там надо ещё в какие регистры записать.

ещё возможно нужно как-то линк ап сделать, а то драйвер передавать пакеты не будет.

dimon555 ★★★★★
()
Ответ на: комментарий от dimon555

ещё возможно нужно как-то линк ап сделать, а то драйвер передавать пакеты не будет.

спасибо за идею! :)

так-то по-идее, в принципе, правильно результата я уже добивался... осталось только подобрать привильную комбинацию строк %)

    mfe_config_default(tm);
    mfe_power_down(tm, 1);
    mfe_set_fixed_speed(tm, speed);
    mfe_power_down(tm, 0);

    usleep(300000);

    ret = mfe_reg_read(tm, 0);
    mfe_reg_write(tm, 0, ret | 0x4000);
    ret = mfe_reg_read(tm, 0);
    printf ("tm = 0x%x\n", ret);
#if 0
    mfe_reg_write(tm, 0, ret | 0x8000); // reboot
#endif

metawishmaster ★★★★★
() автор топика

да, для конкретики, ENOBUFS выпадал потому что я не ждал, пока сетевая карта сделает LINK_UP

metawishmaster ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.