XXXX XXXX XXXX XXXX
X X X X X
XXX X X XXXX XXXX
X X X X X
X XXXX XXXX XXXX
[lp < post] [ls *] [RSS] [Notifies|Tracker]
Блогиbanderlog O_o

sgauth на роутере TL-WR741ND

Переехал на новую хату и попал под иго trio-net (провайдер).

Знамениты тем,что до сих пор используют систему авторизации stargazer

Собственно, других Вариантов по району нет, название улицы ‘Карагандинская’ говорит само за себя.
3G модем - дорого и нет правильного безлимита (щаз 25Gb/мес называют безлимитом).Укртелеком в частном секторе плох (АТС дерьмовая), да и городского телефона в хате нет.

И Все было неплохо, пока я подключал ноутбук по витой паре и запускал авторизатор (sgauth).
Но надо было организовать самый примитивный wifi, с покрытием своего участка.

И появился у меня роутер, и позвонил в тот же день trio-net'овцам.
Гугль грит (и разрабы stg подтверждают), что самый простой вариант совместимости stargazer и роутеров – установка галочки ‘always online’.
Вот за это запросили с меня 300 грн.
Меня тут же стала немилосердно душить жаба, и я решил воспользоваться вторым вариантом – собрать sgauth под архитектуру своего роутера (TP-Link TL-WR741ND).



Сначала я перепрошил роутер под dd-wrt и скачал одноименные тулчейны.
Без перепрошивки у TL-WR741ND даже telnet нету.
С чувством внезапного негодования, обнаружил что бинарники gcc в тулчейне ddwrt 64 битные.
Переустанавливать систему было влом, потому скачал тулчейны openwrt (они 32bit).

С аццким геморром были скомпилированы исходники sgauth-2.12.6 (последняя версия, лежащая отдельным архивом на сайте разработчиков) под MIPS архитектуру (проц Atheros AR7240), подпихнуты недостающие либы (libstdc++, libpthread) из тулчейна.

Аццкий геморр был вызван жутким Makefile,в котором надо было прописывать полные пути до либ или компилятора по несколько раз.
Его правка потребовала усилий 3\4 участников уютной конфочки linux@conference.jabber.com.ua

В общем, sgauth на роутере запустился, но интернета все равно не дал.
В отчаянии я правил исходные коды,уменьшив размер бинарника в 2 раза, и в какой-то момент у меня появился пинг до 8.8.8.8.
При этом sgauth запущен нигде не был.
ХЗ что случилось, то ли админы сжалились, то ли мой кривой бинарь что-то покоцал на серваке, но интернет у меня появился.
Роутер мне перезапускать было страшно, потому я неделю перешагивал через натянутый на уровне колена провод что бы попасть в туалет.

Спустя неделю, я вынужден был пополнить счет у провайдера, и в 00:00, при снятии денег с виртуального счета, для оплаты следующего месяца, сервак (или админы) решили что хватит и инет пропал.

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

Роутер был прошит уже под openwrt, что бы исключить косяки совместимости их тулчейна с ddwrt прошивкой, и был найден форум разрабов.
На нем выяснилось что stargazer активно пилится и пугающее кол-во локальных сетей им пользуется, а версия sgauth-2.12.6 является практически ископаемой.
С какого-то года, sgauth входит в архив с сервером, так что я скачал stg-2.408.rc2
В архиве оказался вменяемы Makefile, в котором надобыло лишь указать CXX=/staging_dir/toolchain-mips_r2_gcc-4.3.3+cs_uClibc-0.9.30.1/usr/bin/mips-openwrt-linux-uclibc-g++, подправить CXXFLAGS и LDFLAGS

После того как я немного подправил исходники – заккоментировал web-морду (матюкался на gettext), iconv (в gcc от openwrt он не был включен) в stglibs/common.lib/common.cpp, projects/sgauth/main.cpp и projects/sgauth/Makefile (добавил -static) – всё собралось без проблем.
На роутерее все запускается но инета нет.
Я немного пострадал фигней с wireshark, eatercap и sniffit и выяснил что пакеты от роутера уходят и портты он слушает.

Потом opium напомнил о существовании tcpdump, который был торжественно собран под архитектуру роутера с помощью opkg.
Тут то и выяснилось, что роутер не проходит авторизацию из-за неправильно зашифрованного пакета.
А пакет он шифрует неправильно потому что он, ВНЕЗАПНО, big endian!
Обнаружил я это чисто случайно, натолкнувшись у них же на форуме, на тему с проблемами авторизации (там был сервак на BE).

BE клиент предусмотрен в проекте не был, но разрабы сработали оперативно и напедалили 2 патчика, которые решили проблему.
Теперь sgauth пропатчен, собран и исправно работает на BE роутере с openwrt.

Мой топик на форуме разработчиков:
http://local.com.ua/forum/topic/32712-sgauth-на-openwrt-роутере-запустил-но/

Архив с работающими пропатченными исходниками и скомпилированным sgauth для BE :
http://local.com.ua/forum/index.php?app=core&module=attach&section=attach&attach_id=6950

Код для проверки endian:

 1 #include <iostream>
 2  
 3 using namespace std;
 4  
 5 int main (int argc, char *argv[])
 6 {
 7     unsigned int i;
 8     unsigned char *p = (unsigned char *)&i;
 9  
10     cout<<"Enter an unsigned integer value: ";
11     cin>>i;
12  
13     cout<<"i = "<<i<<endl
14         <<"Comparison: &i = "<<&i<<endl
15         <<"            *p = "<<(int *)p<<endl<<endl
16         <<"Byte 1: "<<(int)p[0]<<endl
17         <<"Byte 2: "<<(int)p[1]<<endl
18         <<"Byte 3: "<<(int)p[2]<<endl
19         <<"Byte 4: "<<(int)p[3]<<endl;
20  
21     unsigned int foo = ((i % (1 << 24)) % (1 << 16)) % (1 << 8);
22  
23     if ((unsigned int)p[0] == foo)
24         cout<<endl<<"    === Little Endian ==="<<endl;
25     else
26         cout<<endl<<"    === Big Endian ==="<<endl;
27  
28     cout<<endl;
29  
30     return 0;
31 }

openwrt следует брать так (тулчейны included):
svn co svn://svn.openwrt.org/openwrt/branches/backfire tplink
cd tplink
./scripts/feeds update -a && ./scripts/feeds install -a

Откат с ddwrt на заводскую прошивку брал отсюда:
http://www.dd-wrt.com/phpBB2/viewtopic.php?t=85237

openwrt не собирал юзал какую-то предсобранную прошивку отсюда:
http://wiki.openwrt.org/toh/tp-link/tl-wr741nd


PS: brezerk а чего не работает LaTeX разбивка текста (пустая строка абзац, перевод строки пох)? Реквестирую.

[] 0 [] | banderlog @ 20.01.2012 10:38
Information: About & Site rules
W3C: Valid HTML 4.01 & Valid CSS 2.1