X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/127afaea3cf716aa9261e5c2cf129a10acbd1688..63516fdd4cb64b01971750be1d29d7244b1f9e5e:/practicas/pipi/src/ipout.h?ds=sidebyside diff --git a/practicas/pipi/src/ipout.h b/practicas/pipi/src/ipout.h index 61c2111..96cbbb6 100644 --- a/practicas/pipi/src/ipout.h +++ b/practicas/pipi/src/ipout.h @@ -3,7 +3,7 @@ #include "ipaddr.h" #include "ipheader.h" -#include "dev.h" +#include "routetable.h" #include #include #include @@ -15,27 +15,40 @@ struct IPOut /// Dirección MAC IPAddr ip; - /// Dispositivo de red - Dev& dev; + /// Dispositivo de logging + RouteTable& rtable; + + /// Cola para forwardear paquetes + Dev& forward_que; /// Dispositivo de logging std::ostream& log; /// Constructor - IPOut(const IPAddr& ip, Dev& dev, std::ostream& log = std::cout); + IPOut(const IPAddr& ip, RouteTable& rtable, Dev& forward_que, + std::ostream& log = std::cout); /// Descarta un paquete void drop(const std::string& msg, const std::string& buf); void drop(const std::string& msg, const IPHeader& iph); - /// Envía un paquete IP + /// Envía un paquete IP a armar (y forwardea los encolados, de haber) bool send(const std::string& data, uint8_t proto, IPAddr dst, IPAddr src = 0, bool df = 0, uint8_t ttl = 64, uint16_t id = 0) throw (std::runtime_error); + /// Envía un paquete IP ya armado + bool send(IPHeader iph, std::string data) throw (std::runtime_error); + + /// Realiza el forwarding de paquetes (en un loop infinito) + void forward_loop() throw (std::runtime_error); + /// Obtiene un identificador para el paquete uint16_t get_id() const; + /// Se fija si hay paquetes a forwardear (y devuelve cuantos hay) + unsigned to_forward(); + // Nada de andar copiando... private: IPOut(const IPOut&);