]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/test_ipin.cpp
Se cambia el logueo de paquetes dropeados a std::cerr para diferenciar de
[z.facultad/75.74/practicos.git] / practicas / pipi / src / test_ipin.cpp
1
2 #include "ipin.h"
3 #include "ipaddr.h"
4 #include "dev.h"
5 #include <iostream>
6 #include <cstdlib>
7 #include <unistd.h>
8 #include <fcntl.h>
9 #include <sys/types.h>
10 #include <sys/ipc.h>
11 #include <sys/msg.h>
12
13 // Uso: ./test_ipin ip mtu router forward proto queue_id
14
15 int main(int argc, char* argv[])
16 {
17     IPAddr addr("10.10.10.1");
18     unsigned mtu = 25;
19     bool router = false;
20     bool forward = false;
21     unsigned proto = 0;
22     key_t queue_id = DEV_DEFAULT_KEY;
23     if (argc > 1)
24         addr = IPAddr(argv[1]);
25     if (argc > 2)
26         mtu = atoi(argv[2]);
27     if (argc > 3)
28         router = atoi(argv[3]);
29     if (argc > 4)
30         forward = atoi(argv[4]);
31     if (argc > 5)
32         proto = atoi(argv[5]);
33     if (argc > 6)
34         queue_id = atoi(argv[6]);
35     Dev dev(addr, mtu, queue_id);
36     int que_id = msgget(queue_id+1, IPC_CREAT | 0666);
37     assert(que_id != -1);
38     Dev fwque(addr, DEV_MAX_MTU, queue_id+1);
39     IPIn ipin(addr, dev, fwque, router, forward, std::cerr);
40     struct msqid_ds minfo;
41     for (msgctl(dev.que_id, IPC_STAT, &minfo); minfo.msg_qnum;
42             msgctl(dev.que_id, IPC_STAT, &minfo))
43     {
44         IPAddr src, dst;
45         std::cout << "Quedan " << minfo.msg_qnum << " mensajes en la cola\n";
46         std::string s = ipin.recv(proto, src, dst);
47         std::cout << "Recibido '" << s << "' (len " << s.size() << ") de "
48             << src << " para " << dst << " (proto = " << proto << ")\n";
49     }
50     return 0;
51 }
52
53 // vim: set et sw=4 sts=4 :