From 820e7ac7a68952d88cc8ff702f18e8c4b7eae822 Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Fri, 27 Feb 2009 15:16:52 +0100 Subject: 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. --- tapset/inet_sock.stp | 50 +++++++++++++++++++++++++------------------------- 1 file changed, 25 insertions(+), 25 deletions(-) (limited to 'tapset/inet_sock.stp') 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 -#include -#include -#include - -#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(); %} -- cgit From 47c4cca23401c4fd42c3d3477e83317277af3aff Mon Sep 17 00:00:00 2001 From: Mark Wielaard Date: Wed, 4 Mar 2009 14:23:40 +0100 Subject: Fix typo in kernel version check 2.6.21 -> 2.6.11 in inet_sock. * tapset/inet_sock.stp (inet_get_local_port): Fix kernel version check. (inet_get_ip_source): Likewise. --- tapset/inet_sock.stp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'tapset/inet_sock.stp') diff --git a/tapset/inet_sock.stp b/tapset/inet_sock.stp index f889ccd7..33de9775 100644 --- a/tapset/inet_sock.stp +++ b/tapset/inet_sock.stp @@ -13,7 +13,7 @@ // return. function inet_get_local_port:long(sock:long) { -%(kernel_v < "2.6.21" %? +%(kernel_v < "2.6.11" %? port = @cast(sock, "inet_sock", "kernel")->inet->num; %: port = @cast(sock, "inet_sock", "kernel")->num; @@ -24,7 +24,7 @@ function inet_get_local_port:long(sock:long) // 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" %? +%(kernel_v < "2.6.11" %? daddr = @cast(sock, "inet_sock", "kernel")->inet->daddr; %: daddr = @cast(sock, "inet_sock", "kernel")->daddr; -- cgit