#include "ipin.h"
#include "ipaddr.h"
#include "routetable.h"
+#include "devtcp.h"
#include "devque.h"
#include <iostream>
#include <fstream>
#include <sys/msg.h>
#include <signal.h>
-// Uso: ./test_ipout ip [router forward routes_file queue_id proto]
+// Uso: ./ip ip [router forward routes_file port proto]
void send_loop(IPOut& ipout, unsigned proto);
-void add_routes(RouteTable& rt, std::istream& is, Dev& dev);
-
int main(int argc, char* argv[])
{
bool router = false;
bool forward = false;
- unsigned proto = 0;
- key_t queue_id = DEVQUE_DEFAULT_KEY;
+ uint8_t proto = 0;
+ uint16_t port = DEVTCP_DEFAULT_PORT;
std::string fname = "route.txt";
if (argc < 2)
{
- std::cerr << "Uso: ./test_ipout ip [router forward routes_file "
- "queue_id proto]\n";
+ std::cerr << "Uso: " << argv[0] << " ip [router forward routes_file "
+ "port proto]\n";
return 1;
}
IPAddr addr(argv[1]);
if (argc > 4)
fname = argv[4];
if (argc > 5)
- queue_id = atoi(argv[5]);
+ port = atoi(argv[5]);
if (argc > 6)
proto = atoi(argv[6]);
- // Creo colas
- int que_id = msgget(queue_id, IPC_CREAT | 0666); assert(que_id != -1);
- que_id = msgget(DEVQUE_DEFAULT_KEY-1, IPC_CREAT | 0666); assert(que_id != -1);
+ // Creo cola para comunicar el IPIn con IPOut
+ int que_id = msgget(DEVQUE_DEFAULT_KEY-1, IPC_CREAT | 0666); assert(que_id != -1);
// Abro archivo con rutas
std::ifstream ifs(fname.c_str()); assert(ifs);
// Creo medio físico y cola para forwarding
- DevQue dev(addr, queue_id);
+ DevTCP dev(addr, port);
DevQue fwque(addr, DEVQUE_DEFAULT_KEY-1);
// Creo procesos
pid_t pid_send = fork();
IPAddr src, dst;
std::string s = ipin.recv(proto, src, dst);
std::cout << "Recibido '" << s << "' (len " << s.size() << ") de "
- << src << " para " << dst << " (proto = " << proto << ")\n";
+ << src << " para " << dst << " (proto = " << unsigned(proto)
+ << ")\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 mtu;
- unsigned metric;
- iss >> net >> gw >> mtu >> 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, mtu, dev);
- }
-}
-
// vim: set et sw=4 sts=4 :