dump
dump copied to clipboard
udpsender to take payload size as parameter
Hello,
The following patch enables user to specify payload size to the 'udpsender' program (part of 'how-to-receive-a-million-packets' project). This may be useful, if someone wants to generate packets of different sizes.
--- a/udpsender.c 2015-09-21 12:35:30.341486515 +0530
+++ b/udpsender.c 2015-09-21 17:07:00.730645321 +0530
@@ -8,6 +8,10 @@
#include "common.h"
+/* Minimum payload: 64 - 42 (frame overhead)
+ * Maximum payload: 1518 - 42 (frame overhead) */
+#define MIN_PAYLOAD 22
+#define MAX_PAYLOAD 1476
struct state {
struct net_addr *target_addr;
@@ -64,13 +68,18 @@
int main(int argc, const char *argv[])
{
int packets_in_buf = 1024;
- const char *payload = (const char[32]){0};
- int payload_sz = 32;
+ const char *payload = (const char[MAX_PAYLOAD]){0};
+ int payload_sz = MIN_PAYLOAD;
- if (argc == 1) {
- FATAL("Usage: %s [target ip:port] [target ...]", argv[0]);
+ if (argc <= 2) {
+ FATAL("Usage: %s [payload size] [target ip:port] [target ...]", argv[0]);
}
+ payload_sz = atoi(argv[1]);
+ payload_sz = (payload_sz >= MIN_PAYLOAD && payload_sz <= MAX_PAYLOAD) ? payload_sz : MIN_PAYLOAD;
+ argv++;
+ argc--;
+
struct net_addr *target_addrs = calloc(argc-1, sizeof(struct net_addr));
int thread_num = argc - 1;