xorp

policy_varrw.hh

00001 // -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
00002 // vim:set sts=4 ts=8 sw=4:
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/contrib/olsr/policy_varrw.hh,v 1.4 2008/10/02 21:56:35 bms Exp $
00022 
00023 #ifndef __OLSR_POLICY_VARRRW_HH__
00024 #define __OLSR_POLICY_VARRRW_HH__
00025 
00026 #include "policy/backend/single_varrw.hh"
00027 #include "policy/common/element_factory.hh"
00028 #include "policy/backend/policy_filters.hh"
00029 #include "policy/backend/policytags.hh"
00030 
00031 class OlsrVarRW : public SingleVarRW {
00032  public:
00033     // Some of the following should be treated read-only when
00034     // importing routes into OLSR.
00035     enum {
00036     VAR_NETWORK = VAR_PROTOCOL, // Destination (RO)
00037     VAR_NEXTHOP,            // Next-hop (RW)
00038     VAR_METRIC,         // Metric (RW)
00039 
00040     VAR_VTYPE,  // Which part of OLSR this route came from. (RO)
00041     VAR_ORIGINATOR, // OLSR main address of the advertising node. (RO)
00042     VAR_MAINADDR,   // OLSR main address of the destination. (RO)
00043 
00044     VAR_OLSRMAX // must be last.
00045     };
00046 
00047     OlsrVarRW(IPv4Net& network, IPv4& nexthop, uint32_t& metric,
00048           IPv4& originator, IPv4& main_addr, uint32_t vtype,
00049           PolicyTags& policytags);
00050 
00051     // SingleVarRW inteface:
00052     void start_read();
00053     Element* single_read(const Id& id);
00054     void single_write(const Id& id, const Element& e);
00055 
00056  private:
00057     IPv4Net&    _network;
00058     IPv4&   _nexthop;
00059     uint32_t&   _metric;
00060 
00061     IPv4&   _originator;
00062     IPv4&   _main_addr;
00063     uint32_t&   _vtype;     // actually OlsrTypes::VertexType.
00064 
00065     PolicyTags& _policytags;
00066 
00067     ElementFactory _ef;
00068 };
00069 
00070 #endif // __OLSR_POLICY_VARRRW_HH__
 All Classes Namespaces Functions Variables Typedefs Enumerations