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