⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xrl_target_common.hh

📁 RIP 协议实现
💻 HH
📖 第 1 页 / 共 3 页
字号:
// -*- c-basic-offset: 4; tab-width: 8; indent-tabs-mode: t -*-// vim:set sts=4 ts=8:// Copyright (c) 2001-2008 XORP, Inc.//// 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/rip/xrl_target_common.hh,v 1.36 2008/07/23 05:11:38 pavlin Exp $#ifndef __RIP_XRL_TARGET_COMMON_HH__#define __RIP_XRL_TARGET_COMMON_HH__#include "libxorp/status_codes.h"#include "peer.hh"class XrlProcessSpy;template <typename A> class XrlPortManager;template <typename A> class System;template <typename A> class XrlRedistManager;/** * @short Common handler for Xrl Requests. * * This class implements Xrl Target code that is common to both RIP * and RIP NG. */template <typename A>class XrlRipCommonTarget {public:    XrlRipCommonTarget(XrlProcessSpy& 		xps,		       XrlPortManager<A>&	xpm,		       XrlRedistManager<A>&	xrm,		       bool& 			should_exit,		       System<A>&		rip_system);    ~XrlRipCommonTarget();    void set_status(ProcessStatus ps, const string& annotation = "");    XrlCmdError common_0_1_get_status(uint32_t& status, string& reason);    XrlCmdError common_0_1_shutdown();    XrlCmdError    finder_event_observer_0_1_xrl_target_birth(const string& class_name,					       const string& instance_name);    XrlCmdError    finder_event_observer_0_1_xrl_target_death(const string& class_name,					       const string& instance_name);    XrlCmdError    ripx_0_1_add_rip_address(const string&	ifname,			     const string&	vifname,			     const A&		addr);    XrlCmdError    ripx_0_1_remove_rip_address(const string&	ifname,				const string&	vifname,				const A&	addr);    XrlCmdError    ripx_0_1_set_rip_address_enabled(const string&	ifname,				     const string&	vifname,				     const A&		addr,				     const bool&	enabled);    XrlCmdError    ripx_0_1_rip_address_enabled(const string&	ifname,				 const string&	vifname,				 const A&	addr,				 bool&		enabled);    XrlCmdError ripx_0_1_set_cost(const string&		ifname,				  const string&		vifname,				  const A&		addr,				  const uint32_t&	cost);    XrlCmdError ripx_0_1_cost(const string&	ifname,			      const string&	vifname,			      const A&		addr,			      uint32_t&		cost);    XrlCmdError ripx_0_1_set_horizon(const string&	ifname,				     const string&	vifname,				     const A&		addr,				     const string&	horizon);    XrlCmdError ripx_0_1_horizon(const string&	ifname,				 const string&	vifname,				 const A&	addr,				 string&	horizon);    XrlCmdError ripx_0_1_set_passive(const string&	ifname,				     const string&	vifname,				     const A&		addr,				     const bool&	passive);    XrlCmdError ripx_0_1_passive(const string&	ifname,				 const string&	vifname,				 const A&	addr,				 bool&		passive);    XrlCmdError    ripx_0_1_set_accept_non_rip_requests(const string&	ifname,					 const string&	vifname,					 const A&	addr,					 const bool&	accept);    XrlCmdError ripx_0_1_accept_non_rip_requests(const string&	ifname,						 const string&	vifname,						 const A&	addr,						 bool&		accept);    XrlCmdError ripx_0_1_set_accept_default_route(const string&	ifname,						  const string&	vifname,						  const A&	addr,						  const bool&	accept);    XrlCmdError ripx_0_1_accept_default_route(const string&	ifname,					      const string&	vifname,					      const A&		addr,					      bool&		accept);    XrlCmdError    ripx_0_1_set_advertise_default_route(const string&	ifname,					 const string&	vifname,					 const A&	addr,					 const bool&	advertise);    XrlCmdError ripx_0_1_advertise_default_route(const string&	ifname,						 const string&	vifname,						 const A&	addr,						 bool&		advertise);    XrlCmdError    ripx_0_1_set_route_timeout(const string&	ifname,			       const string&	vifname,			       const A&		addr,			       const uint32_t&	t_secs);    XrlCmdError    ripx_0_1_route_timeout(const string&	ifname,			   const string&	vifname,			   const A&		addr,			   uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_deletion_delay(const string&	ifname,				const string&	vifname,				const A&	addr,				const uint32_t&	t_secs);    XrlCmdError    ripx_0_1_deletion_delay(const string&	ifname,			    const string&	vifname,			    const A&		addr,			    uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_request_interval(const string&		ifname,				  const string&		vifname,				  const A&		addr,				  const uint32_t&	t_secs);    XrlCmdError    ripx_0_1_request_interval(const string&	ifname,			      const string&	vifname,			      const A&		addr,			      uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_update_interval(const string&	ifname,				 const string&	vifname,				 const A&	addr,				 const uint32_t& t_secs);    XrlCmdError    ripx_0_1_update_interval(const string&	ifname,			     const string&	vifname,			     const A&		addr,			     uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_update_jitter(const string&	ifname,			       const string&	vifname,			       const A&	addr,			       const uint32_t&	t_jitter);    XrlCmdError    ripx_0_1_update_jitter(const string&	ifname,			   const string&	vifname,			   const A&		addr,			   uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_triggered_update_delay(const string&	ifname,					const string&	vifname,					const A&	addr,					const uint32_t&	t_secs);    XrlCmdError    ripx_0_1_triggered_update_delay(const string&	ifname,				    const string&	vifname,				    const A&		addr,				    uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_triggered_update_jitter(const string&	ifname,					 const string&	vifname,					 const A&	addr,					 const uint32_t& t_secs);    XrlCmdError    ripx_0_1_triggered_update_jitter(const string&	ifname,				     const string&	vifname,				     const A&		addr,				     uint32_t&		t_secs);    XrlCmdError    ripx_0_1_set_interpacket_delay(const string&	ifname,				   const string&	vifname,				   const A&		addr,				   const uint32_t&	t_msecs);    XrlCmdError    ripx_0_1_interpacket_delay(const string&	ifname,			       const string&	vifname,			       const A&		addr,			       uint32_t&	t_msecs);    XrlCmdError ripx_0_1_rip_address_status(const string&	ifname,					    const string&	vifname,					    const A&		addr,					    string&		status);    XrlCmdError ripx_0_1_get_all_addresses(XrlAtomList&	ifnames,					   XrlAtomList&	vifnames,					   XrlAtomList&	addrs);    XrlCmdError ripx_0_1_get_peers(const string& ifname,				   const string& vifname,				   const A&	 addr,				   XrlAtomList&	 peers);    XrlCmdError ripx_0_1_get_all_peers(XrlAtomList& peers,				       XrlAtomList& ifnames,				       XrlAtomList& vifnames,				       XrlAtomList& addrs);    XrlCmdError ripx_0_1_get_counters(const string&	ifname,				      const string&	vifname,				      const A&		addr,				      XrlAtomList&	descriptions,				      XrlAtomList&	values);    XrlCmdError ripx_0_1_get_peer_counters(const string&	ifname,					   const string&	vifname,					   const A&		addr,					   const A&		peer,					   XrlAtomList&		descriptions,					   XrlAtomList&		values,					   uint32_t&		peer_last_pkt);    XrlCmdError socketx_user_0_1_recv_event(const string&	sockid,					    const string&	if_name,					    const string&	vif_name,					    const A&		src_host,					    const uint32_t&	src_port,					    const vector<uint8_t>& pdata);    XrlCmdError socketx_user_0_1_inbound_connect_event(	const string&	sockid,	const A&	src_host,	const uint32_t&	src_port,	const string&	new_sockid,	bool&		accept);    XrlCmdError socketx_user_0_1_outgoing_connect_event(	const string&	sockid);    XrlCmdError socketx_user_0_1_error_event(const string&	sockid,					     const string& 	reason,					     const bool&	fatal);    XrlCmdError socketx_user_0_1_disconnect_event(const string&	sockid);    XrlCmdError policy_backend_0_1_configure(const uint32_t& filter,					     const string& conf);    XrlCmdError policy_backend_0_1_reset(const uint32_t& filter);    XrlCmdError policy_backend_0_1_push_routes();    XrlCmdError policy_redistx_0_1_add_routex(const IPNet<A>&	    net,					      const bool&	    unicast,					      const bool&	    multicast,					      const A&		    nexthop,					      const uint32_t&	    metric,					      const XrlAtomList&    policytags);    XrlCmdError policy_redistx_0_1_delete_routex(const IPNet<A>&    net,						 const bool&	    unicast,						 const bool&	    multicast);    /**     * Find Port associated with ifname, vifname, addr.     *     * @return on success the first item in the pair will be a     * non-null pointer to the port and the second item with be     * XrlCmdError::OKAY().  On failyre the first item in the pair     * will be null and the XrlCmdError will signify the reason for     * the failure.     */    pair<Port<A>*,XrlCmdError> find_port(const string&	ifname,					 const string&	vifname,					 const A&	addr);protected:    XrlProcessSpy&		_xps;    XrlPortManager<A>&		_xpm;    XrlRedistManager<A>&	_xrm;    bool&			_should_exit;    ProcessStatus		_status;    string			_status_note;    System<A>&			_rip_system;};// ----------------------------------------------------------------------------// Inline implementation of XrlRipCommonTargettemplate <typename A>XrlRipCommonTarget<A>::XrlRipCommonTarget(XrlProcessSpy&	xps,					  XrlPortManager<A>& 	xpm,					  XrlRedistManager<A>&	xrm,					  bool&			should_exit,					  System<A>&		rip_system)    : _xps(xps), _xpm(xpm), _xrm(xrm),      _should_exit(should_exit), _status(PROC_NULL), _status_note(""),      _rip_system(rip_system){}template <typename A>XrlRipCommonTarget<A>::~XrlRipCommonTarget(){}template <typename A>voidXrlRipCommonTarget<A>::set_status(ProcessStatus status, const string& note){    debug_msg("Status Update %d -> %d: %s\n", _status, status, note.c_str());    _status 	 = status;    _status_note = note;}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::common_0_1_get_status(uint32_t& status,					     string&   reason){    status = _status;    reason = _status_note;    return XrlCmdError::OKAY();}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::common_0_1_shutdown(){    debug_msg("Shutdown requested.\n");    _should_exit = true;    return XrlCmdError::OKAY();}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::finder_event_observer_0_1_xrl_target_birth(							const string& cname,							const string& iname							){    _xps.birth_event(cname, iname);    return XrlCmdError::OKAY();}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::finder_event_observer_0_1_xrl_target_death(							const string& cname,							const string& iname							){    _xps.death_event(cname, iname);    return XrlCmdError::OKAY();}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::ripx_0_1_add_rip_address(const string&	ifname,					       const string&	vifname,					       const A&		addr){    debug_msg("rip_x_1_add_rip_address %s/%s/%s\n",	      ifname.c_str(), vifname.c_str(), addr.str().c_str());    if (_xpm.add_rip_address(ifname, vifname, addr) == false) {	return XrlCmdError::COMMAND_FAILED();    }    return XrlCmdError::OKAY();}template <typename A>XrlCmdErrorXrlRipCommonTarget<A>::ripx_0_1_remove_rip_address(const string& ifname,					 const string&		 vifname,					 const A&   		 addr){    debug_msg("ripx_0_1_remove_rip_address %s/%s/%s\n",	      ifname.c_str(), vifname.c_str(), addr.str().c_str());    if (_xpm.remove_rip_address(ifname, vifname, addr) == false) {	return XrlCmdError::COMMAND_FAILED();    }    return XrlCmdError::OKAY();}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -