2 * Sun RPC is a product of Sun Microsystems, Inc. and is provided for
3 * unrestricted use provided that this legend is included on all tape
4 * media and as a part of the software program in whole or part. Users
5 * may copy or modify Sun RPC without charge, but are not authorized
6 * to license or distribute it to anyone else except as part of a product or
7 * program developed by the user.
9 * SUN RPC IS PROVIDED AS IS WITH NO WARRANTIES OF ANY KIND INCLUDING THE
10 * WARRANTIES OF DESIGN, MERCHANTIBILITY AND FITNESS FOR A PARTICULAR
11 * PURPOSE, OR ARISING FROM A COURSE OF DEALING, USAGE OR TRADE PRACTICE.
13 * Sun RPC is provided with no support and without any obligation on the
14 * part of Sun Microsystems, Inc. to assist in its use, correction,
15 * modification or enhancement.
17 * SUN MICROSYSTEMS, INC. SHALL HAVE NO LIABILITY WITH RESPECT TO THE
18 * INFRINGEMENT OF COPYRIGHTS, TRADE SECRETS OR ANY PATENTS BY SUN RPC
19 * OR ANY PART THEREOF.
21 * In no event will Sun Microsystems, Inc. be liable for any lost revenue
22 * or profits or other special, indirect and consequential damages, even if
23 * Sun has been advised of the possibility of such damages.
25 * Sun Microsystems, Inc.
27 * Mountain View, California 94043
29 * @(#)rpcb_stat.c 1.7 94/04/25 SMI
30 * $NetBSD: rpcb_stat.c,v 1.2 2000/07/04 20:27:40 matt Exp $
31 * $FreeBSD: src/usr.sbin/rpcbind/rpcb_stat.c,v 1.4 2003/10/29 09:29:23 mbr Exp $
36 * Allows for gathering of statistics
38 * Copyright (c) 1990 by Sun Microsystems, Inc.
42 #include <netconfig.h>
44 #include <rpc/rpcb_prot.h>
47 #include <rpc/pmap_prot.h>
53 static rpcb_stat_byvers inf
;
62 rpcbs_procinfo(rpcvers_t rtype
, rpcproc_t proc
)
66 case PMAPVERS
: /* version 2 */
67 if (proc
> rpcb_highproc_2
)
71 case RPCBVERS
: /* version 3 */
72 if (proc
> rpcb_highproc_3
)
75 case RPCBVERS4
: /* version 4 */
76 if (proc
> rpcb_highproc_4
)
81 inf
[rtype
].info
[proc
]++;
86 rpcbs_set(rpcvers_t rtype
, bool_t success
)
88 if ((rtype
>= RPCBVERS_STAT
) || (success
== FALSE
))
95 rpcbs_unset(rpcvers_t rtype
, bool_t success
)
97 if ((rtype
>= RPCBVERS_STAT
) || (success
== FALSE
))
99 inf
[rtype
].unsetinfo
++;
104 rpcbs_getaddr(rpcvers_t rtype
, rpcprog_t prog
, rpcvers_t vers
, char *netid
,
108 struct netconfig
*nconf
;
110 if (rtype
>= RPCBVERS_STAT
)
112 for (al
= inf
[rtype
].addrinfo
; al
; al
= al
->next
) {
114 if(al
->netid
== NULL
)
116 if ((al
->prog
== prog
) && (al
->vers
== vers
) &&
117 (strcmp(al
->netid
, netid
) == 0)) {
118 if ((uaddr
== NULL
) || (uaddr
[0] == 0))
125 nconf
= rpcbind_get_conf(netid
);
129 al
= (rpcbs_addrlist
*) malloc(sizeof (rpcbs_addrlist
));
135 al
->netid
= nconf
->nc_netid
;
136 if ((uaddr
== NULL
) || (uaddr
[0] == 0)) {
143 al
->next
= inf
[rtype
].addrinfo
;
144 inf
[rtype
].addrinfo
= al
;
148 rpcbs_rmtcall(rpcvers_t rtype
, rpcproc_t rpcbproc
, rpcprog_t prog
,
149 rpcvers_t vers
, rpcproc_t proc
, char *netid
, rpcblist_ptr rbl
)
151 rpcbs_rmtcalllist
*rl
;
152 struct netconfig
*nconf
;
154 if (rtype
> RPCBVERS_STAT
)
156 for (rl
= inf
[rtype
].rmtinfo
; rl
; rl
= rl
->next
) {
158 if(rl
->netid
== NULL
)
161 if ((rl
->prog
== prog
) && (rl
->vers
== vers
) &&
162 (rl
->proc
== proc
) &&
163 (strcmp(rl
->netid
, netid
) == 0)) {
165 (rbl
->rpcb_map
.r_vers
!= vers
))
169 if (rpcbproc
== RPCBPROC_INDIRECT
)
174 nconf
= rpcbind_get_conf(netid
);
178 rl
= (rpcbs_rmtcalllist
*) malloc(sizeof (rpcbs_rmtcalllist
));
185 rl
->netid
= nconf
->nc_netid
;
187 (rbl
->rpcb_map
.r_vers
!= vers
)) {
195 rl
->next
= inf
[rtype
].rmtinfo
;
196 inf
[rtype
].rmtinfo
= rl
;
201 rpcbproc_getstat(void *arg __unused
, struct svc_req
*req __unused
,
202 SVCXPRT
*xprt __unused
, rpcvers_t versnum __unused
)