]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/routetable.h
Se implementa el Resolver.
[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 #include <istream>
8
9 /// Tabla de ruteo
10 struct RouteTable
11 {
12
13     /// Ruta
14     struct Route
15     {
16         IPAddr gateway;
17         unsigned mtu;
18         unsigned metric;
19         Dev* iface;
20         Route(): gateway(0), mtu(0), metric(0), iface(0) {}
21         Route(const IPAddr& gateway, unsigned mtu, unsigned metric, Dev& iface):
22             gateway(gateway), mtu(mtu), metric(metric), iface(&iface) {}
23     };
24
25     /// Tabla
26     std::map< IPAddr, Route > table;
27
28     /// Interfaz por default
29     Dev& default_iface;
30
31     /// Constructor
32     RouteTable(Dev& default_iface);
33
34     /// Agrega ruta
35     void add(const IPAddr& net, const IPAddr& gw, unsigned mtu, unsigned metric, Dev& iface);
36
37     /// Borra ruta
38     void del(const IPAddr& net);
39
40     /// Obtiene dirección e interfaz por la cual salir para un destino
41     Route* get(const IPAddr& dst);
42
43 };
44
45 /// Agrega rutas desde un stream de datos con un cierto dispositivo
46 void add_routes(RouteTable& rt, std::istream& is, Dev& dev);
47
48 #endif // _ROUTETABLE_H_
49
50 // vim: set et sw=4 sts=4 :