net_sockets: change service so it can be used for all the NICS.
authorRoni Häcki <roni.haecki@inf.ethz.ch>
Mon, 18 Sep 2017 14:34:00 +0000 (16:34 +0200)
committerRoni Häcki <roni.haecki@inf.ethz.ch>
Mon, 18 Sep 2017 14:34:00 +0000 (16:34 +0200)
- net_sockets service now takes cardname as an arugment
- change all the tests and updated the device db

Signed-off-by: Roni Häcki <roni.haecki@inf.ethz.ch>

include/net_sockets/net_sockets.h
tools/harness/tests/basicNetwork.py
tools/harness/tests/devif_test.py
tools/harness/tests/nfscat.py
tools/harness/tests/tftp.py
tools/harness/tests/vmkit.py
tools/harness/tests/webserver.py
tools/harness/tests/xeonphi.py
usr/net_socket_server/Hakefile [moved from usr/drivers/net_socket_server/Hakefile with 69% similarity]
usr/net_socket_server/net_sockets_server.c [moved from usr/drivers/net_socket_server/e1000_net_sockets_server.c with 96% similarity]
usr/skb/programs/device_db.pl

index 28a1cae..5c9b7af 100644 (file)
@@ -46,5 +46,6 @@ void net_set_on_closed(struct net_socket *socket, net_closed_callback_t cb);
 
 
 errval_t net_sockets_init(void);
+errval_t net_sockets_init_with_card(char* cardname);
 
 #endif
index ea637b8..1c63311 100644 (file)
@@ -49,7 +49,7 @@ class NetCommon(TestCommon):
     def get_modules(self, build, machine):
         cardName = "e1000"
         modules = super(NetCommon, self).get_modules(build, machine)
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         nfsip = socket.gethostbyname(siteconfig.get('WEBSERVER_NFS_HOST'))
         modules.add_module("webserver", ["core=%d" % machine.get_coreids()[0], #2
                                cardName, nfsip,
index 8fcb1b0..568c9c4 100644 (file)
@@ -62,6 +62,7 @@ class DevifTests(TestCommon):
         self.machine = machine.name
         modules = super(DevifTests, self).get_modules(build, machine)
         modules.add_module("e10k", ["auto", "function=0"])
+        modules.add_module("net_sockets_server", ["auto"])
         modules.add_module("sfn5122f", ["auto", "function=0"])
         modules.add_module("devif_idc", ["core=1"])
 
@@ -163,6 +164,7 @@ class DevifUDP(DevifTests):
     def get_modules(self, build, machine):
         self.machine = machine.name
         modules = super(DevifTests, self).get_modules(build, machine)
+        modules.add_module("net_sockets_server", ["auto"])
         hostname = '%s.in.barrelfish.org' % subprocess.check_output('hostname -s', shell=True).rstrip()
         dst_ip = self.get_decimal_ip(hostname)
         dst_mac = self.get_local_mac('eno2')
index 08930af..81ebdd4 100644 (file)
@@ -22,7 +22,7 @@ class NFSTest(TestCommon):
     def get_modules(self, build, machine):
         cardName = "e1000"
         modules = super(NFSTest, self).get_modules(build, machine)
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         nfsip = socket.gethostbyname(siteconfig.get('WEBSERVER_NFS_HOST'))
         nfspath = siteconfig.get('WEBSERVER_1G_PATH')
         nfsfile = siteconfig.get('WEBSERVER_1G_FILE')
index f212389..8e2187f 100644 (file)
@@ -29,7 +29,7 @@ class TftpClientTest(TestCommon):
         modules.add_module("tests/tftpclient",
                 ['--server=tftp://10.110.4.4:69',
                  '--file=/%s/hello.txt' % tftpdir ])
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         return modules
 
     def get_finish_string(self):
index 038db71..2f8baac 100644 (file)
@@ -25,7 +25,7 @@ class VMKitTest(TestCommon):
         modules.add_module("serial_pc16550d", ["auto"])
         modules.add_module("lpc_timer", ["auto"])
         modules.add_module("e1000n", ["auto"])
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         modules.add_module("NGD_mng", ["auto"])
         modules.add_module("netd", ["auto"])
 
index bf820c5..ba5a9e0 100644 (file)
@@ -54,9 +54,8 @@ class WebCommon(TestCommon):
         self.ip = None
 
     def get_modules(self, build, machine):
-        cardName = "e1000"
         modules = super(WebCommon, self).get_modules(build, machine)
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         nfsip = socket.gethostbyname(siteconfig.get('WEBSERVER_NFS_HOST'))
         modules.add_module("webserver", ["core=%d" % machine.get_coreids()[0], #2
                                nfsip, siteconfig.get('WEBSERVER_NFS_PATH')])
index 49fb8a8..fc3a4fe 100644 (file)
@@ -104,7 +104,7 @@ class XeonPhi_Boot_Test(TestCommon):
         modules.add_module("xeon_phi", ["auto", 
                                         "--tftp=tftp://10.110.4.4:69",
                                         "--modlist=/" + tftpdir + "/menu.lst.k1om"])
-        modules.add_module("e1000_net_sockets_server", ["auto"])
+        modules.add_module("net_sockets_server", ["auto"])
         modules.add_module("dma_mgr", [""])
 
         return modules
similarity index 69%
rename from usr/drivers/net_socket_server/Hakefile
rename to usr/net_socket_server/Hakefile
index 8a65e71..9ed408c 100644 (file)
@@ -1,18 +1,18 @@
 --------------------------------------------------------------------------
--- Copyright (c) 2007-2012, ETH Zurich.
+-- Copyright (c) 2017, ETH Zurich.
 -- All rights reserved.
 --
 -- This file is distributed under the terms in the attached LICENSE file.
 -- If you do not find this file, copies can be found by writing to:
--- ETH Zurich D-INFK, Haldeneggsteig 4, CH-8092 Zurich. Attn: Systems Group.
+-- ETH Zurich D-INFK, Universitätstrasse 6, CH-8092 Zurich. Attn: Systems Group.
 --
 -- Hakefile for /lib/net
 --
 --------------------------------------------------------------------------
 
 [  build application {
-    target       = "e1000_net_sockets_server",
-    cFiles       = [ "e1000_net_sockets_server.c" ],
+    target       = "net_sockets_server",
+    cFiles       = [ "net_sockets_server.c" ],
     flounderBindings = [ "net_sockets" ],
     addLibraries = libDeps [ "net", "lwip2", "octopus", "debug_log" ]
   }
@@ -160,7 +160,7 @@ static void net_udp_receive(void *arg, struct udp_pcb *pcb, struct pbuf *p, cons
     nb->host_address.s_addr = addr->addr;
     nb->port = port;
     // debug_printf("%s(%d): %p -> %p %p %d\n", __func__, connection->descriptor, buffer, nb->user_callback, nb->user_state, nb->size);
-
+    
     void *shb_data = buffer + sizeof(struct net_buffer);
     
     struct pbuf *it;
@@ -174,13 +174,11 @@ static void net_udp_receive(void *arg, struct udp_pcb *pcb, struct pbuf *p, cons
         it = it->next;
     }
     pbuf_free(p);
-    // debug_printf("%s.%d: enqueue 1 %lx:%ld\n", __func__, __LINE__, buffer - nc->buffer_start, sizeof(struct net_buffer) + length);
     err = devq_enqueue((struct devq *)nc->queue, nc->region_id, buffer - nc->buffer_start, sizeof(struct net_buffer) + length,
                        0, 0, NET_EVENT_RECEIVED);
     assert(err_is_ok(err));
     err = devq_notify((struct devq *)nc->queue);
     assert(err_is_ok(err));
-
     // debug_printf("%s: notifing\n", __func__);
     // struct net_sockets_binding *binding = connection->connection->binding;
     // debug_printf("%s: done\n", __func__);
@@ -201,6 +199,7 @@ static err_t net_tcp_receive(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err
         // debug_printf("%s(%d): %d\n", __func__, socket->descriptor, p->tot_len);
         assert(p->len == p->tot_len);
         length = p->tot_len;
+
         if (!buffer) {
             debug_printf("%s: drop\n", __func__);
             pbuf_free(p);
@@ -238,6 +237,7 @@ static err_t net_tcp_receive(void *arg, struct tcp_pcb *pcb, struct pbuf *p, err
     // debug_printf("%s.%d: enqueue 1 %lx:%ld %d\n", __func__, __LINE__, buffer - nc->buffer_start, sizeof(struct net_buffer) + length, nb->descriptor);
     err = devq_enqueue((struct devq *)nc->queue, nc->region_id, buffer - nc->buffer_start, sizeof(struct net_buffer) + length,
                        0, 0, NET_EVENT_RECEIVED);
+
     assert(err_is_ok(err));
     err = devq_notify((struct devq *)nc->queue);
     assert(err_is_ok(err));
@@ -328,6 +328,7 @@ static err_t net_tcp_sent(void *arg, struct tcp_pcb *pcb, uint16_t len)
             
             socket->send_frames[0].length += sizeof(struct net_buffer);
             // debug_printf_to_log("%s.%d: enqueue %lx:%zd\n", __func__, __LINE__, socket->send_frames[0].offset, socket->send_frames[0].length);
+            //
             err = devq_enqueue((struct devq *)nc->queue, nc->region_id, socket->send_frames[0].offset, socket->send_frames[0].length, 0, 0, NET_EVENT_SENT);
             if (!err_is_ok(err))
                 debug_printf("%s: err %zd\n", __func__, err);
@@ -658,7 +659,8 @@ static errval_t q_notify(struct descq* q)
             buffer = offset + nc->buffer_start;
             struct net_buffer *nb = buffer;
 
-            // debug_printf_to_log("%s: dequeue %lx:%ld %ld  %d:%d", __func__, offset, length, event, nb->descriptor, nb->size);
+            //debug_printf_to_log("%s: dequeue %lx:%ld %ld  %d:%d", __func__, offset, length, event, nb->descriptor, nb->size);
+            //debug_printf(" offset %lu length %lu \n", offset, length);
             if (event == NET_EVENT_RECEIVE) {
                 assert(!nc->buffers[nc->next_used]);
                 nc->buffers[nc->next_used] = nc->buffer_start + offset;
@@ -821,23 +823,25 @@ static errval_t connect_cb(void *st, struct net_sockets_binding *binding)
 
 static void export_cb(void *st, errval_t err, iref_t iref)
 {
+    char* service_name = (char* ) st;
     assert(err_is_ok(err));
-    err = nameservice_register("net_sockets", iref);
+    err = nameservice_register(service_name, iref);
     assert(err_is_ok(err));
 }
 
 int main(int argc, char *argv[])
 {
     errval_t err;
-
-    if (argc < 1) {
-        printf("%s: missing card argument!\n", argv[0]);
+    
+    if (argc < 4) {
+        printf("%s: missing arguments! \n", argv[0]);
         return -1;
     }
-    debug_printf("Net socket server started for e1000 %s.\n", argv[argc - 1]);
 
-    char servicename[64];
-    snprintf(servicename, sizeof(servicename), "e1000:%s", argv[argc - 1]);
+    debug_printf("Net socket server started for %s.\n", argv[2]);
+
+    char card_name[64];
+    snprintf(card_name, sizeof(card_name), "%s:%s", argv[2], argv[argc - 1]);
 
     char *ip = NULL;
     char *netmask = NULL;
@@ -886,7 +890,7 @@ int main(int argc, char *argv[])
     }
 
     /* connect to the network */
-    err = networking_init(servicename, (!ip ? NET_FLAGS_DO_DHCP: 0) | NET_FLAGS_NO_NET_FILTER | NET_FLAGS_BLOCKING_INIT);
+    err = networking_init(card_name, (!ip ? NET_FLAGS_DO_DHCP: 0) | NET_FLAGS_DEFAULT_QUEUE | NET_FLAGS_BLOCKING_INIT );
     if (err_is_fail(err)) {
         USER_PANIC_ERR(err, "Failed to initialize the network");
     }
@@ -901,12 +905,17 @@ int main(int argc, char *argv[])
     f.dereg = q_dereg;
     f.control = q_control;
 
-    err = descq_create(&exp_queue, DESCQ_DEFAULT_SIZE, "net_sockets_queue",
+    char queue_name[64];
+    char service_name[64];
+    sprintf(queue_name, "net_sockets_queue_%s", argv[2]);
+    sprintf(service_name, "net_sockets_service_%s", argv[2]);
+
+    err = descq_create(&exp_queue, DESCQ_DEFAULT_SIZE, queue_name,
                        true, true, 0, NULL, &f);
     assert(err_is_ok(err));
 
 
-    err = net_sockets_export(NULL, export_cb, connect_cb, get_default_waitset(),
+    err = net_sockets_export(service_name, export_cb, connect_cb, get_default_waitset(),
                             IDC_EXPORT_FLAGS_DEFAULT);
     assert(err_is_ok(err));
 
index 5f76a17..4d23f20 100644 (file)
@@ -37,7 +37,7 @@
 %
 
 pci_driver{
-    binary: "e1000_net_sockets_server",
+    binary: "net_sockets_server",
     supported_cards:
     [ pci_card{ vendor: 16'8086, device: 16'1521, function: _, subvendor: _, subdevice: _ },
       pci_card{ vendor: 16'8086, device: 16'107d, function: _, subvendor: _, subdevice: _ },