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; } }
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; }
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(); }
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; } } }
bool route_entry::get_val(INOUT route_val* &val) { rt_entry_logdbg(""); val = m_val; return is_valid(); }