aboutsummaryrefslogtreecommitdiffstats
path: root/man/man2const/IP_PKTINFO.2const
blob: 9546d68c653284f8fe8ef37a5aeb71050177db07 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
.\" Copyright, the authors of the Linux man-pages project
.\"
.\" SPDX-License-Identifier: Linux-man-pages-copyleft
.\"
.TH IP_PKTINFO 2const (date) "Linux man-pages (unreleased)"
.SH NAME
IP_PKTINFO
\-
information about the incoming packet
.SH LIBRARY
Standard C library
.RI ( libc ,\~ \-lc )
.SH SYNOPSIS
.nf
.BR "#include <netinet/in.h>" "  /* Definition of " IP* " constants */"
.B #include <sys/socket.h>
.P
.BI int\~setsockopt(int\~ sockfd ,\~IPPROTO_IP,\~IP_PKTINFO,
.BI "               const\~int\~*" enable ,\~sizeof(int));
.fi
.P
.EX
struct in_pktinfo {
    unsigned int    ipi_ifindex;   /* Interface index */
    struct in_addr  ipi_spec_dst;  /* Local address */
    struct in_addr  ipi_addr;      /* Header Destination address */
};
.EE
.SH DESCRIPTION
Pass an
.B IP_PKTINFO
ancillary message that contains a
.I pktinfo
structure that supplies some information about the incoming packet.
This works only for datagram oriented sockets.
.P
The argument is a flag that tells the socket whether the
.B IP_PKTINFO
message should be passed or not.
.P
The message itself can be sent/retrieved
only as a control message with a packet using
.BR recvmsg (2)
or
.BR sendmsg (2).
.P
When returned by
.BR recvmsg (2) ,
.I .ipi_ifindex
is the unique index of the interface the packet was received on.
.I .ipi_spec_dst
is the preferred source address for replies to the given packet,
and
.I .ipi_addr
is the destination address in the packet header.
These addresses are usually the same,
but can differ for broadcast or multicast packets.
Depending on the configured routes,
.I .ipi_spec_dst
might belong to a different interface from the one that received the packet.
.P
If
.B IP_PKTINFO
is passed to
.BR sendmsg (2)
and
.\" This field is grossly misnamed
.I .ipi_spec_dst
is not zero,
then it is used as the local source address,
for the routing table lookup,
and for setting up IP source route options.
When
.I .ipi_ifindex
is not zero,
the primary local address of the interface specified by the index
overwrites
.I .ipi_spec_dst
for the routing table lookup.
.I .ipi_addr
is ignored.
.P
Not supported for
.B SOCK_STREAM
sockets.
.SH ERRORS
See
.BR IPPROTO_IP (2const).
See
.BR setsockopt (2).
See
.BR ip (7).
.SH VERSIONS
Some BSD sockets implementations provide
.B IP_RCVDSTADDR
and
.B IP_RECVIF
socket options to get the destination address and the interface of
received datagrams.
Linux has the more general
.B IP_PKTINFO
for the same task.
.SH STANDARDS
Linux.
.SH HISTORY
Linux 2.2.
.\" Precisely: since Linux 2.1.68
.SH SEE ALSO
.BR IPPROTO_IP (2const),
.BR setsockopt (2),
.BR ip (7)