]> sourceware.org Git - systemtap.git/commitdiff
2007-07-11 Eugene Teo <eteo@redhat.com>
authoreteo <eteo>
Wed, 11 Jul 2007 13:32:25 +0000 (13:32 +0000)
committereteo <eteo>
Wed, 11 Jul 2007 13:32:25 +0000 (13:32 +0000)
* tcp.stp (tcp_sockstate_str, tcp_sockopt_str,
tcp_setsockopt): New. Also added sockopt and sockstate
lookup tables.

tapset/ChangeLog
tapset/tcp.stp

index 595f40a2fc9a75b1c2beccb40b1c2aed1079545f..82d7ecbe9c4952ffc9d1ba4cf07e1cd65f2d7ba4 100644 (file)
@@ -1,3 +1,9 @@
+2007-07-11  Eugene Teo  <eteo@redhat.com>
+
+       * tcp.stp (tcp_sockstate_str, tcp_sockopt_str,
+       tcp_setsockopt): New. Also added sockopt and sockstate
+       lookup tables.
+
 2007-07-10  Martin Hunt  <hunt@redhat.com>
 
        * aux_syscalls.stp (_struct_compat_timeval2_u): 
index b09c74cb289831e4c4df67c16d10dcce9996e987..977c3ecc3e11f7d53ab371029949aaec62f42b76 100644 (file)
@@ -1,6 +1,7 @@
 // TCP tapset
 // Copyright (C) 2006 IBM Corp.
 // Copyright (C) 2006 Intel Corporation.
+// Copyright (C) 2007 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
@@ -70,6 +71,9 @@ function tcp_ts_get_info_state:long(sock:long)
        CATCH_DEREF_FAULT();
 %}
 
+function tcp_sockstate_str:string (state:long) {
+       return (state in sockstate ? sockstate[state] : "UNDEF")
+}
 
 // Get slow start threshold size.  If cwnd size is less than or equal to
 // threshold size, then TCP is in slow start; otherwise TCP is in congestion
@@ -101,6 +105,10 @@ function tcp_ts_get_info_rcv_mss:long(sock:long)
        CATCH_DEREF_FAULT();
 %}
 
+function tcp_sockopt_str:string (optname:long) {
+       return (optname in sockopt ? sockopt[optname] : "UNDEF")
+}
+
 // probe tcp.sendmsg
 //
 //  Fires whenever sending a tcp message  
@@ -190,3 +198,61 @@ probe tcp.disconnect = kernel.function("tcp_disconnect") {
 probe tcp.disconnect.return = kernel.function("tcp_disconnect").return {
        ret = $return 
 }
+
+// probe tcp.setsockopt
+//
+//  Fires whenever setsockopt(s, IPPROTO_TCP, TCP_*, ...) is called
+//
+// Context:
+//  The process which calls setsockopt
+//
+// Arguments:
+// sock              - network socket
+// level      - the level at which the socket options will be manipulated
+// optname    - TCP socket options (e.g. TCP_NODELAY, TCP_MAXSEG, etc)
+// optstr     - resolves optname to a human-readable format
+// optlen     - used to access values for setsockopt()
+//
+probe tcp.setsockopt = kernel.function("tcp_setsockopt") {
+       sock = $sk
+       level = $level
+       optname = $optname
+       optstr = tcp_sockopt_str($optname)
+       optlen = $optlen
+}
+
+probe tcp.setsockopt.return = kernel.function("tcp_setsockopt").return {
+       ret = $return
+}
+
+global sockopt[15], sockstate[13]
+
+probe begin(-1) {
+        sockopt[1] = "TCP_NODELAY"
+        sockopt[2] = "TCP_MAXSEG"
+        sockopt[3] = "TCP_CORK"
+        sockopt[4] = "TCP_KEEPIDLE"
+        sockopt[5] = "TCP_KEEPINTVL"
+        sockopt[6] = "TCP_KEEPCNT"
+        sockopt[7] = "TCP_SYNCNT"
+        sockopt[8] = "TCP_LINGER2"
+        sockopt[9] = "TCP_DEFER_ACCEPT"
+        sockopt[10] = "TCP_WINDOW_CLAMP"
+        sockopt[11] = "TCP_INFO"
+        sockopt[12] = "TCP_QUICKACK"
+        sockopt[13] = "TCP_CONGESTION"
+        sockopt[14] = "TCP_MD5SIG"
+
+       sockstate[1] = "TCP_ESTABLISED"
+       sockstate[2] = "TCP_SYN_SENT"
+       sockstate[3] = "TCP_SYN_RECV"
+       sockstate[4] = "TCP_FIN_WAIT1"
+       sockstate[5] = "TCP_FIN_WAIT2"
+       sockstate[6] = "TCP_TIME_WAIT"
+       sockstate[7] = "TCP_CLOSE"
+       sockstate[8] = "TCP_CLOSE_WAIT"
+       sockstate[9] = "TCP_LAST_ACK"
+       sockstate[10] = "TCP_LISTEN"
+       sockstate[11] = "TCP_CLOSING"
+       sockstate[12] = "TCP_MAX_STATES"
+}
This page took 0.033547 seconds and 5 git commands to generate.