144850Skarels /* 244850Skarels * Copyright (c) 1990 Regents of the University of California. 344850Skarels * All rights reserved. 444850Skarels * 544850Skarels * %sccs.include.redist.c% 644850Skarels * 7*46524Sdonn * @(#)if_dl.h 7.2 (Berkeley) 02/22/91 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 45*46524Sdonn #ifndef KERNEL 46*46524Sdonn 47*46524Sdonn #include <sys/cdefs.h> 48*46524Sdonn 49*46524Sdonn __BEGIN_DECLS 50*46524Sdonn void link_addr __P((const char *, struct sockaddr_dl *)); 51*46524Sdonn char *link_ntoa __P((const struct sockaddr_dl *)); 52*46524Sdonn __END_DECLS 53*46524Sdonn 54*46524Sdonn #endif /* !KERNEL */ 55