From: Michael Brown Date: Mon, 21 Oct 2013 13:05:40 +0000 (+0100) Subject: [ipv4] Add IPv4 socket address converter X-Git-Tag: v1.20.1~1404 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=365a09d867da20029fdf2f05a6e90f4fc7c51793;p=thirdparty%2Fipxe.git [ipv4] Add IPv4 socket address converter Signed-off-by: Michael Brown --- diff --git a/src/net/ipv4.c b/src/net/ipv4.c index 46f774e95..7956d18b2 100644 --- a/src/net/ipv4.c +++ b/src/net/ipv4.c @@ -524,6 +524,36 @@ static const char * ipv4_ntoa ( const void *net_addr ) { return inet_ntoa ( * ( ( struct in_addr * ) net_addr ) ); } +/** + * Transcribe IPv4 socket address + * + * @v sa Socket address + * @ret string Socket address in standard notation + */ +static const char * ipv4_sock_ntoa ( struct sockaddr *sa ) { + struct sockaddr_in *sin = ( ( struct sockaddr_in * ) sa ); + + return inet_ntoa ( sin->sin_addr ); +} + +/** + * Parse IPv4 socket address + * + * @v string Socket address string + * @v sa Socket address to fill in + * @ret rc Return status code + */ +static int ipv4_sock_aton ( const char *string, struct sockaddr *sa ) { + struct sockaddr_in *sin = ( ( struct sockaddr_in * ) sa ); + struct in_addr in; + + if ( inet_aton ( string, &in ) ) { + sin->sin_addr = in; + return 0; + } + return -EINVAL; +} + /** IPv4 protocol */ struct net_protocol ipv4_protocol __net_protocol = { .name = "IP", @@ -546,6 +576,13 @@ struct arp_net_protocol ipv4_arp_protocol __arp_net_protocol = { .check = ipv4_arp_check, }; +/** IPv4 socket address converter */ +struct sockaddr_converter ipv4_sockaddr_converter __sockaddr_converter = { + .family = AF_INET, + .ntoa = ipv4_sock_ntoa, + .aton = ipv4_sock_aton, +}; + /****************************************************************************** * * Settings