1*177d5b5fSRobert Mustacchi.\" 2*177d5b5fSRobert Mustacchi.\" This file and its contents are supplied under the terms of the 3*177d5b5fSRobert Mustacchi.\" Common Development and Distribution License ("CDDL"), version 1.0. 4*177d5b5fSRobert Mustacchi.\" You may only use this file in accordance with the terms of version 5*177d5b5fSRobert Mustacchi.\" 1.0 of the CDDL. 6*177d5b5fSRobert Mustacchi.\" 7*177d5b5fSRobert Mustacchi.\" A full copy of the text of the CDDL should have accompanied this 8*177d5b5fSRobert Mustacchi.\" source. A copy of the CDDL is also available via the Internet at 9*177d5b5fSRobert Mustacchi.\" http://www.illumos.org/license/CDDL. 10*177d5b5fSRobert Mustacchi.\" 11*177d5b5fSRobert Mustacchi.\" 12*177d5b5fSRobert Mustacchi.\" Copyright (c) 2014, Joyent, Inc. 13*177d5b5fSRobert Mustacchi.\" 14*177d5b5fSRobert Mustacchi.Dd Nov 13, 2014 15*177d5b5fSRobert Mustacchi.Dt SOCKADDR 3SOCKET 16*177d5b5fSRobert Mustacchi.Os 17*177d5b5fSRobert Mustacchi.Sh NAME 18*177d5b5fSRobert Mustacchi.Nm sockaddr , 19*177d5b5fSRobert Mustacchi.Nm sockaddr_dl , 20*177d5b5fSRobert Mustacchi.Nm sockaddr_in , 21*177d5b5fSRobert Mustacchi.Nm sockaddr_in6 , 22*177d5b5fSRobert Mustacchi.Nm sockaddr_ll , 23*177d5b5fSRobert Mustacchi.Nm sockaddr_storage , 24*177d5b5fSRobert Mustacchi.Nm sockaddr_un 25*177d5b5fSRobert Mustacchi.Nd Socket Address Structures 26*177d5b5fSRobert Mustacchi.Sh SYNOPSIS 27*177d5b5fSRobert Mustacchi.In sys/socket.h 28*177d5b5fSRobert Mustacchi.Lp 29*177d5b5fSRobert Mustacchi.Sy struct sockaddr 30*177d5b5fSRobert Mustacchi.Em sock ; 31*177d5b5fSRobert Mustacchi.Lp 32*177d5b5fSRobert Mustacchi.In sys/socket.h 33*177d5b5fSRobert Mustacchi.In net/if_dl.h 34*177d5b5fSRobert Mustacchi.Lp 35*177d5b5fSRobert Mustacchi.Sy struct sockaddr_dl 36*177d5b5fSRobert Mustacchi.Em dl_sock ; 37*177d5b5fSRobert Mustacchi.Lp 38*177d5b5fSRobert Mustacchi.In sys/socket.h 39*177d5b5fSRobert Mustacchi.In netinet/in.h 40*177d5b5fSRobert Mustacchi.Lp 41*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in 42*177d5b5fSRobert Mustacchi.Em in_sock ; 43*177d5b5fSRobert Mustacchi.Lp 44*177d5b5fSRobert Mustacchi.In sys/socket.h 45*177d5b5fSRobert Mustacchi.In netinet/in6.h 46*177d5b5fSRobert Mustacchi.Lp 47*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in6 48*177d5b5fSRobert Mustacchi.Em in6_sock ; 49*177d5b5fSRobert Mustacchi.Lp 50*177d5b5fSRobert Mustacchi.In sys/socket.h 51*177d5b5fSRobert Mustacchi.Lp 52*177d5b5fSRobert Mustacchi.Sy struct sockaddr_ll 53*177d5b5fSRobert Mustacchi.Em ll_sock ; 54*177d5b5fSRobert Mustacchi.Lp 55*177d5b5fSRobert Mustacchi.In sys/socket.h 56*177d5b5fSRobert Mustacchi.Lp 57*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage 58*177d5b5fSRobert Mustacchi.Em storage_sock ; 59*177d5b5fSRobert Mustacchi.Lp 60*177d5b5fSRobert Mustacchi.In sys/un.h 61*177d5b5fSRobert Mustacchi.Lp 62*177d5b5fSRobert Mustacchi.Sy struct sockaddr_un 63*177d5b5fSRobert Mustacchi.Em un_sock ; 64*177d5b5fSRobert Mustacchi.Sh DESCRIPTION 65*177d5b5fSRobert MustacchiThe 66*177d5b5fSRobert Mustacchi.Nm 67*177d5b5fSRobert Mustacchifamily of structures are designed to represent network addresses for 68*177d5b5fSRobert Mustacchidifferent networking protocols. The structure 69*177d5b5fSRobert Mustacchi.Sy struct sockaddr 70*177d5b5fSRobert Mustacchiis a generic structure that is used across calls to various socket 71*177d5b5fSRobert Mustacchilibrary routines 72*177d5b5fSRobert Mustacchi.Po 73*177d5b5fSRobert Mustacchi.Xr libsocket 3LIB 74*177d5b5fSRobert Mustacchi.Pc 75*177d5b5fSRobert Mustacchisuch as 76*177d5b5fSRobert Mustacchi.Xr accept 3SOCKET 77*177d5b5fSRobert Mustacchiand 78*177d5b5fSRobert Mustacchi.Xr bind 3SOCKET . 79*177d5b5fSRobert MustacchiApplications do not use the 80*177d5b5fSRobert Mustacchi.Sy struct sockaddr 81*177d5b5fSRobert Mustacchidirectly, but instead cast the appropriate networking family specific 82*177d5b5fSRobert Mustacchi.Nm 83*177d5b5fSRobert Mustacchistructure to a 84*177d5b5fSRobert Mustacchi.Sy struct sockaddr * . 85*177d5b5fSRobert Mustacchi.Lp 86*177d5b5fSRobert MustacchiEvery structure in the 87*177d5b5fSRobert Mustacchi.Nm 88*177d5b5fSRobert Mustacchifamily begins with a member of the same type, the 89*177d5b5fSRobert Mustacchi.Sy sa_family_t , 90*177d5b5fSRobert Mustacchithough the different structures all have different names for the member. 91*177d5b5fSRobert MustacchiFor example, the structure 92*177d5b5fSRobert Mustacchi.Sy struct sockaddr 93*177d5b5fSRobert Mustacchihas the following members defined: 94*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 95*177d5b5fSRobert Mustacchisa_family_t sa_family /* address family */ 96*177d5b5fSRobert Mustacchichar sa_data[] /* socket address (variable-length data) */ 97*177d5b5fSRobert Mustacchi.Ed 98*177d5b5fSRobert Mustacchi.Lp 99*177d5b5fSRobert MustacchiThe member 100*177d5b5fSRobert Mustacchi.Em sa_family 101*177d5b5fSRobert Mustacchicorresponds to the socket family that's actually in use. The following 102*177d5b5fSRobert Mustacchitable describes the mapping between the address family and the 103*177d5b5fSRobert Mustacchicorresponding socket structure that's used. Note that both the generic 104*177d5b5fSRobert Mustacchi.Sy struct sockaddr 105*177d5b5fSRobert Mustacchiand the 106*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage 107*177d5b5fSRobert Mustacchiare not included, because these are both generic structures. More on the 108*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage 109*177d5b5fSRobert Mustacchican be found in the next section. 110*177d5b5fSRobert Mustacchi.Bl -column -offset indent ".Sy Socket Structure" ".Sy Address Family" 111*177d5b5fSRobert Mustacchi.It Sy Socket Structure Ta Sy Address Family 112*177d5b5fSRobert Mustacchi.It struct sockaddr_dl Ta AF_LINK 113*177d5b5fSRobert Mustacchi.It struct sockaddr_in Ta AF_INET 114*177d5b5fSRobert Mustacchi.It struct sockaddr_in6 Ta AF_INET6 115*177d5b5fSRobert Mustacchi.It struct sockaddr_ll Ta AF_PACKET 116*177d5b5fSRobert Mustacchi.It struct sockaddr_un Ta AF_UNIX 117*177d5b5fSRobert Mustacchi.El 118*177d5b5fSRobert Mustacchi.Ss struct sockaddr_storage 119*177d5b5fSRobert MustacchiThe 120*177d5b5fSRobert Mustacchi.Sy sockaddr_storage 121*177d5b5fSRobert Mustacchistructure is a 122*177d5b5fSRobert Mustacchi.Nm 123*177d5b5fSRobert Mustacchithat is not associated with an address family. Instead, it is large 124*177d5b5fSRobert Mustacchienough to hold the contents of any of the other 125*177d5b5fSRobert Mustacchi.Nm 126*177d5b5fSRobert Mustacchistructures. It can be used to embed sufficient storage for a 127*177d5b5fSRobert Mustacchi.Sy sockaddr 128*177d5b5fSRobert Mustacchiof any type within a larger structure. 129*177d5b5fSRobert Mustacchi.Lp 130*177d5b5fSRobert MustacchiThe structure only has a single member defined. While there are other 131*177d5b5fSRobert Mustacchimembers that are used to pad out the size of the 132*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage , 133*177d5b5fSRobert Mustacchithey are not defined and must not be consumed. The only valid 134*177d5b5fSRobert Mustacchimember is: 135*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 136*177d5b5fSRobert Mustacchisa_family_t ss_family /* address family */ 137*177d5b5fSRobert Mustacchi.Ed 138*177d5b5fSRobert Mustacchi.Lp 139*177d5b5fSRobert MustacchiFor example, 140*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage 141*177d5b5fSRobert Mustacchiis useful when running a service that accepts traffic over both 142*177d5b5fSRobert Mustacchi.Sy IPv4 143*177d5b5fSRobert Mustacchiand 144*177d5b5fSRobert Mustacchi.Sy IPv6 145*177d5b5fSRobert Mustacchiwhere it is common to use a single socket for both address families. In that 146*177d5b5fSRobert Mustacchicase, rather than guessing whether a 147*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in 148*177d5b5fSRobert Mustacchior a 149*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in6 150*177d5b5fSRobert Mustacchiis more appropriate, one can simply use a 151*177d5b5fSRobert Mustacchi.Sy struct sockaddr_storage 152*177d5b5fSRobert Mustacchiand cast to the appropriate family-specific structure type based on the 153*177d5b5fSRobert Mustacchivalue of the member 154*177d5b5fSRobert Mustacchi.Em ss_family . 155*177d5b5fSRobert Mustacchi.Ss struct sockaddr_in 156*177d5b5fSRobert MustacchiThe 157*177d5b5fSRobert Mustacchi.Sy sockaddr_in 158*177d5b5fSRobert Mustacchiis the socket type which is used for for the Internet Protocol version 159*177d5b5fSRobert Mustacchifour (IPv4). It has the following members defined: 160*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 161*177d5b5fSRobert Mustacchisa_family_t sin_family /* address family */ 162*177d5b5fSRobert Mustacchiin_port_t sin_port /* IP port */ 163*177d5b5fSRobert Mustacchistruct in_addr sin_addr /* IP address */ 164*177d5b5fSRobert Mustacchi.Ed 165*177d5b5fSRobert Mustacchi.Lp 166*177d5b5fSRobert MustacchiThe member 167*177d5b5fSRobert Mustacchi.Em sin_family 168*177d5b5fSRobert Mustacchimust always have the value 169*177d5b5fSRobert Mustacchi.Sy AF_INET 170*177d5b5fSRobert Mustacchifor 171*177d5b5fSRobert Mustacchi.Sy IPv4 . 172*177d5b5fSRobert MustacchiThe members 173*177d5b5fSRobert Mustacchi.Em sin_port 174*177d5b5fSRobert Mustacchiand 175*177d5b5fSRobert Mustacchi.Em sin_addr 176*177d5b5fSRobert Mustacchidescribe the IP address and IP port to use. In the case of a call to 177*177d5b5fSRobert Mustacchi.Xr connect 3SOCKET 178*177d5b5fSRobert Mustacchithese represent the remote IP address and port to which the connection 179*177d5b5fSRobert Mustacchiis being made. In the case of 180*177d5b5fSRobert Mustacchi.Xr bind 3SOCKET 181*177d5b5fSRobert Mustacchithese represent the IP address and port on the local host to which the socket 182*177d5b5fSRobert Mustacchiis to be bound. In the case of 183*177d5b5fSRobert Mustacchi.Xr accept 3SOCKET 184*177d5b5fSRobert Mustacchithese represent the remote IP address and port of the machine whose 185*177d5b5fSRobert Mustacchiconnection was accepted. 186*177d5b5fSRobert Mustacchi.Lp 187*177d5b5fSRobert MustacchiThe member 188*177d5b5fSRobert Mustacchi.Em sin_port 189*177d5b5fSRobert Mustacchiis always stored in 190*177d5b5fSRobert Mustacchi.Sy Network Byte Order . 191*177d5b5fSRobert MustacchiOn many systems, this differs from the native host byte order. 192*177d5b5fSRobert MustacchiApplications should read from the member with the function 193*177d5b5fSRobert Mustacchi.Xr ntohs 3SOCKET 194*177d5b5fSRobert Mustacchiand write to the member with the function 195*177d5b5fSRobert Mustacchi.Xr htons 3SOCKET . 196*177d5b5fSRobert MustacchiThe member 197*177d5b5fSRobert Mustacchi.Em sin_addr 198*177d5b5fSRobert Mustacchiis the four byte IPv4 address. It is also stored in network byte order. 199*177d5b5fSRobert MustacchiThe common way to write out the address is to use the function 200*177d5b5fSRobert Mustacchi.Xr inet_pton 3SOCKET 201*177d5b5fSRobert Mustacchiwhich converts between a human readable IP address such as "10.1.2.3" 202*177d5b5fSRobert Mustacchiand the corresponding representation. 203*177d5b5fSRobert Mustacchi.Lp 204*177d5b5fSRobert MustacchiExample 1 shows how to prepare an IPv4 socket and deal with 205*177d5b5fSRobert Mustacchinetwork byte-order. See 206*177d5b5fSRobert Mustacchi.Xr inet 7P 207*177d5b5fSRobert Mustacchiand 208*177d5b5fSRobert Mustacchi.Xr ip 7P 209*177d5b5fSRobert Mustacchifor more information on IPv4, socket options, etc. 210*177d5b5fSRobert Mustacchi.Ss struct sockaddr_in6 211*177d5b5fSRobert MustacchiThe 212*177d5b5fSRobert Mustacchi.Sy sockaddr_in6 213*177d5b5fSRobert Mustacchistructure is the 214*177d5b5fSRobert Mustacchi.Nm 215*177d5b5fSRobert Mustacchifor the Internet Protocol version six (IPv6). Unlike the 216*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in , 217*177d5b5fSRobert Mustacchithe 218*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in6 219*177d5b5fSRobert Mustacchihas additional members beyond those shown here which are required to be 220*177d5b5fSRobert Mustacchiinitialized to zero through a function such as 221*177d5b5fSRobert Mustacchi.Xr bzero 3C 222*177d5b5fSRobert Mustacchior 223*177d5b5fSRobert Mustacchi.Xr memset 3C . 224*177d5b5fSRobert MustacchiIf the entire 225*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in6 226*177d5b5fSRobert Mustacchiis not zeroed before use, applications will experience undefined behavior. The 227*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in6 228*177d5b5fSRobert Mustacchihas the following public members: 229*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 230*177d5b5fSRobert Mustacchisa_family_t sin6_family /* address family */ 231*177d5b5fSRobert Mustacchiin_port_t sin6_port /* IPv6 port */ 232*177d5b5fSRobert Mustacchistruct in6_addr sin6_addr /* IPv6 address */ 233*177d5b5fSRobert Mustacchiuint32_t sin6_flowinfo; /* traffic class and flow info */ 234*177d5b5fSRobert Mustacchiuint32_t sin6_scope_id; /* interface scope */ 235*177d5b5fSRobert Mustacchi.Ed 236*177d5b5fSRobert Mustacchi.Lp 237*177d5b5fSRobert MustacchiThe member 238*177d5b5fSRobert Mustacchi.Em sin6_family 239*177d5b5fSRobert Mustacchimust always have the value 240*177d5b5fSRobert Mustacchi.Sy AF_INET6 . 241*177d5b5fSRobert MustacchiThe members 242*177d5b5fSRobert Mustacchi.Em sin6_port 243*177d5b5fSRobert Mustacchiand 244*177d5b5fSRobert Mustacchi.Em sin6_addr 245*177d5b5fSRobert Mustacchiare the IPv6 equivalents of the 246*177d5b5fSRobert Mustacchi.Sy struct sockaddr_in 247*177d5b5fSRobert Mustacchi.Em sin_port 248*177d5b5fSRobert Mustacchiand 249*177d5b5fSRobert Mustacchi.Em sin_addr . 250*177d5b5fSRobert MustacchiLike their IPv4 counterparts, both of these members must be in network 251*177d5b5fSRobert Mustacchibyte order. The member 252*177d5b5fSRobert Mustacchi.Em sin6_port 253*177d5b5fSRobert Mustacchidescribes the IPv6 port and should be manipulated with the functions 254*177d5b5fSRobert Mustacchi.Xr ntohs 3SOCKET 255*177d5b5fSRobert Mustacchiand 256*177d5b5fSRobert Mustacchi.Xr htons 3SOCKET . 257*177d5b5fSRobert MustacchiThe member 258*177d5b5fSRobert Mustacchi.Em sin6_addr 259*177d5b5fSRobert Mustacchidescribes the 16-byte IPv6 address. In addition to the function 260*177d5b5fSRobert Mustacchi.Xr inet_pton 3SOCKET , 261*177d5b5fSRobert Mustacchithe header file 262*177d5b5fSRobert Mustacchi.In netinet/in.h 263*177d5b5fSRobert Mustacchidefines many macros for manipulating and testing IPv6 addresses. 264*177d5b5fSRobert Mustacchi.Lp 265*177d5b5fSRobert MustacchiThe member 266*177d5b5fSRobert Mustacchi.Em sin6_flowinfo 267*177d5b5fSRobert Mustacchicontains the traffic class and flow label associated with the IPv6 268*177d5b5fSRobert Mustacchiheader. The member 269*177d5b5fSRobert Mustacchi.Em sin6_scope_id 270*177d5b5fSRobert Mustacchimay contain an identifier which varies based on the scope of the address 271*177d5b5fSRobert Mustacchiin 272*177d5b5fSRobert Mustacchi.Em sin6_addr . 273*177d5b5fSRobert MustacchiApplications do not need to initialize 274*177d5b5fSRobert Mustacchi.Em sin6_scope_id ; 275*177d5b5fSRobert Mustacchiit will be populated by the operating system as a result of various library 276*177d5b5fSRobert Mustacchicalls. 277*177d5b5fSRobert Mustacchi.Lp 278*177d5b5fSRobert MustacchiExample 2 shows how to prepare an IPv6 socket. For more information on 279*177d5b5fSRobert MustacchiIPv6, please see 280*177d5b5fSRobert Mustacchi.Xr inet6 7P 281*177d5b5fSRobert Mustacchiand 282*177d5b5fSRobert Mustacchi.Xr ip6 7P . 283*177d5b5fSRobert Mustacchi.Ss struct sockaddr_un 284*177d5b5fSRobert MustacchiThe 285*177d5b5fSRobert Mustacchi.Sy sockaddr_un 286*177d5b5fSRobert Mustacchistructure specifies the address of a socket used to communicate between 287*177d5b5fSRobert Mustacchiprocesses running on a single system, commonly known as a 288*177d5b5fSRobert Mustacchi.Em UNIX domain socket . 289*177d5b5fSRobert MustacchiSockets of this type are identified by a path in the file system. The 290*177d5b5fSRobert Mustacchi.Sy struct sockaddr_un 291*177d5b5fSRobert Mustacchihas the following members: 292*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 293*177d5b5fSRobert Mustacchisa_family_t sun_family /* address family */ 294*177d5b5fSRobert Mustacchichar sun_path[108] /* path name */ 295*177d5b5fSRobert Mustacchi.Ed 296*177d5b5fSRobert Mustacchi.Lp 297*177d5b5fSRobert MustacchiThe member 298*177d5b5fSRobert Mustacchi.Em sun_family 299*177d5b5fSRobert Mustacchimust always have the value 300*177d5b5fSRobert Mustacchi.Sy AF_UNIX . 301*177d5b5fSRobert MustacchiThe member 302*177d5b5fSRobert Mustacchi.Em sun_path 303*177d5b5fSRobert Mustacchiis populated with a 304*177d5b5fSRobert Mustacchi.Sy NUL 305*177d5b5fSRobert Mustacchiterminated array of characters that specify a file system path. The maximum 306*177d5b5fSRobert Mustacchilength of any such path, including the 307*177d5b5fSRobert Mustacchi.Sy NUL 308*177d5b5fSRobert Mustacchiterminator, is 108 bytes. 309*177d5b5fSRobert Mustacchi.Ss struct sockaddr_dl 310*177d5b5fSRobert MustacchiThe 311*177d5b5fSRobert Mustacchi.Sy sockaddr_dl 312*177d5b5fSRobert Mustacchistructure is used to describe a layer 2 link-level address. This is used 313*177d5b5fSRobert Mustacchias part of various socket ioctls, such as those for 314*177d5b5fSRobert Mustacchi.Xr arp 7P . 315*177d5b5fSRobert MustacchiThe structure has the following members: 316*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 317*177d5b5fSRobert Mustacchiushort_t sdl_family; /* address family */ 318*177d5b5fSRobert Mustacchiushort_t sdl_index; /* if != 0, system interface index */ 319*177d5b5fSRobert Mustacchiuchar_t sdl_type; /* interface type */ 320*177d5b5fSRobert Mustacchiuchar_t sdl_nlen; /* interface name length */ 321*177d5b5fSRobert Mustacchiuchar_t sdl_alen; /* link level address length */ 322*177d5b5fSRobert Mustacchiuchar_t sdl_slen; /* link layer selector length */ 323*177d5b5fSRobert Mustacchichar sdl_data[244]; /* contains both if name and ll address 324*177d5b5fSRobert Mustacchi.Ed 325*177d5b5fSRobert Mustacchi.Lp 326*177d5b5fSRobert MustacchiThe member 327*177d5b5fSRobert Mustacchi.Em sdl_family 328*177d5b5fSRobert Mustacchimust always have the value 329*177d5b5fSRobert Mustacchi.Sy AF_LINK . 330*177d5b5fSRobert MustacchiWhen the member 331*177d5b5fSRobert Mustacchi.Em sdl_index 332*177d5b5fSRobert Mustacchiis non-zero this refers to the interface identifier that corresponds to 333*177d5b5fSRobert Mustacchithe 334*177d5b5fSRobert Mustacchi.Sy struct sockaddr_dl . 335*177d5b5fSRobert MustacchiThis identifier is the same identifier that's shown by tools like 336*177d5b5fSRobert Mustacchi.Xr ifconfig 1M 337*177d5b5fSRobert Mustacchiand used in the SIOC* set of socket ioctls. The member 338*177d5b5fSRobert Mustacchi.Em sdl_type 339*177d5b5fSRobert Mustacchirefers to the media that is used for the socket. The most common case is 340*177d5b5fSRobert Mustacchithat the medium for the interface is Ethernet which has the value 341*177d5b5fSRobert Mustacchi.Sy IFT_ETHER . 342*177d5b5fSRobert MustacchiThe full set of types is derived from RFC1573 and recorded in the file 343*177d5b5fSRobert Mustacchi.In net/if_types.h . 344*177d5b5fSRobert MustacchiThe member 345*177d5b5fSRobert Mustacchi.Em sdl_slen 346*177d5b5fSRobert Mustacchidescribes the length of a selector, if it exists, for the specified 347*177d5b5fSRobert Mustacchimedium. This is used in protocols such as Trill. 348*177d5b5fSRobert Mustacchi.Lp 349*177d5b5fSRobert MustacchiThe 350*177d5b5fSRobert Mustacchi.Em sdl_data , 351*177d5b5fSRobert Mustacchi.Em sdl_nlen 352*177d5b5fSRobert Mustacchiand 353*177d5b5fSRobert Mustacchi.Em sdl_alen 354*177d5b5fSRobert Mustacchimembers together describe a character string containing the interface name and 355*177d5b5fSRobert Mustacchithe link-layer network address. The name starts at the beginning of 356*177d5b5fSRobert Mustacchi.Em sdl_data , 357*177d5b5fSRobert Mustacchii.e. at 358*177d5b5fSRobert Mustacchi.Em sdl_data[0] . 359*177d5b5fSRobert MustacchiThe name of the interface occupies the next 360*177d5b5fSRobert Mustacchi.Em sdl_nlen 361*177d5b5fSRobert Mustacchibytes and is not 362*177d5b5fSRobert Mustacchi.Sy NUL 363*177d5b5fSRobert Mustacchiterminated. The link-layer network address begins immediately after the 364*177d5b5fSRobert Mustacchiinterface name, and is 365*177d5b5fSRobert Mustacchi.Em sdl_alen 366*177d5b5fSRobert Mustacchibytes long. The macro 367*177d5b5fSRobert Mustacchi.Sy LLADDR(struct sockaddr_dl *) 368*177d5b5fSRobert Mustacchireturns the start of the link-layer network address. 369*177d5b5fSRobert MustacchiThe interpretation of the link-layer address depends on the value of 370*177d5b5fSRobert Mustacchi.Em sdl_type . 371*177d5b5fSRobert MustacchiFor example, if the type is 372*177d5b5fSRobert Mustacchi.Sy IFT_ETHER 373*177d5b5fSRobert Mustacchithen the address is expressed as a 6-byte MAC address. 374*177d5b5fSRobert Mustacchi.Ss struct sockaddr_ll 375*177d5b5fSRobert MustacchiThe 376*177d5b5fSRobert Mustacchi.Sy sockaddr_ll 377*177d5b5fSRobert Mustacchiis used as part of a socket type which is responsible for packet 378*177d5b5fSRobert Mustacchicapture: 379*177d5b5fSRobert Mustacchi.Sy AF_PACKET 380*177d5b5fSRobert Mustacchisockets. It is generally designed for use with Ethernet networks. The members 381*177d5b5fSRobert Mustacchiof the 382*177d5b5fSRobert Mustacchi.Sy struct sockaddr_ll 383*177d5b5fSRobert Mustacchiare: 384*177d5b5fSRobert Mustacchi.Bd -literal -offset indent 385*177d5b5fSRobert Mustacchiuint16_t sll_family; /* address family */ 386*177d5b5fSRobert Mustacchiuint16_t sll_protocol; /* link layer protocol */ 387*177d5b5fSRobert Mustacchiint32_t sll_ifindex; /* interface index */ 388*177d5b5fSRobert Mustacchiuint16_t sll_hatype; /* ARP hardware type */ 389*177d5b5fSRobert Mustacchiuint8_t sll_pkttype; /* packet type */ 390*177d5b5fSRobert Mustacchiuint8_t sll_halen; /* hardware address length */ 391*177d5b5fSRobert Mustacchiuint8_t sll_addr[8]; /* hardware type */ 392*177d5b5fSRobert Mustacchi.Ed 393*177d5b5fSRobert Mustacchi.Lp 394*177d5b5fSRobert MustacchiThe member 395*177d5b5fSRobert Mustacchi.Em sll_family 396*177d5b5fSRobert Mustacchimust be 397*177d5b5fSRobert Mustacchi.Sy AF_PACKET . 398*177d5b5fSRobert MustacchiThe member 399*177d5b5fSRobert Mustacchi.Em sll_protocol 400*177d5b5fSRobert Mustacchirefers to a link-layer protocol. For example, when capturing Ethernet frames 401*177d5b5fSRobert Mustacchithe value of 402*177d5b5fSRobert Mustacchi.Em sll_protocol 403*177d5b5fSRobert Mustacchiis the Ethertype. This member is written in network byte order and 404*177d5b5fSRobert Mustacchiapplications should use 405*177d5b5fSRobert Mustacchi.Xr htons 3SOCKET 406*177d5b5fSRobert Mustacchiand 407*177d5b5fSRobert Mustacchi.Xr ntohs 3SOCKET 408*177d5b5fSRobert Mustacchito read and write the member. 409*177d5b5fSRobert Mustacchi.Lp 410*177d5b5fSRobert MustacchiThe member 411*177d5b5fSRobert Mustacchi.Em sll_ifindex 412*177d5b5fSRobert Mustacchiis the interface's index. It is used as an identifier in various ioctls 413*177d5b5fSRobert Mustacchiand included in the output of 414*177d5b5fSRobert Mustacchi.Xr ifconfig 1M . 415*177d5b5fSRobert MustacchiWhen calling 416*177d5b5fSRobert Mustacchi.Xr bind 3SOCKET 417*177d5b5fSRobert Mustacchiit should be filled in with the index that corresponds to the interface 418*177d5b5fSRobert Mustacchifor which packets should be captured on. 419*177d5b5fSRobert Mustacchi.Lp 420*177d5b5fSRobert MustacchiThe member 421*177d5b5fSRobert Mustacchi.Em sll_pkttype 422*177d5b5fSRobert Mustacchidescribes the type of the packet based on a list of types in the header 423*177d5b5fSRobert Mustacchifile 424*177d5b5fSRobert Mustacchi.In netpacket/packet.h . 425*177d5b5fSRobert MustacchiThese types include: 426*177d5b5fSRobert Mustacchi.Sy PACKET_OUTGOING , 427*177d5b5fSRobert Mustacchia packet that was leaving the host and has been looped back for packet capture; 428*177d5b5fSRobert Mustacchi.Sy PACKET_HOST , 429*177d5b5fSRobert Mustacchia packet that was destined for this host; 430*177d5b5fSRobert Mustacchi.Sy PACKET_BROADCAST , 431*177d5b5fSRobert Mustacchia packet that was broadcast across the link-layer; 432*177d5b5fSRobert Mustacchi.Sy PACKET_MULTICAST , 433*177d5b5fSRobert Mustacchia packet that was sent to a link-layer multicast address; and 434*177d5b5fSRobert Mustacchi.Sy PACKET_OTHERHOST , 435*177d5b5fSRobert Mustacchia packet that was captured only because the device in question was in 436*177d5b5fSRobert Mustacchipromiscuous mode. 437*177d5b5fSRobert Mustacchi.Lp 438*177d5b5fSRobert MustacchiThe member 439*177d5b5fSRobert Mustacchi.Em sll_hatype 440*177d5b5fSRobert Mustacchicontains the hardware type as defined by 441*177d5b5fSRobert Mustacchi.Xr arp 7P . 442*177d5b5fSRobert MustacchiThe list of types can be found in 443*177d5b5fSRobert Mustacchi.In net/if_arp.h . 444*177d5b5fSRobert MustacchiThe member 445*177d5b5fSRobert Mustacchi.Em sll_halen 446*177d5b5fSRobert Mustacchicontains the length, in bytes, of the hardware address, while the member 447*177d5b5fSRobert Mustacchi.Em sll_addr 448*177d5b5fSRobert Mustacchicontains the actual address in network byte order. 449*177d5b5fSRobert Mustacchi.Sh EXAMPLES 450*177d5b5fSRobert Mustacchi.Sy Example 1 451*177d5b5fSRobert MustacchiPreparing an IPv4 452*177d5b5fSRobert Mustacchi.Sy sockaddr_in 453*177d5b5fSRobert Mustacchito connect to a remote host 454*177d5b5fSRobert Mustacchi.Lp 455*177d5b5fSRobert MustacchiThe following example shows how one would open a socket and prepare it 456*177d5b5fSRobert Mustacchito connect to the remote host whose address is the IP address 127.0.0.1 457*177d5b5fSRobert Mustacchion port 80. This program should be compiled with the C compiler 458*177d5b5fSRobert Mustacchi.Sy cc 459*177d5b5fSRobert Mustacchiand linked against the libraries libsocket and libnsl. If this example 460*177d5b5fSRobert Mustacchiwas named ip4.c, then the full link line would be 461*177d5b5fSRobert Mustacchi.Ic cc ip4.c -lsocket -lnsl . 462*177d5b5fSRobert Mustacchi.Bd -literal 463*177d5b5fSRobert Mustacchi#include <sys/types.h> 464*177d5b5fSRobert Mustacchi#include <sys/socket.h> 465*177d5b5fSRobert Mustacchi#include <stdio.h> 466*177d5b5fSRobert Mustacchi#include <netinet/in.h> 467*177d5b5fSRobert Mustacchi#include <inttypes.h> 468*177d5b5fSRobert Mustacchi#include <strings.h> 469*177d5b5fSRobert Mustacchi 470*177d5b5fSRobert Mustacchiint 471*177d5b5fSRobert Mustacchimain(void) 472*177d5b5fSRobert Mustacchi{ 473*177d5b5fSRobert Mustacchi int sock; 474*177d5b5fSRobert Mustacchi struct sockaddr_in in; 475*177d5b5fSRobert Mustacchi 476*177d5b5fSRobert Mustacchi if ((sock = socket(AF_INET, SOCK_STREAM, 0)) < 0) { 477*177d5b5fSRobert Mustacchi perror("socket"); 478*177d5b5fSRobert Mustacchi return (1); 479*177d5b5fSRobert Mustacchi } 480*177d5b5fSRobert Mustacchi 481*177d5b5fSRobert Mustacchi bzero(&in, sizeof (struct sockaddr_in)); 482*177d5b5fSRobert Mustacchi in.sin_family = AF_INET; 483*177d5b5fSRobert Mustacchi in.sin_port = htons(80); 484*177d5b5fSRobert Mustacchi if (inet_pton(AF_INET, "127.0.0.1", &in.sin_addr) != 1) { 485*177d5b5fSRobert Mustacchi perror("inet_pton"); 486*177d5b5fSRobert Mustacchi return (1); 487*177d5b5fSRobert Mustacchi } 488*177d5b5fSRobert Mustacchi 489*177d5b5fSRobert Mustacchi if (connect(sock, (struct sockaddr *)&in, 490*177d5b5fSRobert Mustacchi sizeof (struct sockaddr_in)) != 0) { 491*177d5b5fSRobert Mustacchi perror("connect"); 492*177d5b5fSRobert Mustacchi return (1); 493*177d5b5fSRobert Mustacchi } 494*177d5b5fSRobert Mustacchi 495*177d5b5fSRobert Mustacchi /* use socket */ 496*177d5b5fSRobert Mustacchi 497*177d5b5fSRobert Mustacchi return (0); 498*177d5b5fSRobert Mustacchi} 499*177d5b5fSRobert Mustacchi.Ed 500*177d5b5fSRobert Mustacchi.Lp 501*177d5b5fSRobert Mustacchi.Sy Example 2 502*177d5b5fSRobert MustacchiPreparing an IPv6 503*177d5b5fSRobert Mustacchi.Sy sockaddr_in6 504*177d5b5fSRobert Mustacchito bind to a local address 505*177d5b5fSRobert Mustacchi.Lp 506*177d5b5fSRobert MustacchiThe following example shows how one would open a socket and prepare it 507*177d5b5fSRobert Mustacchito bind to the local IPv6 address ::1 port on port 12345. This program 508*177d5b5fSRobert Mustacchishould be compiled with the C compiler 509*177d5b5fSRobert Mustacchi.Sy cc 510*177d5b5fSRobert Mustacchiand linked aginst the libraries libsocket and libnsl. If this example 511*177d5b5fSRobert Mustacchiwas named ip6.c, then the full compiler line would be 512*177d5b5fSRobert Mustacchi.Ic cc ip6.c -lsocket -lnsl . 513*177d5b5fSRobert Mustacchi.Bd -literal 514*177d5b5fSRobert Mustacchi#include <sys/types.h> 515*177d5b5fSRobert Mustacchi#include <sys/socket.h> 516*177d5b5fSRobert Mustacchi#include <stdio.h> 517*177d5b5fSRobert Mustacchi#include <netinet/in.h> 518*177d5b5fSRobert Mustacchi#include <inttypes.h> 519*177d5b5fSRobert Mustacchi#include <strings.h> 520*177d5b5fSRobert Mustacchi 521*177d5b5fSRobert Mustacchiint 522*177d5b5fSRobert Mustacchimain(void) 523*177d5b5fSRobert Mustacchi{ 524*177d5b5fSRobert Mustacchi int sock6; 525*177d5b5fSRobert Mustacchi struct sockaddr_in6 in6; 526*177d5b5fSRobert Mustacchi 527*177d5b5fSRobert Mustacchi if ((sock6 = socket(AF_INET6, SOCK_STREAM, 0)) < 0) { 528*177d5b5fSRobert Mustacchi perror("socket"); 529*177d5b5fSRobert Mustacchi return (1); 530*177d5b5fSRobert Mustacchi } 531*177d5b5fSRobert Mustacchi 532*177d5b5fSRobert Mustacchi bzero(&in6, sizeof (struct sockaddr_in6)); 533*177d5b5fSRobert Mustacchi in6.sin6_family = AF_INET6; 534*177d5b5fSRobert Mustacchi in6.sin6_port = htons(12345); 535*177d5b5fSRobert Mustacchi if (inet_pton(AF_INET6, "::1", &in6.sin6_addr) != 1) { 536*177d5b5fSRobert Mustacchi perror("inet_pton"); 537*177d5b5fSRobert Mustacchi return (1); 538*177d5b5fSRobert Mustacchi } 539*177d5b5fSRobert Mustacchi 540*177d5b5fSRobert Mustacchi if (bind(sock6, (struct sockaddr *)&in6, 541*177d5b5fSRobert Mustacchi sizeof (struct sockaddr_in6)) != 0) { 542*177d5b5fSRobert Mustacchi perror("bind"); 543*177d5b5fSRobert Mustacchi return (1); 544*177d5b5fSRobert Mustacchi } 545*177d5b5fSRobert Mustacchi 546*177d5b5fSRobert Mustacchi /* use server socket */ 547*177d5b5fSRobert Mustacchi 548*177d5b5fSRobert Mustacchi return (0); 549*177d5b5fSRobert Mustacchi} 550*177d5b5fSRobert Mustacchi.Ed 551*177d5b5fSRobert Mustacchi.Sh SEE ALSO 552*177d5b5fSRobert Mustacchi.Xr socket 3HEAD , 553*177d5b5fSRobert Mustacchi.Xr uh.h 3HEAD , 554*177d5b5fSRobert Mustacchi.Xr accept 3SOCKET , 555*177d5b5fSRobert Mustacchi.Xr bind 3SOCKET , 556*177d5b5fSRobert Mustacchi.Xr connect 3SOCKET , 557*177d5b5fSRobert Mustacchi.Xr socket 3SOCKET , 558*177d5b5fSRobert Mustacchi.Xr arp 7P , 559*177d5b5fSRobert Mustacchi.Xr inet 7P , 560*177d5b5fSRobert Mustacchi.Xr inet6 7P , 561*177d5b5fSRobert Mustacchi.Xr ip 7P , 562*177d5b5fSRobert Mustacchi.Xr ip6 7P , 563