struct net_if* net_if_alloc(int net_if_id, const char* name, int rss_set_size) { struct net_if* net_if = malloc(sizeof(*net_if)); int ifindex; char dummy; if( (ifindex = if_nametoindex(name)) == 0 ) if( sscanf(name, "%u%c", &ifindex, &dummy) != 1 ) return NULL; net_if->name = strdup(name); TEST(net_if_id >= 0 && net_if_id < MAX_NET_IFS); net_if->id = net_if_id; net_if->ifindex = ifindex; if( ef_driver_open(&net_if->dh) < 0 ) goto fail1; if( ef_pd_alloc(&net_if->pd, net_if->dh, net_if->ifindex, EF_PD_DEFAULT) < 0 ) goto fail2; net_if->vi_set_size = rss_set_size; if( rss_set_size > 0 ) TRY(ef_vi_set_alloc_from_pd(&net_if->vi_set, net_if->dh, &net_if->pd, net_if->dh, rss_set_size)); return net_if; fail2: ef_driver_close(net_if->dh); fail1: free(net_if); return NULL; }
static void do_free(void) { TRY(ef_vi_filter_del(&vi, driver_handle, &filter_cookie)); TRY(ef_vi_flush(&vi, driver_handle)); TRY(ef_memreg_free(&memreg, driver_handle)); free(pkt_buf_mem); TRY(ef_vi_free(&vi, driver_handle)); TRY(ef_pd_free(&pd, driver_handle)); TRY(ef_driver_close(driver_handle)); }