Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

SUNRPC: Move universal address definitions to global header

Universal addresses are defined in RFC 1833 and clarified in RFC 3530. We
need to use them in several places in the NFS and RPC clients, so move the
relevant definition and block comment to an appropriate global include
file.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Trond Myklebust <Trond.Myklebust@netapp.com>

authored by

Chuck Lever and committed by
Trond Myklebust
0fb2b7e9 0a48f5d7

+42 -42
+39
include/linux/sunrpc/msg_prot.h
··· 152 152 */ 153 153 #define RPCBIND_MAXNETIDLEN (4u) 154 154 155 + /* 156 + * Universal addresses are introduced in RFC 1833 and further spelled 157 + * out in RFC 3530. RPCBIND_MAXUADDRLEN defines a maximum byte length 158 + * of a universal address for use in allocating buffers and character 159 + * arrays. 160 + * 161 + * Quoting RFC 3530, section 2.2: 162 + * 163 + * For TCP over IPv4 and for UDP over IPv4, the format of r_addr is the 164 + * US-ASCII string: 165 + * 166 + * h1.h2.h3.h4.p1.p2 167 + * 168 + * The prefix, "h1.h2.h3.h4", is the standard textual form for 169 + * representing an IPv4 address, which is always four octets long. 170 + * Assuming big-endian ordering, h1, h2, h3, and h4, are respectively, 171 + * the first through fourth octets each converted to ASCII-decimal. 172 + * Assuming big-endian ordering, p1 and p2 are, respectively, the first 173 + * and second octets each converted to ASCII-decimal. For example, if a 174 + * host, in big-endian order, has an address of 0x0A010307 and there is 175 + * a service listening on, in big endian order, port 0x020F (decimal 176 + * 527), then the complete universal address is "10.1.3.7.2.15". 177 + * 178 + * ... 179 + * 180 + * For TCP over IPv6 and for UDP over IPv6, the format of r_addr is the 181 + * US-ASCII string: 182 + * 183 + * x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 184 + * 185 + * The suffix "p1.p2" is the service port, and is computed the same way 186 + * as with universal addresses for TCP and UDP over IPv4. The prefix, 187 + * "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form for 188 + * representing an IPv6 address as defined in Section 2.2 of [RFC2373]. 189 + * Additionally, the two alternative forms specified in Section 2.2 of 190 + * [RFC2373] are also acceptable. 191 + */ 192 + #define RPCBIND_MAXUADDRLEN (56u) 193 + 155 194 #endif /* __KERNEL__ */ 156 195 #endif /* _LINUX_SUNRPC_MSGPROT_H_ */
+3 -42
net/sunrpc/rpcb_clnt.c
··· 55 55 #define RPCB_HIGHPROC_4 RPCBPROC_GETSTAT 56 56 57 57 /* 58 - * r_addr 59 - * 60 - * Quoting RFC 3530, section 2.2: 61 - * 62 - * For TCP over IPv4 and for UDP over IPv4, the format of r_addr is the 63 - * US-ASCII string: 64 - * 65 - * h1.h2.h3.h4.p1.p2 66 - * 67 - * The prefix, "h1.h2.h3.h4", is the standard textual form for 68 - * representing an IPv4 address, which is always four octets long. 69 - * Assuming big-endian ordering, h1, h2, h3, and h4, are respectively, 70 - * the first through fourth octets each converted to ASCII-decimal. 71 - * Assuming big-endian ordering, p1 and p2 are, respectively, the first 72 - * and second octets each converted to ASCII-decimal. For example, if a 73 - * host, in big-endian order, has an address of 0x0A010307 and there is 74 - * a service listening on, in big endian order, port 0x020F (decimal 75 - * 527), then the complete universal address is "10.1.3.7.2.15". 76 - * 77 - * ... 78 - * 79 - * For TCP over IPv6 and for UDP over IPv6, the format of r_addr is the 80 - * US-ASCII string: 81 - * 82 - * x1:x2:x3:x4:x5:x6:x7:x8.p1.p2 83 - * 84 - * The suffix "p1.p2" is the service port, and is computed the same way 85 - * as with universal addresses for TCP and UDP over IPv4. The prefix, 86 - * "x1:x2:x3:x4:x5:x6:x7:x8", is the standard textual form for 87 - * representing an IPv6 address as defined in Section 2.2 of [RFC2373]. 88 - * Additionally, the two alternative forms specified in Section 2.2 of 89 - * [RFC2373] are also acceptable. 90 - * 91 - * XXX: Currently this implementation does not explicitly convert the 92 - * stored address to US-ASCII on non-ASCII systems. 93 - */ 94 - #define RPCB_MAXADDRLEN (128u) 95 - 96 - /* 97 58 * r_owner 98 59 * 99 60 * The "owner" is allowed to unset a service in the rpcbind database. ··· 74 113 u32 r_prot; 75 114 unsigned short r_port; 76 115 char * r_netid; 77 - char r_addr[RPCB_MAXADDRLEN]; 116 + char r_addr[RPCBIND_MAXUADDRLEN]; 78 117 char * r_owner; 79 118 }; 80 119 ··· 487 526 * Simple sanity check. The smallest possible universal 488 527 * address is an IPv4 address string containing 11 bytes. 489 528 */ 490 - if (addr_len < 11 || addr_len > RPCB_MAXADDRLEN) 529 + if (addr_len < 11 || addr_len > RPCBIND_MAXUADDRLEN) 491 530 goto out_err; 492 531 493 532 /* ··· 538 577 #define RPCB_boolean_sz (1u) 539 578 540 579 #define RPCB_netid_sz (1+XDR_QUADLEN(RPCBIND_MAXNETIDLEN)) 541 - #define RPCB_addr_sz (1+XDR_QUADLEN(RPCB_MAXADDRLEN)) 580 + #define RPCB_addr_sz (1+XDR_QUADLEN(RPCBIND_MAXUADDRLEN)) 542 581 #define RPCB_ownerstring_sz (1+XDR_QUADLEN(RPCB_MAXOWNERLEN)) 543 582 544 583 #define RPCB_mappingargs_sz RPCB_program_sz+RPCB_version_sz+ \