]> git.llucax.com Git - z.facultad/75.74/practicos.git/blobdiff - practicas/pipi/src/ipout.h
Se cambia el logueo de paquetes dropeados a std::cerr para diferenciar de
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipout.h
index 61c21116991eb6e836f094b859f748688c03a69e..effe150c5bf61a267da700ae13c3e92096521206 100644 (file)
@@ -3,7 +3,7 @@
 
 #include "ipaddr.h"
 #include "ipheader.h"
 
 #include "ipaddr.h"
 #include "ipheader.h"
-#include "dev.h"
+#include "routetable.h"
 #include <iostream>
 #include <string>
 #include <stdexcept>
 #include <iostream>
 #include <string>
 #include <stdexcept>
@@ -15,27 +15,37 @@ struct IPOut
     /// Dirección MAC
     IPAddr ip;
 
     /// 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
 
     /// 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);
 
 
     /// 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);
 
     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);
+
     /// Obtiene un identificador para el paquete
     uint16_t get_id() const;
 
     /// 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&);
     // Nada de andar copiando...
     private:
     IPOut(const IPOut&);