// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-
// Copyright (c) 2001-2003 International Computer Science Institute
//
// Permission is hereby granted, free of charge, to any person obtaining a
// copy of this software and associated documentation files (the "Software")
// to deal in the Software without restriction, subject to the conditions
// listed in the XORP LICENSE file. These conditions include: you must
// preserve this copyright notice, and you cannot mention the copyright
// holders in advertising related to the Software without their permission.
// The Software is provided WITHOUT ANY WARRANTY, EXPRESS OR IMPLIED. This
// notice is a summary of the XORP LICENSE file; the license in that file is
// legally binding.
// $XORP: xorp/fea/fte.hh,v 1.5 2003/05/29 17:59:09 pavlin Exp $
#ifndef __FEA_FTE_HH__
#define __FEA_FTE_HH__
#include "libxorp/xorp.h"
#include "libxorp/ipv4.hh"
#include "libxorp/ipv6.hh"
#include "libxorp/ipvx.hh"
#include "libxorp/ipv4net.hh"
#include "libxorp/ipv6net.hh"
#include "libxorp/ipvxnet.hh"
/**
* @short Forwarding Table Entry.
*
* Representation of a forwarding table entry.
*/
template<typename A, typename N>
class Fte {
public:
Fte() { zero(); }
explicit Fte(int family) : _net(family), _gateway(family) { zero(); }
Fte(const N& net,
const A& gateway,
const string& ifname,
const string& vifname,
uint32_t metric,
uint32_t admin_distance,
bool xorp_route) :
_net(net), _gateway(gateway), _ifname(ifname), _vifname(vifname),
_metric(metric), _admin_distance(admin_distance),
_xorp_route(xorp_route) {}
Fte(const N& net) : _net(net), _gateway(A::ZERO(net.af())),
_metric(0), _admin_distance(0), _xorp_route(false) {}
const N& net() const { return _net; }
const A& gateway() const { return _gateway; }
const string& ifname() const { return _ifname; }
const string& vifname() const { return _vifname; }
uint32_t metric() const { return _metric; }
uint32_t admin_distance() const { return _admin_distance; }
bool xorp_route() const { return _xorp_route; }
/**
* Reset all members
*/
void zero() {
_net = N(A::ZERO(_net.af()), 0);
_gateway = A::ZERO(_gateway.af());
_ifname.erase();
_vifname.erase();
_metric = 0;
_admin_distance = 0;
_xorp_route = false;
}
/**
* @return true if this is a host route.
*/
inline bool is_host_route() const {
return _net.prefix_len() == _net.masked_addr().addr_bitlen();
}
/**
* @return A string representation of the entry.
*
* dst = 127.0.0.1 gateway = 127.0.0.1 netmask = 255.255.255.255 if = lo0
* metric = 10 admin_distance = 20
*/
string str() const {
return c_format("net = %s gateway = %s ifname = %s vifname = %s "
"metric = %u admin_distance = %u xorp_route %s",
_net.str().c_str(), _gateway.str().c_str(),
_ifname.c_str(), _vifname.c_str(),
_metric, _admin_distance, _xorp_route ? "true" :
"false");
}
private:
N _net; // Network
A _gateway; // Gateway address
string _ifname; // Interface name
string _vifname; // Virtual interface name
uint32_t _metric; // Route metric
uint32_t _admin_distance; // Route admin distance
bool _xorp_route; // This route was installed by XORP.
};
typedef Fte<IPv4, IPv4Net> Fte4;
typedef Fte<IPv6, IPv6Net> Fte6;
typedef Fte<IPvX, IPvXNet> FteX;
#endif // __FEA_FTE_HH__
| Generated by: pavlin on possum.icir.org on Thu Nov 6 23:46:57 2003, using kdoc 2.0a54+XORP. |