[Sheepdog] [PATCH] Enable IPv6 support for addr_to_str()

MORITA Kazutaka morita.kazutaka at lab.ntt.co.jp
Tue Sep 14 23:19:04 CEST 2010


At Tue, 14 Sep 2010 08:27:38 +0530,
Narendra Prasad Madanapalli wrote:
> 
> Enable IPv6 support in the function addr_to_str() and modify
> print_node_list_entry() to make use of addr_to_str().
> 

Thanks, applied to the next branch.

Kazutaka


> Signed-off-by: Narendra <narendramind at gmail.com>
> ---
> 
>  include/sheep.h |    7 ++++---
>  lib/net.c       |   24 +++++++++++++++++-------
>  2 files changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/include/sheep.h b/include/sheep.h
> index a910219..47ffd4c 100644
> --- a/include/sheep.h
> +++ b/include/sheep.h
> @@ -14,6 +14,7 @@
>  #include <stdint.h>
>  #include "util.h"
>  #include "list.h"
> +#include "net.h"
> 
>  #define SD_SHEEP_PROTO_VER 0x01
> 
> @@ -166,9 +167,9 @@ static inline int obj_to_sheep(struct
> sheepdog_node_list_entry *entries,
>  static inline void print_node_list_entry(struct sheepdog_node_list_entry *e,
>  					 char *str, size_t size)
>  {
> -	snprintf(str, size, "%016" PRIx64 " - %d.%d.%d.%d:%d",
> -		 e->id, e->addr[12], e->addr[13],
> -		 e->addr[14], e->addr[15], e->port);
> +	char  buf[INET6_ADDRSTRLEN];
> +	snprintf(str, size, "%016" PRIx64 " - %s",
> +		 e->id, addr_to_str(buf, sizeof(buf), e->addr, e->port));
>  }
> 
>  static inline int is_sheep_op(uint8_t op)
> diff --git a/lib/net.c b/lib/net.c
> index 107408c..71d25b8 100644
> --- a/lib/net.c
> +++ b/lib/net.c
> @@ -346,15 +346,25 @@ int exec_req(int sockfd, struct sd_req *hdr, void *data,
>  	return 0;
>  }
> 
> -/* TODO: support IPv6 */
>  char *addr_to_str(char *str, int size, uint8_t *addr, uint16_t port)
>  {
> -	if (port)
> -		snprintf(str, size, "%d.%d.%d.%d:%d",
> -			 addr[12], addr[13], addr[14], addr[15], port);
> -	else
> -		snprintf(str, size, "%d.%d.%d.%d",
> -			 addr[12], addr[13], addr[14], addr[15]);
> +	int  af = AF_INET6;
> +        int  addr_start_idx = 0;
> +
> +	/* Find address family type */
> +	if (addr[12]) {
> +		int  oct_no = 0;
> +		while (!addr[oct_no] && oct_no++ < 12 );
> +		if (oct_no == 12) {
> +			af = AF_INET;
> +			addr_start_idx = 12;
> +		}
> +	}
> +	inet_ntop(af, addr+addr_start_idx, str, size);
> +	if (port) {
> +		int  len = strlen(str);
> +		snprintf(str+len, size-len, ":%d", port);
> +	}
> 
>  	return str;
>  }
> -- 
> sheepdog mailing list
> sheepdog at lists.wpkg.org
> http://lists.wpkg.org/mailman/listinfo/sheepdog



More information about the sheepdog mailing list