aboutsummaryrefslogtreecommitdiffstats
path: root/man7/raw.7
diff options
context:
space:
mode:
Diffstat (limited to 'man7/raw.7')
-rw-r--r--man7/raw.7174
1 files changed, 91 insertions, 83 deletions
diff --git a/man7/raw.7 b/man7/raw.7
index f62dd71261..1a4e81e521 100644
--- a/man7/raw.7
+++ b/man7/raw.7
@@ -6,7 +6,7 @@
.\" and in case of nontrivial modification author and date
.\" of the modification is added to the header.
.\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $
-.TH RAW 7 1998-10-02 "Linux Man Page" "Linux Programmer's Manual"
+.TH RAW 7 1998-10-02 "Linux Man Page" "Linux Programmer's Manual"
.SH NAME
raw, SOCK_RAW \- Linux IPv4 raw sockets
.SH SYNOPSIS
@@ -14,10 +14,10 @@ raw, SOCK_RAW \- Linux IPv4 raw sockets
.br
.B #include <netinet/in.h>
.br
-.BI "raw_socket = socket(PF_INET, SOCK_RAW, int " protocol );
+.BI "raw_socket = socket(PF_INET, SOCK_RAW, int " protocol );
.SH DESCRIPTION
Raw sockets allow new IPv4 protocols to be implemented in user space.
-A raw socket receives or sends the raw datagram not
+A raw socket receives or sends the raw datagram not
including link level headers.
The IPv4 layer generates an IP header when sending a packet unless the
@@ -26,22 +26,22 @@ socket option is enabled on the socket.
When it is enabled, the packet must contain an IP header.
For receiving the IP header is always included in the packet.
-Only processes with an effective user ID of 0 or the
-.B CAP_NET_RAW
+Only processes with an effective user ID of 0 or the
+.B CAP_NET_RAW
capability are allowed to open raw sockets.
All packets or errors matching the
.I protocol
number specified
-for the raw socket are passed to this socket. For a list of the
-allowed protocols see RFC\ 1700 assigned numbers and
+for the raw socket are passed to this socket.
+For a list of the allowed protocols see RFC\ 1700 assigned numbers and
.BR getprotobyname (3).
A protocol of
.B IPPROTO_RAW
implies enabled
-.B IP_HDRINCL
-and is able to send any IP protocol that is specified in the passed
+.B IP_HDRINCL
+and is able to send any IP protocol that is specified in the passed
header.
Receiving of all IP protocols via
.B IPPROTO_RAW
@@ -60,10 +60,11 @@ Total Length:Always filled in.
.RE
.sp
.PP
-If
+If
.B IP_HDRINCL
is specified and the IP header has a non-zero destination address then
-the destination address of the socket is used to route the packet. When
+the destination address of the socket is used to route the packet.
+When
.B MSG_DONTROUTE
is specified the destination address should refer to a local interface,
otherwise a routing table lookup is done anyway but gatewayed routes
@@ -74,78 +75,81 @@ If
isn't set then IP header options can be set on raw sockets with
.BR setsockopt (2);
see
-.BR ip (7)
+.BR ip (7)
for more information.
In Linux 2.2 all IP header fields and options can be set using
-IP socket options. This means raw sockets are usually only needed for new
+IP socket options.
+This means raw sockets are usually only needed for new
protocols or protocols with no user interface (like ICMP).
When a packet is received, it is passed to any raw sockets which have
been bound to its protocol before it is passed to other protocol handlers
-(e.g. kernel protocol modules).
+(e.g. kernel protocol modules).
.SH "ADDRESS FORMAT"
-Raw sockets use the standard
-.I sockaddr_in
-address structure defined in
+Raw sockets use the standard
+.I sockaddr_in
+address structure defined in
.BR ip (7).
-The
+The
.I sin_port
-field could be used to specify the IP protocol number,
+field could be used to specify the IP protocol number,
but it is ignored for sending in Linux 2.2 and should be always
set to 0 (see BUGS)
-For incoming packets
-.I sin_port
-is set to the protocol of the packet.
+For incoming packets
+.I sin_port
+is set to the protocol of the packet.
See the
.I <netinet/in.h>
-include file for valid IP protocols.
+include file for valid IP protocols.
.SH "SOCKET OPTIONS"
Raw socket options can be set with
.BR setsockopt (2)
and read with
.BR getsockopt (2)
-by passing the
+by passing the
.B IPPROTO_RAW
.\" Or SOL_RAW on Linux
-family flag.
+family flag.
.TP
.B ICMP_FILTER
-Enable a special filter for raw sockets bound to the
-.B IPPROTO_ICMP
-protocol. The value has a bit set for each ICMP message type which
-should be filtered out. The default is to filter no ICMP messages.
+Enable a special filter for raw sockets bound to the
+.B IPPROTO_ICMP
+protocol.
+The value has a bit set for each ICMP message type which
+should be filtered out.
+The default is to filter no ICMP messages.
.PP
-In addition all
+In addition all
.BR ip (7)
-.B IPPROTO_IP
+.B IPPROTO_IP
socket options valid for datagram sockets are supported.
.SH NOTES
-By default raw sockets do path MTU (Maximum Transmission Unit) discovery.
+By default raw sockets do path MTU (Maximum Transmission Unit) discovery.
This means the kernel
will keep track of the MTU to a specific target IP address and return
.I EMSGSIZE
-when a raw packet write exceeds it.
-When this happens the application should decrease the packet size.
+when a raw packet write exceeds it.
+When this happens the application should decrease the packet size.
Path MTU discovery can be also turned off using the
.B IP_MTU_DISCOVER
-socket option or the
+socket option or the
.B ip_no_pmtu_disc
-sysctl, see
-.BR ip(7)
-for details.
+sysctl, see
+.BR ip(7)
+for details.
When turned off raw sockets will fragment outgoing packets
-that exceed the interface MTU.
+that exceed the interface MTU.
However disabling it is not recommended
for performance and reliability reasons.
-A raw socket can be bound to a specific local address using the
+A raw socket can be bound to a specific local address using the
.BR bind (2)
-call.
+call.
If it isn't bound all packets with the specified IP protocol are received.
In addition a RAW socket can be bound to a specific network device using
.BR SO_BINDTODEVICE ;
-see
+see
.BR socket (7).
An
@@ -155,56 +159,60 @@ If you really want to receive all IP packets use a
.BR packet (7)
socket with the
.B ETH_P_IP
-protocol. Note that packet sockets don't reassemble IP fragments,
+protocol.
+Note that packet sockets don't reassemble IP fragments,
unlike raw sockets.
-If you want to receive all ICMP packets for a datagram socket
+If you want to receive all ICMP packets for a datagram socket
it is often better to use
.B IP_RECVERR
on that particular socket; see
.BR ip (7).
Raw sockets may tap all IP protocols in Linux, even
-protocols like ICMP or TCP which have a protocol module in the kernel.
+protocols like ICMP or TCP which have a protocol module in the kernel.
In this case the packets are passed to both the kernel module and the raw
-socket(s).
-This should not be relied upon in portable programs, many other BSD
+socket(s).
+This should not be relied upon in portable programs, many other BSD
socket implementation have limitations here.
-Linux never changes headers passed from the user (except for filling
+Linux never changes headers passed from the user (except for filling
in some zeroed fields as described for
.BR IP_HDRINCL ).
This differs from many other implementations of raw sockets.
-RAW sockets are generally rather unportable and should be avoided in
+RAW sockets are generally rather unportable and should be avoided in
programs intended to be portable.
-Sending on raw sockets should take the IP protocol from
+Sending on raw sockets should take the IP protocol from
.IR sin_port ;
-this ability was lost in Linux 2.2.
+this ability was lost in Linux 2.2.
The workaround is to use
.BR IP_HDRINCL .
.SH "ERROR HANDLING"
Errors originating from the network are only passed to the user when the
-socket is connected or the
+socket is connected or the
.B IP_RECVERR
-flag is enabled. For connected sockets only
-.B EMSGSIZE
-and
-.B EPROTO
-are passed for compatibility. With
+flag is enabled.
+For connected sockets only
+.B EMSGSIZE
+and
+.B EPROTO
+are passed for compatibility.
+With
.B IP_RECVERR
-all network errors are saved in the error queue.
+all network errors are saved in the error queue.
.SH ERRORS
.TP
-.B EMSGSIZE
-Packet too big. Either Path MTU Discovery is enabled (the
+.B EMSGSIZE
+Packet too big.
+Either Path MTU Discovery is enabled (the
.B IP_MTU_DISCOVER
-socket flag) or the packet size exceeds the maximum allowed IPv4
-packet size of 64KB.
+socket flag) or the packet size exceeds the maximum allowed IPv4
+packet size of 64KB.
.TP
.B EACCES
-User tried to send to a broadcast address without having the
+User tried to send to a broadcast address without having the
broadcast flag set on the socket.
.TP
.B EPROTO
@@ -214,45 +222,45 @@ An ICMP error has arrived reporting a parameter problem.
An invalid memory address was supplied.
.TP
.B EOPNOTSUPP
-Invalid flag has been passed to a socket call (like
+Invalid flag has been passed to a socket call (like
.BR MSG_OOB ).
.TP
.B EINVAL
Invalid argument.
.TP
.B EPERM
-The user doesn't have permission to open raw sockets. Only processes
-with a effective user ID of 0 or the
-.B CAP_NET_RAW
+The user doesn't have permission to open raw sockets.
+Only processes with a effective user ID of 0 or the
+.B CAP_NET_RAW
attribute may do that.
.SH VERSIONS
-.B IP_RECVERR
-and
-.B ICMP_FILTER
-are new in Linux 2.2. They are Linux extensions
-and should not be used in portable programs.
+.B IP_RECVERR
+and
+.B ICMP_FILTER
+are new in Linux 2.2.
+They are Linux extensions and should not be used in portable programs.
-Linux 2.0 enabled some bug-to-bug compatibility with BSD in the
-raw socket code when the
-SO_BSDCOMPAT socket option was set \(em since Linux 2.2,
+Linux 2.0 enabled some bug-to-bug compatibility with BSD in the
+raw socket code when the
+SO_BSDCOMPAT socket option was set \(em since Linux 2.2,
this option no longer has that effect.
.SH BUGS
Transparent proxy extensions are not described.
-When the
+When the
.B IP_HDRINCL
-option is set datagrams will not be fragmented and are limited to
-the interface MTU.
+option is set datagrams will not be fragmented and are limited to
+the interface MTU.
Setting the IP protocol for sending in
.I sin_port
-got lost in Linux 2.2.
+got lost in Linux 2.2.
The protocol that the socket was bound to or that
-was specified in the initial
+was specified in the initial
.BR socket (2)
call is always used.
.SH AUTHORS
-This man page was written by Andi Kleen.
+This man page was written by Andi Kleen.
.SH "SEE ALSO"
.BR recvmsg (2),
.BR sendmsg (2),
@@ -260,10 +268,10 @@ This man page was written by Andi Kleen.
.BR ip (7),
.BR socket (7)
-.B RFC\ 1191
+.B RFC\ 1191
for path MTU discovery.
-.B RFC\ 791
+.B RFC\ 791
and the
.I <linux/ip.h>
include file for the IP protocol.