LINK_ADDR(3) | Library Functions Manual | LINK_ADDR(3) |
void
link_addr(const char *addr, struct sockaddr_dl *sdl);
char *
link_ntoa(const struct sockaddr_dl *sdl);
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.
The function link_addr() should diagnose improperly formed input, and there should be an unambiguous way to recognize this.
If the sdl_len field of the link socket address sdl is 0, link_ntoa() will not insert a colon before the interface address bytes. If this translated address is given to link_addr() without inserting an initial colon, the latter will not interpret it correctly.
July 28, 1993 | NetBSD 6.1 |