]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/ipout.h
Forwarding casi implementado. Hay un bug cuando se usan distintos MTU que hay
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipout.h
1 #ifndef _IPOUT_H_
2 #define _IPOUT_H_
3
4 #include "ipaddr.h"
5 #include "ipheader.h"
6 #include "routetable.h"
7 #include <iostream>
8 #include <string>
9 #include <stdexcept>
10
11 /// IP de envío
12 struct IPOut
13 {
14
15     /// Dirección MAC
16     IPAddr ip;
17
18     /// Dispositivo de logging
19     RouteTable& rtable;
20
21     /// Cola para forwardear paquetes
22     Dev& forward_que;
23
24     /// Dispositivo de logging
25     std::ostream& log;
26
27     /// Constructor
28     IPOut(const IPAddr& ip, RouteTable& rtable, Dev& forward_que,
29             std::ostream& log = std::cout);
30
31     /// Descarta un paquete
32     void drop(const std::string& msg, const std::string& buf);
33     void drop(const std::string& msg, const IPHeader& iph);
34
35     /// Envía un paquete IP a armar (y forwardea los encolados, de haber)
36     bool send(const std::string& data, uint8_t proto, IPAddr dst,
37             IPAddr src = 0, bool df = 0, uint8_t ttl = 64, uint16_t id = 0)
38         throw (std::runtime_error);
39
40     /// Envía un paquete IP ya armado
41     bool send(IPHeader iph, std::string data) throw (std::runtime_error);
42
43     /// Obtiene un identificador para el paquete
44     uint16_t get_id() const;
45
46     /// Se fija si hay paquetes a forwardear (y devuelve cuantos hay)
47     unsigned to_forward();
48
49     // Nada de andar copiando...
50     private:
51     IPOut(const IPOut&);
52     IPOut& operator=(const IPOut&);
53
54 };
55
56 #endif // _IPOUT_H_
57
58 // vim: set et sw=4 sts=4 :