c72a792
diff -up dhcp-4.2.5b1/configure.ac.systemtap dhcp-4.2.5b1/configure.ac
c72a792
--- dhcp-4.2.5b1/configure.ac.systemtap	2012-12-17 16:56:40.563881316 +0100
c72a792
+++ dhcp-4.2.5b1/configure.ac	2012-12-17 16:56:40.597880870 +0100
c72a792
@@ -554,6 +554,35 @@ else
6fa69ac
     AC_MSG_RESULT(no)
6fa69ac
 fi
6fa69ac
 
6fa69ac
+AC_MSG_CHECKING([whether to include systemtap tracing support])
6fa69ac
+AC_ARG_ENABLE([systemtap],
6fa69ac
+              [AS_HELP_STRING([--enable-systemtap],
6fa69ac
+                              [Enable inclusion of systemtap trace support])],
6fa69ac
+              [ENABLE_SYSTEMTAP="${enableval}"], [ENABLE_SYSTEMTAP='no'])
6fa69ac
+AM_CONDITIONAL([ENABLE_SYSTEMTAP], [test x$ENABLE_SYSTEMTAP = xyes])
6fa69ac
+AC_MSG_RESULT(${ENABLE_SYSTEMTAP})
6fa69ac
+
6fa69ac
+if test "x${ENABLE_SYSTEMTAP}" = xyes; then
6fa69ac
+  # Additional configuration for --enable-systemtap is HERE
6fa69ac
+  AC_CHECK_PROGS(DTRACE, dtrace)
6fa69ac
+  if test -z "$DTRACE"; then
6fa69ac
+    AC_MSG_ERROR([dtrace not found])
6fa69ac
+  fi
6fa69ac
+  AC_CHECK_HEADER([sys/sdt.h], [SDT_H_FOUND='yes'],
6fa69ac
+                [SDT_H_FOUND='no';
6fa69ac
+                   AC_MSG_ERROR([systemtap support needs sys/sdt.h header])])
6fa69ac
+  AC_DEFINE([HAVE_SYSTEMTAP], [1], [Define to 1 if using SystemTap probes.])
6fa69ac
+  AC_ARG_WITH([tapset-install-dir],
6fa69ac
+	      [AS_HELP_STRING([--with-tapset-install-dir], 
6fa69ac
+	         [The absolute path where the tapset dir will be installed])],
6fa69ac
+	      [if test "x${withval}" = x; then
6fa69ac
+		 ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"
6fa69ac
+	       else
6fa69ac
+		 ABS_TAPSET_DIR="${withval}"
6fa69ac
+	       fi], [ABS_TAPSET_DIR="\$(datadir)/systemtap/tapset"])
6fa69ac
+  AC_SUBST(ABS_TAPSET_DIR)
6fa69ac
+fi
6fa69ac
+
6fa69ac
 # Solaris needs some libraries for functions
6fa69ac
 AC_SEARCH_LIBS(socket, [socket])
6fa69ac
 AC_SEARCH_LIBS(inet_ntoa, [nsl])
c72a792
@@ -701,6 +730,7 @@ AC_OUTPUT([
6fa69ac
   tests/Makefile
c72a792
   server/tests/Makefile
c72a792
   doc/devel/doxyfile
6fa69ac
+  tapset/Makefile
6fa69ac
 ])
6fa69ac
 
6fa69ac
 sh util/bindvar.sh
c72a792
diff -up dhcp-4.2.5b1/Makefile.am.systemtap dhcp-4.2.5b1/Makefile.am
c72a792
--- dhcp-4.2.5b1/Makefile.am.systemtap	2012-12-17 16:56:40.461882654 +0100
c72a792
+++ dhcp-4.2.5b1/Makefile.am	2012-12-17 16:56:40.597880870 +0100
c72a792
@@ -30,5 +30,8 @@ endif
6fa69ac
 
3d2a80f
 SUBDIRS += includes tests common omapip client dhcpctl relay server
6fa69ac
 
6fa69ac
+SUBDIRS += tapset
6fa69ac
+#DIST_SUBDIRS = $(SUBDIRS)
6fa69ac
+
6fa69ac
 nobase_include_HEADERS = dhcpctl/dhcpctl.h
6fa69ac
 
c72a792
diff -up dhcp-4.2.5b1/server/dhcp.c.systemtap dhcp-4.2.5b1/server/dhcp.c
c72a792
--- dhcp-4.2.5b1/server/dhcp.c.systemtap	2012-12-17 16:56:40.483882364 +0100
c72a792
+++ dhcp-4.2.5b1/server/dhcp.c	2012-12-17 16:56:40.599880842 +0100
6fa69ac
@@ -36,7 +36,7 @@
6fa69ac
 #include <errno.h>
6fa69ac
 #include <limits.h>
6fa69ac
 #include <sys/time.h>
6fa69ac
-
6fa69ac
+#include "trace.h"
6fa69ac
 static void commit_leases_ackout(void *foo);
6fa69ac
 static void maybe_return_agent_options(struct packet *packet,
6fa69ac
 				       struct option_state *options);
6fa69ac
@@ -275,6 +275,8 @@ void dhcpdiscover (packet, ms_nulltp)
6fa69ac
 	dhcp_failover_state_t *peer;
6fa69ac
 #endif
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_DISCOVER_START());
6fa69ac
+
6fa69ac
 	find_lease (&lease, packet, packet -> shared_network,
6fa69ac
 		    0, &peer_has_leases, (struct lease *)0, MDL);
6fa69ac
 
6fa69ac
@@ -399,6 +401,8 @@ void dhcpdiscover (packet, ms_nulltp)
6fa69ac
       out:
6fa69ac
 	if (lease)
6fa69ac
 		lease_dereference (&lease, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_DISCOVER_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 void dhcprequest (packet, ms_nulltp, ip_lease)
d5d042f
@@ -421,6 +425,8 @@ void dhcprequest (packet, ms_nulltp, ip_
d5d042f
 #endif
6fa69ac
 	int have_requested_addr = 0;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_REQUEST_START());
6fa69ac
+
6fa69ac
 	oc = lookup_option (&dhcp_universe, packet -> options,
6fa69ac
 			    DHO_DHCP_REQUESTED_ADDRESS);
6fa69ac
 	memset (&data, 0, sizeof data);
c72a792
@@ -700,6 +706,9 @@ void dhcprequest (packet, ms_nulltp, ip_
6fa69ac
 		log_info ("%s: unknown lease %s.", msgbuf, piaddr (cip));
6fa69ac
 
6fa69ac
       out:
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_REQUEST_DONE());
6fa69ac
+
6fa69ac
 	if (subnet)
6fa69ac
 		subnet_dereference (&subnet, MDL);
6fa69ac
 	if (lease)
c72a792
@@ -718,6 +727,7 @@ void dhcprelease (packet, ms_nulltp)
6fa69ac
 	const char *s;
6fa69ac
 	char msgbuf [1024], cstr[16]; /* XXX */
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_RELEASE_START());
6fa69ac
 
6fa69ac
 	/* DHCPRELEASE must not specify address in requested-address
6fa69ac
 	   option, but old protocol specs weren't explicit about this,
c72a792
@@ -842,6 +852,8 @@ void dhcprelease (packet, ms_nulltp)
6fa69ac
 #endif
6fa69ac
 	if (lease)
6fa69ac
 		lease_dereference (&lease, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_RELEASE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 void dhcpdecline (packet, ms_nulltp)
c72a792
@@ -859,6 +871,8 @@ void dhcpdecline (packet, ms_nulltp)
6fa69ac
 	struct option_cache *oc;
6fa69ac
 	struct data_string data;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_DECLINE_START());
6fa69ac
+
6fa69ac
 	/* DHCPDECLINE must specify address. */
6fa69ac
 	if (!(oc = lookup_option (&dhcp_universe, packet -> options,
6fa69ac
 				  DHO_DHCP_REQUESTED_ADDRESS)))
c72a792
@@ -970,6 +984,8 @@ void dhcpdecline (packet, ms_nulltp)
6fa69ac
 		option_state_dereference (&options, MDL);
6fa69ac
 	if (lease)
6fa69ac
 		lease_dereference (&lease, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_DECLINE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 void dhcpinform (packet, ms_nulltp)
c72a792
@@ -993,6 +1009,8 @@ void dhcpinform (packet, ms_nulltp)
d5d042f
 	struct interface_info *interface;
d5d042f
 	int result;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_INFORM_START());
6fa69ac
+
6fa69ac
 	/* The client should set ciaddr to its IP address, but apparently
6fa69ac
 	   it's common for clients not to do this, so we'll use their IP
6fa69ac
 	   source address if they didn't set ciaddr. */
c72a792
@@ -1350,6 +1368,8 @@ void dhcpinform (packet, ms_nulltp)
d5d042f
 
6fa69ac
 	if (subnet)
6fa69ac
 		subnet_dereference (&subnet, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_INFORM_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 void nak_lease (packet, cip)
c72a792
@@ -1366,6 +1386,8 @@ void nak_lease (packet, cip)
6fa69ac
 	struct option_state *options = (struct option_state *)0;
6fa69ac
 	struct option_cache *oc = (struct option_cache *)0;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_NAK_LEASE_START());
6fa69ac
+
6fa69ac
 	option_state_allocate (&options, MDL);
6fa69ac
 	memset (&outgoing, 0, sizeof outgoing);
6fa69ac
 	memset (&raw, 0, sizeof raw);
c72a792
@@ -1532,6 +1554,7 @@ void nak_lease (packet, cip)
d5d042f
                            packet->interface->name);
d5d042f
         }
d5d042f
 
6fa69ac
+	TRACE(DHCPD_NAK_LEASE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 void ack_lease (packet, lease, offer, when, msg, ms_nulltp, hp)
c72a792
@@ -1573,6 +1596,8 @@ void ack_lease (packet, lease, offer, wh
6fa69ac
 	if (lease -> state)
6fa69ac
 		return;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_ACK_LEASE_START());
6fa69ac
+
6fa69ac
 	/* Save original cltt for comparison later. */
6fa69ac
 	lease_cltt = lease->cltt;
6fa69ac
 
c72a792
@@ -2936,6 +2961,8 @@ void ack_lease (packet, lease, offer, wh
6fa69ac
 #endif
6fa69ac
 			dhcp_reply(lease);
6fa69ac
 	}
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_ACK_LEASE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /*
c72a792
@@ -3088,6 +3115,8 @@ void dhcp_reply (lease)
6fa69ac
 	if (!state)
6fa69ac
 		log_fatal ("dhcp_reply was supplied lease with no state!");
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_REPLY_START());
6fa69ac
+
6fa69ac
 	/* Compose a response for the client... */
6fa69ac
 	memset (&raw, 0, sizeof raw);
6fa69ac
 	memset (&d1, 0, sizeof d1);
c72a792
@@ -3309,6 +3338,8 @@ void dhcp_reply (lease)
6fa69ac
 
6fa69ac
 	free_lease_state (state, MDL);
6fa69ac
 	lease -> state = (struct lease_state *)0;
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_REPLY_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 int find_lease (struct lease **lp,
c72a792
@@ -3331,6 +3362,8 @@ int find_lease (struct lease **lp,
6fa69ac
 	struct data_string client_identifier;
6fa69ac
 	struct hardware h;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_FIND_LEASE_START());
6fa69ac
+
6fa69ac
 #if defined(FAILOVER_PROTOCOL)
6fa69ac
 	/* Quick check to see if the peer has leases. */
6fa69ac
 	if (peer_has_leases) {
c72a792
@@ -4058,6 +4091,9 @@ int find_lease (struct lease **lp,
6fa69ac
 #if defined (DEBUG_FIND_LEASE)
6fa69ac
 	log_info ("Not returning a lease.");
6fa69ac
 #endif
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_FIND_LEASE_DONE());
6fa69ac
+
6fa69ac
 	return 0;
6fa69ac
 }
6fa69ac
 
c72a792
diff -up dhcp-4.2.5b1/server/dhcpd.c.systemtap dhcp-4.2.5b1/server/dhcpd.c
c72a792
--- dhcp-4.2.5b1/server/dhcpd.c.systemtap	2012-12-17 16:56:40.578881119 +0100
c72a792
+++ dhcp-4.2.5b1/server/dhcpd.c	2012-12-17 16:56:40.599880842 +0100
ee81fb4
@@ -58,6 +58,8 @@ static const char url [] =
ee81fb4
 #  undef group
ee81fb4
 #endif /* PARANOIA */
6fa69ac
 
6fa69ac
+#include "trace.h"
6fa69ac
+
c72a792
 #ifndef UNIT_TEST
6fa69ac
 static void usage(void);
c72a792
 #endif
c72a792
@@ -865,6 +867,7 @@ main(int argc, char **argv) {
ee81fb4
 	omapi_set_int_value ((omapi_object_t *)dhcp_control_object,
ee81fb4
 			     (omapi_object_t *)0, "state", server_running);
ee81fb4
 
ee81fb4
+        TRACE(DHCPD_MAIN());
6fa69ac
 	/* Receive packets and dispatch them... */
6fa69ac
 	dispatch ();
6fa69ac
 
c72a792
diff -up dhcp-4.2.5b1/server/dhcpv6.c.systemtap dhcp-4.2.5b1/server/dhcpv6.c
c72a792
--- dhcp-4.2.5b1/server/dhcpv6.c.systemtap	2012-12-17 16:56:40.571881210 +0100
c72a792
+++ dhcp-4.2.5b1/server/dhcpv6.c	2012-12-17 16:56:40.601880816 +0100
6fa69ac
@@ -15,6 +15,7 @@
6fa69ac
  */
6fa69ac
 
6fa69ac
 #include "dhcpd.h"
6fa69ac
+#include "trace.h"
6fa69ac
 
6fa69ac
 #ifdef DHCPv6
6fa69ac
 
c72a792
@@ -4212,6 +4213,8 @@ static void
6fa69ac
 dhcpv6_solicit(struct data_string *reply_ret, struct packet *packet) {
6fa69ac
 	struct data_string client_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_SOLICIT_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Validate our input.
6fa69ac
 	 */
c72a792
@@ -4225,6 +4228,8 @@ dhcpv6_solicit(struct data_string *reply
6fa69ac
 	 * Clean up.
6fa69ac
 	 */
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_SOLICIT_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /*
c72a792
@@ -4238,6 +4243,8 @@ dhcpv6_request(struct data_string *reply
6fa69ac
 	struct data_string client_id;
6fa69ac
 	struct data_string server_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_REQUEST_START());
6fa69ac
+
6fa69ac
 	/*
6fa69ac
 	 * Validate our input.
6fa69ac
 	 */
c72a792
@@ -4255,6 +4262,8 @@ dhcpv6_request(struct data_string *reply
6fa69ac
 	 */
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
 	data_string_forget(&server_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_REQUEST_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /* Find a DHCPv6 packet's shared network from hints in the packet.
c72a792
@@ -4367,6 +4376,8 @@ dhcpv6_confirm(struct data_string *reply
6fa69ac
 	struct dhcpv6_packet *reply = (struct dhcpv6_packet *)reply_data;
6fa69ac
 	int reply_ofs = (int)(offsetof(struct dhcpv6_packet, options));
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_CONFIRM_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Basic client message validation.
6fa69ac
 	 */
c72a792
@@ -4553,6 +4564,8 @@ exit:
6fa69ac
 		option_state_dereference(&cli_enc_opt_state, MDL);
6fa69ac
 	if (opt_state != NULL)
6fa69ac
 		option_state_dereference(&opt_state, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_CONFIRM_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /*
c72a792
@@ -4567,6 +4580,8 @@ dhcpv6_renew(struct data_string *reply,
6fa69ac
 	struct data_string client_id;
6fa69ac
 	struct data_string server_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_RENEW_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Validate the request.
6fa69ac
 	 */
c72a792
@@ -4584,6 +4599,8 @@ dhcpv6_renew(struct data_string *reply,
6fa69ac
 	 */
6fa69ac
 	data_string_forget(&server_id, MDL);
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_RENEW_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /*
c72a792
@@ -4597,6 +4614,8 @@ static void
6fa69ac
 dhcpv6_rebind(struct data_string *reply, struct packet *packet) {
6fa69ac
 	struct data_string client_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_REBIND_START());
6fa69ac
+
6fa69ac
 	if (!valid_client_msg(packet, &client_id)) {
6fa69ac
 		return;
6fa69ac
 	}
c72a792
@@ -4604,6 +4623,8 @@ dhcpv6_rebind(struct data_string *reply,
6fa69ac
 	lease_to_client(reply, packet, &client_id, NULL);
6fa69ac
 
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_REBIND_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 static void
c72a792
@@ -5048,6 +5069,8 @@ dhcpv6_decline(struct data_string *reply
6fa69ac
 	struct data_string client_id;
6fa69ac
 	struct data_string server_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_DECLINE_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Validate our input.
6fa69ac
 	 */
c72a792
@@ -5068,6 +5091,8 @@ dhcpv6_decline(struct data_string *reply
6fa69ac
 
6fa69ac
 	data_string_forget(&server_id, MDL);
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_DECLINE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 static void
c72a792
@@ -5516,6 +5541,8 @@ dhcpv6_release(struct data_string *reply
6fa69ac
 	struct data_string client_id;
6fa69ac
 	struct data_string server_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_RELEASE_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Validate our input.
6fa69ac
 	 */
c72a792
@@ -5537,6 +5564,8 @@ dhcpv6_release(struct data_string *reply
6fa69ac
 
6fa69ac
 	data_string_forget(&server_id, MDL);
6fa69ac
 	data_string_forget(&client_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_RELEASE_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /*
c72a792
@@ -5549,6 +5578,8 @@ dhcpv6_information_request(struct data_s
6fa69ac
 	struct data_string client_id;
6fa69ac
 	struct data_string server_id;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_INFORMATION_REQUEST_START());
6fa69ac
+
6fa69ac
 	/*
6fa69ac
 	 * Validate our input.
6fa69ac
 	 */
c72a792
@@ -5580,6 +5611,8 @@ dhcpv6_information_request(struct data_s
6fa69ac
 		data_string_forget(&client_id, MDL);
6fa69ac
 	}
6fa69ac
 	data_string_forget(&server_id, MDL);
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_INFORMATION_REQUEST_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 /* 
c72a792
@@ -5608,6 +5641,8 @@ dhcpv6_relay_forw(struct data_string *re
6fa69ac
 	struct dhcpv6_relay_packet *reply;
6fa69ac
 	int reply_ofs;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_6_RELAY_FORW_START());
6fa69ac
+
6fa69ac
 	/* 
6fa69ac
 	 * Initialize variables for early exit.
6fa69ac
 	 */
c72a792
@@ -5867,6 +5902,8 @@ exit:
6fa69ac
 	if (enc_packet != NULL) {
6fa69ac
 		packet_dereference(&enc_packet, MDL);
6fa69ac
 	}
6fa69ac
+
6fa69ac
+	TRACE(DHCPD_6_RELAY_FORW_DONE());
6fa69ac
 }
6fa69ac
 
6fa69ac
 static void
c72a792
diff -up dhcp-4.2.5b1/server/failover.c.systemtap dhcp-4.2.5b1/server/failover.c
c72a792
--- dhcp-4.2.5b1/server/failover.c.systemtap	2012-12-05 02:17:39.000000000 +0100
c72a792
+++ dhcp-4.2.5b1/server/failover.c	2012-12-17 16:56:40.603880790 +0100
d5d042f
@@ -36,6 +36,8 @@
6fa69ac
 #include "dhcpd.h"
6fa69ac
 #include <omapip/omapip_p.h>
6fa69ac
 
6fa69ac
+#include "trace.h"
6fa69ac
+
6fa69ac
 #if defined (FAILOVER_PROTOCOL)
6fa69ac
 dhcp_failover_state_t *failover_states;
6fa69ac
 static isc_result_t do_a_failover_option (omapi_object_t *,
d5d042f
@@ -1712,6 +1714,8 @@ isc_result_t dhcp_failover_set_state (dh
6fa69ac
     struct lease *l;
6fa69ac
     struct timeval tv;
6fa69ac
 
6fa69ac
+    TRACE(DHCPD_FAILOVER_SET_STATE_START(state->me.state, new_state));
6fa69ac
+
6fa69ac
     /* If we're in certain states where we're sending updates, and the peer
6fa69ac
      * state changes, we need to re-schedule any pending updates just to
6fa69ac
      * be on the safe side.  This results in retransmission.
d5d042f
@@ -1939,6 +1943,8 @@ isc_result_t dhcp_failover_set_state (dh
6fa69ac
 	    break;
6fa69ac
     }
6fa69ac
 
6fa69ac
+    TRACE(DHCPD_FAILOVER_SET_STATE_DONE());
6fa69ac
+
6fa69ac
     return ISC_R_SUCCESS;
6fa69ac
 }
6fa69ac
 
d5d042f
@@ -2422,6 +2428,8 @@ dhcp_failover_pool_dobalance(dhcp_failov
6fa69ac
 	if (state -> me.state != normal)
6fa69ac
 		return 0;
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_FAILOVER_POOL_DOBALANCE_START());
6fa69ac
+
6fa69ac
 	state->last_balance = cur_time;
6fa69ac
 
6fa69ac
 	for (s = shared_networks ; s ; s = s->next) {
d5d042f
@@ -2582,6 +2590,8 @@ dhcp_failover_pool_dobalance(dhcp_failov
6fa69ac
 	if (leases_queued)
6fa69ac
 		commit_leases();
6fa69ac
 
6fa69ac
+	TRACE(DHCPD_FAILOVER_POOL_DOBALANCE_DONE());
6fa69ac
+
6fa69ac
 	return leases_queued;
6fa69ac
 }
6fa69ac
 
c72a792
diff -up dhcp-4.2.5b1/server/Makefile.am.systemtap dhcp-4.2.5b1/server/Makefile.am
c72a792
--- dhcp-4.2.5b1/server/Makefile.am.systemtap	2012-12-17 16:56:40.563881316 +0100
c72a792
+++ dhcp-4.2.5b1/server/Makefile.am	2012-12-17 16:56:40.603880790 +0100
c72a792
@@ -10,7 +10,7 @@ dist_sysconf_DATA = dhcpd.conf.example
6fa69ac
 sbin_PROGRAMS = dhcpd
6fa69ac
 dhcpd_SOURCES = dhcpd.c dhcp.c bootp.c confpars.c db.c class.c failover.c \
6fa69ac
 		omapi.c mdb.c stables.c salloc.c ddns.c dhcpleasequery.c \
6fa69ac
-		dhcpv6.c mdb6.c ldap.c ldap_casa.c
6fa69ac
+		dhcpv6.c mdb6.c ldap.c ldap_casa.c probes.d trace.h
6fa69ac
 
6fa69ac
 dhcpd_CFLAGS = $(LDAP_CFLAGS)
6fa69ac
 dhcpd_LDADD = ../common/libdhcp.a ../omapip/libomapi.la \
c72a792
@@ -19,3 +19,13 @@ dhcpd_LDADD = ../common/libdhcp.a ../oma
6fa69ac
 man_MANS = dhcpd.8 dhcpd.conf.5 dhcpd.leases.5
6fa69ac
 EXTRA_DIST = $(man_MANS)
6fa69ac
 
6fa69ac
+if ENABLE_SYSTEMTAP
6fa69ac
+BUILT_SOURCES = probes.h
6fa69ac
+probes.h: probes.d
6fa69ac
+	$(DTRACE) -C -h -s $< -o $@
6fa69ac
+
6fa69ac
+probes.o: probes.d
6fa69ac
+	$(DTRACE) -C -G -s $< -o $@
6fa69ac
+
6fa69ac
+dhcpd_LDADD += probes.o
6fa69ac
+endif
c72a792
diff -up dhcp-4.2.5b1/server/probes.d.systemtap dhcp-4.2.5b1/server/probes.d
c72a792
--- dhcp-4.2.5b1/server/probes.d.systemtap	2012-12-17 16:56:40.603880790 +0100
c72a792
+++ dhcp-4.2.5b1/server/probes.d	2012-12-17 16:56:40.603880790 +0100
6fa69ac
@@ -0,0 +1,43 @@
6fa69ac
+provider dhcpd {
6fa69ac
+	 probe main();
6fa69ac
+	 probe discover_start()
6fa69ac
+	 probe discover_done()
6fa69ac
+	 probe request_start()
6fa69ac
+	 probe request_done()
6fa69ac
+	 probe release_start()
6fa69ac
+	 probe release_done()
6fa69ac
+	 probe decline_start()
6fa69ac
+	 probe decline_done()
6fa69ac
+	 probe inform_start()
6fa69ac
+	 probe inform_done()
6fa69ac
+	 probe nak_lease_start()
6fa69ac
+	 probe nak_lease_done()
6fa69ac
+	 probe ack_lease_start()
6fa69ac
+	 probe ack_lease_done()
6fa69ac
+	 probe reply_start()
6fa69ac
+	 probe reply_done()
6fa69ac
+	 probe find_lease_start()
6fa69ac
+	 probe find_lease_done()
6fa69ac
+	 probe 6_solicit_start()
6fa69ac
+	 probe 6_solicit_done()
6fa69ac
+	 probe 6_request_start()
6fa69ac
+	 probe 6_request_done()
6fa69ac
+	 probe 6_confirm_start()
6fa69ac
+	 probe 6_confirm_done()
6fa69ac
+	 probe 6_renew_start()
6fa69ac
+	 probe 6_renew_done()
6fa69ac
+	 probe 6_rebind_start()
6fa69ac
+	 probe 6_rebind_done()
6fa69ac
+	 probe 6_decline_start()
6fa69ac
+	 probe 6_decline_done()
6fa69ac
+	 probe 6_release_start()
6fa69ac
+	 probe 6_release_done()
6fa69ac
+	 probe 6_information_request_start()
6fa69ac
+	 probe 6_information_request_done()
6fa69ac
+	 probe 6_relay_forw_start()
6fa69ac
+	 probe 6_relay_forw_done()
6fa69ac
+	 probe failover_pool_dobalance_start()
6fa69ac
+	 probe failover_pool_dobalance_done()
6fa69ac
+	 probe failover_set_state_start(int, int) /* state, new_state */
6fa69ac
+	 probe failover_set_state_done()
6fa69ac
+};
c72a792
diff -up dhcp-4.2.5b1/server/tests/Makefile.am.systemtap dhcp-4.2.5b1/server/tests/Makefile.am
c72a792
--- dhcp-4.2.5b1/server/tests/Makefile.am.systemtap	2012-12-17 16:56:40.564881302 +0100
c72a792
+++ dhcp-4.2.5b1/server/tests/Makefile.am	2012-12-17 16:56:57.505650518 +0100
c72a792
@@ -20,6 +20,10 @@ DHCPSRC = ../dhcp.c ../bootp.c ../confpa
c72a792
 DHCPLIBS = $(top_builddir)/common/libdhcp.a $(top_builddir)/omapip/libomapi.la    \
c72a792
           $(top_builddir)/dhcpctl/libdhcpctl.la $(BIND9_LIBDIR) -ldns-export -lisc-export
c72a792
 
c72a792
+if ENABLE_SYSTEMTAP
c72a792
+DHCPLIBS += ../probes.o
c72a792
+endif
c72a792
+
c72a792
 ATF_TESTS =
c72a792
 TESTS = 
c72a792
 if HAVE_ATF
c72a792
diff -up dhcp-4.2.5b1/server/trace.h.systemtap dhcp-4.2.5b1/server/trace.h
c72a792
--- dhcp-4.2.5b1/server/trace.h.systemtap	2012-12-17 16:56:40.604880777 +0100
c72a792
+++ dhcp-4.2.5b1/server/trace.h	2012-12-17 16:56:40.604880777 +0100
6fa69ac
@@ -0,0 +1,11 @@
6fa69ac
+// trace.h
6fa69ac
+
6fa69ac
+#include "config.h"
6fa69ac
+#ifdef HAVE_SYSTEMTAP
6fa69ac
+// include the generated probes header and put markers in code
6fa69ac
+#include "probes.h"
6fa69ac
+#define TRACE(probe) probe
6fa69ac
+#else
6fa69ac
+// Wrap the probe to allow it to be removed when no systemtap available
6fa69ac
+#define TRACE(probe)
6fa69ac
+#endif
c72a792
diff -up dhcp-4.2.5b1/tapset/dhcpd.stp.systemtap dhcp-4.2.5b1/tapset/dhcpd.stp
c72a792
--- dhcp-4.2.5b1/tapset/dhcpd.stp.systemtap	2012-12-17 16:56:40.604880777 +0100
c72a792
+++ dhcp-4.2.5b1/tapset/dhcpd.stp	2012-12-17 16:56:40.604880777 +0100
6fa69ac
@@ -0,0 +1,212 @@
6fa69ac
+/* dhcpd tapset
6fa69ac
+   Copyright (C) 2011, Red Hat Inc.
6fa69ac
+ */
6fa69ac
+
6fa69ac
+probe dhcpd_main = process("dhcpd").mark("main")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s(locals: %s)", $$name, $$locals);
6fa69ac
+  
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_discover_start = process("dhcpd").mark("discover_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_discover_done = process("dhcpd").mark("discover_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_request_start = process("dhcpd").mark("request_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_request_done = process("dhcpd").mark("request_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_release_start = process("dhcpd").mark("release_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_release_done = process("dhcpd").mark("release_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_decline_start = process("dhcpd").mark("decline_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_decline_done = process("dhcpd").mark("decline_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_inform_start = process("dhcpd").mark("inform_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_inform_done = process("dhcpd").mark("inform_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_nak_lease_start = process("dhcpd").mark("nak_lease_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_nak_lease_done = process("dhcpd").mark("nak_lease_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_ack_lease_start = process("dhcpd").mark("ack_lease_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_ack_lease_done = process("dhcpd").mark("ack_lease_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_reply_start = process("dhcpd").mark("reply_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_reply_done = process("dhcpd").mark("reply_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_find_lease_start = process("dhcpd").mark("find_lease_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_find_lease_done = process("dhcpd").mark("find_lease_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_solicit_start = process("dhcpd").mark("6_solicit_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_solicit_done = process("dhcpd").mark("6_solicit_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_request_start = process("dhcpd").mark("6_request_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_request_done = process("dhcpd").mark("6_request_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_confirm_start = process("dhcpd").mark("6_confirm_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_confirm_done = process("dhcpd").mark("6_confirm_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_renew_start = process("dhcpd").mark("6_renew_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_renew_done = process("dhcpd").mark("6_renew_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_rebind_start = process("dhcpd").mark("6_rebind_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_rebind_done = process("dhcpd").mark("6_rebind_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_decline_start = process("dhcpd").mark("6_decline_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_decline_done = process("dhcpd").mark("6_decline_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_release_start = process("dhcpd").mark("6_release_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_release_done = process("dhcpd").mark("6_release_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_information_request_start = process("dhcpd").mark("6_information_request_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_information_request_done = process("dhcpd").mark("6_information_request_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_relay_forw_start = process("dhcpd").mark("6_relay_forw_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_6_relay_forw_done = process("dhcpd").mark("6_relay_forw_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_failover_pool_dobalance_start = process("dhcpd").mark("failover_pool_dobalance_start")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_failover_pool_dobalance_done = process("dhcpd").mark("failover_pool_dobalance_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
6fa69ac
+
6fa69ac
+
6fa69ac
+probe dhcpd_failover_set_state_start = process("dhcpd").mark("failover_set_state_start")
6fa69ac
+{
6fa69ac
+  state = $arg1;
6fa69ac
+  new_state = $arg2;
6fa69ac
+  probestr = sprintf("%s(state=%d, new_state=%d)", $$name, state, new_state);
6fa69ac
+}
6fa69ac
+
6fa69ac
+probe dhcpd_failover_set_state_done = process("dhcpd").mark("failover_set_state_done")
6fa69ac
+{
6fa69ac
+  probestr = sprintf("%s", $$name);
6fa69ac
+}
c72a792
diff -up dhcp-4.2.5b1/tapset/Makefile.am.systemtap dhcp-4.2.5b1/tapset/Makefile.am
c72a792
--- dhcp-4.2.5b1/tapset/Makefile.am.systemtap	2012-12-17 16:56:40.604880777 +0100
c72a792
+++ dhcp-4.2.5b1/tapset/Makefile.am	2012-12-17 16:56:40.604880777 +0100
6fa69ac
@@ -0,0 +1,26 @@
6fa69ac
+# Makefile.am for dhcp/tapset
6fa69ac
+# Jiri Popelka
6fa69ac
+
6fa69ac
+.PHONY: clean-local install-data-hook uninstall-local
6fa69ac
+
6fa69ac
+#
6fa69ac
+EXTRA_DIST = dhcpd.stp
6fa69ac
+TAPSET_FILES = $(EXTRA_DIST)
6fa69ac
+TAPSET_INSTALL_DIR = $(DESTDIR)@ABS_TAPSET_DIR@
6fa69ac
+
6fa69ac
+if ENABLE_SYSTEMTAP
6fa69ac
+all-local: $(TAPSET_FILES)
6fa69ac
+
6fa69ac
+clean-local:
6fa69ac
+
6fa69ac
+install-data-hook:
6fa69ac
+	$(MKDIR_P) $(TAPSET_INSTALL_DIR)
6fa69ac
+	$(INSTALL_DATA) $(TAPSET_FILES) $(TAPSET_INSTALL_DIR)
6fa69ac
+
6fa69ac
+uninstall-local:
6fa69ac
+	@list='$(TAPSET_FILES)'; for p in $$list; do \
6fa69ac
+	  echo " rm -f '$(TAPSET_INSTALL_DIR)/$$p'"; \
6fa69ac
+	  rm -f "$(TAPSET_INSTALL_DIR)/$$p"; \
6fa69ac
+	done
6fa69ac
+endif
6fa69ac
+