Example #1
0
void route_entry::register_to_net_device()
{
	ip_address src_addr = m_val->get_src_addr();

	rt_entry_logdbg("register to net device with src_addr %s", src_addr.to_str().c_str());

	cache_entry_subject<ip_address, net_device_val*> *net_dev_entry = (cache_entry_subject<ip_address, net_device_val*> *)m_p_net_dev_entry;
	if (g_p_net_device_table_mgr->register_observer(src_addr, this, &net_dev_entry)) {
		rt_entry_logdbg("route_entry [%p] is registered to an offloaded device", this);
		m_p_net_dev_entry = (net_device_entry *) net_dev_entry;
		m_p_net_dev_entry->get_val(m_p_net_dev_val);
		m_b_offloaded_net_dev = true;
	} 
	else {
		rt_entry_logdbg("route_entry [%p] tried to register to non-offloaded device ---> registration failed", this);
		m_b_offloaded_net_dev = false;
	}
}
Example #2
0
void route_entry::unregister_to_net_device()
{
	if (!m_val) {
		rt_entry_logdbg("ERROR: failed to find route val");
		return;
	}

	if (m_p_net_dev_val) {
		ip_address src_addr = m_p_net_dev_val->get_local_addr();
		rt_entry_logdbg("unregister from net device with src_addr %s", src_addr.to_str().c_str());
		if (! g_p_net_device_table_mgr->unregister_observer(src_addr, this)) {
			rt_entry_logdbg("ERROR: failed to unregister from net_device_entry");
		}
	}

	m_p_net_dev_entry = NULL;
	m_p_net_dev_val = NULL;

}
Example #3
0
void route_entry::notify_cb()
{
	// got addr_change event from net_device_entry --> does not change the validity of route_entry!
	rt_entry_logdbg("");
	if (m_p_net_dev_entry->is_valid()) {
		m_p_net_dev_entry->get_val(m_p_net_dev_val);
	}
	else {
		m_p_net_dev_val = NULL;
	}
	notify_observers();
}
Example #4
0
void route_entry::register_to_net_device()
{
	net_dev_lst_t* dev_list = g_p_net_device_table_mgr->get_net_device_val_lst_from_index(m_val->get_if_index());
	if (!dev_list || dev_list->empty()) {
		rt_entry_logdbg("No matched net device for %s interface", m_val->get_if_name());
		m_b_offloaded_net_dev = false;
	}
	else {
		ip_address src_addr = dev_list->front()->get_local_addr();
		rt_entry_logdbg("register to net device with src_addr %s", src_addr.to_str().c_str());

		cache_entry_subject<ip_address, net_device_val*> *net_dev_entry = (cache_entry_subject<ip_address, net_device_val*> *)m_p_net_dev_entry;
		if (g_p_net_device_table_mgr->register_observer(src_addr, this, &net_dev_entry)) {
			rt_entry_logdbg("route_entry [%p] is registered to an offloaded device", this);
			m_p_net_dev_entry = (net_device_entry *) net_dev_entry;
			m_p_net_dev_entry->get_val(m_p_net_dev_val);
			m_b_offloaded_net_dev = true;
		} 
		else {
			rt_entry_logdbg("route_entry [%p] tried to register to non-offloaded device ---> registration failed", this);
			m_b_offloaded_net_dev = false;
		}
	}
}
Example #5
0
bool route_entry::get_val(INOUT route_val* &val)
{
	rt_entry_logdbg("");
	val = m_val;
	return is_valid();
}