X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/f3d349d8dd455a3c7ee639d2ad3152f4bfa49f13..cf90d8bc6c8e339682d96ae43959e1dabc5fefb9:/practicas/pipi/src/test_ipout.cpp?ds=sidebyside diff --git a/practicas/pipi/src/test_ipout.cpp b/practicas/pipi/src/test_ipout.cpp index bc68022..b8e75c9 100644 --- a/practicas/pipi/src/test_ipout.cpp +++ b/practicas/pipi/src/test_ipout.cpp @@ -1,8 +1,12 @@ #include "ipout.h" #include "ipaddr.h" +#include "routetable.h" #include "dev.h" #include +#include +#include +#include #include #include #include @@ -10,19 +14,63 @@ #include #include -int main() +// Uso: ./test_ipout ip dst mtu routes_file proto queue_id + +void add_routes(RouteTable& rt, std::istream& is, Dev& dev); + +int main(int argc, char* argv[]) { - int que_id = msgget(DEV_DEFAULT_KEY, IPC_CREAT | 0666); - assert(que_id != -1); IPAddr addr("10.10.10.2"); IPAddr dst("10.10.10.1"); - Dev dev(addr); - IPOut ipout(addr, dev); - if (ipout.send("hola mundo", addr, dst, 0)) - std::cout << "Enviado 'hola mundo' a 10.10.10.1\n"; - else - std::cout << "NO SE PUDO ENVIAR 'hola mundo' a 10.10.10.1\n"; + unsigned mtu = 25; + unsigned proto = 0; + key_t queue_id = DEV_DEFAULT_KEY; + std::string fname = "route.txt"; + if (argc > 1) + addr = IPAddr(argv[1]); + if (argc > 2) + dst = IPAddr(argv[2]); + if (argc > 3) + mtu = atoi(argv[3]); + if (argc > 4) + fname = 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); + que_id = msgget(queue_id+1, IPC_CREAT | 0666); assert(que_id != -1); + std::ifstream ifs(fname.c_str()); assert(ifs); + Dev dev(addr, mtu, queue_id); + Dev fwque(addr, DEV_MAX_MTU, queue_id+1); + RouteTable table(dev); + add_routes(table, ifs, dev); + IPOut ipout(addr, table, fwque, std::cerr); + std::string msg; + while (std::getline(std::cin, msg)) + { + if (ipout.send(msg, proto, dst)) + std::cout << "Enviado '" << msg << "' a " << dst << "\n"; + else + std::cout << "NO SE PUDO ENVIAR '" << msg << "' a " << dst << "\n"; + } return 0; } +void add_routes(RouteTable& rt, std::istream& is, Dev& dev) +{ + std::string line; + while (std::getline(is, line)) + { + std::istringstream iss(line); + std::string net; + std::string gw; + unsigned metric; + iss >> net >> gw >> metric; + if (net == "0") net = "0.0.0.0"; + if (gw == "0") gw = "0.0.0.0"; + rt.add(net.c_str(), gw.c_str(), metric, dev); + } +} + // vim: set et sw=4 sts=4 :