harness: fixing devif test
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 4 Aug 2017 10:31:47 +0000 (12:31 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Fri, 4 Aug 2017 10:31:47 +0000 (12:31 +0200)
Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

tools/harness/tests/devif_test.py
usr/tests/devif/Hakefile
usr/tests/devif/queue_interface.c

index 5595dff..be56155 100644 (file)
@@ -9,12 +9,14 @@
 
 import re, datetime
 import debug, tests
+import subprocess
+import os
+import socket, struct
 from common import TestCommon, TimeoutError
 from results import RowResults, PassFailResult
 
 TEST_TIMEOUT = datetime.timedelta(minutes=8)
 
-
 class DevifTests(TestCommon):
 
     def __init__(self, options):
@@ -26,6 +28,7 @@ class DevifTests(TestCommon):
     def boot(self, *args):
         super(DevifTests, self).boot(*args)
         self.set_timeout(TEST_TIMEOUT)
+       
 
     def get_modules(self, build, machine):
         self.machine = machine.name
@@ -33,18 +36,38 @@ class DevifTests(TestCommon):
         modules.add_module("e10k", ["auto", "function=0"])
         modules.add_module("sfn5122f", ["auto", "function=0"])
         modules.add_module("devif_idc", ["core=1"])
-        modules.add_module(self.get_module_name(), ["core=2", self.OP, self.CARD])
 
+        f = os.popen('ifconfig eno2 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
+        ip_string = f.read()
+        packedIP = socket.inet_aton(ip_string)
+        src_ip = struct.unpack("!L", packedIP)[0]
+
+        if self.CARD == "sfn5122f":
+            dst_string = subprocess.check_output('nslookup %s-sf.in.barrelfish.org | sed -n 5p | awk -F\" \" \'{print $NF}\'' % machine.name, shell=True)
+        else:
+            dst_string = subprocess.check_output('nslookup %s-e10k.in.barrelfish.org | sed -n 5p | awk -F\" \" \'{print $NF}\'' % machine.name, shell=True)
+
+        packedIP = socket.inet_aton(dst_string)
+        dst_ip = struct.unpack("!L", packedIP)[0]
+
+        modules.add_module(self.get_module_name(), ["core=2", self.OP, src_ip, dst_ip, self.CARD])
         return modules
 
     def get_finish_string(self):
         return "SUCCESS"
 
+    def process_line(self, line):
+        m = re.match(r'# IP Addr (\d+\.\d+\.\d+\.\d+)', line)
+        if m:
+            self.loop = subprocess.Popen('while :; do echo -n "Data Data Data" | nc -4u -q1 %s 7; done' % m.group(1), shell=True)
+
+
     def process_data(self, testdir, rawiter):
         passed = False
         for line in rawiter:
             if "SUCCESS" in line:
                 passed = True
+        self.loop.kill()
         return PassFailResult(passed)
 
 @tests.add_test
@@ -54,7 +77,6 @@ class DevifNetTxSF(DevifTests):
     OP = "net_tx"
     CARD = "sfn5122f"
 
-
 @tests.add_test
 class DevifNetTxE10k(DevifTests):
     ''' Devif Net TX Test'''
@@ -75,6 +97,10 @@ class DevifNetRxE10k(DevifTests):
     name = "devif_netrx_e10k"
     OP = "net_rx"
     CARD = "e10k"
+    f = os.popen('ifconfig eno2 | grep "inet\ addr" | cut -d: -f2 | cut -d" " -f1')
+    ip_string = f.read()
+    packedIP = socket.inet_aton(ip_string)
+    src_ip = struct.unpack("!L", packedIP)[0]
 
 @tests.add_test
 class DevifIdcTest(DevifTests):
@@ -82,6 +108,7 @@ class DevifIdcTest(DevifTests):
     name = "devif_idc_test"
     OP = "idc"
     CARD = "none"
+    src_ip = 0
 
 @tests.add_test
 class DevifDebug(DevifTests):
@@ -95,3 +122,4 @@ class DevifDebug(DevifTests):
         modules.add_module("devif_debug_test")
 
         return modules
+
index 3a50053..c4589b8 100644 (file)
@@ -14,7 +14,7 @@
                       cFiles = [ "queue_interface.c" ],
                       addLibraries = [ "devif" , "devif_backend_solarflare",
                                        "devif_backend_idc", "devif_backend_e10k", 
-                                       "bench" ] },
+                                       "bench", "net"]},
 
   build application { target = "devif_idc", 
                       cFiles = [ "idc_endpoint.c" ],
index c89b08c..cbe7921 100644 (file)
 #include <devif/backends/descq.h>
 #include <bench/bench.h>
 #include <net_interfaces/flags.h>
+#include <net/net_filter.h>
 
-
-//#define DEBUG(x...) printf("devif_test: " x)
-#define DEBUG(x...) do {} while (0)
+#define DEBUG(x...) printf("devif_test: " x)
+//#define DEBUG(x...) do {} while (0)
 
 #define TX_BUF_SIZE 2048
 #define RX_BUF_SIZE 2048
@@ -34,6 +34,8 @@
 #define MEMORY_SIZE BASE_PAGE_SIZE*512
 
 static char* card;
+static uint32_t ip_dst;
+static uint32_t ip_src;
 
 static struct capref memory_rx;
 static struct capref memory_tx;
@@ -42,6 +44,8 @@ static regionid_t regid_tx;
 static struct frame_identity id;
 static lpaddr_t phys_rx;
 static lpaddr_t phys_tx;
+static struct net_filter_state* filter;
+
 
 static volatile uint32_t num_tx = 0;
 static volatile uint32_t num_rx = 0;
@@ -148,17 +152,19 @@ static void event_cb(void* queue)
 }
 
 static struct devq* create_net_queue(char* card_name)
-{
+{   
     errval_t err;
+
     if (strcmp(card_name, "sfn5122f") == 0) {
         struct sfn5122f_queue* q;
         
         err = sfn5122f_queue_create(&q, event_cb, /* userlevel*/ true,
-                                    /*MSIX interrupts*/ false,
-                                    /*default queue*/ true);
+                                    /*interrupts*/ false,
+                                    /*default queue*/ false);
         if (err_is_fail(err)){
             USER_PANIC("Allocating devq failed \n");
         }
+
         return (struct devq*) q;
     }
 
@@ -332,6 +338,25 @@ static void test_net_rx(void)
         USER_PANIC_ERR(err, "trigger failed.");
     }
 
+    err = net_filter_init(&filter, card);
+    if (err_is_fail(err)) {
+        USER_PANIC("Installing filter failed \n");
+    }
+
+    struct net_filter_ip ip_filt ={
+        .qid = 1,
+        .ip_dst = ip_dst,
+        .ip_src = ip_src, 
+        .port_src = 0,
+        .port_dst = 7,
+        .type = NET_FILTER_UDP,
+    };
+
+    err = net_filter_ip_install(filter, &ip_filt);
+    if (err_is_fail(err)){
+        USER_PANIC("Allocating devq failed \n");
+    }
+
     err = devq_register(q, memory_rx, &regid_rx);
     if (err_is_fail(err)){
         USER_PANIC("Registering memory to devq failed \n");
@@ -355,9 +380,9 @@ static void test_net_rx(void)
             break;
         }
     }
-
-
-    err = devq_control(q, 1, 1, NULL);
+    uint64_t ret;   
+    err = devq_control(q, 1, 1, &ret);
     if (err_is_fail(err)){
         printf("%s \n", err_getstring(err));
         USER_PANIC("Devq control failed \n");
@@ -411,7 +436,7 @@ static void test_idc_queue(void)
     struct descq* queue;
     struct descq_func_pointer f;
     f.notify = descq_notify;
-    
+   
     debug_printf("Descriptor queue test started \n");
     err = descq_create(&queue, DESCQ_DEFAULT_SIZE, "test_queue",
                        false, true, true, NULL, &f);
@@ -518,8 +543,15 @@ int main(int argc, char *argv[])
 
     phys_tx = id.base;
 
-    if (argc > 2) {
-        card = argv[2];
+    if (argc > 3) {
+        ip_src = atoi(argv[2]);
+        ip_dst = atoi(argv[3]);
+    } else {
+        USER_PANIC("NO src or dst IP given \n");
+    }
+
+    if (argc > 4) {
+        card = argv[4];
         printf("Card =%s \n", card);
     } else {
         card = "e10k";