]> git.ipfire.org Git - thirdparty/ipxe.git/commitdiff
[ipv4] Add IPv4 socket address converter
authorMichael Brown <mcb30@ipxe.org>
Mon, 21 Oct 2013 13:05:40 +0000 (14:05 +0100)
committerMichael Brown <mcb30@ipxe.org>
Mon, 21 Oct 2013 13:34:08 +0000 (14:34 +0100)
Signed-off-by: Michael Brown <mcb30@ipxe.org>
src/net/ipv4.c

index 46f774e9544079fc8fcf2f6880954c9cdb59f122..7956d18b2868d90d20e480fc8609e595f39b2937 100644 (file)
@@ -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