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

📄 show_interfaces.cc

📁 BCAST Implementation for NS2
💻 CC
📖 第 1 页 / 共 2 页
字号:
	vifaddr4_deleted(ifname, vifname, addr);	break;    case IF_EVENT_CHANGED:	// shouldn't happen	abort();	break;    }}voidInterfaceMonitor::vifaddr6_update(const string& ifname,				  const string& vifname,				  const IPv6& addr,				  const uint32_t& event){    switch (event) {    case IF_EVENT_CREATED:	vifaddr6_created(ifname, vifname, addr);	break;    case IF_EVENT_DELETED:	vifaddr6_deleted(ifname, vifname, addr);	break;    case IF_EVENT_CHANGED:	// shouldn't happen	abort();	break;    }}voidInterfaceMonitor::interface_deleted(const string& ifname){    multimap<string, Vif*>::iterator i;    i = _vifs_by_interface.find(ifname);    if (i != _vifs_by_interface.end()) {	vif_deleted(ifname, i->second->name());    }}voidInterfaceMonitor::vif_deleted(const string& ifname, const string& vifname){    Vif *vif;    debug_msg("vif_deleted %s %s\n", ifname.c_str(), vifname.c_str());    map<string, Vif*>::iterator vi = _vifs_by_name.find(vifname);    if (vi != _vifs_by_name.end()) {	vif = vi->second;	_vifs_by_name.erase(vi);	multimap<string, Vif*>::iterator ii = _vifs_by_interface.find(ifname);	assert(ii != _vifs_by_interface.end());	while (ii != _vifs_by_interface.end() &&	       ii->first == ifname) {	    if (ii->second == vif) {		_vifs_by_interface.erase(ii);		break;	    }	    ii++;	    assert(ii != _vifs_by_interface.end());	}	// now process the deletion...	// XXX    } else {	XLOG_ERROR("vif_deleted: vif %s not found.", vifname.c_str());    }}voidInterfaceMonitor::vif_created(const string& ifname, const string& vifname){    debug_msg("vif_created: %s\n", vifname.c_str());    if (_vifs_by_name.find(vifname) != _vifs_by_name.end()) {	XLOG_ERROR("vif_created: vif %s already exists.", vifname.c_str());	return;    }    Vif *vif = new Vif(vifname, ifname);    _vifs_by_name[vifname] = vif;    _vifs_by_interface.insert(pair<string, Vif*>(ifname, vif));    // now process the addition    // XXX}voidInterfaceMonitor::vifaddr4_created(const string& ifn,				   const string& vifn,				   const IPv4&   addr){    if (_vifs_by_name.find(vifn) == _vifs_by_name.end()) {	XLOG_ERROR("vifaddr4_created on unknown vif: %s", vifn.c_str());	return;    }    XorpCallback2<void, const XrlError&, const uint32_t*>::RefPtr cb;    cb = callback(this, &InterfaceMonitor::vifaddr4_done, ifn, vifn, addr);    if (_ifmgr_client.send_get_configured_prefix4("fea", ifn, vifn, addr, cb)	== false) {	XLOG_ERROR("Failed to send address prefix request");	_state = FAILED;    }    _addrs_remaining++;}voidInterfaceMonitor::vifaddr4_done(const XrlError& e, const uint32_t* prefix_len,				string ifname, string vifname,				IPv4 addr){    UNUSED(ifname);    if (e == XrlError::OKAY()) {	if (_vifs_by_name.find(vifname) == _vifs_by_name.end()) {	    // silently ignore - the vif could have been deleted while we	    // were waiting for the answer.	    return;	}	Vif* vif = _vifs_by_name[vifname];	debug_msg("adding address %s prefix_len %d to vif %s\n",		  addr.str().c_str(), *prefix_len, vifname.c_str());	vif->add_address(addr, IPvXNet(addr, *prefix_len),			 IPvX("0.0.0.0"), IPvX("0.0.0.0"));	_addrs_remaining--;    } else if (e != XrlError::COMMAND_FAILED()) {	_addrs_remaining--;    } else {	XLOG_ERROR("Failed to get prefix_len for address %s.",		   addr.str().c_str());	_addrs_remaining--;    }    if (_interfaces_remaining == 0 && _vifs_remaining == 0 &&	_addrs_remaining == 0 && _flags_remaining == 0 &&	_state == INITIALIZING) {	_state = READY;    }}voidInterfaceMonitor::vifaddr4_deleted(const string& ifname,				   const string& vifname,				   const IPv4&	 addr){    UNUSED(ifname);    if (_vifs_by_name.find(vifname) == _vifs_by_name.end()) {	XLOG_ERROR("vifaddr4_deleted on unknown vif: %s", vifname.c_str());	return;    }    Vif* vif = _vifs_by_name[vifname];    vif->delete_address(addr);}voidInterfaceMonitor::vifaddr6_created(const string& ifn,				   const string& vifn,				   const IPv6&   addr){    if (_vifs_by_name.find(vifn) == _vifs_by_name.end()) {	XLOG_ERROR("vifaddr6_created on unknown vif: %s",  vifn.c_str());	return;    }    XorpCallback2<void, const XrlError&, const uint32_t*>::RefPtr cb;    cb = callback(this, &InterfaceMonitor::vifaddr6_done, ifn, vifn, addr);    if (_ifmgr_client.send_get_configured_prefix6("fea", ifn, vifn, addr, cb)	== false) {	XLOG_ERROR("Failed to send address prefix request");	_state = FAILED;    }    _addrs_remaining++;}voidInterfaceMonitor::vifaddr6_done(const XrlError& e, const uint32_t* prefix_len,				string ifname, string vifname,				IPv6 addr){    UNUSED(ifname);    if (e == XrlError::OKAY()) {	if (_vifs_by_name.find(vifname) == _vifs_by_name.end()) {	    // silently ignore - the vif could have been deleted while we	    // were waiting for the answer.	    return;	}	Vif* vif = _vifs_by_name[vifname];	debug_msg("adding address %s prefix_len %d to vif %s\n",		  addr.str().c_str(), *prefix_len, vifname.c_str());	vif->add_address(addr, IPvXNet(addr, *prefix_len),			 IPvX("0.0.0.0"), IPvX("0.0.0.0"));	_addrs_remaining--;    } else if (e != XrlError::COMMAND_FAILED()) {	_addrs_remaining--;    } else {	XLOG_ERROR("Failed to get prefix_len for address %s.",		   addr.str().c_str());	_addrs_remaining--;    }    if (_interfaces_remaining == 0 && _vifs_remaining == 0 &&	_addrs_remaining == 0 && _flags_remaining == 0	&& _state == INITIALIZING) {	_state = READY;    }}voidInterfaceMonitor::vifaddr6_deleted(const string& ifname,				   const string& vifname,				   const IPv6&   addr){    UNUSED(ifname);    if (_vifs_by_name.find(vifname) == _vifs_by_name.end()) {	XLOG_ERROR("vifaddr6_deleted on unknown vif: %s", vifname.c_str());	return;    }    Vif* vif = _vifs_by_name[vifname];    vif->delete_address(addr);}voidInterfaceMonitor::print_results() const{    map<string, Vif*>::const_iterator i;    for (i = _vifs_by_name.begin(); i != _vifs_by_name.end(); i++) {	Vif *vif = i->second;	printf("%s/%s: Flags:<", vif->ifname().c_str(), vif->name().c_str());	bool prev = false;	if (vif->is_underlying_vif_up()) {	    if (prev) printf(",");	    printf("ENABLED");	    prev = true;	}	if (vif->is_broadcast_capable()) {	    if (prev) printf(",");	    printf("BROADCAST");	    prev = true;	}	if (vif->is_multicast_capable()) {	    if (prev) printf(",");	    printf("MULTICAST");	    prev = true;	}	if (vif->is_loopback()) {	    if (prev) printf(",");	    printf("LOOPBACK");	    prev = true;	}	if (vif->is_p2p()) {	    if (prev) printf(",");	    printf("POINTTOPOINT");	    prev = true;	}	printf(">\n");	list<VifAddr>::const_iterator ai;	for (ai = vif->addr_list().begin();	     ai != vif->addr_list().end();	     ai++) {	    IPvX addr = ai->addr();	    if (addr.is_ipv4()) {		printf("    inet %s ", addr.str().c_str());		printf("netmask %s ",		       IPv4::make_prefix(ai->subnet_addr().					 prefix_len()).str().c_str());		printf("broadcast %s\n",		       ai->broadcast_addr().str().c_str());	    }	}	for (ai = vif->addr_list().begin();	     ai != vif->addr_list().end();	     ai++) {	    IPvX addr = ai->addr();	    if (addr.is_ipv6()) {		printf("inet6 %s ", addr.str().c_str());		printf("netmask %s ",		       IPv6::make_prefix(ai->subnet_addr().					 prefix_len()).str().c_str());	    }	}    }}intmain(int argc, char* const argv[]){    XorpUnexpectedHandler x(xorp_unexpected_handler);    //    // Initialize and start xlog    //    xlog_init(argv[0], NULL);    xlog_set_verbose(XLOG_VERBOSE_LOW);		// Least verbose messages    // XXX: verbosity of the error messages temporary increased    xlog_level_set_verbose(XLOG_LEVEL_ERROR, XLOG_VERBOSE_HIGH);    xlog_add_default_output();    xlog_start();    UNUSED(argc);    UNUSED(argv);    EventLoop eventloop;    string process;    process = c_format("interface_monitor%d", getpid());    try {	XrlRouter xrl_rtr(eventloop, process.c_str());	InterfaceMonitor ifmon(xrl_rtr, eventloop);	bool timed_out = false;	XorpTimer t = eventloop.set_flag_after_ms(10000, &timed_out);	xrl_rtr.finalize();	while (xrl_rtr.ready() == false) {	    eventloop.run();	}	ifmon.start();	while (ifmon.state() == InterfaceMonitor::INITIALIZING) {	    eventloop.run();	}	ifmon.print_results();    } catch(...) {	xorp_catch_standard_exceptions();    }    //    // Gracefully stop and exit xlog    //    xlog_stop();    xlog_exit();    return 0;}

⌨️ 快捷键说明

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