X-Git-Url: https://git.llucax.com/z.facultad/75.74/practicos.git/blobdiff_plain/0a2739fe97762f57a80599ef170df98e07422a3d..78d6e1ce97611abe9f0d083033197773f93c33f7:/practicas/pipi/src/ipout.h?ds=sidebyside diff --git a/practicas/pipi/src/ipout.h b/practicas/pipi/src/ipout.h index ae88509..96cbbb6 100644 --- a/practicas/pipi/src/ipout.h +++ b/practicas/pipi/src/ipout.h @@ -18,24 +18,37 @@ struct IPOut /// Dispositivo de logging RouteTable& rtable; + /// Cola para forwardear paquetes + Dev& forward_que; + /// Dispositivo de logging std::ostream& log; /// Constructor - IPOut(const IPAddr& ip, RouteTable& rtable, 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&);