Source: ../../fea/mfea_vif.hh
|
|
|
|
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2001-2009 XORP, Inc.
//
// This program is free software; you can redistribute it and/or modify
// it under the terms of the GNU General Public License, Version 2, June
// 1991 as published by the Free Software Foundation. Redistribution
// and/or modification of this program under the terms of any other
// version of the GNU General Public License is not permitted.
//
// This program is distributed in the hope that it will be useful, but
// WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. For more details,
// see the GNU General Public License, Version 2, a copy of which can be
// found in the XORP LICENSE.gpl file.
//
// XORP Inc, 2953 Bunker Hill Lane, Suite 204, Santa Clara, CA 95054, USA;
// http://xorp.net
// $XORP: xorp/fea/mfea_vif.hh,v 1.14 2009/01/05 18:30:49 jtc Exp $
#ifndef __FEA_MFEA_VIF_HH__
#define __FEA_MFEA_VIF_HH__
//
// MFEA virtual interface definition.
//
#include <list>
#include <set>
#include <vector>
#include <utility>
#include "libxorp/vif.hh"
#include "libproto/proto_unit.hh"
//
// Constants definitions
//
//
// Structures/classes, typedefs and macros
//
class MfeaNode;
/**
* @short A class for MFEA-specific virtual interface.
*/
class MfeaVif : public ProtoUnit, public Vif {
public:
/**
* Constructor for a given MFEA node and a generic virtual interface.
*
* @param mfea_node the @ref MfeaNode this interface belongs to.
* @param vif the generic Vif interface that contains various information.
*/
MfeaVif(MfeaNode& mfea_node, const Vif& vif);
/**
* Copy Constructor for a given MFEA node and MFEA-specific virtual
* interface.
*
* @param mfea_node the @ref MfeaNode this interface belongs to.
* @param mfea_vif the origin @ref MfeaVif interface that contains
* the initialization information.
*/
MfeaVif(MfeaNode& mfea_node, const MfeaVif& mfea_vif);
/**
* Destructor
*/
virtual ~MfeaVif();
/**
* Start MFEA on a single virtual interface.
*
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int start(string& error_msg);
/**
* Stop MFEA on a single virtual interface.
*
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int stop(string& error_msg);
/**
* Enable MFEA on a single virtual interface.
*
* If an unit is not enabled, it cannot be start, or pending-start.
*/
void enable();
/**
* Disable MFEA on a single virtual interface.
*
* If an unit is disabled, it cannot be start or pending-start.
* If the unit was runnning, it will be stop first.
*/
void disable();
/**
* Register a protocol on a single virtual interface.
*
* There could be only one registered protocol per interface/vif.
*
* @param module_instance_name the module instance name of the protocol
* to register.
* @param ip_protocol the IP protocol number. It must be between 1 and
* 255.
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int register_protocol(const string& module_instance_name,
uint8_t ip_protocol,
string& error_msg);
/**
* Unregister a protocol on a single virtual interface.
*
* @param module_instance_name the module instance name of the protocol
* to unregister.
* @param error_msg the error message (if error).
* @return XORP_OK on success, otherwise XORP_ERROR.
*/
int unregister_protocol(const string& module_instance_name,
string& error_msg);
/**
* Get the minimum TTL a multicast packet must have to be forwarded
* on this virtual interface.
*
* @return the minimum TTL a multicast packet must have
* to be forwarded on this virtual interface.
*/
uint8_t min_ttl_threshold() const { return (_min_ttl_threshold); }
/**
* Set the minimum TTL a multicast packet must have to be forwarded
* on this virtual interface.
*
* @param v the value of the minimum TTL a multicast packet must have
* to be forwarded on this virtual interface.
*/
void set_min_ttl_threshold(uint8_t v) { _min_ttl_threshold = v; }
/**
* Get the maximum multicast bandwidth rate allowed on this virtual
* interface.
*
* @return the maximum multicast bandwidth rate allowed
* on this virtual interface.
*/
uint32_t max_rate_limit() const { return (_max_rate_limit); }
/**
* Set the maximum multicast bandwidth rate allowed on this virtual
* interface.
*
* @param v the value of the maximum multicast bandwidth rate allowed
* on this virtual interface.
*/
void set_max_rate_limit(uint32_t v) { _max_rate_limit = v; }
/**
* Get the registered module instance name.
*
* @return the registered module instance name.
*/
const string& registered_module_instance_name() const {
return (_registered_module_instance_name);
}
/**
* Get the registered IP protocol.
*
* @return the registered IP protocol.
*/
uint8_t registered_ip_protocol() const {
return (_registered_ip_protocol);
}
private:
// Private functions
MfeaNode& mfea_node() const { return (_mfea_node); }
/**
* Get the string with the flags about the vif status.
*
* TODO: temporary here. Should go to the Vif class after the Vif
* class starts using the Proto class.
*
* @return the C++ style string with the flags about the vif status
* (e.g., UP/DOWN/DISABLED, etc).
*/
string flags_string() const;
// Private state
MfeaNode& _mfea_node; // The MFEA node I belong to
uint8_t _min_ttl_threshold; // Min. TTL required to forward mcast pkts
uint32_t _max_rate_limit; // Max. bw rate allowed to forward mcast
//
// State to keep information about the registered multicast routing
// protocol for this vif.
// There can be only one protocol instance registered which will be
// responsible for the multicast routing on the vif.
//
string _registered_module_instance_name;
uint8_t _registered_ip_protocol;
};
//
// Global variables
//
//
// Global functions prototypes
//
#endif // __FEA_MFEA_VIF_HH__
Generated by: pavlin on kobe.xorp.net on Wed Jan 7 19:10:56 2009, using kdoc 2.0a54+XORP.