xorp

route_table_policy_sm.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 // vim:set sts=4 ts=8:
00003 
00004 // Copyright (c) 2001-2009 XORP, Inc.
00005 //
00006 // This program is free software; you can redistribute it and/or modify
00007 // it under the terms of the GNU General Public License, Version 2, June
00008 // 1991 as published by the Free Software Foundation. Redistribution
00009 // and/or modification of this program under the terms of any other
00010 // version of the GNU General Public License is not permitted.
00011 // 
00012 // This program is distributed in the hope that it will be useful, but
00013 // WITHOUT ANY WARRANTY; without even the implied warranty of
00014 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
00015 // see the GNU General Public License, Version 2, a copy of which can be
00016 // found in the XORP LICENSE.gpl file.
00017 // 
00018 // XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
00019 // http://xorp.net
00020 
00021 // $XORP: xorp/bgp/route_table_policy_sm.hh,v 1.13 2008/10/02 21:56:20 bms Exp $
00022 
00023 #ifndef __BGP_ROUTE_TABLE_POLICY_SM_HH__
00024 #define __BGP_ROUTE_TABLE_POLICY_SM_HH__
00025 
00026 #include "route_table_policy.hh"
00027 #include "peer_route_pair.hh"
00028 #include "libxorp/eventloop.hh"
00029 
00037 template <class A>
00038 class PolicyTableSourceMatch : public PolicyTable<A> {
00039 public:
00047     PolicyTableSourceMatch(const string& tablename,
00048                const Safi& safi,
00049                BGPRouteTable<A>* parent,
00050                PolicyFilters& pfs,
00051                EventLoop& ev);
00052     ~PolicyTableSourceMatch();
00053 
00059     void push_routes(list<const PeerTableInfo<A>*>& peer_list);
00060 
00061     /*
00062      * Need to keep track what is going on with dump iterators which peers go
00063      * down and up
00064      */
00065     void peering_is_down(const PeerHandler *peer, uint32_t genid);
00066 
00067     void peering_went_down(const PeerHandler *peer, uint32_t genid,
00068                            BGPRouteTable<A> *caller);
00069 
00070     void peering_down_complete(const PeerHandler *peer, uint32_t genid,
00071                                BGPRouteTable<A> *caller);
00072 
00073     void peering_came_up(const PeerHandler *peer, uint32_t genid,
00074                          BGPRouteTable<A> *caller);
00075 
00076 private:
00080     void do_next_route_dump();
00081 
00085     void end_route_dump();
00086 
00090     bool do_background_dump();
00091 
00097     bool pushing_routes();
00098 
00099 private:
00100     EventLoop&      eventloop();
00101 
00102     bool        _pushing_routes;
00103     DumpIterator<A>*    _dump_iter;
00104     EventLoop&      _ev;
00105     XorpTask        _dump_task;
00106 };
00107 
00108 #endif // __BGP_ROUTE_TABLE_POLICY_SM_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations