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):
def boot(self, *args):
super(DevifTests, self).boot(*args)
self.set_timeout(TEST_TIMEOUT)
+
def get_modules(self, build, machine):
self.machine = machine.name
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
OP = "net_tx"
CARD = "sfn5122f"
-
@tests.add_test
class DevifNetTxE10k(DevifTests):
''' Devif Net TX Test'''
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):
name = "devif_idc_test"
OP = "idc"
CARD = "none"
+ src_ip = 0
@tests.add_test
class DevifDebug(DevifTests):
modules.add_module("devif_debug_test")
return modules
+
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" ],
#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
#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;
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;
}
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;
}
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, ®id_rx);
if (err_is_fail(err)){
USER_PANIC("Registering memory to devq failed \n");
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");
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);
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";