]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/ipout.h
Se emprolija un poco la info de debug.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipout.h
index 57c139bceb19f28eb064e884ef4244728b9aa5a3..96cbbb6b46d06d5c92109c9949950795ad07340c 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "ipaddr.h"
 #include "ipheader.h"
-#include "dev.h"
+#include "routetable.h"
 #include <iostream>
 #include <string>
 #include <stdexcept>
@@ -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&);