Угу, этот работает... но, авторизацию не проходит:
Code:Initializing interface 'vlan1' conf '/tmp/wpa_supplicant.conf' driver 'wired' ctrl_interface 'N/A' bridge 'N/A' Configuration file '/tmp/wpa_supplicant.conf' -> '/tmp/wpa_supplicant.conf' Reading configuration file '/tmp/wpa_supplicant.conf' ap_scan=0 Line: 2 - start of a new network block key_mgmt: 0x8 eap methods - hexdump(len=16): 00 00 00 00 04 00 00 00 00 00 00 00 00 00 00 00 identity - hexdump_ascii(len=10): 61 61 31 30 37 30 33 32 38 35 aa_что-то_ password - hexdump_ascii(len=10): [REMOVED] eapol_flags=0 (0x0) Priority group 0 id=0 ssid='' Initializing interface (2) 'vlan1' EAPOL: SUPP_PAE entering state DISCONNECTED EAPOL: KEY_RX entering state NO_KEY_RECEIVE EAPOL: SUPP_BE entering state INITIALIZE EAP: EAP entering state DISABLED EAPOL: External notification - portEnabled=0 EAPOL: External notification - portValid=0 wpa_driver_wired_init: Added multicast membership with packet socket Own MAC address: 00:1b:fc:81:74:d3 Setting scan request: 0 sec 100000 usec Added interface vlan1 EAPOL: External notification - portControl=Auto Already associated with a configured network - generating associated event Association info event State: DISCONNECTED -> ASSOCIATED Associated to a new BSS: BSSID=01:80:c2:00:00:03 No keys have been configured - skip key clearing Network configuration found for the current AP EAPOL: External notification - portControl=Auto Associated with 01:80:c2:00:00:03 EAPOL: External notification - portEnabled=0 EAPOL: External notification - portValid=0 EAPOL: External notification - portEnabled=1 EAPOL: SUPP_PAE entering state CONNECTING EAPOL: SUPP_BE entering state IDLE EAP: EAP entering state INITIALIZE EAP: EAP entering state IDLE Cancelling scan request EAPOL: startWhen --> 0 EAPOL: SUPP_PAE entering state CONNECTING EAPOL: txStart TX EAPOL - hexdump(len=4): 01 01 00 00 EAPOL: startWhen --> 0 EAPOL: SUPP_PAE entering state CONNECTING EAPOL: txStart TX EAPOL - hexdump(len=4): 01 01 00 00 EAPOL: idleWhile --> 0 EAP: EAP entering state FAILURE CTRL-EVENT-EAP-FAILURE EAP authentication failed EAPOL: SUPP_PAE entering state AUTHENTICATING EAPOL: SUPP_BE entering state FAIL EAPOL: SUPP_PAE entering state HELD EAPOL: SUPP_BE entering state IDLE EAPOL: startWhen --> 0 EAPOL: heldWhile --> 0 EAPOL: SUPP_PAE entering state CONNECTING и т.д.
Я слегка иначе собрал
http://oleg.wl500g.info/8021x/wpa_supplicant
Теперь новая версия похожа на старую?
У Вас либо по дороге прокси кеширующий, либо не туда файл попал. Я сейчас проверил, он работает правильно, т.е. конфиг читается. Попробуйте ещё раз.
lly
Я начал тогда переделку с тем, чтобы отключить встроенный парсер командной строки, но так и не доделал. В итоге патч вообще не нужен. Нужен только конфиг c таким содержанием.
Code:CONFIG_DRIVER_WIRED=y CONFIG_IEEE8021X_EAPOL=y CONFIG_EAP_MD5=y CONFIG_NO_WPA=y CONFIG_NO_WPA2=y CONFIG_NO_AES_EXTRAS=y CONFIG_BACKEND=file
В старой версии CONFIG_NO_CONFIG_BLOBS не было.
Сейчас надо бы заставить эту старую версию работать. Тут такое дело: сразу после
TX EAPOL - hexdump(len=4): 01 01 00 00
должен приходить ответ типа такого:
RX EAPOL from 00:17:9a:7a:7f:cc
RX EAPOL - hexdump(len=46): 01 00 00 0f 01 01 00 0f 01 55 73 65 72 20 6e 61 6d 65 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Но он не приходит. Причины может быть две: провайдер молчит, либо второй вариант - в прошивке я что-то поменял.
Дата, когда всё работало - 20 декабря 2007 года. Прошивка была 1.9.2.7-8. Имеет смысл попробовать её.
Обязательно нужно убедиться, что МАК адрес склонирован от компьютера с виндоус, который подключался в последний раз. Там могут быть какие-то кеши на провайдерской стороне...
Прокси нет. Первую и вторую редакции "нового" суппликанта, естественно, сравнивал, они различались. Но, видимо, всё-таки их перепутал на самом роутере. Попробовал ещё раз - "заработало", лог стал как у wpa_supplicant.old. Пробовал на 1.9.2.7-10. Сменил MAC на "виндовой" - нет реакции. Провайдер не отвечает вообще.
Прошился ей, аналогично - лог тот же. Сменил MAС - реакции нет.Прошивка была 1.9.2.7-8. Имеет смысл попробовать её.
Угу, на "большом" линуксе (Debian) авторизация проходит отлично. И без всякой смены MAC-адресса.RX EAPOL from 00:17:9a:7a:7f:cc
RX EAPOL - hexdump(len=46): 01 00 00 0f 01 01 00 0f 01 55 73 65 72 20 6e 61 6d 65 3a 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
Last edited by Corvus Corax; 25-02-2009 at 16:09.
Плохо. Остаётся ждать счастливого обладателя wl500w, чтобы отсеять версию с VLAN.
А где взять исходники eapd или как его там? Я могу собрать версию для своей прошивки, чтобы проверить.
Тут http://www.dd-wrt.com/phpBB2/viewtopic.php?t=45001
Вообще проблемы с авторизацией по протоколу 802.1x ислючительно аппаратные. Если быть точнее на диапазон mac адресов, отвечающих за авторизацию не приходят пакеты без конфигурирования свитча (https://dev.openwrt.org/ticket/1862 ). В wpa_supplicant был добавлен костыль - спецальный драйвер, для его использования нужно собрать суппликнт с опцией CONFIG_DRIVER_ROBOSWITCH=y.
2lly: если будеш исользовать eapd, то поправь в socket.c функцию:
В оригинале там зактомменчен цикл do while, но с ним почемто не работало, сделал while(1) - некрасиво, зато работает . Если функцию не поправить, то будут конфликты с авторизацией 802.1x по wifi.Code:int socket_recv(int socket,u8 *data,u16 data_size) { struct sockaddr_ll ll; memset(&ll, 0, sizeof(ll)); int res; while (1) { socklen_t rlen = sizeof(ll); memset(&ll, 0, sizeof(ll)); ll.sll_family = AF_PACKET; res = recvfrom(socket, data, data_size, 0,(struct sockaddr *)&ll,&rlen); if (res<=0) break; if (ll.sll_ifindex == if_id) break; } if (res < 0) { perror("recvfrom"); return -1; } return res; }
Last edited by m0xf; 25-02-2009 at 17:13.
m0xf
Супер! Спасибо за объяснения! Очень тяжело было найти концы проблемы, так как не мог наблюдать ее у себя.
У меня остался только один вопрос - почему в driver_init() ты в drv->ifr.ifr_name записываешь "eth0" а не "vlan1"?
robo.c вообще почти полностью списан из wpa supplicant, там какраз и происходит то конфигурирование свитча для приёма нужных пактов. Производится запись в некие регистры, что точно там происходит трудно сказать, спецификации broadcom не открывает . Как я понял eth0 используется по тому, что он связан с драйвером, через который происходит обращение к регистрам свитча. Более того, после такой "конфигурации", пакеты с mac адресом 0180c2000003, которые приходят в wan порт, прилетают не на vlan1, а на eth0. Выбор vlan с которого принимаются пакты авторизации производится в driver_init, туда передаётся нужный vlan.
Вот такой сюрприз от broadcom... Возможно можно както сделать, чтобы работа с диапазоном mac адресов 0180c2000000-0180c20000FF была прозрачна для программ, и добавить это в драйвер сетевой карты, но без спеков это проблемотично.
Всё это замечательно конечно... но кто-нибудь может просто скомпилить свежий суппликант с этим CONFIG_DRIVER_ROBOSWITCH и дать потестить?