]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/ipin.h
Ruteo básico aparentemente andando. Se parametrizan las pruebas para poder
[z.facultad/75.74/practicos.git] / practicas / pipi / src / ipin.h
1 #ifndef _IPIN_H_
2 #define _IPIN_H_
3
4 #include "ipaddr.h"
5 #include "ipheader.h"
6 #include "dev.h"
7 #include <map>
8 #include <string>
9 #include <iostream>
10 #include <stdexcept>
11
12 /// IP de recepción
13 struct IPIn
14 {
15
16     /// Dirección IP
17     IPAddr ip;
18
19     /// Dispositivo de red
20     Dev& dev;
21
22     /// Dispositivo de logging
23     std::ostream& log;
24
25     /// Buffers de recepción
26     struct BufferKey
27     {
28         uint16_t id;
29         uint32_t src, dst;
30         uint8_t proto;
31         BufferKey(const IPHeader& h):
32             id(h.id), src(h.src), dst(h.dst), proto(h.proto)
33         {}
34         bool operator< (const BufferKey& b) const
35         { return id < b.id && src < b.src && dst < b.dst && proto < b.proto; }
36     };
37     typedef std::map< uint16_t, std::string > offsetmap_type;
38     typedef std::map< BufferKey, offsetmap_type > buffer_type;
39     buffer_type buffer;
40
41     /// Constructor
42     IPIn(const IPAddr& ip, Dev& dev, std::ostream& log = std::cout);
43
44     /// Descarta un paquete
45     void drop(const std::string& msg, const std::string& buf);
46     void drop(const std::string& msg, const IPHeader& iph);
47
48     /// Recibe un paquete IP
49     std::string recv(uint8_t proto, IPAddr& src, IPAddr& dst)
50         throw (std::runtime_error);
51
52     // Nada de andar copiando placas...
53     private:
54     IPIn(const IPIn&);
55     IPIn& operator=(const IPIn&);
56
57 };
58
59 #endif // _IPIN_H_
60
61 // vim: set et sw=4 sts=4 :