%{ #include #include #include static void hexdump(char *inbuf, const unsigned char *buf, unsigned short len ) { static char str[80]; char octet[10]; int ofs, i, l, cc=0; for (ofs = 0; ofs < len; ofs += 16) { sprintf( str, "%03d: ", ofs ); for (i = 0; i < 16; i++) { if ((i + ofs) < len) sprintf( octet, "%02x ", buf[ofs + i] ); else strcpy( octet, " " ); strcat( str, octet ); } strcat( str, " " ); l = strlen( str ); for (i = 0; (i < 16) && ((i + ofs) < len); i++) str[l++] = isprint( buf[ofs + i] ) ? buf[ofs + i] : '.'; str[l] = '\0'; sprintf(inbuf+cc, "%s\n", str ); cc = strlen(inbuf); } } %} function svc_creds:string(_rqstp:long) %{ struct svc_rqst *rqstp = (struct svc_rqst *)(long) kread(&(THIS->_rqstp)); struct kvec *rq_vec; char buf[MAXSTRINGLEN]; int cc=0; rq_vec = &rqstp->rq_arg.head[0]; sprintf(buf+cc, "cr_uid %d cr_gid %d", rqstp->rq_cred.cr_uid, rqstp->rq_cred.cr_gid); cc = strlen(buf); snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %} function svc_rqst:string(_rqstp:long) %{ struct svc_rqst *rqstp = (struct svc_rqst *)(long) kread(&(THIS->_rqstp)); struct kvec *iov; char buf[MAXSTRINGLEN]; int cc=0; __be32 flavor; iov = &rqstp->rq_arg.head[0]; memcpy(&flavor, iov->iov_base, sizeof(flavor)); sprintf(buf+cc, "iov_len %ld", iov->iov_len); cc = strlen(buf); /* hexdump(buf+cc, iov->iov_base+sizeof(__be32), 64); */ snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s", buf); CATCH_DEREF_FAULT(); %}