А под провайдера Comstar Wimax реально этот драйвер применить?
Мне удалось приспособить версию 0.0.1d для работы в сети Комстар.
Не смотря на то, что на модеме Seowon Comstar написано "3220A", на самом деле это 3210A. Казалось бы, ничем, кроме рабочей полосы частот, он не должен отличаться, но он отличается. (Хотя, возможно, это просто издержки различных дистрибутивов Linux - не берусь утверждать.) Так вот:
В функции поиска модема (wimax.c) использовалось значение параметра bInterfaceNumber равное 1, хотя в моей системе рабочим оказалось значение 0.
Я немного переписал код, а это значение вытащил в дефайны для простоты переделки (в будущем можно, например, через командную строку задавать).
#define IFACE 0
// 0 - для модема комстар, 1 - для модема фрештел
static struct libusb_device_handle* find_wimax_device(void)
{
struct libusb_device_handle* handle = NULL;
int r;
//Switch modem the same as in usb_modeswitch
handle = libusb_open_device_with_vid_pid(NULL, 0x1076, 0x7f40);
if (handle)
{
if (libusb_kernel_driver_active(handle, IFACE) == 1)
{
r = libusb_detach_kernel_driver(handle, IFACE);
if (r < 0)
wmlog_msg(1, "Kernel driver detaching (error %d)\n", r);
else
wmlog_msg(1, "Kernel driver detached!\n");
}
r = libusb_claim_interface(handle, IFACE);
if (r < 0)
wmlog_msg(1, "Claim Interface problems (error %d)\n", r);
else
{
wmlog_msg(1, "Innterface claimed\n");
r = libusb_control_transfer(handle, 0xa1, 0xa0, 0, IFACE, read_buffer, 1, 1000);
wmlog_msg(1, "Sending Control message (result %d - %s)\n", r, r ? "bad" : "ok");
libusb_release_interface(handle, IFACE);
libusb_close(handle);
}
}
int retry = 0;
do
{
sleep(1); // Wait while device switching
handle = libusb_open_device_with_vid_pid(NULL, 0x1076, 0x7f00);
}
while (retry++ < 5 && !handle);
if (handle) wmlog_msg(2, "Device switched after %d retries.\n", retry);
else wmlog_msg(1, "Device not switched after %d retries.\n", retry);
return handle;
}
(Заодно немного переделал ожидание переключения в режим модема.)
Исправленный wimax.c для работы в сети Comstar - в аттаче. Если переправить IFACE 0 на IFACE 1 получим код для работы в сети Freshtel, который, полагаю, должен быть всё ещё работоспособным.
Для подключения к сети используется логин и пароль от пользователя, создаваемого вместе с аккаунтом (см.
картинку
в аттаче).
Предполагаем, что находимся в папке со свежесобранным модулем wimax (например, /tmp/gctwimax-0.0.1d/). Тогда подключение выполняется командой вида:
sudo ./wimax --login=%wimax-login% --pass=%wimax-pswd% --nspid=000029 --nai=%wimax-login%:%wimax-pswd%@wimax.comstar-uts.ru
Например, для данных, указанных на
картинке
из аттача:
sudo ./wimax -vv --login=wimax12345 --pass=y0urp$wD --nspid=000029 --nai=wimax12345:y0urp$wD
@wimax.comstar-uts.ru
(ключик -vv можно и убрать, если вам не нужна диагностическая информация)
Также я предполагю, что модем должен поддерживать аутентификацию по %MAC-login% без пароля, но добиться результата в этом направлении мне так и не удалось. Бегло взгянув на различия в коде madwimax (который успешно работает с модемом Samsung U-200) и gctwimax, у меня закрались подозрения, что эта функция не поддерживается в gctwimax. Опять же, не берусь это утверждать, т.к. потратил совсем мало времени на разбор этого участка кода.
Все опыты проводились в Arch Linux.
libeap был собран из AUR (
aur.archlinux.org/packages.php?ID=39378)
Версии использованных libeap и libusb указаны в аттаче.
Информация о модеме:
Chip info: 0070
Firmware info: 1.01.1954
Резюме:
Для работы в сети комстар:
- устанавливаем зависимости (типа libusb)
- собираем libeap (по инструкции из INSTALL архива gctwimax - или как угодно на свой страх и риск)
- заменяем /src/wimax.c на соответствующий файл из аттача
- собираем gctwimax командой make
- запускаем с указанием логина и пароля, которые можно найти на странице управления доступом в своём "Личном кабинете" Комстар. Формат командной строки приведён выше.
P. S. Как следует протестировать работу ещё не было времени, но постоянно выскакивающие сообщения вида
bad format: 81 0e
bad format: 81 11
говорят о том, что впереди ещё много подводных камней.