natm - Native Mode ATM protocol layer
options NATMto your kernel configuration file and re-make the kernel (do not forget to do ``make clean )''
struct sockaddr_natm { u_int8_t snatm_len; /* length */ u_int8_t snatm_family; /* AF_NATM */ char snatm_if[IFNAMSIZ]; /* interface name */ u_int16_t snatm_vci; /* vci */ u_int8_t snatm_vpi; /* vpi */ };
To create an AAL5 connection to a virtual circuit with VPI 0, VCI 201 one would use the following:
struct sockaddr_natm snatm; int s, r; s = socket(AF_NATM, SOCK_STREAM, PROTO_NATMAAL5); /* note: PROTO_NATMAAL0 is AAL0 */ if (s < 0) { perror("socket"); exit(1); } bzero(&snatm, sizeof(snatm)); snatm.snatm_len = sizeof(snatm); snatm.snatm_family = AF_NATM; sprintf(snatm.snatm_if, "en0"); snatm.snatm_vci = 201; snatm.snatm_vpi = 0; r = connect(s, (struct sockaddr *)&snatm, sizeof(snatm)); if (r < 0) { perror("connect"); exit(1); } /* s now connected to ATM! */
The
socket ();
call simply creates an unconnected NATM socket.
The
connect ();
call associates an unconnected NATM socket with a
virtual circuit and tells the driver to enable that virtual circuit
for receiving data.
After the
connect ();
call one can
read ();
or
write ();
to the socket to perform ATM I/O.
When a virtual circuit is enabled for receiving data, the NATM protocol layer passes the address of the protocol control block down to the driver as a receive ``handle'' When inbound data arrives, the driver passes the data back with the appropriate receive handle. The NATM layer uses this to avoid the overhead of a protocol control block lookup. This allows us to take advantage of the fact that ATM has already demultiplexed the data for us.
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |