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