URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 129
[ Назад ]

Исходное сообщение
"Как самому создать Не-IP протокол?"

Отправлено Vasja , 24-Авг-01 18:31 
Ув. ALL!!!
Подскажите, если кто знает.
Весь транспорт в солярисе сделан для TCP/IP???
А есть ли для Х400 ?
А как сделать свой софт сетевого, ну хотябы транспортного уровня. Иначе говоря, как выкинуть драйвера на время, как ядро обмануть.

И как ваще делать драйвера (платформа спарк)
Хоть ссылку или название книжки, плз.


Содержание

Сообщения в этом обсуждении
"RE: Как самому создать Не-IP протокол?"
Отправлено XMan , 24-Авг-01 21:20 
По идее, тебе нужно сделать сокет PF_PACKET с типом SOCK_RAW. Смотри доку на функцию socket.


"RE: Как самому создать Не-IP протокол?"
Отправлено Vasja , 27-Авг-01 10:20 
Функция socket() подразумевает работу либо по TCP, либо по UDP - иначе говоря, использует протокол сетевого уровня IP. А мне он мешает, этот айпи.
Как его подменить на системном уровне?
Короче, мне надо написать свой драйвер для уровня выше Eithernet-карты. А как это сделать в Солярисе-SPARC ????

"RE: Как самому создать Не-IP протокол?"
Отправлено XMan , 27-Авг-01 17:16 
>Функция socket() подразумевает работу либо по
>TCP, либо по UDP -
>иначе говоря, использует протокол сетевого
>уровня IP. А мне он
>мешает, этот айпи.

Ничего подобного. Функция socket просто создает сокет и привязывает его к заданному уровню. Вот и все :))

Куски "man 2 socket":

int socket(int domain, int type, int protocol);
Socket создает конечную точку соединения и возвращает ее описатель.
...
PF_PACKET - Низкоуровневый пакетный интерфейс
...
SOCK_RAW - Обеспечивает доступ к низкоуровневому сетевому протоколу.
...

SOCK_PACKET - это устаревший тип сокета, позволявший получать необработанные пакеты прямо от драйвера устройства. Используйте вместо него packet(7).
...
-------
Куски из "man 7 packet":

packet, PF_PACKET - пакетный интерфейс уровня устройств.
...
packet_socket = socket(PF_PACKET, int socket_type, int protocol);
...
socket_type равен либо SOCK_RAW  для raw-пакетов (включая заголовок установки соединения), либо SOCK_DGRAM для подготовленных пакетов без заголовка уровня соединения. Информация заголовка уровня соединения в общем формате предоставлена в sockaddr_ll. protocol  - номер протокола в соответствии с IEEE 802.3 в сетевом порядке байтов. Список возможных протоколов приведен в файле <linux/if_ether.h>  Если protocol содержит значение htons(ETH_P_ALL), то программой будут приниматься все протоколы. Все входящие пакеты этого типа протокола будут передаваться пакетному сокету до того, как они будут переданы протоколам, реализованным в ядре.
...
Пакеты SOCK_RAW передаются драйверу устройства и принимаются от него без всяких изменений данных пакета. При получении пакета адрес обрабатывается и передается в стандартной структуре адреса sockaddr_ll. При передаче пакета буфер пользователя должен содержать заголовок физического уровня. Пакет передается без изменений драйверу сетевого интерфейса, указанному в адресе назначения. Hекоторые драйверы устройств всегда добавляют к заголовку и другие заголовки. SOCK_RAW похож, но не совместим с устаревшим SOCK_PACKET для Linux 2.0.
-------

Я не думаю, что в солярке этот API будет сильно отличаться от QNX, Linux или BSD систем.

Еще вопросы есть ? Или просто нету доки ?


"RE: Как самому создать Не-IP протокол?"
Отправлено Vasja , 29-Авг-01 15:53 
Ясно, идея ясна. Ибо в /usr/include/sys/socket.h
PF_PACKET не определен:
------------- кусок оттуда ------------
/*
* Address families.
*/
#define AF_UNSPEC       0               /* unspecified */
#define AF_UNIX         1               /* local to host (pipes, portals) */
#define AF_INET         2               /* internetwork: UDP, TCP, etc. */
#define AF_IMPLINK      3               /* arpanet imp addresses */
#define AF_PUP          4               /* pup protocols: e.g. BSP */
#define AF_CHAOS        5               /* mit CHAOS protocols */
#define AF_NS           6               /* XEROX NS protocols */
#define AF_NBS          7               /* nbs protocols */
#define AF_ECMA         8               /* european computer manufacturers */
#define AF_DATAKIT      9               /* datakit protocols */
#define AF_CCITT        10              /* CCITT protocols, X.25 etc */
#define AF_SNA          11              /* IBM SNA */
#define AF_DECnet       12              /* DECnet */
#define AF_DLI          13              /* Direct data link interface */
#define AF_LAT          14              /* LAT */
#define AF_HYLINK       15              /* NSC Hyperchannel */
#define AF_APPLETALK    16              /* Apple Talk */
#define AF_NIT          17              /* Network Interface Tap */
#define AF_802          18              /* IEEE 802.2, also ISO 8802 */
#define AF_OSI          19              /* umbrella for all families used */
#define AF_X25          20              /* CCITT X.25 in particular */
#define AF_OSINET       21              /* AFI = 47, IDI = 4 */
#define AF_GOSIP        22              /* U.S. Government OSI */
#define AF_IPX          23              /* Novell Internet Protocol */
#define AF_ROUTE        24              /* Internal Routing Protocol */
#define AF_LINK         25              /* Link-layer interface */

#define AF_MAX          25

/*
* Structure used by kernel to store most
* addresses.
struct sockaddr {
        sa_family_t     sa_family;      /* address family */
        char            sa_data[14];    /* up to 14 bytes of direct address */
};

/*
* Protocol families, same as address families for now.
*/
#define PF_UNSPEC       AF_UNSPEC
#define PF_UNIX         AF_UNIX
#define PF_INET         AF_INET
#define PF_IMPLINK      AF_IMPLINK
#define PF_PUP          AF_PUP
#define PF_CHAOS        AF_CHAOS
#define PF_NS           AF_NS
#define PF_NBS          AF_NBS
#define PF_ECMA         AF_ECMA
#define PF_DATAKIT      AF_DATAKIT
#define PF_CCITT        AF_CCITT
#define PF_SNA          AF_SNA
#define PF_DECnet       AF_DECnet
#define PF_DLI          AF_DLI
#define PF_LAT          AF_LAT
#define PF_HYLINK       AF_HYLINK
#define PF_APPLETALK    AF_APPLETALK
#define PF_NIT          AF_NIT
#define PF_802          AF_802
#define PF_OSI          AF_OSI
#define PF_X25          AF_X25
#define PF_OSINET       AF_OSINET
#define PF_GOSIP        AF_GOSIP
#define PF_IPX          AF_IPX
#define PF_ROUTE        AF_ROUTE
#define PF_LINK         AF_LINK

#define PF_MAX          AF_MAX
-------------------------------------
и эта штука не "кривая", в начале есть SUNовский и  АТТшные копирайты.
Буду методом тыка исследовать...

ЗЫ: а манов у меня этих на самом деле нету ((


"RE: Как самому создать Не-IP протокол?"
Отправлено XMan , 29-Авг-01 17:49 
А разве не подходит это:
#define AF_LINK 25 /* Link-layer interface */

или это:
#define AF_802 18 /* IEEE 802.2, also ISO 8802 */

и возможно еще вот это:
#define AF_UNSPEC 0 /* unspecified */

?

Хотя, мне так кажется, что AF_LINK ближе всех к PF_PACKET.


"RE: Ъръ ёрьюьС ёючфрРЭ Эх-IP яПюРюъюы?"
Отправлено Cheshir , 24-Авг-01 21:23 
A che, ishodnikov kakih-nit tam netu?
Hrenovastenko esli netu....
I vsegda smotru ishodniki...