diff options
Diffstat (limited to 'net/sunrpc')
-rw-r--r-- | net/sunrpc/rpcb_clnt.c | 49 |
1 files changed, 36 insertions, 13 deletions
diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c index cf2b91613ac6..b23a719aca30 100644 --- a/net/sunrpc/rpcb_clnt.c +++ b/net/sunrpc/rpcb_clnt.c | |||
@@ -32,6 +32,10 @@ | |||
32 | #define RPCBIND_PROGRAM (100000u) | 32 | #define RPCBIND_PROGRAM (100000u) |
33 | #define RPCBIND_PORT (111u) | 33 | #define RPCBIND_PORT (111u) |
34 | 34 | ||
35 | #define RPCBVERS_2 (2u) | ||
36 | #define RPCBVERS_3 (3u) | ||
37 | #define RPCBVERS_4 (4u) | ||
38 | |||
35 | enum { | 39 | enum { |
36 | RPCBPROC_NULL, | 40 | RPCBPROC_NULL, |
37 | RPCBPROC_SET, | 41 | RPCBPROC_SET, |
@@ -82,7 +86,7 @@ static struct rpc_procinfo rpcb_procedures2[]; | |||
82 | static struct rpc_procinfo rpcb_procedures3[]; | 86 | static struct rpc_procinfo rpcb_procedures3[]; |
83 | 87 | ||
84 | struct rpcb_info { | 88 | struct rpcb_info { |
85 | int rpc_vers; | 89 | u32 rpc_vers; |
86 | struct rpc_procinfo * rpc_proc; | 90 | struct rpc_procinfo * rpc_proc; |
87 | }; | 91 | }; |
88 | 92 | ||
@@ -177,7 +181,7 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned short port, int *okay) | |||
177 | prog, vers, prot, port); | 181 | prog, vers, prot, port); |
178 | 182 | ||
179 | rpcb_clnt = rpcb_create("localhost", (struct sockaddr *) &sin, | 183 | rpcb_clnt = rpcb_create("localhost", (struct sockaddr *) &sin, |
180 | sizeof(sin), XPRT_TRANSPORT_UDP, 2, 1); | 184 | sizeof(sin), XPRT_TRANSPORT_UDP, RPCBVERS_2, 1); |
181 | if (IS_ERR(rpcb_clnt)) | 185 | if (IS_ERR(rpcb_clnt)) |
182 | return PTR_ERR(rpcb_clnt); | 186 | return PTR_ERR(rpcb_clnt); |
183 | 187 | ||
@@ -227,7 +231,7 @@ int rpcb_getport_sync(struct sockaddr_in *sin, u32 prog, u32 vers, int prot) | |||
227 | __func__, NIPQUAD(sin->sin_addr.s_addr), prog, vers, prot); | 231 | __func__, NIPQUAD(sin->sin_addr.s_addr), prog, vers, prot); |
228 | 232 | ||
229 | rpcb_clnt = rpcb_create(NULL, (struct sockaddr *)sin, | 233 | rpcb_clnt = rpcb_create(NULL, (struct sockaddr *)sin, |
230 | sizeof(*sin), prot, 2, 0); | 234 | sizeof(*sin), prot, RPCBVERS_2, 0); |
231 | if (IS_ERR(rpcb_clnt)) | 235 | if (IS_ERR(rpcb_clnt)) |
232 | return PTR_ERR(rpcb_clnt); | 236 | return PTR_ERR(rpcb_clnt); |
233 | 237 | ||
@@ -588,35 +592,54 @@ static struct rpc_procinfo rpcb_procedures4[] = { | |||
588 | 592 | ||
589 | static struct rpcb_info rpcb_next_version[] = { | 593 | static struct rpcb_info rpcb_next_version[] = { |
590 | #ifdef CONFIG_SUNRPC_BIND34 | 594 | #ifdef CONFIG_SUNRPC_BIND34 |
591 | { 4, &rpcb_procedures4[RPCBPROC_GETVERSADDR] }, | 595 | { |
592 | { 3, &rpcb_procedures3[RPCBPROC_GETADDR] }, | 596 | .rpc_vers = RPCBVERS_4, |
597 | .rpc_proc = &rpcb_procedures4[RPCBPROC_GETVERSADDR], | ||
598 | }, | ||
599 | { | ||
600 | .rpc_vers = RPCBVERS_3, | ||
601 | .rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR], | ||
602 | }, | ||
593 | #endif | 603 | #endif |
594 | { 2, &rpcb_procedures2[RPCBPROC_GETPORT] }, | 604 | { |
595 | { 0, NULL }, | 605 | .rpc_vers = RPCBVERS_2, |
606 | .rpc_proc = &rpcb_procedures2[RPCBPROC_GETPORT], | ||
607 | }, | ||
608 | { | ||
609 | .rpc_proc = NULL, | ||
610 | }, | ||
596 | }; | 611 | }; |
597 | 612 | ||
598 | static struct rpcb_info rpcb_next_version6[] = { | 613 | static struct rpcb_info rpcb_next_version6[] = { |
599 | #ifdef CONFIG_SUNRPC_BIND34 | 614 | #ifdef CONFIG_SUNRPC_BIND34 |
600 | { 4, &rpcb_procedures4[RPCBPROC_GETVERSADDR] }, | 615 | { |
601 | { 3, &rpcb_procedures3[RPCBPROC_GETADDR] }, | 616 | .rpc_vers = RPCBVERS_4, |
617 | .rpc_proc = &rpcb_procedures4[RPCBPROC_GETVERSADDR], | ||
618 | }, | ||
619 | { | ||
620 | .rpc_vers = RPCBVERS_3, | ||
621 | .rpc_proc = &rpcb_procedures3[RPCBPROC_GETADDR], | ||
622 | }, | ||
602 | #endif | 623 | #endif |
603 | { 0, NULL }, | 624 | { |
625 | .rpc_proc = NULL, | ||
626 | }, | ||
604 | }; | 627 | }; |
605 | 628 | ||
606 | static struct rpc_version rpcb_version2 = { | 629 | static struct rpc_version rpcb_version2 = { |
607 | .number = 2, | 630 | .number = RPCBVERS_2, |
608 | .nrprocs = RPCB_HIGHPROC_2, | 631 | .nrprocs = RPCB_HIGHPROC_2, |
609 | .procs = rpcb_procedures2 | 632 | .procs = rpcb_procedures2 |
610 | }; | 633 | }; |
611 | 634 | ||
612 | static struct rpc_version rpcb_version3 = { | 635 | static struct rpc_version rpcb_version3 = { |
613 | .number = 3, | 636 | .number = RPCBVERS_3, |
614 | .nrprocs = RPCB_HIGHPROC_3, | 637 | .nrprocs = RPCB_HIGHPROC_3, |
615 | .procs = rpcb_procedures3 | 638 | .procs = rpcb_procedures3 |
616 | }; | 639 | }; |
617 | 640 | ||
618 | static struct rpc_version rpcb_version4 = { | 641 | static struct rpc_version rpcb_version4 = { |
619 | .number = 4, | 642 | .number = RPCBVERS_4, |
620 | .nrprocs = RPCB_HIGHPROC_4, | 643 | .nrprocs = RPCB_HIGHPROC_4, |
621 | .procs = rpcb_procedures4 | 644 | .procs = rpcb_procedures4 |
622 | }; | 645 | }; |