// 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 #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 function inet_get_local_port:long(sock:long) %{ struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock; THIS->__retvalue = kread(&(LPORT)); CATCH_DEREF_FAULT(); %} // Get IP source address string function inet_get_ip_source:string(sock:long) %{ struct inet_sock *inet = (struct inet_sock *) (long) THIS->sock; union { __u32 d; unsigned char addr[4]; } u; u.d = kread(DADDR); sprintf(THIS->__retvalue, "%d.%d.%d.%d", u.addr[0], u.addr[1], u.addr[2], u.addr[3]); CATCH_DEREF_FAULT(); %}