%{ #include #include #include #include #include #include #include #include #include #if LINUX_VERSION_CODE <= KERNEL_VERSION(2,6,33) #include #include #endif %} function nfs4ops:string(_compars:long) %{ struct nfsd4_compoundargs *args = (struct nfsd4_compoundargs *) (long)kread(&(THIS->_compars)); /* struct nfsd4_op *op = (struct nfsd4_op *) (long)kread(&(args->ops)); */ struct nfsd4_op *op = args->iops; char buf[MAXSTRINGLEN]; int cc=0, i; static struct { int optnum; char *optstr; } nfs4_opttab[] = { {0, "NULL"}, {1, "COMPOUND"}, {2, "SLOT2"}, {OP_ACCESS, "ACCESS"}, {OP_CLOSE, "CLOSE"}, {OP_COMMIT, "COMMIT"}, {OP_CREATE, "CREATE"}, {OP_DELEGPURGE, "DELEGPURGE"}, {OP_DELEGRETURN, "DELEGRETURN"}, {OP_GETATTR, "GETATTR"}, {OP_GETFH, "GETFH"}, {OP_LINK, "LINK"}, {OP_LOCK, "LOCK"}, {OP_LOCKT, "LOCKT"}, {OP_LOCKU, "LOCKU"}, {OP_LOOKUP, "LOOKUP"}, {OP_LOOKUPP, "LOOKUPP"}, {OP_NVERIFY, "NVERIFY"}, {OP_OPEN, "OPEN"}, {OP_OPENATTR, "OPENATTR"}, {OP_OPEN_CONFIRM, "OPEN_CONFIRM"}, {OP_OPEN_DOWNGRADE, "OPEN_DOWNGRADE"}, {OP_PUTFH, "PUTFH"}, {OP_PUTPUBFH, "PUTPUBFH"}, {OP_PUTROOTFH, "PUTROOTFH"}, {OP_READ, "READ"}, {OP_READDIR, "READDIR"}, {OP_READLINK, "READLINK"}, {OP_REMOVE, "REMOVE"}, {OP_RENAME, "RENAME"}, {OP_RENEW, "RENEW"}, {OP_RESTOREFH, "RESTOREFH"}, {OP_SAVEFH, "SAVEFH"}, {OP_SECINFO, "SECINFO"}, {OP_SETATTR, "SETATTR"}, {OP_SETCLIENTID, "SETCLIENTID"}, {OP_SETCLIENTID_CONFIRM, "SETCLIENTID_CONFIRM"}, {OP_VERIFY, "VERIFY"}, {OP_WRITE, "WRITE"}, {OP_RELEASE_LOCKOWNER, "RELEASE_LOCKOWNER"}, {OP_ILLEGAL, "ILLEGAL"}, }; for (i=0; i < args->opcnt; i++) { op = &args->ops[i]; sprintf(buf+cc, "%s(%d) ", nfs4_opttab[op->opnum].optstr, op->opnum); cc = strlen(buf); } snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %}