mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [PATCH 1/2] vsprintf: Add support for printing ipv4 addresses with %pI4
@ 2016-09-15 10:52 Sascha Hauer
  2016-09-15 10:52 ` [PATCH 2/2] convert users to %pI4 Sascha Hauer
  0 siblings, 1 reply; 2+ messages in thread
From: Sascha Hauer @ 2016-09-15 10:52 UTC (permalink / raw)
  To: Barebox List

Can be used conveniently in places that currently use ip_to_string().

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 lib/vsprintf.c | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/lib/vsprintf.c b/lib/vsprintf.c
index f3885a8..fa9fb75 100644
--- a/lib/vsprintf.c
+++ b/lib/vsprintf.c
@@ -191,6 +191,27 @@ static char *symbol_string(char *buf, char *end, void *ptr, int field_width, int
 }
 
 static noinline_for_stack
+char *ip4_addr_string(char *buf, char *end, const u8 *addr, int field_width,
+		      int precision, int flags, const char *fmt)
+{
+	char ip4_addr[sizeof("255.255.255.255")];
+	char *pos;
+	int i;
+
+	pos = ip4_addr;
+
+	for (i = 0; i < 4; i++) {
+		pos = number(pos, pos + 3, addr[i], 10, 0, 0, LEFT);
+		if (i < 3)
+			*pos++ = '.';
+	}
+
+	*pos = 0;
+
+	return string(buf, end, ip4_addr, field_width, precision, flags);
+}
+
+static noinline_for_stack
 char *uuid_string(char *buf, char *end, const u8 *addr, int field_width,
 		int precision, int flags, const char *fmt)
 {
@@ -267,6 +288,8 @@ char *address_val(char *buf, char *end, const void *addr,
  *
  * Right now we handle:
  *
+ * - 'I' [4] for IPv4 addresses printed in the usual way
+ *       IPv4 uses dot-separated decimal without leading 0's (1.2.3.4)
  * - 'S' For symbolic direct pointers
  * - 'U' For a 16 byte UUID/GUID, it prints the UUID/GUID in the form
  *       "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx"
@@ -297,6 +320,12 @@ static char *pointer(const char *fmt, char *buf, char *end, void *ptr, int field
 		break;
 	case 'a':
 		return address_val(buf, end, ptr, field_width, precision, flags, fmt);
+	case 'I':
+		switch (fmt[1]) {
+		case '4':
+                        return ip4_addr_string(buf, end, ptr, field_width, precision, flags, fmt);
+		}
+		break;
 	}
 	flags |= SMALL;
 	if (field_width == -1) {
-- 
2.8.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

* [PATCH 2/2] convert users to %pI4
  2016-09-15 10:52 [PATCH 1/2] vsprintf: Add support for printing ipv4 addresses with %pI4 Sascha Hauer
@ 2016-09-15 10:52 ` Sascha Hauer
  0 siblings, 0 replies; 2+ messages in thread
From: Sascha Hauer @ 2016-09-15 10:52 UTC (permalink / raw)
  To: Barebox List

Convert users of ip_to_string() and print_IPaddr() to %pI4 and
remove the now unused functions.

Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
---
 arch/arm/mach-omap/xload.c |  9 ++++++---
 commands/tftp.c            |  4 +++-
 common/blspec.c            |  2 +-
 fs/nfs.c                   |  4 +---
 include/net.h              |  6 ------
 lib/parameter.c            |  2 +-
 net/dhcp.c                 |  6 +++---
 net/dns.c                  |  6 ++----
 net/lib.c                  | 19 -------------------
 net/net.c                  |  4 ++--
 net/netconsole.c           |  2 +-
 11 files changed, 20 insertions(+), 44 deletions(-)

diff --git a/arch/arm/mach-omap/xload.c b/arch/arm/mach-omap/xload.c
index 14a631e..822389c 100644
--- a/arch/arm/mach-omap/xload.c
+++ b/arch/arm/mach-omap/xload.c
@@ -231,8 +231,10 @@ static void *am33xx_net_boot(void)
 	int err;
 	int len;
 	struct dhcp_req_param dhcp_param;
-	const char *bootfile, *ip;
+	const char *bootfile;
+	IPaddr_t ip;
 	char *file;
+	char ip4_str[sizeof("255.255.255.255")];
 
 	am33xx_register_ethaddr(0, 0);
 
@@ -258,8 +260,9 @@ static void *am33xx_net_boot(void)
 	if (err)
 		return NULL;
 
-	ip = ip_to_string(net_get_serverip());
-	err = mount(ip, "tftp", TFTP_MOUNT, NULL);
+	ip = net_get_serverip();
+	sprintf(ip4_str, "%pI4", &ip);
+	err = mount(ip4_str, "tftp", TFTP_MOUNT, NULL);
 	if (err < 0) {
 		printf("Unable to mount.\n");
 		return NULL;
diff --git a/commands/tftp.c b/commands/tftp.c
index 6a3121a..08366b4 100644
--- a/commands/tftp.c
+++ b/commands/tftp.c
@@ -36,6 +36,7 @@ static int do_tftpb(int argc, char *argv[])
 	int tftp_push = 0;
 	int ret;
 	IPaddr_t ip;
+	char ip4_str[sizeof("255.255.255.255")];
 
 	while ((opt = getopt(argc, argv, "p")) > 0) {
 		switch(opt) {
@@ -73,7 +74,8 @@ static int do_tftpb(int argc, char *argv[])
 		goto err_free;
 
 	ip = net_get_serverip();
-	ret = mount(ip_to_string(ip), "tftp", TFTP_MOUNT_PATH, NULL);
+	sprintf(ip4_str, "%pI4", &ip);
+	ret = mount(ip4_str, "tftp", TFTP_MOUNT_PATH, NULL);
 	if (ret)
 		goto err_rmdir;
 
diff --git a/common/blspec.c b/common/blspec.c
index f02f5e9..b45bd29 100644
--- a/common/blspec.c
+++ b/common/blspec.c
@@ -306,7 +306,7 @@ static char *parse_nfs_url(const char *url)
 	if (ip == 0)
 		goto out;
 
-	hostpath = basprintf("%s:%s", ip_to_string(ip), path);
+	hostpath = basprintf("%pI4:%s", &ip, path);
 
 	prevpath = nfs_find_mountpath(hostpath);
 
diff --git a/fs/nfs.c b/fs/nfs.c
index 1e874d5..a0a9dfc 100644
--- a/fs/nfs.c
+++ b/fs/nfs.c
@@ -1314,10 +1314,8 @@ static char *rootnfsopts;
 static void nfs_set_rootarg(struct nfs_priv *npriv, struct fs_device_d *fsdev)
 {
 	char *str, *tmp;
-	const char *ip;
 
-	ip = ip_to_string(npriv->server);
-	str = basprintf("root=/dev/nfs nfsroot=%s:%s%s%s", ip, npriv->path,
+	str = basprintf("root=/dev/nfs nfsroot=%pI4:%s%s%s", &npriv->server, npriv->path,
 			  rootnfsopts[0] ? "," : "", rootnfsopts);
 
 	/* forward specific mount options on demand */
diff --git a/include/net.h b/include/net.h
index 8f857c8..fd1c412 100644
--- a/include/net.h
+++ b/include/net.h
@@ -257,9 +257,6 @@ static inline int net_eth_to_udplen(char *pkt)
 int net_checksum_ok(unsigned char *, int);	/* Return true if cksum OK	*/
 uint16_t net_checksum(unsigned char *, int);	/* Calculate the checksum	*/
 
-/* Print an IP address on the console */
-void print_IPaddr (IPaddr_t);
-
 /*
  * The following functions are a bit ugly, but necessary to deal with
  * alignment restrictions on ARM.
@@ -308,9 +305,6 @@ static inline void net_copy_uint32(uint32_t *to, uint32_t *from)
 	memcpy(to, from, sizeof(uint32_t));
 }
 
-/* Convert an IP address to a string */
-char *ip_to_string (IPaddr_t x);
-
 /* Convert a string to ip address */
 int string_to_ip(const char *s, IPaddr_t *ip);
 
diff --git a/lib/parameter.c b/lib/parameter.c
index 656a603..a754fb8 100644
--- a/lib/parameter.c
+++ b/lib/parameter.c
@@ -642,7 +642,7 @@ static const char *param_ip_get(struct device_d *dev, struct param_d *p)
 	}
 
 	free(p->value);
-	p->value = xstrdup(ip_to_string(*pi->ip));
+	p->value = xasprintf("%pI4", pi->ip);
 
 	return p->value;
 }
diff --git a/net/dhcp.c b/net/dhcp.c
index 792ece4..c5386fe 100644
--- a/net/dhcp.c
+++ b/net/dhcp.c
@@ -613,13 +613,13 @@ static void dhcp_handler(void *ctx, char *packet, unsigned int len)
 		debug ("%s: State REQUESTING\n", __func__);
 
 		if (dhcp_message_type((u8 *)bp->bp_vend) == DHCP_ACK ) {
+			IPaddr_t ip;
 			if (net_read_uint32((uint32_t *)&bp->bp_vend[0]) == htonl(BOOTP_VENDOR_MAGIC))
 				dhcp_options_process((u8 *)&bp->bp_vend[4], bp);
 			bootp_copy_net_params(bp); /* Store net params from reply */
 			dhcp_state = BOUND;
-			puts ("DHCP client bound to address ");
-			print_IPaddr(net_get_ip());
-			putchar('\n');
+			ip = net_get_ip();
+			printf("DHCP client bound to address %pI4\n", &ip);
 			return;
 		}
 		break;
diff --git a/net/dns.c b/net/dns.c
index 2acdb93..700c6b0 100644
--- a/net/dns.c
+++ b/net/dns.c
@@ -221,7 +221,7 @@ IPaddr_t resolv(const char *host)
 	if (string_to_ip(ns, &ip))
 		return 0;
 
-	debug("resolving host %s via nameserver %s\n", host, ip_to_string(ip));
+	debug("resolving host %s via nameserver %pI4\n", host, &ip);
 
 	dns_con = net_udp_new(ip, DNS_PORT, dns_handler, NULL);
 	if (IS_ERR(dns_con))
@@ -258,9 +258,7 @@ static int do_host(int argc, char *argv[])
 	if (!ip)
 		printf("unknown host %s\n", argv[1]);
 	else {
-		printf("%s is at ", argv[1]);
-		print_IPaddr(ip);
-		printf("\n");
+		printf("%s is at %pI4\n", argv[1], &ip);
 	}
 
 	return 0;
diff --git a/net/lib.c b/net/lib.c
index f1c60c9..d4343bc 100644
--- a/net/lib.c
+++ b/net/lib.c
@@ -57,25 +57,6 @@ void ethaddr_to_string(const u8 enetaddr[6], char *str)
 		 enetaddr[4], enetaddr[5]);
 }
 
-void print_IPaddr(IPaddr_t x)
-{
-	puts(ip_to_string(x));
-}
-
-char *ip_to_string(IPaddr_t x)
-{
-	static char s[sizeof("xxx.xxx.xxx.xxx")];
-
-	x = ntohl(x);
-	sprintf(s, "%d.%d.%d.%d",
-		 (int) ((x >> 24) & 0xff),
-		 (int) ((x >> 16) & 0xff),
-		 (int) ((x >> 8) & 0xff), (int) ((x >> 0) & 0xff)
-	);
-
-	return s;
-}
-
 int string_to_ip(const char *s, IPaddr_t *ip)
 {
 	IPaddr_t addr = 0;
diff --git a/net/net.c b/net/net.c
index df1d677..3c0e715 100644
--- a/net/net.c
+++ b/net/net.c
@@ -78,9 +78,9 @@ IPaddr_t getenv_ip(const char *name)
 
 int setenv_ip(const char *name, IPaddr_t ip)
 {
-	const char *str;
+	char str[sizeof("255.255.255.255")];
 
-	str = ip_to_string(ip);
+	sprintf(str, "%pI4", &ip);
 
 	setenv(name, str);
 
diff --git a/net/netconsole.c b/net/netconsole.c
index 0ee6a76..ce3c418 100644
--- a/net/netconsole.c
+++ b/net/netconsole.c
@@ -137,7 +137,7 @@ static int nc_set_active(struct console_device *cdev, unsigned flags)
 
 	net_udp_bind(priv->con, priv->port);
 
-	pr_info("netconsole initialized with %s:%d\n", ip_to_string(priv->ip), priv->port);
+	pr_info("netconsole initialized with %pI4:%d\n", &priv->ip, priv->port);
 
 	return 0;
 }
-- 
2.8.1


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2016-09-15 10:52 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-09-15 10:52 [PATCH 1/2] vsprintf: Add support for printing ipv4 addresses with %pI4 Sascha Hauer
2016-09-15 10:52 ` [PATCH 2/2] convert users to %pI4 Sascha Hauer

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox