Linux and UNIX Man Pages

Linux & Unix Commands - Search Man Pages

natm(4) [plan9 man page]

NATM(4) 						   BSD Kernel Interfaces Manual 						   NATM(4)

NAME
natm -- Native Mode ATM protocol layer DESCRIPTION
The BSD ATM software comes with a native mode ATM protocol layer which provides socket level access to AAL0 and AAL5 virtual circuits. To enable this protocol layer, add options NATM to your kernel configuration file and re-make the kernel (do not forget to do ``make clean''). NATM API
The NATM layer uses a struct sockaddr_natm to specify a virtual circuit: 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. Internal NATM operation Internally, the NATM protocol layer keeps a list of all active virtual circuits on the system in natm_pcbs. This includes circuits currently being used for IP to prevent NATM and IP from clashing over virtual circuit usage. 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. CAVEATS
The NATM protocol support is subject to change as the ATM protocols develop. Users should not depend on details of the current implementa- tion, but rather the services exported. SEE ALSO
en(4), fatm(4), hatm(4), natmip(4), patm(4) AUTHORS
Chuck Cranor of Washington University implemented the NATM protocol layer along with the EN ATM driver in 1996 for NetBSD. BSD
December 29, 1997 BSD

Check Out this Related Man Page

NATMIP(4)						   BSD Kernel Interfaces Manual 						 NATMIP(4)

NAME
natmip -- IP over ATM PVCs SYNOPSIS
device atm options NATM DESCRIPTION
The NATM protocol stack includes support for IP over ATM. Without any additional signalling stacks or other modules it is possible to build a CLIP (classical IP over ATM) network based on PVCs. An ATM network card (en0 in this example) is configured for IP by something like: ifconfig en0 128.252.200.1 netmask 0xffffff00 up IP routing is done with special interface routes (routes with directly reachable destinations) with a link layer gateway address. The link layer address specifies the ATM interface through which the destination can be reached, the virtual channel that connects to the destination and the ATM characteristics of this channel. The address part of the link layer address (see link_addr(3)) consists of a fixed part (the first 5 bytes) and a part that depends on the kind of the PVC (UBR, CBR, VBR, ABR). Multi-byte values are big-endian encoded: the bytes with the lower numbers contain the higher order bits. byte 0 Is a flag byte. Currently only flag 0x20 is used. When set, all IP frames are LLC/SNAP encapsulated before putting them into an AAL5 frame. Setting this flag is recommended and allows interoperability with other CLIP implementations. Note that BPF works only with LLC/SNAP encapsulation. byte 1 This is the VPI of the channel. bytes 2...3 VCI of the channel. Must not be zero. byte 4 Traffic type. One of 0 (UBR), 1 (CBR), 2 (ABR), 3 (VBR). The variable part for UBR connections may be either empty or three bytes: bytes 5...7 Specifies the peak cell rate for UBR. The variable part for CBR connections must be three bytes: bytes 5...7 Specifies the peak cell rate for CBR. The variable part for VBR connections must be 9 bytes long and specifies three values: bytes 5...7 Specifies the peak cell rate for VBR. bytes 8...10 This is the sustainable cell rate. bytes 11...13 The maximum burst size. The variable part for ABR connections must be 19 bytes long and specifies the following values: bytes 5...7 Specifies the peak cell rate for ABR. bytes 8...10 The minimum cell rate. bytes 11...13 The initial cell rate. bytes 14...16 The transient buffer exposure. byte 17 The NRM value. byte 18 The TRM value. bytes 19...20 The ADTF value. byte 21 The rate increase factor (RIF). byte 22 The rate decrease factor (RDF). byte 23 The cutoff decrease factor (CDF). To add a PVC the route(8) utility can be used: route add -iface <remote IP address> -link <iface>:<lladdr> The iface is the ATM interface through which remote IP address can be reached and lladdr is the link layer address as a string of dot-sepa- rated, hexadecimal bytes. NATM also supports the old, original format. This consists of 4 byte link layer addresses (and the channels are implicit UBR): byte 0 Flags: 0x01 use AAL5. 0x02 if using AAL5, use an LLC/SNAP header. Thus, parameter 3 means AAL5 and LLC/SNAP encapsulation (this is the required setting for interworking with other CLIP clients). Note that BPF works only with LLC/SNAP encapsulation. byte 1 VPI for the channel bytes 2...3 VCI for the channel EXAMPLES
Suppose you have 3 hosts 128.252.200.1, 128.252.200.2 and 128.252.200.3 connected by ATM through PVCs: between 128.252.200.1 and 128.252.200.2: 0xc9 UBR between 128.252.200.1 and 128.252.200.3: 0xca VBR between 128.252.200.2 and 128.252.200.3: 0xcb CBR The parameters for the VBR channel are: PCR 50000, SCR 10000, MBS 10. The peak cell rate for the CBR channel is 100000. To enable the links use the following commands: on host 128.252.200.1: ifconfig en0 128.252.200.1 netmask 0xffffff00 up route add -iface 128.252.200.2 -link en0:3.0.0.c9.0 route add -iface 128.252.200.3 -link en0:3.0.0.ca.3.0.c3.50.0.27.10.0.0.a on host 128.252.200.2: ifconfig en0 128.252.200.2 netmask 0xffffff00 up route add -iface 128.252.200.1 -link en0:3.0.0.c9.0 route add -iface 128.252.200.3 -link en0:3.0.0.cb.1.1.86.a0 on host 128.252.200.3: ifconfig en0 128.252.200.3 netmask 0xffffff00 up route add -iface 128.252.200.1 -link en0:3.0.0.ca.3.0.c3.50.0.27.10.0.0.a route add -iface 128.252.200.2 -link en0:3.0.0.cb.1.1.86.a0 This can also be done in rc.conf(5): on host 128.252.200.1: network_interfaces="lo0 en0" ifconfig_en0="inet 128.252.200.1 netmask 255.255.255.0" static_routes="host2 host3" route_host2="-iface 128.252.200.2 -link en0:3.0.0.c9.0" route_host3="-iface 128.252.200.3 -link en0:3.0.0.ca.3.0.c3.50.0.27.10.0.0.a" on host 128.252.200.2: network_interfaces="lo0 en0" ifconfig_en0="inet 128.252.200.2 netmask 255.255.255.0" static_routes="host1 host3" route_host1="-iface 128.252.200.1 -link en0:3.0.0.c9.0" route_host3="-iface 128.252.200.3 -link en0:3.0.0.cb.1.1.86.a0" on host 128.252.200.3: network_interfaces="lo0 en0" ifconfig_en0="inet 128.252.200.3 netmask 255.255.255.0" static_routes="host1 host2" route_host1="-iface 128.252.200.1 -link en0:3.0.0.ca.3.0.c3.50.0.27.10.0.0.a" route_host2="-iface 128.252.200.2 -link en0:3.0.0.cb.1.1.86.a0" SEE ALSO
en(4), fatm(4), hatm(4), natm(4), patm(4) AUTHORS
Chuck Cranor of Washington University implemented the NATM protocol layer along with the EN ATM driver in 1996 for NetBSD. BSD
August 11, 2003 BSD
Man Page