]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/ipout.h
Se vuelven para atrás los cambios de buffer y filtrado y, por el contrario, ya
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipout.h
index ae885090b61af468e04a1c41f52bd6b970c25fb2..96cbbb6b46d06d5c92109c9949950795ad07340c 100644 (file)
@@ -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&);