The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]



Вариант для распечатки  
Пред. тема | След. тема 
Форум Программирование под UNIX (Сеть, сокеты)
Режим отображения отдельной подветви беседы [ Отслеживать ]

Оглавление

Модуль lapbether, Pavel515 (ok), 06-Мрт-19, (0) [смотреть все]

Сообщения [Сортировка по времени | RSS]


2. "Модуль lapbether"  +/
Сообщение от Pavel515 (ok), 11-Мрт-19, 10:01 
> Вам это все зачем?
> Сети X.25/FrameRelay/ISDN и другие практически умерли.
> IP+Ethernet их похоронили более 15-20 лет назад.
> Но если очень интересно, начните хотя бы с википедии.

Здравствуйте
Поверьте, задача есть
Немного истории:
Существовала себе ничего фирма Siemens и производила замечательное коммутационное оборудование: станции типа EWSD. Они управлялись в том числе посредством протокола X.25 В 2008 году не выдержав конкуренции на рынке производителей коммутационного оборудования Siemens, как производитель станций коммутации, как канальной так и пакетной приказал долго жить. Сначала там Nokia-Siemens, а потом и всё... Но станции на сети остались и их довольно много как классической телефонии EWSD, сотовых коммутаторов D900, пакетной коммутации hiE9200. В "нулевых", чтобы поспеть за технологиями Siemens все-таки выпустил несколько модулей(плат) и интерфейсом IP(Ethernet) IOP:UNI2, IOP:OAM, появилось (именно появилось. в ядрях меньше чем 2.6.32 - его нет, хотя в исходниках фигурирует 2000 год) устройство SSNC. У нас были приобретены модули IOP:OAM, которые выполняют ряд конвертаций протоколов. Устройство управления NetManaget(NetM)---(RFC1006)--->IOP:OAM-(X.25)->EWSD. Работали себе эти модули ничего 12 лет и стали ломаться. Что-бы не утомлять альтернатива:

NetM-----(RFC1006)--->(UnixPC  X.25 XOTD)-------->cisco(XOTD)-----x.25---->EWSD
часть (UnixPC  X.25 XOTD) на ядре 2.6.18 с использованием x25.ko x25tap.ko и xotd работает великолепно
Но x25tap не поддерживается в ядрах более чем 2.6.18, но появилось устройство lapb очень напоминающее x25tap.


Я, конечно, не супер программист, который работает в vi, но качество кода модуля x25 постоянно растет, сравните сами, значит это кому-то нужно? в наш век, когда все делается за деньги.

А вопрос у меня простой. Если отбросить вопросы по необходимости, он становится академическим:
как "открыть" устройство lapb в своей программе?

в исходниках lapbether.c функция передающая информацию из облака x25 называется lapbeth_data_transmit
она работает и виден рост количества байтов и пакетов в команде ifconfig lapb0, и в программе, "открывающей" lapb как PF_PACKET,SOCK_RAW<ETH_P_ALL подключив напрямик к lapb0

strcpy( ifr.ifr_name, "lapb0");
if(( ioctl( fd, SIOCGIFINDEX, &ifr))==-1)

    sll.sll_family = AF_PACKET;
    sll.sll_ifindex = ifr.ifr_ifindex;
    sll.sll_protocol = htons(ETH_P_ALL);
//    sll.sll_pkttype = PACKET_OUTGOING;
//    sll.sll_hatype = ARPHRD_X25;

    rc =  bind( fd, (struct sockaddr*)&sll, sizeof( sll));
    if(rc == -1){
        printf("Bind socket error (%d)(%s)\n",errno,strerror(errno));
    return -1;
    }

    struct sockaddr_ll sll_in;
    socklen_t in_len;
    in_len = sizeof(sll_in);

    nr = recvfrom(fd,packet,40,0,(struct sockaddr*)&sll_in,&in_len);
видно в sll_in то же, что и в tcpdump -i lapb0 ...

in_len = 12
family   = 17
ifindex  = 6
protocol = 0x0805  ->ETH_P_X25 linux/if_ether.h
pkttype  = 4       ->PACKET_OUTGOING  linux/if_packet.h пакет идет из облака X25 кода-то наружу
hatype   = 271     ->ARPHDR_X25     linux/if_arp.h
halen    = 0
(00)(00)(00)(00)(00)(00)(00)(00)
len = 1
(01)   -> X25_IFACE_CONNECT linux/if_x25.h   запрос на установку соединения между 3 и 2 уровнем X25


TCPDUMP
00 04 01 0f 00 00 00 00 00 00 00 00 00 00 08 05 01
pkttype
      271(ARPHRD_X25)
            00 00 halen
                                          08 05(ETH_P_X25)
                                                 01 X25_IFACE_CONNECT


Передача в сторону облака X25 по всей вероятности должна вестись посредством функции
lapbeth_rcv, ссылка на которую указана в структуре,

static struct packet_type lapbeth_packet_type __read_mostly = {
    .type = cpu_to_be16(ETH_P_DEC),
    .func = lapbeth_rcv,
};

где также указан тип заголовка(протокола)  или чего ??? ETH_P_DEC
т.е. как я понимаю тут говорится ядру, что если в очереди пакетов для устройства lapb появится пакет с типом (заголовком) ETH_P_DEC, то надо выполнить процедуру lapbeth_rcv
и, к сожалению,(или просто не хватает информации как мне поступать), эта функция ядром не вызывается...

Помогите, пожалуйста, информацией по ядру unix (не надо отсылать к википедии, поверьте ITUT X25 - моя настольная книга, а вот по очередям пакетов в ядре как-то не очень)

Спасибо Вам огромное за ответ. Может мой вопрос настолько простой, что все на поверхности?
С уважением, Павел

Ответить | Правка | Наверх | Cообщить модератору

3. "Модуль lapbether"  +/
Сообщение от Аноним (3), 11-Мрт-19, 15:33 
Попробовать написать Стивену Хеммингеру shemminger@vyatta.com ?

Может подскажет и поможет. Попытка не пытка.

Почитать https://habr.com/ru/company/mailru/blog/314168/

Ответить | Правка | Наверх | Cообщить модератору

4. "Модуль lapbether"  +/
Сообщение от wizard22 (ok), 12-Мрт-19, 15:36 
В 90-е годы Linux не был промышленной ОС. Поэтому использовали в сетях X.25 Cisco,Motorola,SCO/Unixware/iRMX,Eicon,Sangoma и т.д. X.25 стек в Linux никогда не имел промышленного статуса. Об этом ясно сказано в исходных текстах и документации. Т.е. промышленного качества там нет. Возможно, отдельные компании типа Sangoma могли бы поддержать разработку X.25 стека, ибо платы выпускают до сих пор.
LAPB - это канальный уровень X.25 (это часть X.25 стека).
Вы не даете подробных диаграмм взаимодействия оборудования и ПО (с указанием версий), которое использовали или используете.
Поэтому прокомментирую кратко и ясно.
Можно запустить ВМ с старой версий Linux, в которой работает x25tap. Далее очевидно.
Для современных версий Linux можно посмотреть xotd (там были разные версии) или что-то аналогичное и разобраться можно ли x25tap заменить стандарным tap устройством. Если там нет поддержки x.25, то смело клонировать его и сделать собственный x25tap. Ибо оригинальный x25tap сделан из ethertap. И остается посмотреть что сегодня с маршрутизацией X.25 кадров на устройство x25tap или tap устройства. Ибо x25tap - это интерфейс для энкапсуляции кадров X.25 в Ethernet кадры.
К программированию нужно переходить только тогда, когда стандартными средствами задачу решить нельзя принципиально.


Ответить | Правка | К родителю #2 | Наверх | Cообщить модератору

5. "Модуль lapbether"  +/
Сообщение от Pavel515 (ok), 12-Мрт-19, 18:36 
Спасибо за внимание к данной теме.
Как я уже писал ранее на ядре 2.6.18 все работает
написал программку, что-то вроде xotd: с одной стороны слушающий socket, который обрабатывает RFC1006 на порту в моем случае 5084, приняв вызов, создает соединение через X25socket. В ядре x25 адрес направлен на x25tap0, а в xotd x25tap0 связывается с удаленным адресом cisco с xotd
modprobe x25
modprobe x25tap
ifconfig x25tap0 up
route add -A x25 (x25 адрес) x25tap0
xotd -v x25tap0 192.168.100.11 <- cisco
rfc1006 -l 5084 (x25 адрес) <- собственный x25 адрес зашит внутри программки
Это все заработало, но хочется улучшить перейти на ядро 3.10

Достиг результатов в понимании lapbether
Это такая штука, которая создает пару lapb и eth,причем однозначную, скажем в системе две карты eth0 и eth1. После
modprobe x25
modprobe lapb
modprobe lapbether

получается  два устройства lapb, которые однозначно связываются с устройствами Ethernet
lapb0 <-> eth0
lapb1 <-> eth1
В общем случае, если в системе N eternet карт (кроме dummy, loop ...?) то будет N lapb однозначно связанных пар
lapbN <-> ethN

Провел эксперимент
две машины eth1 обоих связал в отдельном valn
ifconfig lapb1 up

на стороне клиента
route add -A x25 44 lapb1
x25client 33 44 <- программа устанавливает соединение с сервером по адресу 44 с использованием x25 socket
socket(PF_X25...
bind -> 33
connect -> 44

на стороне сервера
x25server 44
socket(PF_X25...
bind -> 44
listen
accept

в отдельном vlan, там где eth1, виден трафик (tcpdump) пакеты lapb, x25
устройства lapb общаются друг с другом

но на сервере accept не происходит: lapb1 сервера надо как-то связать со слушающим x25 socket ????

вот он socket, но dev ???  
cat /proc/net/x25/socket
dest_addr  src_addr   dev   lci st vs vr va   t  t2 t21 t22 t23 Snd-Q Rcv-Q inode
*          44         ???   000  0  0  0  0   0   3 200 180 180     0     0 31582

просто уже задело

Спасибо еще раз за внимание, просто когда сам в себе варишься... А тут написал пост, оно и немного прояснилось, по крайней мере направление.

А как в ядре 3.10 выглядит этот ethertap ? я нашел упоминание о tun/tap устройствах в исходнике ядра drivers/net/tun.c Если это оно буду разбираться, если нет посоветуйте куда смотреть.

С уважением, Павел


Ответить | Правка | Наверх | Cообщить модератору

6. "Модуль lapbether"  +1 +/
Сообщение от Pavel515 (ok), 13-Мрт-19, 14:26 
Довел до конца lapbether

./x25server 44
X25: socket created
X25: get socket option qbit = 0
X25: set socket facility OK
X25: socket bind to 44
X25: start listen ...
X25: socket listening
X25: socket accept from 33
X25: from client: Hello server !!! (17)
X25: to client: Hi client !!! (14)
X25: client closed
X25: socket closed

./x25client 33 44
X25: socket created
X25: get socket option qbit = 0
X25: set socket facility OK
X25: socket bind to 33
X25: socket connecting to 44 ...
X25: socket connect to 44
X25: to server: 'Hello server !!!' (17)
X25: from server: Hi client !!! (14)
X25: socket closed

http://files.rsdn.org/45405/x25client.c
http://files.rsdn.org/45405/x25server.c

теперь бы ethertap для ядра 3.10 найти :)

С уважением,  Павел

Ответить | Правка | К родителю #4 | Наверх | Cообщить модератору

7. "Модуль lapbether"  +/
Сообщение от wizard22 (ok), 14-Мрт-19, 14:03 
ethertap был удален из состава ядра 2.5 (согласно документации)
Всем разработчикам было рекомендовано перейти на использование tun/tap.
В данном случае tap является заменой ethertap.

Ответить | Правка | Наверх | Cообщить модератору

8. "Модуль lapbether"  +/
Сообщение от Pavel515 (ok), 18-Мрт-19, 11:31 
> ethertap был удален из состава ядра 2.5 (согласно документации)
> Всем разработчикам было рекомендовано перейти на использование tun/tap.
> В данном случае tap является заменой ethertap.

Спасибо.
Изучаю...

С уважением, Павел

Ответить | Правка | Наверх | Cообщить модератору

Архив | Удалить

Рекомендовать для помещения в FAQ | Индекс форумов | Темы | Пред. тема | След. тема




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру