Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Программирование под Unix/Linux > Установка параметров работы сетевой карты.


Автор: Kappac 6.6.2007, 21:17
Код


        struct ifreq intrf;

        strcpy(intrf.ifr_name, device);

    if (ioctl(sock, SIOCGIFFLAGS, &intrf) < 0) {
        fprintf(stdout, "Cannot get socket`s parametrs: %s!\n", strerror(errno));
        exit(-1);
    }
    
    intrf.ifr_flags |= IFF_PROMISC;

    if (ioctl(sock, SIOCSIFFLAGS, &intrf) < 0) {
        fprintf(stdout, "Cannot set socket`s parametrs: %s!\n", strerror(errno));
        exit(-1);
    }



        После попытки установки параметров, получаю сообщение о том, что установить не получается по причине: Операция не поддерживается --
--(Operation not supported), периодически ДАЖЕ отключается сетевуха. Что не так в коде? Или может что-то не дособрал в ядре? Подскажите плиз!  smile 
        З.Ы. Программулина запускается под рутом.

Автор: bsa 7.6.2007, 16:47
А ты уверен, что драйвер твоей сетевухи поддерживает указанную операцию? Возможно, набор флагов не поддерживается.

Автор: Kappac 7.6.2007, 22:16
Уверен! Это участок нормально работал в первоначальном варианте. Правда потом я умудрился убить в хлам систему =(((( После переустановки уже не работает... 

Автор: Kappac 7.6.2007, 22:41
Проблема была в не правильном параметре функции, участок кода с которым я не показал:
не правильный вариант:
Код

if (setsockopt(sock, [color=red]SOL_PACKET[/color], SO_BINDTODEVICE, device, sizeof(device)) < 0) {
        fprintf(stdout, "Cannot set socket options: %s!\n", strerror(errno));
        _exit(errno);
}


правильный вариант:

Код

if (setsockopt(sock, [color=red]SOL_SOCKET[/color], SO_BINDTODEVICE, device, sizeof(device)) < 0) {
        fprintf(stdout, "Cannot set socket options: %s!\n", strerror(errno));
        _exit(errno);
}


Тема закрыта!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)