Skip to content

Commit

Permalink
pim: Use pointers instead of reference objects in class members.
Browse files Browse the repository at this point in the history
Was trying to figure out why we get a pure virtual method called
when destructing objects..but this didn't actually fix it.

Also add signal handling logic for attempted clean exit.

Signed-off-by: Ben Greear <greearb@candelatech.com>
  • Loading branch information
greearb committed Jul 29, 2010
1 parent 2cc2791 commit 628f728
Show file tree
Hide file tree
Showing 17 changed files with 161 additions and 159 deletions.
2 changes: 1 addition & 1 deletion xorp/pim/pim_config.cc
Expand Up @@ -1795,7 +1795,7 @@ PimNode::add_test_jp_entry(const IPvX& source_addr, const IPvX& group_addr,
int ret_value;

if (_test_jp_headers_list.empty() || is_new_group)
_test_jp_headers_list.push_back(PimJpHeader(*this));
_test_jp_headers_list.push_back(PimJpHeader(this));

PimJpHeader& pim_jp_header = _test_jp_headers_list.back();
ret_value = pim_jp_header.jp_entry_add(source_addr, group_addr,
Expand Down
42 changes: 21 additions & 21 deletions xorp/pim/pim_mre_join_prune.cc
Expand Up @@ -1083,7 +1083,7 @@ PimMre::downstream_prune_pending_timer_timeout_rp(uint32_t vif_index)
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_PRUNE,
pim_nbr_me->pim_vif().join_prune_holdtime().get(),
pim_nbr_me->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
set_downstream_noinfo_state(vif_index);
Expand Down Expand Up @@ -1148,7 +1148,7 @@ PimMre::downstream_prune_pending_timer_timeout_wc(uint32_t vif_index)
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_PRUNE,
pim_nbr_me->pim_vif().join_prune_holdtime().get(),
pim_nbr_me->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
}
Expand Down Expand Up @@ -1206,7 +1206,7 @@ PimMre::downstream_prune_pending_timer_timeout_sg(uint32_t vif_index)
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_PRUNE,
pim_nbr_me->pim_vif().join_prune_holdtime().get(),
pim_nbr_me->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
set_downstream_noinfo_state(vif_index);
Expand Down Expand Up @@ -1804,9 +1804,9 @@ PimMre::recompute_is_join_desired_rp()
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
// Set Join Timer to t_periodic
join_timer() =
Expand Down Expand Up @@ -1835,7 +1835,7 @@ PimMre::recompute_is_join_desired_rp()
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_PRUNE,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
// Cancel Join Timer
Expand Down Expand Up @@ -1932,9 +1932,9 @@ PimMre::recompute_is_join_desired_wc()
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
}
// Set Join Timer to t_periodic
Expand Down Expand Up @@ -1971,7 +1971,7 @@ PimMre::recompute_is_join_desired_wc()
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_PRUNE,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
}
Expand Down Expand Up @@ -2056,9 +2056,9 @@ PimMre::recompute_is_join_desired_sg()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
// Set Join Timer to t_periodic
join_timer() =
Expand Down Expand Up @@ -2087,7 +2087,7 @@ PimMre::recompute_is_join_desired_sg()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_PRUNE,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
// Cancel Join Timer
Expand Down Expand Up @@ -2202,7 +2202,7 @@ PimMre::recompute_is_prune_desired_sg_rpt()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG_RPT,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
}
Expand Down Expand Up @@ -2238,7 +2238,7 @@ PimMre::recompute_is_prune_desired_sg_rpt()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG_RPT,
ACTION_PRUNE,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
}
Expand Down Expand Up @@ -2412,9 +2412,9 @@ PimMre::join_timer_timeout()
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
// Set Join Timer to t_periodic
join_timer() =
Expand Down Expand Up @@ -2451,9 +2451,9 @@ PimMre::join_timer_timeout()
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
}
// Set Join Timer to t_periodic
Expand Down Expand Up @@ -2484,9 +2484,9 @@ PimMre::join_timer_timeout()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = pim_nbr->pim_vif()->join_prune_period().get();
}
// Set Join Timer to t_periodic
join_timer() =
Expand Down Expand Up @@ -2536,7 +2536,7 @@ PimMre::override_timer_timeout()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG_RPT,
ACTION_JOIN,
pim_nbr->pim_vif().join_prune_holdtime().get(),
pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}

Expand Down
30 changes: 15 additions & 15 deletions xorp/pim/pim_mre_rpf.cc
Expand Up @@ -868,9 +868,9 @@ PimMre::recompute_nbr_mrib_next_hop_rp_rp_changed()
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_JOIN,
new_pim_nbr->pim_vif().join_prune_holdtime().get(),
new_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = new_pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = new_pim_nbr->pim_vif()->join_prune_period().get();
}
//
// Send Prune(*,*,RP) to the old value of
Expand All @@ -882,7 +882,7 @@ PimMre::recompute_nbr_mrib_next_hop_rp_rp_changed()
IPvX::ip_multicast_base_address_mask_len(family()),
MRT_ENTRY_RP,
ACTION_PRUNE,
old_pim_nbr->pim_vif().join_prune_holdtime().get(),
old_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
// Set the new upstream neighbor.
Expand Down Expand Up @@ -920,7 +920,7 @@ PimMre::recompute_nbr_mrib_next_hop_rp_gen_id_changed()
return;
// Restart Join Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &pim_nbr->pim_vif();
pim_vif = pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down Expand Up @@ -1010,7 +1010,7 @@ PimMre::recompute_rpfp_nbr_wc_assert_changed()
return;
// Restart Join Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &new_pim_nbr->pim_vif();
pim_vif = new_pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down Expand Up @@ -1080,10 +1080,10 @@ PimMre::recompute_rpfp_nbr_wc_not_assert_changed()
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_JOIN,
new_pim_nbr->pim_vif().join_prune_holdtime().get(),
new_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
join_prune_period = new_pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = new_pim_nbr->pim_vif()->join_prune_period().get();
}

// Send Prune(*,G) to the old value of RPF'(*,G)
Expand All @@ -1099,7 +1099,7 @@ PimMre::recompute_rpfp_nbr_wc_not_assert_changed()
IPvX::addr_bitlen(family()),
MRT_ENTRY_WC,
ACTION_PRUNE,
old_pim_nbr->pim_vif().join_prune_holdtime().get(),
old_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
}
Expand Down Expand Up @@ -1138,7 +1138,7 @@ PimMre::recompute_rpfp_nbr_wc_gen_id_changed()
return;
// Restart Join Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &pim_nbr->pim_vif();
pim_vif = pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down Expand Up @@ -1187,7 +1187,7 @@ PimMre::recompute_rpfp_nbr_sg_assert_changed()
return;
// Restart Join Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &new_pim_nbr->pim_vif();
pim_vif = new_pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down Expand Up @@ -1250,9 +1250,9 @@ PimMre::recompute_rpfp_nbr_sg_not_assert_changed()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_JOIN,
new_pim_nbr->pim_vif().join_prune_holdtime().get(),
new_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
join_prune_period = new_pim_nbr->pim_vif().join_prune_period().get();
join_prune_period = new_pim_nbr->pim_vif()->join_prune_period().get();
}

// Send Prune(S,G) to the old value of RPF'(S,G)
Expand All @@ -1262,7 +1262,7 @@ PimMre::recompute_rpfp_nbr_sg_not_assert_changed()
IPvX::addr_bitlen(family()),
MRT_ENTRY_SG,
ACTION_PRUNE,
old_pim_nbr->pim_vif().join_prune_holdtime().get(),
old_pim_nbr->pim_vif()->join_prune_holdtime().get(),
is_new_group);
}
// Set the new RPF'(S,G)
Expand Down Expand Up @@ -1300,7 +1300,7 @@ PimMre::recompute_rpfp_nbr_sg_gen_id_changed()
return;
// Restart Join Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &pim_nbr->pim_vif();
pim_vif = pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down Expand Up @@ -1351,7 +1351,7 @@ PimMre::recompute_rpfp_nbr_sg_rpt_changed()
// RPF'(S,G,rpt) === RPF'(*,G)
// Restart Override Timer if it is larger than t_override
TimeVal t_override, tv_left;
pim_vif = &new_pim_nbr->pim_vif();
pim_vif = new_pim_nbr->pim_vif();
if (pim_vif == NULL)
return;
t_override = pim_vif->upstream_join_timer_t_override();
Expand Down
32 changes: 16 additions & 16 deletions xorp/pim/pim_nbr.cc
Expand Up @@ -64,12 +64,12 @@
*
* PIM neighbor constructor.
**/
PimNbr::PimNbr(PimVif& pim_vif, const IPvX& primary_addr, int proto_version)
: _pim_node(pim_vif.pim_node()),
PimNbr::PimNbr(PimVif* pim_vif, const IPvX& primary_addr, int proto_version)
: _pim_node(pim_vif->pim_node()),
_pim_vif(pim_vif),
_primary_addr(primary_addr),
_proto_version(proto_version),
_jp_header(pim_vif.pim_node()),
_jp_header(pim_vif->pim_node()),
_startup_time(TimeVal::MAXIMUM())
{
reset_received_options();
Expand All @@ -95,7 +95,7 @@ PimNbr::~PimNbr()
void
PimNbr::reset_received_options()
{
_proto_version = _pim_vif.proto_version();
_proto_version = _pim_vif->proto_version();
// TODO: 0xffffffffU for _genid should be #define
_genid = 0xffffffffU;
_is_genid_present = false;
Expand All @@ -122,7 +122,7 @@ PimNbr::reset_received_options()
uint32_t
PimNbr::vif_index() const
{
return (pim_vif().vif_index());
return (pim_vif()->vif_index());
}

void
Expand Down Expand Up @@ -179,7 +179,7 @@ PimNbr::jp_entry_add(const IPvX& source_addr, const IPvX& group_addr,
// (Re)start the timer to send the J/P message after time 0.
// XXX: the automatic restarting will postpone the sending of
// the message until we have no more entries to add to that message.
_jp_send_timer = pim_node().eventloop().new_oneoff_after(
_jp_send_timer = pim_node()->eventloop().new_oneoff_after(
TimeVal(0, 0),
callback(this, &PimNbr::jp_send_timer_timeout));

Expand All @@ -191,7 +191,7 @@ PimNbr::jp_send_timer_timeout()
{
string dummy_error_msg;

pim_vif().pim_join_prune_send(this, &_jp_header, dummy_error_msg);
pim_vif()->pim_join_prune_send(this, &_jp_header, dummy_error_msg);
}

/**
Expand All @@ -202,18 +202,18 @@ PimNbr::jp_send_timer_timeout()
void
PimNbr::neighbor_liveness_timer_timeout()
{
pim_vif().delete_pim_nbr_from_nbr_list(this);
pim_vif()->delete_pim_nbr_from_nbr_list(this);

if (pim_vif().dr_addr() == primary_addr()) {
if (pim_vif()->dr_addr() == primary_addr()) {
// The neighbor to expire is the DR. Select a new DR.
pim_vif().pim_dr_elect();
pim_vif()->pim_dr_elect();
}

if (pim_vif().pim_nbrs_number() <= 1) {
if (pim_vif()->pim_nbrs_number() <= 1) {
// XXX: the last neighbor on this vif: take any actions if necessary
}

pim_vif().delete_pim_nbr(this);
pim_vif()->delete_pim_nbr(this);
}

void
Expand Down Expand Up @@ -439,11 +439,11 @@ PimNbr::delete_pim_mre(PimMre *pim_mre)
}

list<PimNbr *>::iterator pim_nbr_iter;
pim_nbr_iter = find(pim_node().processing_pim_nbr_list().begin(),
pim_node().processing_pim_nbr_list().end(),
pim_nbr_iter = find(pim_node()->processing_pim_nbr_list().begin(),
pim_node()->processing_pim_nbr_list().end(),
this);
if (pim_nbr_iter != pim_node().processing_pim_nbr_list().end()) {
pim_node().processing_pim_nbr_list().erase(pim_nbr_iter);
if (pim_nbr_iter != pim_node()->processing_pim_nbr_list().end()) {
pim_node()->processing_pim_nbr_list().erase(pim_nbr_iter);
delete this;
return;
}
Expand Down
10 changes: 5 additions & 5 deletions xorp/pim/pim_nbr.hh
Expand Up @@ -46,12 +46,12 @@ class PimVif;

class PimNbr {
public:
PimNbr(PimVif& pim_vif, const IPvX& primary_addr, int proto_version);
PimNbr(PimVif* pim_vif, const IPvX& primary_addr, int proto_version);
~PimNbr();

void reset_received_options();
PimNode& pim_node() const { return (_pim_node); }
PimVif& pim_vif() const { return (_pim_vif); }
PimNode* pim_node() const { return _pim_node; }
PimVif* pim_vif() const { return _pim_vif; }
uint32_t vif_index() const;
const IPvX& primary_addr() const { return (_primary_addr); }
void set_primary_addr(const IPvX& v) { _primary_addr = v; }
Expand Down Expand Up @@ -154,8 +154,8 @@ private:
void jp_send_timer_timeout();

// Fields to hold information from the PIM_HELLO messages
PimNode& _pim_node; // The associated PIM node
PimVif& _pim_vif; // The corresponding PIM vif
PimNode* _pim_node; // The associated PIM node
PimVif* _pim_vif; // The corresponding PIM vif
IPvX _primary_addr; // The primary address of the neighbor
list<IPvX> _secondary_addr_list; // The secondary addresses of the neighbor
int _proto_version; // The protocol version of the neighbor
Expand Down

0 comments on commit 628f728

Please sign in to comment.