The routine
link_addr() interprets character strings representing link-level addresses, returning binary information suitable for use in system calls. The routine
link_ntoa() takes a link-level address and returns an ASCII string representing some of the information present, including the link level address itself, and the interface name or number, if present. This facility is experimental and is still subject to change.
Prior to a call to
link_addr(),
sdl->sdl_len must be initialized to the size of the link-level socket structure, typically
sizeof(struct sockaddr_dl).
For
link_addr(), the string
addr may contain an optional network interface identifier of the form “name unit-number”, suitable for the first argument to
ifconfig(8), followed in all cases by a colon and an interface address in the form of groups of hexadecimal digits separated by periods. Each group represents a byte of address; address bytes are filled left to right from low order bytes through high order bytes.
Thus
le0:8.0.9.13.d.30 represents an ethernet address to be transmitted on the first Lance ethernet interface.