Go to the documentation of this file.00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028 #ifndef __ROUTINGTABLE_H
00029 #define __ROUTINGTABLE_H
00030
00031 #include <vector>
00032 #include <omnetpp.h>
00033 #include "INETDefs.h"
00034 #include "IPAddress.h"
00035 #include "IInterfaceTable.h"
00036 #include "NotificationBoard.h"
00037 #include "IRoutingTable.h"
00038
00039 class RoutingTableParser;
00040
00041
00072 class INET_API RoutingTable: public cSimpleModule, public IRoutingTable, protected INotifiable
00073 {
00074 protected:
00075 IInterfaceTable *ift;
00076 NotificationBoard *nb;
00077
00078 IPAddress routerId;
00079 bool IPForward;
00080
00081
00082
00083
00084 typedef std::vector<IPRoute *> RouteVector;
00085 RouteVector routes;
00086 RouteVector multicastRoutes;
00087
00088
00089 typedef std::map<IPAddress, const IPRoute *> RoutingCache;
00090 mutable RoutingCache routingCache;
00091
00092
00093 typedef std::set<IPAddress> AddressSet;
00094 mutable AddressSet localAddresses;
00095
00096 protected:
00097
00098 virtual void configureLoopbackForIPv4();
00099
00100
00101 virtual bool routeMatches(const IPRoute *entry,
00102 const IPAddress& target, const IPAddress& nmask, const IPAddress& gw,
00103 int metric, const char *dev) const;
00104
00105
00106 virtual void configureRouterId();
00107
00108
00109 virtual void updateNetmaskRoutes();
00110
00111
00112 virtual void updateDisplayString();
00113
00114
00115 virtual void deleteInterfaceRoutes(InterfaceEntry *entry);
00116
00117
00118 virtual void invalidateCache();
00119
00120 public:
00121 RoutingTable();
00122 virtual ~RoutingTable();
00123
00124 protected:
00125 virtual int numInitStages() const {return 4;}
00126 virtual void initialize(int stage);
00127
00131 virtual void handleMessage(cMessage *);
00132
00137 virtual void receiveChangeNotification(int category, const cPolymorphic *details);
00138
00139 public:
00143 virtual void printRoutingTable() const;
00144
00147 virtual void configureInterfaceForIPv4(InterfaceEntry *ie);
00148
00152 virtual InterfaceEntry *getInterfaceByAddress(const IPAddress& address) const;
00154
00158 virtual bool isIPForwardingEnabled() {return IPForward;}
00159
00163 virtual IPAddress getRouterId() {return routerId;}
00164
00168 virtual void setRouterId(IPAddress a) {routerId = a;}
00169
00175 virtual bool isLocalAddress(const IPAddress& dest) const;
00176
00180 virtual const IPRoute *findBestMatchingRoute(const IPAddress& dest) const;
00181
00188 virtual InterfaceEntry *getInterfaceForDestAddr(const IPAddress& dest) const;
00189
00197 virtual IPAddress getGatewayForDestAddr(const IPAddress& dest) const;
00199
00202
00207 virtual bool isLocalMulticastAddress(const IPAddress& dest) const;
00208
00212 virtual MulticastRoutes getMulticastRoutesFor(const IPAddress& dest) const;
00214
00217
00222 virtual int getNumRoutes() const;
00223
00229 virtual const IPRoute *getRoute(int k) const;
00230
00234 virtual const IPRoute *findRoute(const IPAddress& target, const IPAddress& netmask,
00235 const IPAddress& gw, int metric = 0, const char *dev = NULL) const;
00236
00240 virtual const IPRoute *getDefaultRoute() const;
00241
00246 virtual void addRoute(const IPRoute *entry);
00247
00253 virtual bool deleteRoute(const IPRoute *entry);
00254
00258 virtual std::vector<IPAddress> gatherAddresses() const;
00260
00261 };
00262
00263 #endif
00264