RAW(7F) RAW(7F)
raw - raw network protocol family
#include <sys/types.h>
#include <net/raw.h>
The Raw protocol family is a collection of input decapsulation protocols
layered atop the data link protocol of a network interface. The Raw
family supports only the SOCK_RAW socket type.
Addressing [Toc] [Back]
Sockets bound to the Raw protocol family use the following addressing
structure, defined in <net/raw.h>:
struct sockaddr_raw {
u_short sr_family;
union {
struct {
u_short srl_port;
char srl_ifname[RAW_IFNAMSIZ];
} sru_local;
struct {
char srf_addr[RAW_MAXADDRLEN];
} sru_foreign;
} sr_u;
};
#define sr_port sr_u.sru_local.srl_port
#define sr_ifname sr_u.sru_local.srl_ifname
#define sr_addr sr_u.sru_foreign.srf_addr
The address format differs between local and foreign usage. A local
AF_RAW sockaddr contains a port, identifying the socket to which this
address is bound, and the zero-padded name of a network interface. If
the address to bind contains a zeroed interface name, the primary
interface is used. Port numbering depends on the protocol of the socket
being bound. A foreign AF_RAW sockaddr contains a link-layer destination
address.
Protocols [Toc] [Back]
There are two protocols in the Raw family, Snoop and Drain. The Snoop
protocol captures link-layer packets which match a bitfield filter and
transports them to that filter's socket. Snoop prepends a header
containing packet state, reception sequence number, and reception time.
The Drain protocol receives packets having network-layer type codes or
encapsulations not implemented by the kernel.
Page 1
RAW(7F) RAW(7F)
Both protocols transmit packets with a link-layer header fetched from the
beginning of the user's write(2) or send(2) buffer. They ignore any
destination address supplied to sendto(2) or connect(2). However,
connecting restricts input to packets originating from the foreign
(connected) address.
On input, a protocol-specific header, the link-layer header, and packet
data are copied to the user's read(2) or recv(2) buffer. All raw domain
protocols guarantee that the offset of packet data from the beginning of
the user's buffer is congruent with RAW_ALIGNGRAIN. RAW_HDRPAD(hdrsize)
yields the byte-padding needed to align packet data, given the link-layer
header's size in bytes.
To gather Raw protocol family statistics, call ioctl(2) with a Snoop or
Drain socket, the SIOCRAWSTATS command, and the address of the following
structure, defined in <net/raw.h>:
struct rawstats {
struct snoopstats {
u_long ss_seq;
u_long ss_ifdrops;
u_long ss_sbdrops;
} rs_snoop;
struct drainstats {
u_long ds_ifdrops;
u_long ds_sbdrops;
} rs_drain;
};
The ss_seq structure member tells the current Snoop sequence number,
which counts all packets received by the hardware, whether or not they
can be decapsulated. The ifdrops members tell how many packets were
dropped by the network interface due to resource shortages or hardware
errors. The sbdrops members tell how many packets were decapsulated by
the network interface but dropped due to socket buffer limits. See
getsockopt(2) for information on socket buffer sizes and how to change
them.
socket(2), snoop(7P), drain(7P)
PPPPaaaaggggeeee 2222 [ Back ]
|