.\" Copyright 2002 Ian Redfern (redferni@logica.com)
.\"
.\" %%%LICENSE_START(VERBATIM)
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\"
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\"
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\"
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.\" %%%LICENSE_END
.\"
.\" References consulted:
.\"     Linux libc source code
.\"     FreeBSD 4.4 man pages
.\"
.\" Minor additions, aeb, 2013-06-21
.\"
.TH ETHER_ATON 3  2021-03-22 "GNU" "Linux Programmer's Manual"
.SH NAME
ether_aton, ether_ntoa, ether_ntohost, ether_hostton, ether_line,
ether_ntoa_r, ether_aton_r \- Ethernet address manipulation routines
.SH SYNOPSIS
.nf
.B #include <netinet/ether.h>
.PP
.BI "char *ether_ntoa(const struct ether_addr *" addr );
.BI "struct ether_addr *ether_aton(const char *" asc );
.PP
.BI "int ether_ntohost(char *" hostname ", const struct ether_addr *" addr );
.BI "int ether_hostton(const char *" hostname ", struct ether_addr *" addr );
.PP
.BI "int ether_line(const char *" line ", struct ether_addr *" addr ,
.BI "               char *" hostname );
.PP
/* GNU extensions */
.BI "char *ether_ntoa_r(const struct ether_addr *" addr ", char *" buf );
.PP
.BI "struct ether_addr *ether_aton_r(const char *" asc ,
.BI "                                struct ether_addr *" addr );
.fi
.SH DESCRIPTION
.BR ether_aton ()
converts the 48-bit Ethernet host address
.I asc
from the standard hex-digits-and-colons notation into binary data in
network byte order and returns a pointer to it in a statically
allocated buffer, which subsequent calls will
overwrite.
.BR ether_aton ()
returns NULL if the address is invalid.
.PP
The
.BR ether_ntoa ()
function converts the Ethernet host address
.I addr
given in network byte order to a string in standard
hex-digits-and-colons notation, omitting leading zeros.
The string is returned in a statically allocated buffer,
which subsequent calls will overwrite.
.PP
The
.BR ether_ntohost ()
function maps an Ethernet address to the
corresponding hostname in
.I /etc/ethers
and returns nonzero if it cannot be found.
.PP
The
.BR ether_hostton ()
function maps a hostname to the
corresponding Ethernet address in
.I /etc/ethers
and returns nonzero if it cannot be found.
.PP
The
.BR ether_line ()
function parses a line in
.I /etc/ethers
format (ethernet address followed by whitespace followed by
hostname; \(aq#\(aq introduces a comment) and returns an address
and hostname pair, or nonzero if it cannot be parsed.
The buffer pointed to by
.I hostname
must be sufficiently long, for example, have the same length as
.IR line .
.PP
The functions
.BR ether_ntoa_r ()
and
.BR ether_aton_r ()
are reentrant
thread-safe versions of
.BR ether_ntoa ()
and
.BR ether_aton ()
respectively, and do not use static buffers.
.PP
The structure
.I ether_addr
is defined in
.I <net/ethernet.h>
as:
.PP
.in +4n
.EX
struct ether_addr {
    uint8_t ether_addr_octet[6];
}
.EE
.in
.SH ATTRIBUTES
For an explanation of the terms used in this section, see
.BR attributes (7).
.ad l
.nh
.TS
allbox;
lbx lb lb
l l l.
Interface	Attribute	Value
T{
.BR ether_aton (),
.BR ether_ntoa ()
T}	Thread safety	MT-Unsafe
T{
.BR ether_ntohost (),
.BR ether_hostton (),
.BR ether_line (),
.BR ether_ntoa_r (),
.BR ether_aton_r ()
T}	Thread safety	MT-Safe
.TE
.hy
.ad
.sp 1
.SH CONFORMING TO
4.3BSD, SunOS.
.SH BUGS
In glibc 2.2.5 and earlier, the implementation of
.BR ether_line ()
.\" The fix was presumably commit c0a0f9a32c8baa6ab93d00eb42d92c02e9e146d7
.\" which was in glibc 2.3
is broken.
.SH SEE ALSO
.BR ethers (5)
