NAME¶
irda - The Linux-IrDA protocol stack
SYNOPSIS¶
#include <linux/irda.h>
stream_s = socket(PF_INET, SOCK_STREAM, 0);
seqpkt_s = socket(PF_INET, SOCK_SEQPACKET, 0);
dgram_s = socket(PF_INET, SOCK_DGRAM, IRDAPROTO_UNITDATA);
ultra_s = socket(PF_INET, SOCK_DGRAM, IRDAPROTO_ULTRA);
DESCRIPTION¶
Linux-IrDA is a complete implementation of the various
IrDA
protocols and
IrDA drivers for Linux.
The configuration of the low level of the IrDA stack (IrDA ports) and the
various IrDA drivers are described in
irattach(8).
The usage of the higher layers of the IrDA stack (IrCOMM, IrLPT, IrNET, IrLAN,
OBEX...) are described in their respective man pages.
The core of the Linux-IrDA protocol stack is composed of the
IrLAP,
IrLMP,
IrTTP and
IrIAS protocols and is implemented as a
kernel module. The programmer's interface for the IrDA stack is socket based.
For more information on sockets, see
socket(7).
Note that higher level IrDA protocols may offer a different programmer's
interface. For example
IrCOMM offers a TTY based interface and
OBEX is available through a user space library.
SOCKETS TYPE¶
The Linux-IrDA socket interface offers 4 types of sockets:
- Stream socket - SOCK_STREAM, 0
- Stream sockets provides a reliable, stream oriented, full
duplex connection between two sockets on top of IrTTP, similar to
TCP sockets. IrTTP guarantees that the data arrives in order and manages
flow contol, IrLAP retransmits lost packets.
Stream sockets does not preserve record boundaries.
- SeqPacket socket - SOCK_SEQPACKET, 0
- SeqPacket sockets provides a reliable, datagram oriented,
full duplex connection between two sockets on top of IrTTP. IrTTP
guarantees that the data arrives in order and manages flow contol, IrLAP
retransmits lost packets.
SeqPacket sockets preserve record boundaries. Large datagrams will be
fragmented as needed.
- Datagram socket - SOCK_DGRAM,
IRDAPROTO_UNITDATA
- SeqPacket sockets provides a reliable, datagram oriented,
full duplex connection between two sockets on top of IrLMP. There
is no guarantees that the data arrives in order and there is no flow
contol, however IrLAP retransmits lost packets.
Datagram sockets preserve record boundaries. No fragmentation is provided,
datagrams larger than the IrDA link MTU are truncated or discarded.
- Ultra socket - SOCK_DGRAM, IRDAPROTO_ULTRA
- Ultra sockets provides a connectionless, unreliable
datagram packet service on top of IrLAP-Ultra. Ultra datagrams are
sent and receive only when no IrLAP connection is established and
otherwise discarded. They are always transmitted at 9600 bauds. Datagrams
may be lost, reordered, and there is no flow control.
Ultra sockets preserve record boundaries. No fragmentation is provided,
datagrams larger than the Ultra MTU (382 bytes) are truncated or
discarded.
An
IrDA socket address is defined as a combination of an IrDA interface
address and a
service name. Service names are automatically resolved to
lsap through the
IrIAP protocol.
struct sockaddr_irda {
sa_family_t sir_family; /* AF_IRDA */
__u8 sir_lsap_sel; /* LSAP selector */
__u32 sir_addr; /* Device address */
char sir_name[25]; /* Usually <service>:IrDA:TinyTP */
};
sin_family is always set to AF_IRDA.
sir_lsap_sel is usually not
used.
sir_addr is the address of the peer and optional (and that case
the first peer discoverd will be used).
sir_name is the service name of
the socket.
SOCKET OPTIONS¶
IrDA sockets supports some protocol specific socket options that can be set with
setsockopt(2) and read with
getsockopt(2). The socket option
level for IrDA is SOL_IRLMP.
Options that can be set:
- IRLMP_IAS_SET
- Set an entry in the local IAS database.
- IRLMP_IAS_DEL
- Delete an entry from the local IAS database.
- IRLMP_MAX_SDU_SIZE
- Set maximum receive MTU for SeqPacket sockets.
- IRLMP_HINTS_SET
- Set IrDA hint bits to be advertised to peers.
- IRLMP_HINT_MASK_SET
- Set IrDA hint bits filter to be used when performing
discovery.
Options that can be get:
- IRLMP_ENUMDEVICES
- Perform link level discovery and return the content of the
discovery log.
- IRLMP_MAX_SDU_SIZE
- Get maximum receive MTU.
- IRLMP_IAS_GET
- Get an entry from the local IAS database.
- IRLMP_IAS_QUERY
- Query an entry in IAS database of a peer using IrIAP.
- IRLMP_WAITDEVICE
- Block until a new device is discovered. Experimental
feature, use with caution.
AUTHOR¶
Jean Tourrilhes - jt@hpl.hp.com
SEE ALSO¶
irattach(8),
irdadump(8),
irnet(4),
irnetd(8).