majek / dump

Unfinished projects and snippets
508 stars 215 forks source link

udpsender to take payload size as parameter #4

Open vigneswaran opened 8 years ago

vigneswaran commented 8 years ago

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;