|
Server : Apache/2.2.2 (Fedora) System : Linux App1.pathumtani.go.th 2.6.20-1.2320.fc5smp #1 SMP Tue Jun 12 19:40:16 EDT 2007 i686 User : apache ( 48) PHP Version : 5.2.9 Disable Function : NONE Directory : /usr/share/systemtap/tapset/ |
Upload File : |
#
# Given a userspace pointer to a timeval,
# copy and decode it and return a string.
#
function _struct_timeval_u:string(uaddr:long)
%{ /* pure */
struct timeval tv;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct timeval)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", tv.tv_sec, tv.tv_usec);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _struct_compat_timeval_u:string(uaddr:long)
%{ /* pure */
struct compat_timeval tv;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char*)&tv,ptr,sizeof(struct compat_timeval)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", (long)tv.tv_sec, (long)tv.tv_usec);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _struct_timeval:string(addr:long)
%{ /* pure */
struct timeval *tv;
char *ptr = (char *)(unsigned long)THIS->addr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
tv=(struct timeval *) ptr;
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%06ld]", tv->tv_sec, tv->tv_usec);
}
%}
function _struct_timezone_u:string(uaddr:long)
%{ /* pure */
struct timezone tz;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char*)&tz,ptr,sizeof(struct timezone)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d, %d]", tz.tz_minuteswest, tz.tz_dsttime);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
%{
static const int days_in_month[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
static void _stp_ctime(time_t t, char *buf, int buflen)
{
int mon=1, day, hour, min, sec, num, d, year = 1970;
sec = t % 60;
min = t/60 % 60;
hour = t/(60*60) % 24;
day = t/(24*60*60);
while(1) {
d = (!(year % 4) && ((year % 100) || !(year % 400))) ? 366 : 365;
if (day >= d)
day -= d;
else
break;
year++;
}
while (mon < 12) {
num = days_in_month[mon-1];
if (mon == 2 && d == 366)
num++;
if (day >= num)
day -= num;
else
break;
mon++;
}
snprintf(buf, buflen, "%4d/%02d/%02d-%02d:%02d:%02d", year, mon, day+1, hour, min, sec);
buf[buflen-1] = 0;
}
%}
function _struct_utimbuf_u:string(uaddr:long)
%{ /* pure */
#include <linux/utime.h>
struct utimbuf ubuf;
static char abuf[24], mbuf[24];
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) {
_stp_ctime(ubuf.actime, abuf, 24);
_stp_ctime(ubuf.modtime, mbuf, 24);
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf);
} else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _struct_compat_utimbuf_u:string(uaddr:long)
%{ /* pure */
#include <linux/utime.h>
struct compat_utimbuf ubuf;
static char abuf[24], mbuf[24];
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char*)&ubuf,ptr,sizeof(ubuf)) == 0) {
_stp_ctime(ubuf.actime, abuf, 24);
_stp_ctime(ubuf.modtime, mbuf, 24);
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%s, %s", abuf, mbuf);
} else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _struct_timespec_u:string(uaddr:long)
%{ /* pure */
struct timespec ts;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&ts,ptr,sizeof(struct timespec))) {
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
} else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]",
(unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec);
}
%}
function _struct_compat_timespec_u:string(uaddr:long)
%{ /* pure */
struct compat_timespec ts;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&ts,ptr,sizeof(struct compat_timespec))) {
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
} else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]",
(unsigned long)ts.tv_sec, (unsigned long)ts.tv_nsec);
}
%}
function _struct_timespec:string(addr:long)
%{ /* pure */
struct timespec *ts;
char *ptr = (char *)(unsigned long)THIS->addr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
ts = (struct timespec *) ptr;
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld.%09ld]",
(unsigned long)ts->tv_sec, (unsigned long)ts->tv_nsec);
}
%}
function _struct_itimerspec_u:string(uaddr:long)
%{ /* pure */
struct itimerspec its;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&its, ptr,sizeof(struct itimerspec)))
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
(int)its.it_interval.tv_sec, (int)its.it_interval.tv_nsec,
(int)its.it_value.tv_sec, (int)its.it_value.tv_nsec);
}
%}
function _struct_itimerval_u:string(uaddr:long)
%{ /* pure */
struct itimerval itv;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&itv,ptr,sizeof(struct itimerval)))
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
(int)itv.it_interval.tv_sec, (int)itv.it_interval.tv_usec,
(int)itv.it_value.tv_sec, (int)itv.it_value.tv_usec);
}
%}
function _struct_compat_itimerval_u:string(uaddr:long)
%{ /* pure */
struct compat_itimerval itv;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if(_stp_copy_from_user((char *)&itv,ptr,sizeof(struct compat_itimerval)))
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
(int)itv.it_interval.tv_sec, (int)itv.it_interval.tv_usec,
(int)itv.it_value.tv_sec, (int)itv.it_value.tv_usec);
}
%}
function _struct_itimerval:string(addr:long)
%{ /* pure */
struct itimerval *itv;
char *ptr = (char *)(unsigned long)THIS->addr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
itv = (struct itimerval *) ptr;
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d.%06d,%d.%06d]",
(int)itv->it_interval.tv_sec, (int)itv->it_interval.tv_usec,
(int)itv->it_value.tv_sec, (int)itv->it_value.tv_usec);
}
%}
%{
#include <linux/version.h>
#include <net/sock.h>
#include <net/tcp.h>
#include <linux/socket.h>
#include <linux/un.h>
#if LINUX_VERSION_CODE < KERNEL_VERSION(2,6,11)
#define LPORT (inet->inet.num)
#define DADDR (&inet->inet.daddr)
#else
#define LPORT (inet->num)
#define DADDR (&inet->daddr)
#endif
//FIXME. Not done yet.
void _stp_sockaddr_str(char *str, const int strlen, char *buf, int len)
{
struct sockaddr *sa = (struct sockaddr *)buf;
switch (sa->sa_family) {
case AF_INET:
{
struct sockaddr_in *sin = (struct sockaddr_in *)buf;
const unsigned char *addr = (unsigned char *)&sin->sin_addr;
snprintf(str, strlen, "{AF_INET, %d.%d.%d.%d, %d}",
addr[0], addr[1], addr[2], addr[3], ntohs(sin->sin_port));
break;
}
case AF_UNIX:
{
struct sockaddr_un *sun = (struct sockaddr_un *)buf;
snprintf(str, strlen, "{AF_UNIX, %s}", sun->sun_path);
break;
}
case AF_NETLINK:
{
struct sockaddr_nl *nl = (struct sockaddr_nl *)buf;
snprintf(str, strlen, "{AF_NETLINK, pid=%d, groups=%08x}", nl->nl_pid, nl->nl_groups);
break;
}
case AF_INET6:
{
// FIXME. Address is probably not correctly displayed
struct sockaddr_in6 *sin = (struct sockaddr_in6 *)buf;
snprintf(str, strlen, "{AF_INET6, %016llx, %d}",
*(long long *)&sin->sin6_addr, ntohs(sin->sin6_port));
break;
}
case AF_PACKET:
{
/* FIXME. This needs tested */
struct sockaddr_ll *sll = (struct sockaddr_ll *)buf;
#if defined(__powerpc__) || defined(__ia64__)
snprintf(str, strlen, "{AF_PACKET, proto=%d, ind=%d, hatype=%d, pkttype=%d, halen=%d, addr=0x%lx}",
(int)sll->sll_protocol, sll->sll_ifindex, (int)sll->sll_hatype, (int)sll->sll_pkttype,
(int)sll->sll_halen, *(uint64_t *)sll->sll_addr);
#else
snprintf(str, strlen, "{AF_PACKET, proto=%d, ind=%d, hatype=%d, pkttype=%d, halen=%d, addr=0x%llx}",
(int)sll->sll_protocol, sll->sll_ifindex, (int)sll->sll_hatype, (int)sll->sll_pkttype,
(int)sll->sll_halen, *(uint64_t *)sll->sll_addr);
#endif
break;
}
default:
snprintf(str, strlen, "{unknown address family %d}", sa->sa_family);
}
}
%}
function _struct_sockaddr_u:string(uaddr:long, len:long)
%{ /* pure */
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
char buf[128];
size_t len = THIS->len < 128 ? THIS->len : 128;
if(_stp_copy_from_user(buf, ptr, len))
strlcpy (THIS->__retvalue, "[...]", MAXSTRINGLEN);
else
_stp_sockaddr_str(THIS->__retvalue, MAXSTRINGLEN, buf, len);
}
%}
function _signal_name:string(sig:long)
%{ /* pure */
int sig = THIS->sig;
char *res = 0;
switch(sig) {
case 0:
res = "NO_SIGNAL";
break;
case SIGHUP:
res = "SIGHUP";
break;
case SIGINT:
res = "SIGINT";
break;
case SIGQUIT:
res = "SIGQUIT";
break;
case SIGILL:
res = "SIGILL";
break;
case SIGTRAP:
res = "SIGTRAP";
break;
case SIGABRT:
res = "SIGABRT";
break;
case SIGBUS:
res = "SIGBUS";
break;
case SIGFPE:
res = "SIGFPE";
break;
case SIGKILL:
res = "SIGKILL";
break;
case SIGUSR1:
res = "SIGUSR1";
break;
case SIGSEGV:
res = "SIGSEGV";
break;
case SIGPIPE:
res = "SIGPIPE";
break;
case SIGUSR2:
res = "SIGUSR2";
break;
case SIGALRM:
res = "SIGALRM";
break;
case SIGTERM:
res = "SIGTERM";
break;
case SIGCHLD:
res = "SIGCHLD";
break;
case SIGCONT:
res = "SIGCONT";
break;
case SIGSTOP:
res = "SIGSTOP";
break;
case SIGTSTP:
res = "SIGTSTP";
break;
case SIGTTIN:
res = "SIGTTIN";
break;
case SIGTTOU:
res = "SIGTTOU";
break;
case SIGURG:
res = "SIGURG";
break;
case SIGPROF:
res = "SIGPROF";
break;
case SIGWINCH:
res = "SIGWINCH";
break;
case SIGVTALRM:
res = "SIGVTALRM";
break;
case SIGIO:
res = "SIGIO/SIGPOLL";
break;
case SIGPWR:
res = "SIGPWR";
break;
}
if (res)
strlcpy (THIS->__retvalue, res, MAXSTRINGLEN);
else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%d", sig);
%}
function _struct_rlimit_u:string(uaddr:long)
%{ /* pure */
struct rlimit rl;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if (_stp_copy_from_user((char *)&rl, ptr, sizeof(struct rlimit)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%ld,%ld]",
rl.rlim_cur, rl.rlim_max);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _fildes_u:string (uaddr:long)
%{ /* pure */
int fd[2];
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if (_stp_copy_from_user((char *)&fd, ptr, 2*sizeof(int)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[%d, %d]", fd[0], fd[1]);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _fd_set_u:string(uaddr:long)
%{ /* pure */
fd_set fdset;
char *ptr = (char *)(unsigned long)THIS->uaddr;
if (ptr == NULL)
strlcpy (THIS->__retvalue, "NULL", MAXSTRINGLEN);
else {
if (_stp_copy_from_user((char *)&fdset, ptr, sizeof(fd_set)) == 0)
snprintf(THIS->__retvalue, MAXSTRINGLEN, "[0x%lx, 0x%lx, ...]", (long) fdset.fds_bits[0], fdset.fds_bits[1]);
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
%}
function _semctl_cmd:string(cmd:long)
%{ /* pure */
int cmd = THIS->cmd;
char *res = 0;
switch(cmd) {
case IPC_INFO:
res = "IPC_INFO";
break;
case SEM_INFO:
res = "SEM_INFO";
break;
case SEM_STAT:
res = "SEM_STAT";
break;
case GETALL:
res = "GETALL";
break;
case GETVAL:
res = "GETVAL";
break;
case GETPID:
res = "GETPID";
break;
case GETNCNT:
res = "GETNCNT";
break;
case GETZCNT:
res = "GETZCNT";
break;
case IPC_STAT:
res = "IPC_STAT";
break;
case SETVAL:
res = "SETVAL";
break;
case SETALL:
res = "SETALL";
break;
case IPC_RMID:
res = "IPC_RMID";
break;
case IPC_SET:
res = "IPC_SET";
break;
}
if (res)
strlcpy (THIS->__retvalue, res, MAXSTRINGLEN);
else
snprintf(THIS->__retvalue, MAXSTRINGLEN, "%d", cmd);
%}
function __sem_flags:string(semflg:long)
%{ /* pure */
long semflg = THIS->semflg;
char *str = THIS->__retvalue;
if (semflg & IPC_CREAT)
strlcat(str, "IPC_CREAT|", MAXSTRINGLEN);
if (semflg & IPC_EXCL)
strlcat(str, "IPC_EXCL|", MAXSTRINGLEN);
str[strlen(str)-1] = 0;
%}
function __fork_flags:string(flags:long)
%{ /* pure */
int len;
long flags = THIS->flags;
char *str = THIS->__retvalue;
if (flags & CLONE_FS)
strlcat(str,"CLONE_FS|", MAXSTRINGLEN);
if (flags & CLONE_FILES)
strlcat(str, "CLONE_FILES|", MAXSTRINGLEN);
if (flags & CLONE_SIGHAND)
strlcat(str, "CLONE_SIGHAND|", MAXSTRINGLEN);
if (flags & CLONE_PTRACE)
strlcat(str, "CLONE_PTRACE|", MAXSTRINGLEN);
if (flags & CLONE_VFORK)
strlcat(str, "CLONE_VFORK|", MAXSTRINGLEN);
if (flags & CLONE_PARENT)
strlcat(str, "CLONE_PARENT|", MAXSTRINGLEN);
if (flags & CLONE_THREAD)
strlcat(str, "CLONE_THREAD|", MAXSTRINGLEN);
if (flags & CLONE_SYSVSEM)
strlcat(str, "CLONE_SYSVSEM|", MAXSTRINGLEN);
if (flags & CLONE_SETTLS)
strlcat(str, "CLONE_SETTLS|", MAXSTRINGLEN);
if (flags & CLONE_PARENT_SETTID)
strlcat(str, "CLONE_PARENT_SETTID|", MAXSTRINGLEN);
if (flags & CLONE_CHILD_CLEARTID)
strlcat(str, "CLONE_CHILD_CLEARTID|", MAXSTRINGLEN);
if (flags & CLONE_UNTRACED)
strlcat(str, "CLONE_UNTRACED|", MAXSTRINGLEN);
if (flags & CLONE_CHILD_SETTID)
strlcat(str, "CLONE_CHILD_SETTID|", MAXSTRINGLEN);
if (flags & CLONE_STOPPED)
strlcat(str, "CLONE_STOPPED|", MAXSTRINGLEN);
len = strlen(str);
if (len)
str[strlen(str)-1] = 0;
%}
/* This function copies an argv from userspace. */
function __get_argv:string(a:long)
%{ /* pure */
char __user *__user *argv = (char __user *__user *)(long)THIS->a;
char __user *vstr;
int space, rc, len = MAXSTRINGLEN;
char *str = THIS->__retvalue;
char buf[80];
char *ptr = buf;
if (argv)
argv++;
while (argv != NULL) {
if (get_user (vstr, argv))
break;
if (vstr == NULL)
break;
rc = _stp_strncpy_from_user(buf, vstr, 79);
if (rc <= 0)
break;
/* check for whitespace in string */
buf[rc] = 0;
ptr = buf;
space = 0;
while (*ptr && rc--) {
if (isspace(*ptr++)) {
space = 1;
break;
}
}
if (len != MAXSTRINGLEN && len) {
*str++=' ';
len--;
}
if (space && len) {
*str++='\"';
len--;
}
rc = strlcpy (str, buf, len);
str += rc;
len -= rc;
if (space && len) {
*str++='\"';
len--;
}
argv++;
}
*str = 0;
%}
/*
* This function is used when a long is really a pointer and we need
* the string it points to. Should be rarely necessary.
*/
function __string:string (a:long)
%{ /* pure */
char *str =(char *)(long)THIS->a;
strlcpy(THIS->__retvalue, str, MAXSTRINGLEN);
%}
/*
* Return a integer member value of struct
* timezone user space pointer parameter
* CALLERS:
* syscall.gettimeofday
* syscall.settimeofday
*/
/*
function __uget_tz_m:long(u_addr:long,member:long)
%{
struct timezone tz;
char *ptr = (char *)(unsigned long)THIS->u_addr;
size_t sz = sizeof(struct timezone);
if(copy_from_user(&tz,ptr,sz))
THIS->__retvalue = -EFAULT;
else if(THIS->member == 0)
THIS->__retvalue = tz.tz_minuteswest;
else
THIS->__retvalue = tz.tz_dsttime;
%}
*/
/*
* Return integer member value of struct
* timex user space pointer parameter
* CALLERS:
* syscall.adjtimex
*/
/*
function __uget_timex_m:long(u_addr:long,member:long)
%{
struct timex tx;
char *ptr = (char *)(unsigned long)THIS->u_addr;
size_t sz = sizeof(struct timex);
if(copy_from_user(&tx,ptr,sz)) {
THIS->__retvalue = -EFAULT;
return;
}
switch(THIS->member) {
case 0: THIS->__retvalue = tx.modes;
break;
case 1: THIS->__retvalue = tx.offset;
break;
case 2: THIS->__retvalue = tx.freq;
break;
case 3: THIS->__retvalue = tx.maxerror;
break;
case 4: THIS->__retvalue = tx.esterror;
break;
case 5: THIS->__retvalue = tx.status;
break;
case 6: THIS->__retvalue = tx.constant;
break;
case 7: THIS->__retvalue = tx.precision;
break;
case 8: THIS->__retvalue = tx.tolerance;
break;
case 9: THIS->__retvalue = tx.time.tv_sec;
break;
case 10: THIS->__retvalue = tx.time.tv_usec;
break;
case 11: THIS->__retvalue = tx.tick;
break;
default: THIS->__retvalue = -1;
}
%}
*/
/*
* Return the clock_t member value of the
* struct tms user space pointer parameter
* CALLERS:
* syscall.times
*/
/*
%{ #include <linux/times.h> %}
function __uget_tms_m:long(u_addr:long,member:long)
%{
struct tms tms;
char *ptr = (char *)(unsigned long)THIS->u_addr;
size_t sz = sizeof(struct tms);
if(copy_from_user(&tms,ptr,sz))
THIS->__retvalue = -EFAULT;
switch(THIS->member) {
case 0: THIS->__retvalue = tms.tms_utime;
break;
case 1: THIS->__retvalue = tms.tms_stime;
break;
case 2: THIS->__retvalue = tms.tms_cutime;
break;
case 3: THIS->__retvalue = tms.tms_cstime;
break;
default: THIS->__retvalue = -1;
}
%}
*/
/*
* Return a time_t / long member value of the
* struct timespec user space pointer parameter
* CALLERS:
* syscall.nanosleep
*/
/*
function __uget_ts_m:long(u_addr:long,member:long)
%{
struct timespec ts;
char *ptr = (char *)(unsigned long)THIS->u_addr;
size_t sz = sizeof(struct timespec);
if(copy_from_user(&ts,ptr,sz))
THIS->__retvalue = -EFAULT;
else if(THIS->member == 0)
THIS->__retvalue = ts.tv_sec;
else
THIS->__retvalue = ts.tv_nsec;
%}
*/
/*
* Return the symbolic string representation
* of the struct timex.mode member of adjtimex
* consult `man adjtimex` for more information
* CALLERS:
* syscall.adjtimex
*/
function _adjtx_mode_str(f) {
if((f & 32769) == 32769) bs="ADJ_OFFSET_SINGLESHOT|".bs
if(f & 16384) bs="ADJ_TICK|".bs
if(f & 32) bs="ADJ_TIMECONST|".bs
if(f & 16) bs="ADJ_STATUS|".bs
if(f & 8) bs="ADJ_ESTERROR|".bs
if(f & 4) bs="ADJ_MAXERROR|".bs
if(f & 2) bs="ADJ_FREQUENCY|".bs
if(f & 1 && ((f & 32769) != 32769)) bs="ADJ_OFFSET|".bs
return substr(bs,0,strlen(bs)-1)
}
/*
* Return the symbolic string representation
* of the how argument given in *sigprocmask
* consult `man sigprocmask` for more info
* CALLERS:
* syscall.sigprocmask
* syscall.rt_sigprocmask
*/
function _sigprocmask_how_str(how) {
if(how==0) return "SIG_BLOCK"
if(how==1) return "SIG_UNBLOCK"
if(how==2) return "SIG_SETMASK"
return ""
}
/*
* Return the symbolic string representation
* of the which argument given to setitimer
* consult `man setitimer` for more info
* CALLERS:
* syscall.getitimer
* syscall.setitimer
*/
function _itimer_which_str(which) {
if(which==0) return "ITIMER_REAL"
if(which==1) return "ITIMER_VIRTUAL"
if(which==2) return "ITIMER_PROF"
return ""
}
/*
* Return the symbolic string representation
* of the clockid argument given to create_timer
* consult `man create_timer` for more info
* CALLERS:
* syscall.timer_create
* syscall.clock_settime
* syscall.clock_gettime
* syscall.clock_getres
* syscall.clock_nanosleep
*/
function _get_wc_str(wc) {
if(wc==0) return "CLOCK_REALTIME"
if(wc==1) return "CLOCK_MONOTONIC"
if(wc==2) return "CLOCK_PROCESS_CPUTIME_ID"
if(wc==3) return "CLOCK_THREAD_CPUTIME_ID"
if(wc==4) return "CLOCK_REALTIME_HR"
if(wc==5) return "CLOCK_MONOTONIC_HR"
return ""
}
function _flock_cmd_str(c) {
if(c & 1) bs="LOCK_SH|".bs
if(c & 2) bs="LOCK_EX|".bs
if(c & 8) bs="LOCK_UN|".bs
if(c & 4) bs="LOCK_NB|".bs
return substr(bs,0,strlen(bs)-1)
}
/* `man 2 open` for more information */
function _sys_open_flag_str:string (f:long)
%{ /* pure */
int flags = (int)THIS->f;
int acc = flags & O_ACCMODE;
switch (acc) {
case O_WRONLY:
strlcpy (THIS->__retvalue, "O_WRONLY", MAXSTRINGLEN);
break;
case O_RDWR:
strlcpy (THIS->__retvalue, "O_RDWR", MAXSTRINGLEN);
break;
default:
strlcpy (THIS->__retvalue, "O_RDONLY", MAXSTRINGLEN);
}
#ifdef O_APPEND
if (flags & O_APPEND)
strlcat (THIS->__retvalue, "|O_APPEND", MAXSTRINGLEN);
#endif
#ifdef O_CREAT
if (flags & O_CREAT)
strlcat (THIS->__retvalue, "|O_CREAT", MAXSTRINGLEN);
#endif
#ifdef O_ASYNC
if (flags & O_ASYNC)
strlcat (THIS->__retvalue, "|O_ASYNC", MAXSTRINGLEN);
#endif
#ifdef O_DIRECT
if (flags & O_DIRECT)
strlcat (THIS->__retvalue, "|O_DIRECT", MAXSTRINGLEN);
#endif
#ifdef O_DIRECTORY
if (flags & O_DIRECTORY)
strlcat (THIS->__retvalue, "|O_DIRECTORY", MAXSTRINGLEN);
#endif
#ifdef O_EXCL
if (flags & O_EXCL)
strlcat (THIS->__retvalue, "|O_EXCL", MAXSTRINGLEN);
#endif
#ifdef O_LARGEFILE
if (flags & O_LARGEFILE)
strlcat (THIS->__retvalue, "|O_LARGEFILE", MAXSTRINGLEN);
#endif
#ifdef O_NOATIME
if (flags & O_NOATIME)
strlcat (THIS->__retvalue, "|O_NOATIME", MAXSTRINGLEN);
#endif
#ifdef O_NOCTTY
if (flags & O_NOCTTY)
strlcat (THIS->__retvalue, "|O_NOCTTY", MAXSTRINGLEN);
#endif
#ifdef O_NOFOLLOW
if (flags & O_NOFOLLOW)
strlcat (THIS->__retvalue, "|O_NOFOLLOW", MAXSTRINGLEN);
#endif
#ifdef O_NONBLOCK
if (flags & O_NONBLOCK)
strlcat (THIS->__retvalue, "|O_NONBLOCK", MAXSTRINGLEN);
#endif
#ifdef O_SYNC
if (flags & O_SYNC)
strlcat (THIS->__retvalue, "|O_SYNC", MAXSTRINGLEN);
#endif
#ifdef O_TRUNC
if (flags & O_TRUNC)
strlcat (THIS->__retvalue, "|O_TRUNC", MAXSTRINGLEN);
#endif
%}
/* `man 2 open` for more information */
function _access_mode_str(m) {
if((m & 7) == 0) return "F_OK"
if(m & 4) bs="R_OK |".bs
if(m & 2) bs="W_OK |".bs
if(m & 1) bs="X_OK |".bs
return substr(bs,0,strlen(bs)-2)
}
/* `man 2 open` for more information */
function _sys_open_mode_str(f) {
if((f & 448) == 448) bs="S_IRWXU|".bs
else {
if(f & 256) bs="S_IRUSR|".bs
if(f & 128) bs="S_IWUSR|".bs
if(f & 64) bs="S_IXUSR|".bs
}
if((f & 56) == 56) bs="S_IRWXG|".bs
else {
if(f & 32) bs="S_IRGRP|".bs
if(f & 16) bs="S_IWGRP|".bs
if(f & 8) bs="S_IXGRP|".bs
}
if((f & 7) == 7) bs="S_IRWXO|".bs
else {
if(f & 4) bs="S_IROTH|".bs
if(f & 2) bs="S_IWOTH|".bs
if(f & 1) bs="S_IXOTH|".bs
}
return substr(bs,0,strlen(bs)-1)
}
/* `man 2 mknod` for more information */
function _mknod_mode_str(mode) {
if((mode & 0x8000)==0x8000)
return "S_IFREG|"._sys_open_mode_str(mode)
if((mode & 0x2000)==0x2000)
return "S_IFCHR|"._sys_open_mode_str(mode)
if((mode & 0x6000)==0x6000)
return "S_IFBLK|"._sys_open_mode_str(mode)
if((mode & 0x1000)==0x1000)
return "S_IFIFO|"._sys_open_mode_str(mode)
if((mode & 0xC000)==0xC000)
return "S_IFSOCK|"._sys_open_mode_str(mode)
return ""
}
/* `man msync` for more information */
function _msync_flag_str(f) {
if (f & 7 == 0) return ""
if(f & 4) bs="MS_SYNC|".bs
if(f & 2) bs="MS_INVALIDATE|".bs
if(f & 1) bs="MS_ASYNC|".bs
return substr(bs,0,strlen(bs)-1)
}
/* `man wait4` for more information */
function _wait4_opt_str(f) {
if(f & 0x01000000) bs="WNOWAIT|".bs
if(f & 8) bs="WCONTINUED|".bs
if(f & 4) bs="WEXITED|".bs
if(f & 2) bs="WSTOPPED|".bs
if(f & 1) bs="WNOHANG|".bs
return substr(bs,0,strlen(bs)-1)
}
/* `man sendmsg` for more information */
function _send_flags_str(f) {
if(f & 0x0001) bs="MSG_OOB|".bs
if(f & 0x0080) bs="MSG_EOR|".bs
if(f & 0x0004) bs="MSG_DONTROUTE|".bs
if(f & 0x0040) bs="MSG_DONTWAIT|".bs
if(f & 0x4000) bs="MSG_NOSIGNAL|".bs
if(f & 0x0800) bs="MSG_CONFIRM|".bs
return substr(bs,0,strlen(bs)-1)
}
/* `man recv` for more information */
function _recvflags_str(f) {
if(f & 1) bs="MSG_OOB|".bs
if(f & 2) bs="MSG_PEEK|".bs
if(f & 32) bs="MSG_TRUNC|".bs
if(f & 256) bs="MSG_WAITALL|".bs
if(f & 8192) bs="MSG_ERRQUEUE|".bs
return substr(bs,0,strlen(bs)-1)
}
/* `man mlockall` for more information */
function _mlockall_flags_str(f) {
if(f & 1) bs="MCL_CURRENT|".bs
if(f & 2) bs="MCL_FUTURE|".bs
return substr(bs,0,strlen(bs)-1)
}
/* used by sys_delete_module */
function _module_flags_str(f) {
if(!(f & 2048)) bs="WAIT|"
if(f & 512) bs=bs."FORCE|"
return substr(bs,0,strlen(bs)-1)
}
function _sched_policy_str(policy) {
if(policy==0) return "SCHED_OTHER"
if(policy==1) return "SCHED_FIFO"
if(policy==2) return "SCHED_RR"
return ""
}
function _priority_which_str(which) {
if(which==0) return "PRIO_PROCESS"
if(which==1) return "PRIO_PGRP"
if(which==2) return "PRIO_USER"
return ""
}
function _shutdown_how_str(how) {
if(how==0) return "SHUT_RD"
if(how==1) return "SHUT_WR"
if(how==2) return "SHUT_RDWR"
return ""
}
function _reboot_magic_str(magic) {
if(magic==0xFEE1DEAD) return "LINUX_REBOOT_MAGIC1"
if(magic==672274793) return "LINUX_REBOOT_MAGIC2"
if(magic==85072278) return "LINUX_REBOOT_MAGIC2A"
if(magic==369367448) return "LINUX_REBOOT_MAGIC2B"
if(magic==537993216) return "LINUX_REBOOT_MAGIC2C"
return ""
}
function _reboot_flag_str(flag) {
if(flag==0x01234567) return "LINUX_REBOOT_CMD_RESTART"
if(flag==0xCDEF0123) return "LINUX_REBOOT_CMD_HALT"
if(flag==0x4321FEDC) return "LINUX_REBOOT_CMD_POWER_OFF"
if(flag==0xA1B2C3D4) return "LINUX_REBOOT_CMD_RESTART2"
if(flag==0x89ABCDEF) return "LINUX_REBOOT_CMD_CAD_ON"
if(flag==0x00000000) return "LINUX_REBOOT_CMD_CAD_OFF"
return ""
}
function _waitid_which_str(flag) {
if(flag==0) return "P_ALL"
if(flag==1) return "P_PID"
if(flag==2) return "P_PGID"
return ""
}
function _futex_op_str(op) {
if(op==0) return "FUTEX_WAIT"
if(op==1) return "FUTEX_WAKE"
if(op==2) return "FUTEX_FD"
if(op==3) return "FUTEX_REQUEUE"
if(op==4) return "FUTEX_CMP_REQUEUE"
return ""
}
function _mountflags_str:string(op:long)
%{ /* pure */
int len, op = THIS->op;
char *str = THIS->__retvalue;
if (op & MS_BIND)
strlcat(str,"MS_BIND|",MAXSTRINGLEN);
if (op & MS_DIRSYNC)
strlcat(str,"MS_DIRSYNC|",MAXSTRINGLEN);
if (op & MS_MANDLOCK)
strlcat(str,"MS_MANDLOCK|",MAXSTRINGLEN);
if (op & MS_MOVE)
strlcat(str,"MS_MOVE|",MAXSTRINGLEN);
if (op & MS_NOATIME)
strlcat(str,"MS_NOATIME|",MAXSTRINGLEN);
if (op & MS_NODEV)
strlcat(str,"MS_NODEV|",MAXSTRINGLEN);
if (op & MS_NODIRATIME)
strlcat(str,"MS_NODIRATIME|",MAXSTRINGLEN);
if (op & MS_NOEXEC)
strlcat(str,"MS_NOEXEC|",MAXSTRINGLEN);
if (op & MS_NOSUID)
strlcat(str,"MS_NOSUID|",MAXSTRINGLEN);
if (op & MS_RDONLY)
strlcat(str,"MS_RDONLY|",MAXSTRINGLEN);
if (op & MS_REC)
strlcat(str,"MS_REC|",MAXSTRINGLEN);
if (op & MS_REMOUNT)
strlcat(str,"MS_REMOUNT|",MAXSTRINGLEN);
if (op & MS_SYNCHRONOUS)
strlcat(str,"MS_SYNCHRONOUS|",MAXSTRINGLEN);
if (op & MS_VERBOSE)
strlcat(str,"MS_VERBOSE|",MAXSTRINGLEN);
len = strlen(str);
if (len)
str[strlen(str)-1] = 0;
%}
function _umountflags_str:string(op:long)
%{ /* pure */
int len, op = THIS->op;
char *str = THIS->__retvalue;
if (op == 0)
strlcat(str,"0",MAXSTRINGLEN);
else {
if (op & MNT_FORCE)
strlcat(str,"MNT_FORCE|",MAXSTRINGLEN);
if (op & MNT_DETACH)
strlcat(str,"MNT_DETACH|",MAXSTRINGLEN);
if (op & MNT_EXPIRE)
strlcat(str,"MNT_EXPIRE|",MAXSTRINGLEN);
len = strlen(str);
if (len)
str[strlen(str)-1] = 0;
}
%}
function _statfs_f_type_str(f) {
if(f==0xadf5) return "ADFS_SUPER_MAGIC"
if(f==0xADFF) return "AFFS_SUPER_MAGIC"
if(f==0x42465331) return "BEFS_SUPER_MAGIC"
if(f==0x1BADFACE) return "BFS_MAGIC"
if(f==0xFF534D42) return "CIFS_MAGIC_NUMBER"
if(f==0x73757245) return "CODA_SUPER_MAGIC"
if(f==0x012FF7B7) return "COH_SUPER_MAGIC"
if(f==0x28cd3d45) return "CRAMFS_MAGIC"
if(f==0x1373) return "DEVFS_SUPER_MAGIC"
if(f==0x00414A53) return "EFS_SUPER_MAGIC"
if(f==0x137D) return "EXT_SUPER_MAGIC"
if(f==0xEF51) return "EXT2_OLD_SUPER_MAGIC"
if(f==0xEF53) return "EXT2_SUPER_MAGIC"
if(f==0xEF53) return "EXT3_SUPER_MAGIC"
if(f==0x4244) return "HFS_SUPER_MAGIC"
if(f==0xF995E849) return "HPFS_SUPER_MAGIC"
if(f==0x958458f6) return "HUGETLBFS_MAGIC"
if(f==0x9660) return "ISOFS_SUPER_MAGIC"
if(f==0x72b6) return "JFFS2_SUPER_MAGIC"
if(f==0x3153464a) return "JFS_SUPER_MAGIC"
if(f==0x137F) return "MINIX_SUPER_MAGIC"
if(f==0x138F) return "MINIX_SUPER_MAGIC2"
if(f==0x2468) return "MINIX2_SUPER_MAGIC"
if(f==0x2478) return "MINIX2_SUPER_MAGIC2"
if(f==0x4d44) return "MSDOS_SUPER_MAGIC"
if(f==0x564c) return "NCP_SUPER_MAGIC"
if(f==0x6969) return "NFS_SUPER_MAGIC"
if(f==0x5346544e) return "NTFS_SB_MAGIC"
if(f==0x9fa1) return "OPENPROM_SUPER_MAGIC"
if(f==0x9fa0) return "PROC_SUPER_MAGIC"
if(f==0x002f) return "QNX4_SUPER_MAGIC"
if(f==0x52654973) return "REISERFS_SUPER_MAGIC"
if(f==0x7275) return "ROMFS_MAGIC"
if(f==0x517B) return "SMB_SUPER_MAGIC"
if(f==0x012FF7B6) return "SYSV2_SUPER_MAGIC"
if(f==0x012FF7B5) return "SYSV4_SUPER_MAGIC"
if(f==0x01021994) return "TMPFS_MAGIC"
if(f==0x15013346) return "UDF_SUPER_MAGIC"
if(f==0x00011954) return "UFS_MAGIC"
if(f==0x9fa2) return "USBDEVICE_SUPER_MAGIC"
if(f==0xa501FCF5) return "VXFS_SUPER_MAGIC"
if(f==0x012FF7B4) return "XENIX_SUPER_MAGIC"
if(f==0x58465342) return "XFS_SUPER_MAGIC"
if(f==0x012FD16D) return "_XIAFS_SUPER_MAGIC"
return ""
}
function _mmap_flags(flags) {
if (flags & 1) msg="MAP_SHARED|"
if (flags & 2) msg="MAP_PRIVATE|".msg
if (flags & 0x10) msg="MAP_FIXED|".msg
if (flags & 0x20) msg="MAP_ANONYMOUS|".msg
if (flags & 0x100) msg="MAP_GROWSDOWN|".msg
if (flags & 0x800) msg="MAP_DENYWRITE|".msg
if (flags & 0x1000) msg="MAP_EXECUTABLE|".msg
if (flags & 0x2000) msg="MAP_LOCKED|".msg
if (flags & 0x4000) msg="MAP_NORESERVE|".msg
if (flags & 0x8000) msg="MAP_POPULATE|".msg
if (flags & 0x10000) msg="MAP_NONBLOCK|".msg
return substr(msg,0,strlen(msg)-1)
}
function _mprotect_prot_str(prot) {
if (prot) {
if(prot & 1) ps="PROT_READ|"
if(prot & 2) ps="PROT_WRITE|".ps
if(prot & 4) ps="PROT_EXEC|".ps
return substr(ps,0,strlen(ps)-1)
}
return "PROT_NONE"
}
function _madvice_advice_str(behavior) {
if(behavior==0x00000000) return "MADV_NORMAL"
if(behavior==0x00000001) return "MADV_RANDOM"
if(behavior==0x00000002) return "MADV_SEQUENTIAL"
if(behavior==0x00000003) return "MADV_WILLNEED"
if(behavior==0x00000004) return "MADV_DONTNEED"
return ""
}
function _fadvice_advice_str(behavior) {
if(behavior==0x00000000) return "FADV_NORMAL"
if(behavior==0x00000001) return "FADV_RANDOM"
if(behavior==0x00000002) return "FADV_SEQUENTIAL"
if(behavior==0x00000003) return "FADV_WILLNEED"
if(behavior==0x00000004) return "FADV_DONTNEED"
return ""
}
function _fcntl_cmd_str(cmd) {
if(cmd==0x00000000) return "F_DUPFD"
if(cmd==0x00000001) return "F_GETFD"
if(cmd==0x00000002) return "F_SETFD"
if(cmd==0x00000003) return "F_GETFL"
if(cmd==0x00000004) return "F_SETFL"
if(cmd==0x00000005) return "F_GETLK"
if(cmd==0x00000006) return "F_SETLK"
if(cmd==0x00000007) return "F_SETLKW"
if(cmd==0x00000008) return "F_SETOWN"
if(cmd==0x00000009) return "F_GETOWN"
if(cmd==0x0000000A) return "F_SETSIG"
if(cmd==0x0000000B) return "F_GETLK64"
if(cmd==0x0000000C) return "F_SETLK64"
if(cmd==0x0000000D) return "F_SETLKW64"
return ""
}
function _seek_whence_str(w) {
if(w==0x00000000) return "SEEK_SET"
if(w==0x00000001) return "SEEK_CUR"
if(w==0x00000002) return "SEEK_END"
return ""
}
function _quotactl_cmd_str(cmd) {
if(cmd==0x800002) return "Q_QUOTAON"
if(cmd==0x800003) return "Q_QUOTAOFF"
if(cmd==0x800007) return "Q_GETQUOTA"
if(cmd==0x800008) return "Q_SETQUOTA"
if(cmd==0x800005) return "Q_GETINFO"
if(cmd==0x800006) return "Q_SETINFO"
if(cmd==0x800004) return "Q_GETFMT"
if(cmd==0x800001) return "Q_SYNC"
/* XFS Quota Manager (XQM) Codes */
if(cmd==0x5801) return "Q_XQUOTAON"
if(cmd==0x5802) return "Q_XQUOTAOFF"
if(cmd==0x5803) return "Q_XGETQUOTA"
if(cmd==0x5804) return "Q_XSETQLIM"
if(cmd==0x5805) return "Q_XGETQSTAT"
if(cmd==0x5806) return "Q_XQUOTARM"
return ""
}
/* see sys/socket.h (for setsockopt) */
function _sockopt_optname_str(opt) {
if(opt==1) return "SO_DEBUG"
if(opt==2) return "SO_REUSEADDR"
if(opt==3) return "SO_TYPE"
if(opt==4) return "SO_ERROR"
if(opt==5) return "SO_DONTROUTE"
if(opt==6) return "SO_BROADCAST"
if(opt==7) return "SO_SNDBUF"
if(opt==8) return "SO_RCVBUF"
if(opt==9) return "SO_KEEPALIVE"
if(opt==10) return "SO_OOBINLINE"
if(opt==11) return "SO_NO_CHECK"
if(opt==12) return "SO_PRIORITY"
if(opt==13) return "SO_LINGER"
if(opt==14) return "SO_BSDCOMPAT"
if(opt==16) return "SO_PASSCRED"
if(opt==17) return "SO_PEERCRED"
if(opt==18) return "SO_RCVLOWAT"
if(opt==19) return "SO_SNDLOWAT"
if(opt==20) return "SO_RCVTIMEO"
if(opt==21) return "SO_SNDTIMEO"
return ""
}
/* `man 2 setsockopt` for more information */
function _sockopt_level_str(l) {
if(l==0) return "IP"
if(l==1) return "ICMP"
if(l==2) return "IGMP"
if(l==3) return "GGP"
if(l==4) return "IP-ENCAP"
if(l==5) return "ST"
if(l==6) return "TCP"
if(l==7) return "CBT"
if(l==8) return "EGP"
if(l==9) return "IGP"
if(l==10) return "BBN-RCC-MON"
if(l==11) return "NVP-II"
if(l==12) return "PUP"
if(l==13) return "ARGUS"
if(l==14) return "EMCON"
if(l==15) return "XNET"
if(l==16) return "CHAOS"
if(l==17) return "UDP"
if(l==18) return "MUX"
if(l==19) return "DCN-MEAS"
if(l==20) return "HMP"
if(l==21) return "PRM"
if(l==22) return "XNS-IDP"
if(l==23) return "TRUNK-1"
if(l==24) return "TRUNK-2"
if(l==25) return "LEAF-1"
if(l==26) return "LEAF-2"
if(l==27) return "RDP"
if(l==28) return "IRTP"
if(l==29) return "ISO-TP4"
if(l==30) return "NETBLT"
if(l==31) return "MFE-NSP"
if(l==32) return "MERIT-INP"
if(l==33) return "SEP"
if(l==34) return "3PC"
if(l==35) return "IDPR"
if(l==36) return "XTP"
if(l==37) return "DDP"
if(l==38) return "IDPR-CMTP"
if(l==39) return "TP++"
if(l==40) return "IL"
if(l==41) return "IPv6"
if(l==42) return "SDRP"
if(l==43) return "IPv6-Route"
if(l==44) return "IPv6-Frag"
if(l==45) return "IDRP"
if(l==46) return "RSVP"
if(l==47) return "GRE"
if(l==48) return "MHRP"
if(l==49) return "BNA"
if(l==50) return "IPv6-Crypt"
if(l==51) return "IPv6-Auth"
if(l==52) return "I-NLSP"
if(l==53) return "SWIPE"
if(l==54) return "NARP"
if(l==55) return "MOBILE"
if(l==56) return "TLSP"
if(l==57) return "SKIP"
if(l==58) return "IPv6-ICMP"
if(l==59) return "IPv6-NoNxt"
if(l==60) return "IPv6-Opts"
if(l==62) return "CFTP"
if(l==64) return "SAT-EXPAK"
if(l==65) return "KRYPTOLAN"
if(l==66) return "RVD"
if(l==67) return "IPPC"
if(l==69) return "SAT-MON"
if(l==70) return "VISA"
if(l==71) return "IPCV"
if(l==72) return "CPNX"
if(l==73) return "CPHB"
if(l==74) return "WSN"
if(l==75) return "PVP"
if(l==76) return "BR-SAT-MON"
if(l==77) return "SUN-ND"
if(l==78) return "WB-MON"
if(l==79) return "WB-EXPAK"
if(l==80) return "ISO-IP"
if(l==81) return "VMTP"
if(l==82) return "SECURE-VMTP"
if(l==83) return "VINES"
if(l==84) return "TTP"
if(l==85) return "NSFNET-IGP"
if(l==86) return "DGP"
if(l==87) return "TCF"
if(l==88) return "EIGRP"
if(l==89) return "OSPFIGP"
if(l==90) return "Sprite-RPC"
if(l==91) return "LARP"
if(l==92) return "MTP"
if(l==93) return "AX.25"
if(l==94) return "IPIP"
if(l==95) return "MICP"
if(l==96) return "SCC-SP"
if(l==97) return "ETHERIP"
if(l==98) return "ENCAP"
if(l==100) return "GMTP"
if(l==101) return "IFMP"
if(l==102) return "PNNI"
if(l==103) return "PIM"
if(l==104) return "ARIS"
if(l==105) return "SCPS"
if(l==106) return "QNX"
if(l==107) return "A/N"
if(l==108) return "IPComp"
if(l==109) return "SNP"
if(l==110) return "Compaq-Peer"
if(l==111) return "IPX-in-IP"
if(l==112) return "VRRP"
if(l==113) return "PGM"
if(l==115) return "L2TP"
if(l==116) return "DDX"
if(l==117) return "IATP"
if(l==118) return "STP"
if(l==119) return "SRP"
if(l==120) return "UTI"
if(l==121) return "SMP"
if(l==122) return "SM"
if(l==123) return "PTP"
if(l==124) return "ISIS"
if(l==125) return "FIRE"
if(l==126) return "CRTP"
if(l==127) return "CRUDP"
if(l==128) return "SSCOPMCE"
if(l==129) return "IPLT"
if(l==130) return "SPS"
if(l==131) return "PIPE"
if(l==132) return "SCTP"
if(l==133) return "FC"
return ""
}
function _sock_family_str(f) {
if(f==0) return "PF_UNSPEC"
if(f==1) return "PF_UNIX"
if(f==1) return "PF_LOCAL"
if(f==2) return "PF_INET"
if(f==3) return "PF_AX25"
if(f==4) return "PF_IPX"
if(f==5) return "PF_APPLETALK"
if(f==6) return "PF_NETROM"
if(f==7) return "PF_BRIDGE"
if(f==8) return "PF_ATMPVC"
if(f==9) return "PF_X25"
if(f==10) return "PF_INET6"
if(f==11) return "PF_ROSE"
if(f==12) return "PF_DECnet"
if(f==13) return "PF_NETBEUI"
if(f==14) return "PF_SECURITY"
if(f==15) return "PF_KEY"
if(f==16) return "PF_NETLINK"
if(f==17) return "PF_PACKET"
if(f==18) return "PF_ASH"
if(f==19) return "PF_ECONET"
if(f==20) return "PF_ATMSVC"
if(f==22) return "PF_SNA"
if(f==23) return "PF_IRDA"
if(f==24) return "PF_PPPOX"
if(f==25) return "PF_WANPIPE"
if(f==26) return "PF_LLC"
if(f==31) return "PF_BLUETOOTH"
if(f==32) return "PF_MAX"
return ""
}
function _sock_type_str(t) {
if(t==1) return "SOCK_STREAM"
if(t==2) return "SOCK_DGRAM"
if(t==5) return "SOCK_SEQPACKET"
if(t==3) return "SOCK_RAW"
if(t==4) return "SOCK_RDM"
if(t==10) return "SOCK_PACKET"
return ""
}
function _opoll_op_str(o) {
if(o==1) return "EPOLL_CTL_ADD"
if(o==3) return "EPOLL_CTL_MOD"
if(o==2) return "EPOLL_CTL_DEL"
return ""
}
function _epoll_events_str(e) {
if(e==1) return "EPOLLIN"
if(e==4) return "EPOLLOUT"
if(e==2) return "EPOLLPRI"
if(e==8) return "EPOLLERR"
if(e==16) return "EPOLLHUP"
if(e==-2147483648) return "EPOLLET"
if(e==1073741824) return "EPOLLONESHOT"
return ""
}
function _rlimit_resource_str(r) {
if(r==-1) return "RLIM_INFINITY"
if(r==9) return "RLIMIT_AS"
if(r==4) return "RLIMIT_CORE"
if(r==0) return "RLIMIT_CPU"
if(r==2) return "RLIMIT_DATA"
if(r==1) return "RLIMIT_FSIZE"
if(r==10) return "RLIMIT_LOCKS"
if(r==8) return "RLIMIT_MEMLOCK"
if(r==7) return "RLIMIT_NOFILE"
if(r==6) return "RLIMIT_NPROC"
if(r==5) return "RLIMIT_RSS"
if(r==3) return "RLIMIT_STACK"
return ""
}
function _rusage_who_str(w) {
if(w==0) return "RUSAGE_SELF"
if(w==-1) return "RUSAGE_CHILDREN"
return ""
}
/* for accessing 16-bit values encoded in a long */
function __short:long(val:long) %{ /* pure */
THIS->__retvalue = (short)THIS->val;
%}
/* uid_t is unsigned, but calling functions take "-1" as a paremeter */
/* so this hack is necessary to correct that mismatch. */
function __uid:long(val:long) %{ /* pure */
THIS->__retvalue = (int)THIS->val;
%}