Ув. ALL!!!
Подскажите, если кто знает.
Весь транспорт в солярисе сделан для TCP/IP???
А есть ли для Х400 ?
А как сделать свой софт сетевого, ну хотябы транспортного уровня. Иначе говоря, как выкинуть драйвера на время, как ядро обмануть.И как ваще делать драйвера (платформа спарк)
Хоть ссылку или название книжки, плз.
По идее, тебе нужно сделать сокет PF_PACKET с типом SOCK_RAW. Смотри доку на функцию socket.
Функция socket() подразумевает работу либо по TCP, либо по UDP - иначе говоря, использует протокол сетевого уровня IP. А мне он мешает, этот айпи.
Как его подменить на системном уровне?
Короче, мне надо написать свой драйвер для уровня выше Eithernet-карты. А как это сделать в Солярисе-SPARC ????
>Функция 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 систем.
Еще вопросы есть ? Или просто нету доки ?
Ясно, идея ясна. Ибо в /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овский и АТТшные копирайты.
Буду методом тыка исследовать...ЗЫ: а манов у меня этих на самом деле нету ((
А разве не подходит это:
#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.
A che, ishodnikov kakih-nit tam netu?
Hrenovastenko esli netu....
I vsegda smotru ishodniki...