xref: /csrg-svn/sys/net/if_dl.h (revision 44850)
1*44850Skarels /*
2*44850Skarels  * Copyright (c) 1990 Regents of the University of California.
3*44850Skarels  * All rights reserved.
4*44850Skarels  *
5*44850Skarels  * %sccs.include.redist.c%
6*44850Skarels  *
7*44850Skarels  *	@(#)if_dl.h	7.1 (Berkeley) 07/01/90
8*44850Skarels  */
9*44850Skarels 
10*44850Skarels /*
11*44850Skarels  * A Link-Level Sockaddr may specify the interface in one of two
12*44850Skarels  * ways: either by means of a system-provided index number (computed
13*44850Skarels  * anew and possibly differently on every reboot), or by a human-readable
14*44850Skarels  * string such as "il0" (for managerial convenience).
15*44850Skarels  *
16*44850Skarels  * Census taking actions, such as something akin to SIOCGCONF would return
17*44850Skarels  * both the index and the human name.
18*44850Skarels  *
19*44850Skarels  * High volume transactions (such as giving a link-level ``from'' address
20*44850Skarels  * in a recvfrom or recvmsg call) may be likely only to provide the indexed
21*44850Skarels  * form, (which requires fewer copy operations and less space).
22*44850Skarels  *
23*44850Skarels  * The form and interpretation  of the link-level address is purely a matter
24*44850Skarels  * of convention between the device driver and its consumers; however, it is
25*44850Skarels  * expected that all drivers for an interface of a given if_type will agree.
26*44850Skarels  */
27*44850Skarels 
28*44850Skarels /*
29*44850Skarels  * Structure of a Link-Level sockaddr:
30*44850Skarels  */
31*44850Skarels struct sockaddr_dl {
32*44850Skarels 	u_char	sdl_len;	/* Total length of sockaddr */
33*44850Skarels 	u_char	sdl_family;	/* AF_DLI */
34*44850Skarels 	u_short	sdl_index;	/* if != 0, system given index for interface */
35*44850Skarels 	u_char	sdl_type;	/* interface type */
36*44850Skarels 	u_char	sdl_nlen;	/* interface name length, no trailing 0 reqd. */
37*44850Skarels 	u_char	sdl_alen;	/* link level address length */
38*44850Skarels 	u_char	sdl_slen;	/* link layer selector length */
39*44850Skarels 	char	sdl_data[12];	/* minimum work area, can be larger;
40*44850Skarels 				   contains both if name and ll address */
41*44850Skarels };
42*44850Skarels 
43*44850Skarels #define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
44*44850Skarels 
45