]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/test_ipin.cpp
Primera aproximación al cache y a la resolución de nombres.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / test_ipin.cpp
index 7b56b11bea844abba5db2edcc08c23ab4d31b59a..12e84e04bdd912d55fcbfb7176b901c6a00f8436 100644 (file)
@@ -1,27 +1,54 @@
 
 #include "ipin.h"
 #include "ipaddr.h"
 
 #include "ipin.h"
 #include "ipaddr.h"
-#include "dev.h"
+#include "devque.h"
 #include <iostream>
 #include <iostream>
+#include <cstdlib>
+#include <cassert>
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 
 #include <unistd.h>
 #include <fcntl.h>
 #include <sys/types.h>
 #include <sys/ipc.h>
 #include <sys/msg.h>
 
-int main()
+// Uso: ./test_ipin ip mtu router forward proto queue_id
+
+int main(int argc, char* argv[])
 {
     IPAddr addr("10.10.10.1");
 {
     IPAddr addr("10.10.10.1");
-    Dev dev(addr);
-    IPIn ipin(addr, dev);
+    unsigned mtu = 25;
+    bool router = false;
+    bool forward = false;
+    unsigned proto = 0;
+    key_t queue_id = DEVQUE_DEFAULT_KEY;
+    if (argc > 1)
+        addr = IPAddr(argv[1]);
+    if (argc > 2)
+        mtu = atoi(argv[2]);
+    if (argc > 3)
+        router = atoi(argv[3]);
+    if (argc > 4)
+        forward = atoi(argv[4]);
+    if (argc > 5)
+        proto = atoi(argv[5]);
+    if (argc > 6)
+        queue_id = atoi(argv[6]);
+    int que_id = msgget(queue_id, IPC_CREAT | 0666);
+    assert(que_id != -1);
+    DevQue dev(addr, mtu, queue_id);
+    que_id = msgget(queue_id+1, IPC_CREAT | 0666);
+    assert(que_id != -1);
+    DevQue fwque(addr, DEV_MAX_MTU, queue_id+1);
+    IPIn ipin(addr, dev, fwque, router, forward, std::cerr);
     struct msqid_ds minfo;
     for (msgctl(dev.que_id, IPC_STAT, &minfo); minfo.msg_qnum;
             msgctl(dev.que_id, IPC_STAT, &minfo))
     {
         IPAddr src, dst;
         std::cout << "Quedan " << minfo.msg_qnum << " mensajes en la cola\n";
     struct msqid_ds minfo;
     for (msgctl(dev.que_id, IPC_STAT, &minfo); minfo.msg_qnum;
             msgctl(dev.que_id, IPC_STAT, &minfo))
     {
         IPAddr src, dst;
         std::cout << "Quedan " << minfo.msg_qnum << " mensajes en la cola\n";
-        std::string s = ipin.recv(0, src, dst);
-        std::cout << "Recibido '" << s << "' (len " << s.size() << ")\n";
+        std::string s = ipin.recv(proto, src, dst);
+        std::cout << "Recibido '" << s << "' (len " << s.size() << ") de "
+            << src << " para " << dst << " (proto = " << proto << ")\n";
     }
     return 0;
 }
     }
     return 0;
 }