]> git.llucax.com Git - z.facultad/75.74/practicos.git/blob - practicas/pipi/src/routetable.cpp
Se implementa el Resolver.
[z.facultad/75.74/practicos.git] / practicas / pipi / src / routetable.cpp
1 #include "routetable.h"
2 #include <string>
3 #include <sstream>
4 #ifdef DEBUG
5 #include <iostream>
6 #endif
7
8 RouteTable::RouteTable(Dev& default_iface): default_iface(default_iface)
9 {
10 }
11
12 void RouteTable::add(const IPAddr& net, const IPAddr& gw, unsigned mtu,
13         unsigned metric, Dev& iface)
14 {
15     table[net] = Route(gw, metric, mtu, iface);
16 #ifdef DEBUG
17     //std::cout << "Se agregó tabla para " << net << ": gw = " << gw
18     //    << ", metric = " << metric << "\n";
19 #endif
20 }
21
22 void RouteTable::del(const IPAddr& net)
23 {
24     table.erase(net);
25 }
26
27 RouteTable::Route* RouteTable::get(const IPAddr& dst)
28 {
29     // No existe
30     if (table.find(dst) == table.end())
31         return 0;
32     return &table[dst];
33 }
34
35 void add_routes(RouteTable& rt, std::istream& is, Dev& dev)
36 {
37     std::string line;
38     while (std::getline(is, line))
39     {
40         std::istringstream iss(line);
41         std::string net;
42         std::string gw;
43         unsigned mtu;
44         unsigned metric;
45         iss >> net >> gw >> mtu >> metric;
46         if (net == "0") net = "0.0.0.0";
47         if (gw == "0") gw = "0.0.0.0";
48         rt.add(net, gw, metric, mtu, dev);
49     }
50 }
51
52 // vim: set et sw=4 sts=4 :