diff options
author | tpnguyen <tpnguyen> | 2006-06-24 06:02:35 +0000 |
---|---|---|
committer | tpnguyen <tpnguyen> | 2006-06-24 06:02:35 +0000 |
commit | c587b35d1025b3eb8f1161cfc11abfd0150dfb12 (patch) | |
tree | e863eef7dc748ec86fb6a7217d68e8548e89887b /tapset/inet_sock.stp | |
parent | ccdc792f7dfd3c390d96fa998ec1891936ce8d12 (diff) | |
download | systemtap-steved-c587b35d1025b3eb8f1161cfc11abfd0150dfb12.tar.gz systemtap-steved-c587b35d1025b3eb8f1161cfc11abfd0150dfb12.tar.xz systemtap-steved-c587b35d1025b3eb8f1161cfc11abfd0150dfb12.zip |
Added UDP tapset and common inet_sock functions. Added more descriptions to
TCP tapset.
Diffstat (limited to 'tapset/inet_sock.stp')
-rw-r--r-- | tapset/inet_sock.stp | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/tapset/inet_sock.stp b/tapset/inet_sock.stp new file mode 100644 index 00000000..995bdcfb --- /dev/null +++ b/tapset/inet_sock.stp @@ -0,0 +1,47 @@ +// inet_sock information tapset +// Copyright (C) 2006 IBM Corp. +// Copyright (C) 2006 Intel Corporation. +// +// This file is part of systemtap, and is free software. You can +// redistribute it and/or modify it under the terms of the GNU General +// Public License (GPL); either version 2, or (at your option) any +// later version. + +%{ +#include <linux/version.h> +#include <net/sock.h> +#include <net/tcp.h> +#include <net/ip.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 +%} + +// Get local port number +function inet_get_local_port:long(sock:long) +%{ + unsigned long ptr = (unsigned long) THIS->sock; + struct inet_sock *inet = (struct inet_sock *) ptr; + THIS->__retvalue = deref(sizeof(LPORT), &(LPORT)); + if (0) { +deref_fault: + CONTEXT->last_error = "pointer dereference fault"; + } +%} + +// Get IP source address string +function inet_get_ip_source:string(sock:long) +%{ + unsigned long ptr = (unsigned long) THIS->sock; + struct inet_sock *inet = (struct inet_sock *) ptr; + unsigned char addr[4]; + + memcpy(addr, DADDR, sizeof(addr)); + sprintf(THIS->__retvalue, "%d.%d.%d.%d", + addr[0], addr[1], addr[2], addr[3]); +%} |