X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/f3d349d8dd455a3c7ee639d2ad3152f4bfa49f13..78d6e1ce97611abe9f0d083033197773f93c33f7:/practicas/pipi/src/ipout.h diff --git a/practicas/pipi/src/ipout.h b/practicas/pipi/src/ipout.h index 57c139b..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,24 +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 - bool send(const std::string& data, IPAddr& src, IPAddr& dst, uint8_t proto, - bool df = 0, uint8_t ttl = 64, uint16_t id = 0) + /// 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&);