Ejemplo n.º 1
0
//The following function supposed to be called under m_lock
bool dst_entry_udp_mc::resolve_net_dev()
{
    bool ret_val = false;
    cache_entry_subject<ip_address, net_device_val*>* p_ces = NULL;

    if (m_mc_tx_if_ip.get_in_addr() != INADDR_ANY && !m_mc_tx_if_ip.is_mc()) {
        if(m_p_net_dev_entry == NULL && g_p_net_device_table_mgr->register_observer(m_mc_tx_if_ip.get_in_addr(), this, &p_ces)) {
            m_p_net_dev_entry = dynamic_cast<net_device_entry*>(p_ces);
        }
        if (m_p_net_dev_entry) {
            m_p_net_dev_entry->get_val(m_p_net_dev_val);
            if (m_p_net_dev_val && m_p_net_dev_val->is_valid()) {
                ret_val = alloc_transport_dep_res();
            }
            else {
                dst_udp_mc_logdbg("Valid netdev value not found");
            }
        }
        else {
            m_b_is_offloaded = false;
            dst_udp_mc_logdbg("Netdev is not offloaded fallback to OS");
        }
    }
    else {
        ret_val = dst_entry::resolve_net_dev();
    }
    return ret_val;
}
Ejemplo n.º 2
0
dst_entry_udp_mc::dst_entry_udp_mc(in_addr_t dst_ip, uint16_t dst_port, uint16_t src_port, in_addr_t tx_if_ip, bool mc_b_loopback, uint8_t mc_ttl, int owner_fd) :
    dst_entry_udp(dst_ip, dst_port, src_port, owner_fd),
    m_mc_tx_if_ip(tx_if_ip), m_b_mc_loopback_enabled(mc_b_loopback)
{
    m_ttl = mc_ttl;
    dst_udp_mc_logdbg("%s", to_str().c_str());
}
Ejemplo n.º 3
0
dst_entry_udp_mc::dst_entry_udp_mc(in_addr_t dst_ip, uint16_t dst_port,
				   uint16_t src_port, in_addr_t tx_if_ip,
				   bool mc_b_loopback ,socket_data &sock_data,
				   resource_allocation_key &ring_alloc_logic):
					dst_entry_udp(dst_ip, dst_port, src_port, sock_data, ring_alloc_logic),
					m_mc_tx_if_ip(tx_if_ip), m_b_mc_loopback_enabled(mc_b_loopback)
{
	dst_udp_mc_logdbg("%s", to_str().c_str());
}
Ejemplo n.º 4
0
//The following function supposed to be called under m_lock
bool dst_entry_udp_mc::get_net_dev_val()
{
    bool ret_val = false;

    if (m_p_rt_entry) {
        dst_udp_mc_logfunc("%s Using rt table to get netdev", to_str().c_str());
        ret_val = m_p_rt_entry->get_val(m_p_rt_val);
    }
    else {
        if (m_p_net_dev_entry) {
            ret_val = m_p_net_dev_entry->get_val(m_p_net_dev_val);
            dst_udp_mc_logfunc("%s Using directly netdev entry to get net_dev", to_str().c_str());
            ret_val = true;
        }
        else {
            dst_udp_mc_logdbg("%s netdev is not offloaded", to_str().c_str());
        }
    }
    return ret_val;
}
Ejemplo n.º 5
0
dst_entry_udp_mc::~dst_entry_udp_mc()
{
    dst_udp_mc_logdbg("%s", to_str().c_str());
}