summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMark Wielaard <mjw@redhat.com>2009-02-27 15:16:52 +0100
committerMark Wielaard <mjw@redhat.com>2009-02-27 15:16:52 +0100
commit820e7ac7a68952d88cc8ff702f18e8c4b7eae822 (patch)
tree441525179deaab31a6135c9664a7198aee9a4d8a
parent2dc53f24ad2470750a04f869e9cbf5f167e9eb31 (diff)
downloadsystemtap-steved-820e7ac7a68952d88cc8ff702f18e8c4b7eae822.tar.gz
systemtap-steved-820e7ac7a68952d88cc8ff702f18e8c4b7eae822.tar.xz
systemtap-steved-820e7ac7a68952d88cc8ff702f18e8c4b7eae822.zip
Use @cast where possible for examining inet_sock.
* tapset/inet_sock.stp: Remove includes. (inet_get_local_port): No embedded C, use @cast. (inet_get_ip_source): Likewise. (daddr_to_string): New function, still some embedded C used.
-rw-r--r--tapset/inet_sock.stp50
1 files changed, 25 insertions, 25 deletions
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();
%}