#ifndef CLICK_GRID_PROXY_HH #define CLICK_GRID_PROXY_HH #include #include #include #include #include #include CLICK_DECLS /* * =c * GridProxy(IP) * =d * a simple mobile-ip proxy * Input 0: ipip packets from a gateway * Input 1: ip packets for a mobile host * Output 0: ip packets for the outside world * Output 1: ipip packets for current "gateway" machine * * GridProxy tracks the last gateway a host sent an ip packet * through and when it receives packets for that host, it sends * then to the gateway it was last heard through using an * ipip tunnel. */ class GridProxy : public Element { class DstInfo { public: IPAddress _ip; timeval _last_updated; IPAddress _gw; DstInfo() {_ip = IPAddress(0); _last_updated.tv_sec = 0; _gw = IPAddress(0); } DstInfo(IPAddress ip, IPAddress gw, timeval now) { _ip = ip; _last_updated = now; _gw = gw; } }; typedef HashMap ProxyMap; ProxyMap _map; click_ip _iph; uatomic32_t _id; #if HAVE_FAST_CHECKSUM && FAST_CHECKSUM_ALIGNED bool _aligned; #endif void reverse_mapping(Packet *p_in); void forward_mapping(Packet *p_in); public: GridProxy(); ~GridProxy(); const char *class_name() const { return "GridProxy"; } const char *port_count() const { return "2/2"; } const char *processing() const { return PUSH; } int configure(Vector &, ErrorHandler *); int initialize(ErrorHandler *); void add_handlers(); void cleanup(CleanupStage); void push(int, Packet *); static String static_print_stats(Element *e, void *); String print_stats(); }; #include CLICK_ENDDECLS #endif