developers and system administrator to diagnose problems in the Linux Networking
stack, specifically in our ability to diagnose where packets are getting
dropped. From my probing, I've come to the conclusion that there are four main
-shortcommings in our current environment:
+shortcomings in our current environment:
1) Consolidation, or lack thereof. Currently, if you would like to check on the
status of dropped packets in the kernel, you need to check at least 3 places,
receive buffer was full, or does it mean its checksum was bad? Dropwatch
attempts to disambiguate the causes for dropped packets.
-4) Performance. Utilties can be written to aggregate the data in the various
+4) Performance. Utilities can be written to aggregate the data in the various
other utilities to solve some of these problems, but such solutions require
periodic polling of several interfaces, which is far from optimal, especially
when lost packets are rare. This solution improves on the performance aspect by
-implementing a kernel feature which allows asyncronous notification of dropped
+implementing a kernel feature which allows asynchronous notification of dropped
packets when they happen.
Building Dropwatch
/*
* This is a translator. given an input address, this will convert it into a
* function and offset. Unless overridden, it will automatically determine
- * tranlations using the following methods, in order of priority:
+ * translations using the following methods, in order of priority:
* 1) /usr/lib/debug/<kernel version> using libbfd
* 2) /proc/kallsyms
*/
static int lookup_null_init(void)
{
- printf("Initalizing null lookup method\n");
+ printf("Initializing null lookup method\n");
return 0;
}
/*
* This is a translator. given an input address, this will convert it into a
* function and offset. Unless overridden, it will automatically determine
- * tranlations using the following methods, in order of priority:
+ * translations using the following methods, in order of priority:
* 1) /usr/lib/debug/<kernel version> using libbfd
* 2) /proc/kallsyms
*/
/*
- * Initalization routine
+ * Initialization routine
* INPUTS:
* method - enum describing how to do translation
* * METHOD_NULL : Just print pc values, not symbols
* * METHOD_DEBUGINFO : use debuginfo package
* * METHOD_KALLSYMS : use /proc/kallsyms
* returns:
- * * 0 : initalization succeded
- * * < 0 : initalization failed
+ * * 0 : initialization succeeded
+ * * < 0 : initialization failed
*/
typedef enum {
METHOD_NULL = 0,
static int lookup_kas_init(void)
{
- printf("Initalizing kallsyms db\n");
+ printf("Initializing kallsyms db\n");
return 0;
}
#include "lookup.h"
/*
- * This is just in place until the kernel changes get comitted
+ * This is just in place until the kernel changes get committed
*/
#ifndef NETLINK_DRPMON
#define NETLINK_DRPMON 20
printf("exit\t\t\t\t - Quit dropwatch\n");
printf("help\t\t\t\t - Display this message\n");
printf("set:\n");
- printf("\talertlimit <number>\t - caputre only this many alert packets\n");
+ printf("\talertlimit <number>\t - capture only this many alert packets\n");
printf("start\t\t\t\t - start capture\n");
printf("stop\t\t\t\t - stop capture\n");
}
/*
- * Initalize our lookup library
+ * Initialize our lookup library
*/
init_lookup(meth);