1 .\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
2 .\" Permission is granted to distribute possibly modified copies
3 .\" of this page provided the header is included verbatim,
4 .\" and in case of nontrivial modification author and date
5 .\" of the modification is added to the header.
6 .\" $Id: packet.7,v 1.1 2003/12/20 03:31:53 bbbush Exp $
7 .TH PACKET 7 1999-04-29 "Linux Man Page" "Linux Programmer's Manual"
9 packet, PF_PACKET \- packet interface on device level.
11 .\" yes, this is ugly.
14 .B #include <sys/socket.h>
16 .B #include <features.h> /* for the glibc version number */
18 .B #if __GLIBC__ >= 2 && __GLIBC_MINOR >= 1
20 .B #include <netpacket/packet.h>
22 .B #include <net/ethernet.h> /* the L2 protocols */
26 .B #include <asm/types.h>
28 .B #include <linux/if_packet.h>
30 .B #include <linux/if_ether.h> /* The L2 protocols */
35 .BI "packet_socket = socket(PF_PACKET, int " socket_type ", int "protocol );
38 Packet sockets are used to receive or send raw packets at the device driver
40 level. They allow the user to implement protocol modules in user space
41 on top of the physical layer.
47 for raw packets including the link level header or
49 for cooked packets with the link level header removed. The link level
50 header information is available in a common format in a
53 is the IEEE 802.3 protocol number in network order. See the
55 include file for a list of allowed protocols. When protocol
58 then all protocols are received.
59 All incoming packets of that protocol type will be passed to the packet
60 socket before they are passed to the protocols implemented in the kernel.
62 Only processes with effective uid 0 or the
64 capability may open packet sockets.
67 packets are passed to and from the device driver without any changes in
68 the packet data. When receiving a packet, the address is still parsed and
71 address structure. When transmitting a packet, the user supplied buffer
72 should contain the physical layer header. That packet is then
73 queued unmodified to the network driver of the interface defined by the
74 destination address. Some device drivers always add other headers.
76 is similar to but not compatible with the obsolete
81 operates on a slightly higher level. The physical header is removed before
82 the packet is passed to the user. Packets sent through a
84 packet socket get a suitable physical layer header based on the information
87 destination address before they are queued.
89 By default all packets of the specified protocol type
90 are passed to a packet socket. To only get packets from a specific interface
93 specifying an address in a
95 to bind the packet socket to an interface. Only the
99 address fields are used for purposes of binding.
103 operation is not supported on packet sockets.
111 the real length of the packet on the wire is always returned, even when it
112 is longer than the buffer.
115 The sockaddr_ll is a device independent physical layer address.
121 unsigned short sll_family; /* Always AF_PACKET */
122 unsigned short sll_protocol; /* Physical layer protocol */
123 int sll_ifindex; /* Interface number */
124 unsigned short sll_hatype; /* Header type */
125 unsigned char sll_pkttype; /* Packet type */
126 unsigned char sll_halen; /* Length of address */
127 unsigned char sll_addr[8]; /* Physical layer address */
134 is the standard ethernet protocol type in network order as defined
137 include file. It defaults to the socket's protocol.
139 is the interface index of the interface
142 0 matches any interface (only legal for binding).
144 is a ARP type as defined in the
148 contains the packet type. Valid types are
150 for a packet addressed to the local host,
152 for a physical layer broadcast packet,
154 for a packet sent to a physical layer multicast address,
156 for a packet to some other host that has been caught by a device driver
157 in promiscuous mode, and
159 for a packet originated from the local host that is looped back to a packet
160 socket. These types make only sense for receiving.
164 contain the physical layer (e.g. IEEE 802.3) address and its length. The
165 exact interpretation depends on the device.
167 When you send packets it is enough to specify
172 The other fields should be 0.
176 are set on received packets for your information.
184 Packet sockets can be used to configure physical layer multicasting
185 and promiscuous mode. It works by calling
187 on a packet socket for SOL_PACKET and one of the options
188 .B PACKET_ADD_MEMBERSHIP
190 .B PACKET_DROP_MEMBERSHIP
194 structure as argument:
201 int mr_ifindex; /* interface index */
202 unsigned short mr_type; /* action */
203 unsigned short mr_alen; /* address length */
204 unsigned char mr_address[8]; /* physical layer address */
211 contains the interface index for the interface whose status
215 parameter specifies which action to perform.
217 enables receiving all packets on a shared medium - often known as
218 ``promiscuous mode'',
219 .B PACKET_MR_MULTICAST
220 binds the socket to the physical layer multicast group specified in
225 .B PACKET_MR_ALLMULTI
226 sets the socket up to receive all multicast packets arriving at the interface.
228 In addition the traditional ioctls
232 can be used for the same purpose.
237 can be used to receive the time stamp of the last received packet. Argument
241 In addition all standard ioctls defined in
245 are valid on packet sockets.
248 Packet sockets do no error handling other than errors occurred while passing
249 the packet to the device driver. They don't have the concept of a pending
253 In Linux 2.0, the only way to get a packet socket was by calling
254 .BI "socket(PF_INET, SOCK_PACKET, " protocol )\fR.
255 This is still supported but strongly deprecated.
256 The main difference between the two methods is that
259 .B struct sockaddr_pkt
260 to specify an interface, which doesn't provide physical layer independence.
267 unsigned short spkt_family;
268 unsigned char spkt_device[14];
269 unsigned short spkt_protocol;
279 is the IEEE 802.3 protocol type as defined in
283 is the device name as a null terminated string, e.g. eth0.
285 This structure is obsolete and should not be used in new code.
288 For portable programs it is suggested to use
292 although this only covers a subset of the
298 packet sockets make no attempt to create or parse the IEEE 802.2 LLC header
299 for a IEEE 802.3 frame.
302 is specified as protocol for sending the kernel creates the
303 802.3 frame and fills out the length field; the user has to supply the LLC
304 header to get a fully conforming packet. Incoming 802.3 packets are not
305 multiplexed on the DSAP/SSAP protocol fields; instead they are supplied to the
308 with the LLC header prepended. It is thus not possible to bind to
312 instead and do the protocol multiplex yourself.
313 The default for sending is the standard Ethernet DIX
314 encapsulation with the protocol filled in.
316 Packet sockets are not subject to the input or output firewall chains.
325 No interface address passed.
329 Unknown device name or interface index specified in interface address.
333 Packet is bigger than interface MTU.
337 Not enough memory to allocate the packet.
341 User passed invalid memory address.
349 Interface address contained illegal interface index.
353 User has insufficient privileges to carry out this operation.
357 Unknown multicast group address passed.
363 In addition other errors may be generated by the low-level driver.
366 is a new feature in Linux 2.2. Earlier Linux versions supported only
370 glibc 2.1 does not have a define for
372 The suggested workaround is to use
376 #define SOL_PACKET 263
380 This is fixed in later glibc versions and also does not occur on libc5 systems.
382 The IEEE 802.2/803.3 LLC handling could be considered as a bug.
384 Socket filters are not documented.
388 recvmsg extension is an ugly hack and should be replaced by a control message.
389 There is currently no way to get the original destination address of
390 packets via SOCK_DGRAM.
393 This man page was written by Andi Kleen with help from Matthew Wilcox.
394 PF_PACKET in Linux 2.2 was implemented
395 by Alexey Kuznetsov, based on code by Alan Cox and others.
404 RFC 894 for the standard IP Ethernet encapsulation.
406 RFC 1700 for the IEEE 802.3 IP encapsulation.
409 .I <linux/if_ether.h>
410 include file for physical layer protocols.