[Xorp-hackers] Problems linking XORP modifications

Julián David Morillo Pozo jmorillo@ac.upc.edu
Wed, 16 Feb 2005 16:45:43 +0100


Hello,

First of all, I want to say that what I really have is a linking related 
problem and not an XORP one, but probably somebody can help me.
I'm trying to modify XORP in order to support QoS routing, more precisely, 
per-flow routing. For this purpose, as a first step, I'm modifying the RIB 
(the next step will be to modify the FEA).
Well, I have added three new files:
- xorp/xrl/interfaces/QoS_rib.xif 
- xorp/rib/QoS_rib.hh
- xorp/rib/QoS_rib.cc
And I have modified the next ones:
- xorp/xrl/targets/rib.tgt
- xorp/rib/xrl_target.hh
- xorp/rib/xrl_target.cc
- xorp/rib/rib_manager.hh
- xorp/rib/rib_manager.cc

When I run gmake I get linking error messages. The first of them is (I have a 
lot of them):
======================================================
./.libs/librib.a(rib_manager.o)(.text+0x12e): In function 
`RibManager::RibManager[not-in-charge](EventLoop&, XrlStdRouter&, 
std::basic_string<char, std::char_traits<char>, std::allocator<char> > 
const&)':
/usr/include/g++/bits/stl_tree.h:1002: undefined reference to 
`RIB_QoS<IPv4>::RIB_QoS[in-charge](RibManager&, EventLoop&)'
======================================================

Following this line is the beginning of my rib_manager.cc file that includes 
the part of code that I guess is issuing this first error message:
 
===========================================
#include "rib_module.h"

#include "libxorp/xorp.h"
#include "libxorp/xlog.h"
#include "libxorp/debug.h"
#include "libxorp/utils.hh"

#include "libxipc/xrl_error.hh"

#include "xrl/interfaces/finder_event_notifier_xif.hh"

#include "rib_manager.hh"
#include "redist_xrl.hh"
#include "redist_policy.hh"
#include "profile_vars.hh"

RibManager::RibManager(EventLoop& eventloop, XrlStdRouter& xrl_std_router,
		       const string& fea_target)
    : _status_code(PROC_NOT_READY),
      _status_reason("Initializing"),
      _eventloop(eventloop),
      _xrl_router(xrl_std_router),
      _register_server(&_xrl_router),
      _urib4(UNICAST, *this, _eventloop),
      _mrib4(MULTICAST, *this, _eventloop),
      _urib6(UNICAST, *this, _eventloop),
      _mrib6(MULTICAST, *this, _eventloop),
      _QoSSrib(*this, _eventloop),	// 
      _QoSrib6(*this, _eventloop),
      _vif_manager(_xrl_router, _eventloop, this, fea_target),
      _xrl_rib_target(&_xrl_router, _urib4, _mrib4, _urib6, _mrib6, _QoSSrib,    
_vif_manager, this),
      _fea_target(fea_target)
{
    _urib4.initialize(_register_server);
    _mrib4.initialize(_register_server);
    _urib6.initialize(_register_server);
    _mrib6.initialize(_register_server);
    _QoSrib.initialize(_register_server);
    _QoSrib6.initialize(_register_server);
    PeriodicTimerCallback cb = callback(this, &RibManager::status_updater);
    _status_update_timer = _eventloop.new_periodic(1000, cb);
    initialize_profiling_variables(_profile);
}
===========================================================

I was thinking on problems with the compiler version but the fact is that XORP 
without my modifications compiles perfectly so I guess that the problem is on 
my code but I don't see it. I have tried to do the same for the new  QoS_rib 
that is done for the normal rib.
If you need more information, please feel free in asking for it.

Any idea or suggestion???
Thanks in advance.

-- 
=============================================
Julián David Morillo Pozo
PhD Student - Computer Networking Group
Department of Computer Architecture   (DAC)
Polytechnical University of Catalonia (UPC)
Phone: +34-934017182   Fax: +34-934017055
URL: http://people.ac.upc.edu/jmorillo
=============================================