* $Id: amq_subr.c,v 5.2 90/06/23 22:19:20 jsp Rel $
* Copyright (c) 1990 Jan-Simon Pendry
* Copyright (c) 1990 Imperial College of Science, Technology & Medicine
* Copyright (c) 1990 The Regents of the University of California.
* This code is derived from software contributed to Berkeley by
* Jan-Simon Pendry at Imperial College, London.
* %sccs.include.redist.c%
* @(#)amq_subr.c 5.1 (Berkeley) %G%
* Auxilliary routines for amq tool
amqproc_null_1(argp
, rqstp
)
* Return a sub-tree of mounts
amqproc_mnttree_1(argp
, rqstp
)
mp
= find_ap(*(char **) argp
);
return (amq_mount_tree_p
*) &mp
;
amqproc_umnt_1(argp
, rqstp
)
am_node
*mp
= find_ap(*(char **) argp
);
* Return global statistics
amqproc_stats_1(argp
, rqstp
)
return (amq_mount_stats
*) &amd_stats
;
* Return the entire tree of mount nodes
amqproc_export_1(argp
, rqstp
)
static amq_mount_tree_list aml
;
mvec
= (struct am_node
**)
xrealloc(mvec
, (1+last_used_map
) * sizeof(am_node
*));
for (i
= last_used_map
; i
>= 0; --i
) {
am_node
*mp
= exported_ap
[i
];
if (mp
&& (mp
->am_flags
& AMF_ROOT
))
aml
.amq_mount_tree_list_val
= (amq_mount_tree_p
*) mvec
;
aml
.amq_mount_tree_list_len
= n
;
aml
.amq_mount_tree_list_val
= (amq_mount_tree_p
*) &exported_ap
[0];
aml
.amq_mount_tree_list_len
= 1; /* XXX */
amqproc_setopt_1(argp
, rqstp
)
amq_setopt
*opt
= (amq_setopt
*) argp
;
if (debug_option(opt
->as_str
))
if (switch_to_logfile(opt
->as_str
))
if (switch_option(opt
->as_str
))
plog(XLOG_INFO
, "amq says flush cache");
amqproc_getmntfs_1(argp
, rqstp
)
return (amq_mount_info_list
*) &mfhead
; /* XXX */
xdr_amq_string(xdrs
, objp
)
if (!xdr_string(xdrs
, objp
, AMQ_STRLEN
)) {
xdr_amq_setopt(xdrs
, objp
)
if (!xdr_enum(xdrs
, (enum_t
*)&objp
->as_opt
)) {
if (!xdr_string(xdrs
, &objp
->as_str
, AMQ_STRLEN
)) {
* More XDR routines - Should be used for OUTPUT ONLY.
xdr_amq_mount_tree(xdrs
, objp
)
am_node
*mp
= (am_node
*) objp
;
if (!xdr_amq_string(xdrs
, &mp
->am_mnt
->mf_info
)) {
if (!xdr_amq_string(xdrs
, &mp
->am_path
)) {
if (!xdr_amq_string(xdrs
, mp
->am_link
? &mp
->am_link
: &mp
->am_mnt
->mf_mount
)) {
if (!xdr_amq_string(xdrs
, &mp
->am_mnt
->mf_ops
->fs_type
)) {
if (!xdr_long(xdrs
, &mp
->am_stats
.s_mtime
)) {
if (!xdr_u_short(xdrs
, &mp
->am_stats
.s_uid
)) {
if (!xdr_int(xdrs
, &mp
->am_stats
.s_getattr
)) {
if (!xdr_int(xdrs
, &mp
->am_stats
.s_lookup
)) {
if (!xdr_int(xdrs
, &mp
->am_stats
.s_readdir
)) {
if (!xdr_int(xdrs
, &mp
->am_stats
.s_readlink
)) {
if (!xdr_int(xdrs
, &mp
->am_stats
.s_statfs
)) {
if (!xdr_pointer(xdrs
, (char **)&mp
->am_osib
, sizeof(amq_mount_tree
), xdr_amq_mount_tree
)) {
if (!xdr_pointer(xdrs
, (char **)&mp
->am_child
, sizeof(amq_mount_tree
), xdr_amq_mount_tree
)) {
xdr_amq_mount_tree_p(xdrs
, objp
)
if (!xdr_pointer(xdrs
, (char **)objp
, sizeof(amq_mount_tree
), xdr_amq_mount_tree
)) {
xdr_amq_mount_stats(xdrs
, objp
)
if (!xdr_int(xdrs
, &objp
->as_drops
)) {
if (!xdr_int(xdrs
, &objp
->as_stale
)) {
if (!xdr_int(xdrs
, &objp
->as_mok
)) {
if (!xdr_int(xdrs
, &objp
->as_merr
)) {
if (!xdr_int(xdrs
, &objp
->as_uerr
)) {
xdr_amq_mount_tree_list(xdrs
, objp
)
amq_mount_tree_list
*objp
;
if (!xdr_array(xdrs
, (char **)&objp
->amq_mount_tree_list_val
, (u_int
*)&objp
->amq_mount_tree_list_len
, ~0, sizeof(amq_mount_tree_p
), xdr_amq_mount_tree_p
)) {
xdr_amq_mount_info_qelem(xdrs
, qhead
)
for (mf
= LAST(mntfs
, qhead
); mf
!= HEAD(mntfs
, qhead
); mf
= PREV(mntfs
, mf
)) {
if (!(mf
->mf_ops
->fs_flags
& FS_AMQINFO
))
* Send individual data items
for (mf
= LAST(mntfs
, qhead
); mf
!= HEAD(mntfs
, qhead
); mf
= PREV(mntfs
, mf
)) {
if (!(mf
->mf_ops
->fs_flags
& FS_AMQINFO
))
if (!xdr_amq_string(xdrs
, &mf
->mf_ops
->fs_type
)) {
if (!xdr_amq_string(xdrs
, &mf
->mf_mount
)) {
if (!xdr_amq_string(xdrs
, &mf
->mf_info
)) {
if (!xdr_amq_string(xdrs
, &mf
->mf_server
->fs_host
)) {
if (!xdr_int(xdrs
, &mf
->mf_error
)) {
if (!xdr_int(xdrs
, &mf
->mf_refc
)) {
if (mf
->mf_server
->fs_flags
& FSF_ERROR
)
else switch (mf
->mf_server
->fs_flags
& (FSF_DOWN
|FSF_VALID
)) {
case FSF_DOWN
|FSF_VALID
: up
= 0; break;
case FSF_VALID
: up
= 1; break;
if (!xdr_int(xdrs
, &up
)) {