[v2,09/18] libceph: use TYPE_LEGACY for entity addrs instead of TYPE_NONE
diff mbox series

Message ID 20190617153753.3611-10-jlayton@kernel.org
State New
Headers show
Series
  • ceph: addr2, btime and change_attr support
Related show

Commit Message

Jeff Layton June 17, 2019, 3:37 p.m. UTC
Going forward, we'll have different address types so let's use
the addr2 TYPE_LEGACY for internal tracking rather than TYPE_NONE.

Also, make ceph_pr_addr print the address type value as well.

Signed-off-by: Jeff Layton <jlayton@kernel.org>
---
 include/linux/ceph/decode.h |  7 +++++++
 net/ceph/decode.c           | 20 ++++++++------------
 net/ceph/messenger.c        |  7 +++++--
 3 files changed, 20 insertions(+), 14 deletions(-)

Comments

Jeff Layton June 17, 2019, 4:14 p.m. UTC | #1
On Mon, 2019-06-17 at 11:37 -0400, Jeff Layton wrote:
> Going forward, we'll have different address types so let's use
> the addr2 TYPE_LEGACY for internal tracking rather than TYPE_NONE.
> 
> Also, make ceph_pr_addr print the address type value as well.
> 
> Signed-off-by: Jeff Layton <jlayton@kernel.org>
> ---
>  include/linux/ceph/decode.h |  7 +++++++
>  net/ceph/decode.c           | 20 ++++++++------------
>  net/ceph/messenger.c        |  7 +++++--
>  3 files changed, 20 insertions(+), 14 deletions(-)
> 
> diff --git a/include/linux/ceph/decode.h b/include/linux/ceph/decode.h
> index 1c0a665bfc03..ce488d95be89 100644
> --- a/include/linux/ceph/decode.h
> +++ b/include/linux/ceph/decode.h
> @@ -218,16 +218,23 @@ static inline void ceph_encode_timespec64(struct ceph_timespec *tv,
>  /*
>   * sockaddr_storage <-> ceph_sockaddr
>   */
> +#define CEPH_ENTITY_ADDR_TYPE_NONE	0
> +#define CEPH_ENTITY_ADDR_TYPE_LEGACY	__cpu_to_le32(1)
> +
>  static inline void ceph_encode_addr(struct ceph_entity_addr *a)
>  {
>  	__be16 ss_family = htons(a->in_addr.ss_family);
>  	a->in_addr.ss_family = *(__u16 *)&ss_family;
> +
> +	/* Banner addresses require TYPE_NONE */
> +	a->type = CEPH_ENTITY_ADDR_TYPE_NONE;
>  }
>  static inline void ceph_decode_addr(struct ceph_entity_addr *a)
>  {
>  	__be16 ss_family = *(__be16 *)&a->in_addr.ss_family;
>  	a->in_addr.ss_family = ntohs(ss_family);
>  	WARN_ON(a->in_addr.ss_family == 512);
> +	a->type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
>  }
>  
>  extern int ceph_decode_entity_addr(void **p, void *end,
> diff --git a/net/ceph/decode.c b/net/ceph/decode.c
> index b82981199549..cbfc48614c87 100644
> --- a/net/ceph/decode.c
> +++ b/net/ceph/decode.c
> @@ -21,17 +21,6 @@ ceph_decode_entity_addr_versioned(void **p, void *end,
>  
>  	ceph_decode_copy_safe(p, end, &addr->type, sizeof(addr->type), bad);
>  
> -	/*
> -	 * TYPE_NONE == 0
> -	 * TYPE_LEGACY == 1
> -	 *
> -	 * Clients that don't support ADDR2 always send TYPE_NONE.
> -	 * For now, since all we support is msgr1, just set this to 0
> -	 * when we get a TYPE_LEGACY type.
> -	 */
> -	if (addr->type == cpu_to_le32(1))
> -		addr->type = 0;
> -
>  	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
>  
>  	ceph_decode_32_safe(p, end, addr_len, bad);
> @@ -61,7 +50,14 @@ ceph_decode_entity_addr_legacy(void **p, void *end,
>  
>  	/* Skip rest of type field */
>  	ceph_decode_skip_n(p, end, 3, bad);
> -	addr->type = 0;
> +
> +	/*
> +	 * Clients that don't support ADDR2 always send TYPE_NONE, change it
> +	 * to TYPE_LEGACY for forward compatibility.
> +	 */
> +	if (addr->type == CEPH_ENTITY_ADDR_TYPE_NONE)
> +		addr->type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
> +

Oops, the "if" above is not necessary. We want to unconditionally set
this to TYPE_LEGACY here. I've fixed it up in my tree, but I won't
repost unless I need to respin for some other reason.

>  	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
>  	memset(&addr->in_addr, 0, sizeof(addr->in_addr));
>  	ceph_decode_copy_safe(p, end, &addr->in_addr,
> diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
> index a25e71fa8124..57cb0554c9e2 100644
> --- a/net/ceph/messenger.c
> +++ b/net/ceph/messenger.c
> @@ -199,12 +199,14 @@ const char *ceph_pr_addr(const struct ceph_entity_addr *addr)
>  
>  	switch (ss.ss_family) {
>  	case AF_INET:
> -		snprintf(s, MAX_ADDR_STR_LEN, "%pI4:%hu", &in4->sin_addr,
> +		snprintf(s, MAX_ADDR_STR_LEN, "(%d)%pI4:%hu",
> +			 le32_to_cpu(addr->type), &in4->sin_addr,
>  			 ntohs(in4->sin_port));
>  		break;
>  
>  	case AF_INET6:
> -		snprintf(s, MAX_ADDR_STR_LEN, "[%pI6c]:%hu", &in6->sin6_addr,
> +		snprintf(s, MAX_ADDR_STR_LEN, "(%d)[%pI6c]:%hu",
> +			 le32_to_cpu(addr->type), &in6->sin6_addr,
>  			 ntohs(in6->sin6_port));
>  		break;
>  
> @@ -1982,6 +1984,7 @@ int ceph_parse_ips(const char *c, const char *end,
>  		}
>  
>  		addr_set_port(&addr[i], port);
> +		addr[i].type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
>  
>  		dout("parse_ips got %s\n", ceph_pr_addr(&addr[i]));
>

Patch
diff mbox series

diff --git a/include/linux/ceph/decode.h b/include/linux/ceph/decode.h
index 1c0a665bfc03..ce488d95be89 100644
--- a/include/linux/ceph/decode.h
+++ b/include/linux/ceph/decode.h
@@ -218,16 +218,23 @@  static inline void ceph_encode_timespec64(struct ceph_timespec *tv,
 /*
  * sockaddr_storage <-> ceph_sockaddr
  */
+#define CEPH_ENTITY_ADDR_TYPE_NONE	0
+#define CEPH_ENTITY_ADDR_TYPE_LEGACY	__cpu_to_le32(1)
+
 static inline void ceph_encode_addr(struct ceph_entity_addr *a)
 {
 	__be16 ss_family = htons(a->in_addr.ss_family);
 	a->in_addr.ss_family = *(__u16 *)&ss_family;
+
+	/* Banner addresses require TYPE_NONE */
+	a->type = CEPH_ENTITY_ADDR_TYPE_NONE;
 }
 static inline void ceph_decode_addr(struct ceph_entity_addr *a)
 {
 	__be16 ss_family = *(__be16 *)&a->in_addr.ss_family;
 	a->in_addr.ss_family = ntohs(ss_family);
 	WARN_ON(a->in_addr.ss_family == 512);
+	a->type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
 }
 
 extern int ceph_decode_entity_addr(void **p, void *end,
diff --git a/net/ceph/decode.c b/net/ceph/decode.c
index b82981199549..cbfc48614c87 100644
--- a/net/ceph/decode.c
+++ b/net/ceph/decode.c
@@ -21,17 +21,6 @@  ceph_decode_entity_addr_versioned(void **p, void *end,
 
 	ceph_decode_copy_safe(p, end, &addr->type, sizeof(addr->type), bad);
 
-	/*
-	 * TYPE_NONE == 0
-	 * TYPE_LEGACY == 1
-	 *
-	 * Clients that don't support ADDR2 always send TYPE_NONE.
-	 * For now, since all we support is msgr1, just set this to 0
-	 * when we get a TYPE_LEGACY type.
-	 */
-	if (addr->type == cpu_to_le32(1))
-		addr->type = 0;
-
 	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
 
 	ceph_decode_32_safe(p, end, addr_len, bad);
@@ -61,7 +50,14 @@  ceph_decode_entity_addr_legacy(void **p, void *end,
 
 	/* Skip rest of type field */
 	ceph_decode_skip_n(p, end, 3, bad);
-	addr->type = 0;
+
+	/*
+	 * Clients that don't support ADDR2 always send TYPE_NONE, change it
+	 * to TYPE_LEGACY for forward compatibility.
+	 */
+	if (addr->type == CEPH_ENTITY_ADDR_TYPE_NONE)
+		addr->type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
+
 	ceph_decode_copy_safe(p, end, &addr->nonce, sizeof(addr->nonce), bad);
 	memset(&addr->in_addr, 0, sizeof(addr->in_addr));
 	ceph_decode_copy_safe(p, end, &addr->in_addr,
diff --git a/net/ceph/messenger.c b/net/ceph/messenger.c
index a25e71fa8124..57cb0554c9e2 100644
--- a/net/ceph/messenger.c
+++ b/net/ceph/messenger.c
@@ -199,12 +199,14 @@  const char *ceph_pr_addr(const struct ceph_entity_addr *addr)
 
 	switch (ss.ss_family) {
 	case AF_INET:
-		snprintf(s, MAX_ADDR_STR_LEN, "%pI4:%hu", &in4->sin_addr,
+		snprintf(s, MAX_ADDR_STR_LEN, "(%d)%pI4:%hu",
+			 le32_to_cpu(addr->type), &in4->sin_addr,
 			 ntohs(in4->sin_port));
 		break;
 
 	case AF_INET6:
-		snprintf(s, MAX_ADDR_STR_LEN, "[%pI6c]:%hu", &in6->sin6_addr,
+		snprintf(s, MAX_ADDR_STR_LEN, "(%d)[%pI6c]:%hu",
+			 le32_to_cpu(addr->type), &in6->sin6_addr,
 			 ntohs(in6->sin6_port));
 		break;
 
@@ -1982,6 +1984,7 @@  int ceph_parse_ips(const char *c, const char *end,
 		}
 
 		addr_set_port(&addr[i], port);
+		addr[i].type = CEPH_ENTITY_ADDR_TYPE_LEGACY;
 
 		dout("parse_ips got %s\n", ceph_pr_addr(&addr[i]));