xref: /csrg-svn/sys/net/if_dl.h (revision 63211)
144850Skarels /*
2*63211Sbostic  * Copyright (c) 1990, 1993
3*63211Sbostic  *	The Regents of the University of California.  All rights reserved.
444850Skarels  *
544850Skarels  * %sccs.include.redist.c%
644850Skarels  *
7*63211Sbostic  *	@(#)if_dl.h	8.1 (Berkeley) 06/10/93
844850Skarels  */
944850Skarels 
1044850Skarels /*
1144850Skarels  * A Link-Level Sockaddr may specify the interface in one of two
1244850Skarels  * ways: either by means of a system-provided index number (computed
1344850Skarels  * anew and possibly differently on every reboot), or by a human-readable
1444850Skarels  * string such as "il0" (for managerial convenience).
1544850Skarels  *
1644850Skarels  * Census taking actions, such as something akin to SIOCGCONF would return
1744850Skarels  * both the index and the human name.
1844850Skarels  *
1944850Skarels  * High volume transactions (such as giving a link-level ``from'' address
2044850Skarels  * in a recvfrom or recvmsg call) may be likely only to provide the indexed
2144850Skarels  * form, (which requires fewer copy operations and less space).
2244850Skarels  *
2344850Skarels  * The form and interpretation  of the link-level address is purely a matter
2444850Skarels  * of convention between the device driver and its consumers; however, it is
2544850Skarels  * expected that all drivers for an interface of a given if_type will agree.
2644850Skarels  */
2744850Skarels 
2844850Skarels /*
2944850Skarels  * Structure of a Link-Level sockaddr:
3044850Skarels  */
3144850Skarels struct sockaddr_dl {
3244850Skarels 	u_char	sdl_len;	/* Total length of sockaddr */
3344850Skarels 	u_char	sdl_family;	/* AF_DLI */
3444850Skarels 	u_short	sdl_index;	/* if != 0, system given index for interface */
3544850Skarels 	u_char	sdl_type;	/* interface type */
3644850Skarels 	u_char	sdl_nlen;	/* interface name length, no trailing 0 reqd. */
3744850Skarels 	u_char	sdl_alen;	/* link level address length */
3844850Skarels 	u_char	sdl_slen;	/* link layer selector length */
3944850Skarels 	char	sdl_data[12];	/* minimum work area, can be larger;
4044850Skarels 				   contains both if name and ll address */
4144850Skarels };
4244850Skarels 
4344850Skarels #define LLADDR(s) ((caddr_t)((s)->sdl_data + (s)->sdl_nlen))
4444850Skarels 
4546524Sdonn #ifndef KERNEL
4646524Sdonn 
4746524Sdonn #include <sys/cdefs.h>
4846524Sdonn 
4946524Sdonn __BEGIN_DECLS
5046524Sdonn void	link_addr __P((const char *, struct sockaddr_dl *));
5146524Sdonn char	*link_ntoa __P((const struct sockaddr_dl *));
5246524Sdonn __END_DECLS
5346524Sdonn 
5446524Sdonn #endif /* !KERNEL */
55