summaryrefslogtreecommitdiffstats
path: root/man7/raw.7
diff options
context:
space:
mode:
Diffstat (limited to 'man7/raw.7')
-rw-r--r--man7/raw.7281
1 files changed, 0 insertions, 281 deletions
diff --git a/man7/raw.7 b/man7/raw.7
deleted file mode 100644
index 65cdbe0..0000000
--- a/man7/raw.7
+++ /dev/null
@@ -1,281 +0,0 @@
-'\" t
-.\" SPDX-License-Identifier: Linux-man-pages-1-para
-.\"
-.\" This man page is Copyright (C) 1999 Andi Kleen <ak@muc.de>.
-.\"
-.\" $Id: raw.7,v 1.6 1999/06/05 10:32:08 freitag Exp $
-.\"
-.TH raw 7 2023-10-31 "Linux man-pages 6.7"
-.SH NAME
-raw \- Linux IPv4 raw sockets
-.SH SYNOPSIS
-.nf
-.B #include <sys/socket.h>
-.B #include <netinet/in.h>
-.BI "raw_socket = socket(AF_INET, SOCK_RAW, int " protocol );
-.fi
-.SH DESCRIPTION
-Raw sockets allow new IPv4 protocols to be implemented in user space.
-A raw socket receives or sends the raw datagram not
-including link level headers.
-.P
-The IPv4 layer generates an IP header when sending a packet unless the
-.B IP_HDRINCL
-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.
-.P
-In order to create a raw socket, a process must have the
-.B CAP_NET_RAW
-capability in the user namespace that governs its network namespace.
-.P
-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 the IANA list of assigned protocol numbers at
-.UR http://www.iana.org/assignments/protocol\-numbers/
-.UE
-and
-.BR getprotobyname (3).
-.P
-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
-header.
-Receiving of all IP protocols via
-.B IPPROTO_RAW
-is not possible using raw sockets.
-.RS
-.TS
-tab(:) allbox;
-c s
-l l.
-IP Header fields modified on sending by \fBIP_HDRINCL\fP
-IP Checksum:Always filled in
-Source Address:Filled in when zero
-Packet ID:Filled in when zero
-Total Length:Always filled in
-.TE
-.RE
-.P
-If
-.B IP_HDRINCL
-is specified and the IP header has a nonzero destination address, then
-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
-are ignored.
-.P
-If
-.B IP_HDRINCL
-isn't set, then IP header options can be set on raw sockets with
-.BR setsockopt (2);
-see
-.BR ip (7)
-for more information.
-.P
-Starting with Linux 2.2, all IP header fields and options can be set using
-IP socket options.
-This means raw sockets are usually needed only for new
-protocols or protocols with no user interface (like ICMP).
-.P
-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).
-.SS Address format
-For sending and receiving datagrams
-.RB ( sendto (2),
-.BR recvfrom (2),
-and similar),
-raw sockets use the standard
-.I sockaddr_in
-address structure defined in
-.BR ip (7).
-The
-.I sin_port
-field could be used to specify the IP protocol number,
-but it is ignored for sending in Linux 2.2 and later, and should be always
-set to 0 (see BUGS).
-For incoming packets,
-.I sin_port
-.\" commit f59fc7f30b710d45aadf715460b3e60dbe9d3418
-is set to zero.
-.SS Socket options
-Raw socket options can be set with
-.BR setsockopt (2)
-and read with
-.BR getsockopt (2)
-by passing the
-.B IPPROTO_RAW
-.\" Or SOL_RAW on Linux
-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.
-.P
-In addition, all
-.BR ip (7)
-.B IPPROTO_IP
-socket options valid for datagram sockets are supported.
-.SS Error handling
-Errors originating from the network are passed to the user only when 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
-.BR IP_RECVERR ,
-all network errors are saved in the error queue.
-.SH ERRORS
-.TP
-.B EACCES
-User tried to send to a broadcast address without having the
-broadcast flag set on the socket.
-.TP
-.B EFAULT
-An invalid memory address was supplied.
-.TP
-.B EINVAL
-Invalid argument.
-.TP
-.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 64\ kB.
-.TP
-.B EOPNOTSUPP
-Invalid flag has been passed to a socket call (like
-.BR MSG_OOB ).
-.TP
-.B EPERM
-The user doesn't have permission to open raw sockets.
-Only processes with an effective user ID of 0 or the
-.B CAP_NET_RAW
-attribute may do that.
-.TP
-.B EPROTO
-An ICMP error has arrived reporting a parameter problem.
-.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.
-.P
-Linux 2.0 enabled some bug-to-bug compatibility with BSD in the
-raw socket code when the
-.B SO_BSDCOMPAT
-socket option was set; since Linux 2.2,
-this option no longer has that effect.
-.SH NOTES
-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
-.B EMSGSIZE
-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
-.I /proc/sys/net/ipv4/ip_no_pmtu_disc
-file, see
-.BR ip (7)
-for details.
-When turned off, raw sockets will fragment outgoing packets
-that exceed the interface MTU.
-However, disabling it is not recommended
-for performance and reliability reasons.
-.P
-A raw socket can be bound to a specific local address using the
-.BR bind (2)
-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
-.BR socket (7).
-.P
-An
-.B IPPROTO_RAW
-socket is send only.
-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,
-unlike raw sockets.
-.P
-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).
-.P
-Raw sockets may tap all IP protocols in Linux, even
-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 implementation have limitations here.
-.P
-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.
-.P
-Raw sockets are generally rather unportable and should be avoided in
-programs intended to be portable.
-.P
-Sending on raw sockets should take the IP protocol from
-.IR sin_port ;
-this ability was lost in Linux 2.2.
-The workaround is to use
-.BR IP_HDRINCL .
-.SH BUGS
-Transparent proxy extensions are not described.
-.P
-When the
-.B IP_HDRINCL
-option is set, datagrams will not be fragmented and are limited to
-the interface MTU.
-.P
-Setting the IP protocol for sending in
-.I sin_port
-got lost in Linux 2.2.
-The protocol that the socket was bound to or that
-was specified in the initial
-.BR socket (2)
-call is always used.
-.\" .SH AUTHORS
-.\" This man page was written by Andi Kleen.
-.SH SEE ALSO
-.BR recvmsg (2),
-.BR sendmsg (2),
-.BR capabilities (7),
-.BR ip (7),
-.BR socket (7)
-.P
-.B RFC\ 1191
-for path MTU discovery.
-.B RFC\ 791
-and the
-.I <linux/ip.h>
-header file for the IP protocol.