]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/routetable.h
Primera aproximación al cache y a la resolución de nombres.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / routetable.h
1 #ifndef _ROUTETABLE_H_
2 #define _ROUTETABLE_H_
3
4 #include "dev.h"
5 #include "ipaddr.h"
6 #include <map>
7
8 /// Tabla de ruteo
9 struct RouteTable
10 {
11
12     /// Ruta
13     struct Route
14     {
15         IPAddr gateway;
16         unsigned mtu;
17         unsigned metric;
18         Dev* iface;
19         Route(): gateway(0), mtu(0), metric(0), iface(0) {}
20         Route(const IPAddr& gateway, unsigned mtu, unsigned metric, Dev& iface):
21             gateway(gateway), mtu(mtu), metric(metric), iface(&iface) {}
22     };
23
24     /// Tabla
25     std::map< IPAddr, Route > table;
26
27     /// Interfaz por default
28     Dev& default_iface;
29
30     /// Constructor
31     RouteTable(Dev& default_iface);
32
33     /// Agrega ruta
34     void add(const IPAddr& net, const IPAddr& gw, unsigned mtu, unsigned metric, Dev& iface);
35
36     /// Borra ruta
37     void del(const IPAddr& net);
38
39     /// Obtiene dirección e interfaz por la cual salir para un destino
40     Route* get(const IPAddr& dst);
41
42 };
43
44 #endif // _ROUTETABLE_H_
45
46 // vim: set et sw=4 sts=4 :