/// 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);
+
/// 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&);