summaryrefslogtreecommitdiffstats
path: root/tapset
diff options
context:
space:
mode:
authorEugeniy Meshcheryakov <eugen@debian.org>2009-02-28 20:15:39 +0100
committerEugeniy Meshcheryakov <eugen@debian.org>2009-02-28 20:15:39 +0100
commit96862c762bf019f8054851f0dce7aecc62bcf5f1 (patch)
treee4dcfa11130d2afec1bf70454d7b938f419a9326 /tapset
parentab421f562d14d1322b9197d9e23fcfbaf809fba3 (diff)
parent820e7ac7a68952d88cc8ff702f18e8c4b7eae822 (diff)
downloadsystemtap-steved-96862c762bf019f8054851f0dce7aecc62bcf5f1.tar.gz
systemtap-steved-96862c762bf019f8054851f0dce7aecc62bcf5f1.tar.xz
systemtap-steved-96862c762bf019f8054851f0dce7aecc62bcf5f1.zip
Merge branch 'master' of git+ssh://sources.redhat.com/git/systemtap
Diffstat (limited to 'tapset')
-rw-r--r--tapset/aux_syscalls.stp2
-rw-r--r--tapset/inet_sock.stp50
-rw-r--r--tapset/networking.stp4
3 files changed, 27 insertions, 29 deletions
diff --git a/tapset/aux_syscalls.stp b/tapset/aux_syscalls.stp
index 42b2abf8..d2e43903 100644
--- a/tapset/aux_syscalls.stp
+++ b/tapset/aux_syscalls.stp
@@ -1790,6 +1790,7 @@ function _struct_sigaction_u:string(uaddr:long)
function _struct_sigaction32_u:string(uaddr:long)
%{ /* pure */
+#ifdef CONFIG_COMPAT
#include <linux/compat.h>
// There seems to be no public cross arch header that defines this.
@@ -1831,4 +1832,5 @@ function _struct_sigaction32_u:string(uaddr:long)
else
strlcpy (THIS->__retvalue, "UNKNOWN", MAXSTRINGLEN);
}
+#endif
%}
diff --git a/tapset/inet_sock.stp b/tapset/inet_sock.stp
index 59ce7fea..f889ccd7 100644
--- a/tapset/inet_sock.stp
+++ b/tapset/inet_sock.stp
@@ -1,42 +1,42 @@
// inet_sock information tapset
// Copyright (C) 2006 IBM Corp.
// Copyright (C) 2006 Intel Corporation.
+// Copyright (C) 2009 Red Hat, Inc.
//
// 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
+// Get local port number given a pointer to a kernel socket,
+// as for example kernel.function("tcp_accept").return will
+// return.
function inet_get_local_port:long(sock:long)
-%{ /* pure */
- struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock;
- THIS->__retvalue = kread(&(LPORT));
- CATCH_DEREF_FAULT();
-%}
+{
+%(kernel_v < "2.6.21" %?
+ port = @cast(sock, "inet_sock", "kernel")->inet->num;
+%:
+ port = @cast(sock, "inet_sock", "kernel")->num;
+%)
+ return port;
+}
-// Get IP source address string
+// Get IP source address string given a pointer to a kernel socket.
function inet_get_ip_source:string(sock:long)
+{
+%(kernel_v < "2.6.21" %?
+ daddr = @cast(sock, "inet_sock", "kernel")->inet->daddr;
+%:
+ daddr = @cast(sock, "inet_sock", "kernel")->daddr;
+%)
+ return daddr_to_string(daddr);
+}
+
+// Turns a daddr as found in an inet_sock into a dotted ip string.
+function daddr_to_string:string(daddr:long)
%{ /* pure */
- struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock;
union { __u32 d; unsigned char addr[4]; } u;
- u.d = kread(DADDR);
+ u.d = THIS->daddr;
sprintf(THIS->__retvalue, "%d.%d.%d.%d",
u.addr[0], u.addr[1], u.addr[2], u.addr[3]);
- CATCH_DEREF_FAULT();
%}
diff --git a/tapset/networking.stp b/tapset/networking.stp
index d6e90259..a147441a 100644
--- a/tapset/networking.stp
+++ b/tapset/networking.stp
@@ -6,10 +6,6 @@
// Public License (GPL); either version 2, or (at your option) any
// later version.
-%{
-#include <linux/netdevice.h>
-%}
-
/**
* probe netdev.receive - Data recieved from network device.
* @dev_name: The name of the device. e.g: eth0, ath1.