Skip to content

Commit

Permalink
pim/igmp: Fix another case of fake-vif at 100.
Browse files Browse the repository at this point in the history
And make igmp use similar logic to pim.
  • Loading branch information
greearb committed Jul 31, 2012
1 parent cdbead1 commit 093cab6
Show file tree
Hide file tree
Showing 2 changed files with 22 additions and 32 deletions.
52 changes: 21 additions & 31 deletions xorp/mld6igmp/mld6igmp_node.cc
Expand Up @@ -408,7 +408,25 @@ Mld6igmpNode::updates_made()
set_config_pif_index(ifmgr_vif_name,
ifmgr_vif.pif_index(),
error_msg);


if (node_vif->vif_index() != ifmgr_vif.vif_index()) {
XLOG_INFO("Vif-index changed, node-vif: %s ifmgr-vif: %s",
node_vif->str().c_str(), ifmgr_vif.toString().c_str());
// It went real..fix up underlying logic.
Mld6igmpVif* fake_vif = vif_find_by_vif_index(ifmgr_vif.vif_index());
if (fake_vif) {
// Move any fake with our real ifindex out of the way.
adjust_fake_vif(fake_vif, ifmgr_vif.vif_index());
}

ProtoNode<Mld6igmpVif>::delete_vif((Mld6igmpVif*)(node_vif));
XLOG_INFO("Setting formerly fake node_vif: %s to real ifindex: %i",
node_vif->name().c_str(), ifmgr_vif.vif_index());
node_vif->set_vif_index(ifmgr_vif.vif_index());
node_vif->set_is_fake(false);
ProtoNode<Mld6igmpVif>::add_vif((Mld6igmpVif*)(node_vif));
}

//
// Update the vif flags
//
Expand Down Expand Up @@ -731,7 +749,7 @@ Mld6igmpNode::add_vif(const string& vif_name, uint32_t vif_index,
if (vif_index <= 0) {
// Well now...this interface must not currently exist.
// We need to fake out an index
vif_index = 100;
vif_index = 1;

while (true) {
mvif = vif_find_by_vif_index(vif_index);
Expand Down Expand Up @@ -1027,39 +1045,11 @@ Mld6igmpNode::delete_vif_addr(const string& vif_name,
Mld6igmpVif*
Mld6igmpNode::find_or_create_vif(const string& vif_name, string& error_msg) {
Mld6igmpVif* mvif = vif_find_by_name(vif_name);
int if_index = 0;
errno = 0;

if (mvif == NULL) {
#ifdef HAVE_IF_NAMETOINDEX
if_index = if_nametoindex(vif_name.c_str());
#endif
add_vif(vif_name, if_index, error_msg);
add_vif(vif_name, 0, error_msg);
mvif = vif_find_by_name(vif_name);
}
else {
// If it's fake..then might need to fix things up.
if (mvif->is_fake()) {
#ifdef HAVE_IF_NAMETOINDEX
if_index = if_nametoindex(vif_name.c_str());
#endif
if (if_index > 0) {
// It went real..fix up underlying logic.
Mld6igmpVif* fake_vif = vif_find_by_vif_index(if_index);
if (fake_vif) {
// Move any fake with our real ifindex out of the way.
adjust_fake_vif(fake_vif, if_index);
}

ProtoNode<Mld6igmpVif>::delete_vif(mvif);
XLOG_INFO("Setting formerly fake mvif: %s to real ifindex: %i",
mvif->name().c_str(), if_index);
mvif->set_vif_index(if_index);
mvif->set_is_fake(false);
ProtoNode<Mld6igmpVif>::add_vif(mvif);
}
}
}
return mvif;
}

Expand Down
2 changes: 1 addition & 1 deletion xorp/pim/pim_node.cc
Expand Up @@ -804,7 +804,7 @@ PimNode::add_vif(const string& vif_name, uint32_t vif_index, string& error_msg)
if (vif_index <= 0) {
// Well now...this interface must not currently exist.
// We need to fake out an index
vif_index = 100;
vif_index = 1;

while (true) {
mvif = vif_find_by_vif_index(vif_index);
Expand Down

0 comments on commit 093cab6

Please sign in to comment.