Purpose
This subcommand is an aggregate
operation that sets the current value of the auditfid. The aggregate
whose auditfid is to be changed must be attached.
Format
syscall_parmlist
opcode 149 AGOP_SETAUDITFID_PARMDATA
parms[0] offset to AGGR_ID
parms[1] 0=set new auditfid if current auditfid is 0
1=set new auditfid regardless of current value (force)
2=set new auditfid to 0 (old)
parms[2] 0
parms[3] 0
parms[4] 0
parms[5] 0
parms[6] 0
AGGR_ID
aid_eye char[4] "AGID"
aid_len char sizeof(AGGR_ID)
aid_ver char 1
aid_name char[45] "OMVS.PRV.AGGR001.LDS0001"
aid_reserved char[33] 0
Return_value 0 if request is successful, -1 if it is not successful
Return_code
EBUSY auditfid could not be set
EINTR ZFS is shutting down
EMVSERR Internal error using an osi service
ENOENT Aggregate is not attached
EPERM Permission denied to perform request
Reason_code
0xEFnnxxxx See z/OS Distributed File Service Messages and Codes
Usage notes
- Reserved fields and undefined flags must be set to binary zeros.
Privilege required
The issuer must be UID=0
or have READ authority to the SUPERUSER.FILESYS.PFSCTL resource in
the z/OS® UNIXPRIV class.
Related services
- List Aggregate Status (Version 2)
Restrictions
The aggregate cannot be attached
as read-only. The aggregate cannot be quiesced. The aggregate cannot
be in the process of being moved by zFS.
Examples
#pragma linkage(BPX1PCT, OS)
extern void BPX1PCT(char *, int, int, char *, int *, int *, int *);
#include <stdio.h>
#define ZFSCALL_AGGR 0x40000005
#define AGOP_SETAUDITFID_PARMDATA 149 /* Set or reset auditfid */
typedef struct syscall_parmlist_t {
int opcode; /* Operation code to perform */
int parms[7]; /* Specific to type of operation, */
/* provides access to the parms */
/* parms[4]-parms[6] are currently unused*/
} syscall_parmlist;
#define ZFS_MAX_AGGRNAME 44
typedef struct aggr_id_t {
char aid_eye[4]; /* Eye catcher */
#define AID_EYE "AGID"
char aid_len; /* Length of this structure */
char aid_ver; /* Version */
#define AID_VER_INITIAL 1 /* Initial version */
char aid_name[ZFS_MAX_AGGRNAME+1]; /* Name, null terminated */
char aid_reserved[33]; /* Reserved for the future */
} AGGR_ID;
struct parmstruct
{
syscall_parmlist myparms;
AGGR_ID aggr_id;
} ;
int main(int argc, char **argv)
{
int bpxrv;
int bpxrc;
int bpxrs;
char aggrname[45] = "OMVS.PRV.AGGR001.LDS0001"; /* aggregate name to set auditfid */
struct parmstruct myparmstruct;
AGGR_ID *idp = &(myparmstruct.aggr_id);
myparmstruct.myparms.opcode = AGOP_SETAUDITFID_PARMDATA;
myparmstruct.myparms.parms[0] = sizeof(syscall_parmlist);
myparmstruct.myparms.parms[1] = 0; /* 0=set new auditfid if current auditfid is 0 */
/* 1=set new auditfid regardless of current value (force) */
/* 2=set new auditfid to 0 (pre-z/OS V1R9) */
myparmstruct.myparms.parms[2] = 0;
myparmstruct.myparms.parms[3] = 0;
myparmstruct.myparms.parms[4] = 0;
myparmstruct.myparms.parms[5] = 0;
myparmstruct.myparms.parms[6] = 0;
memset(&myparmstruct.aggr_id,0,sizeof(AGGR_ID)); /* Ensure reserved fields are 0 */
memcpy(&myparmstruct.aggr_id,AID_EYE,4);
myparmstruct.aggr_id.aid_len = sizeof(AGGR_ID);
myparmstruct.aggr_id.aid_ver = AID_VER_INITIAL;
strcpy(myparmstruct.aggr_id.aid_name,aggrname);
BPX1PCT("ZFS ",
ZFSCALL_AGGR, /* Aggregate operation */
sizeof(myparmstruct), /* Length of Argument */
(char *) &myparmstruct, /* Pointer to Argument */
&bpxrv, /* Pointer to Return_value */
&bpxrc, /* Pointer to Return_code */
&bpxrs); /* Pointer to Reason_code */
if (bpxrv < 0)
{
printf("Error setting auditfid for aggregate %s\n", aggrname);
printf("BPXRV = %d BPXRC = %d BPXRS = %x\n",bpxrv,bpxrc,bpxrs);
return bpxrc;
}
else /* Return from set auditfid was successful */
{
printf("Aggregate %s set auditfid successfully\n",aggrname);
}
return 0;
}