aboutsummaryrefslogtreecommitdiffstats
path: root/src/vnet/devices/af_packet/af_packet.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/vnet/devices/af_packet/af_packet.c')
-rw-r--r--src/vnet/devices/af_packet/af_packet.c23
1 files changed, 14 insertions, 9 deletions
diff --git a/src/vnet/devices/af_packet/af_packet.c b/src/vnet/devices/af_packet/af_packet.c
index ac6fc05a627..b84f5cd280e 100644
--- a/src/vnet/devices/af_packet/af_packet.c
+++ b/src/vnet/devices/af_packet/af_packet.c
@@ -401,15 +401,18 @@ af_packet_queue_init (vlib_main_t *vm, af_packet_if_t *apif,
tx_req = tx_queue->tx_req;
}
- ret = create_packet_v3_sock (apif->host_if_index, rx_req, tx_req, &fd, &ring,
- &hdrlen, &is_cksum_gso_enabled,
- apif->dev_instance, is_fanout);
+ if (rx_queue || tx_queue)
+ {
+ ret = create_packet_v3_sock (apif->host_if_index, rx_req, tx_req, &fd,
+ &ring, &hdrlen, &is_cksum_gso_enabled,
+ apif->dev_instance, is_fanout);
- if (ret != 0)
- goto error;
+ if (ret != 0)
+ goto error;
- vec_add1 (apif->rings, ring);
- ring_addr = ring.ring_start_addr;
+ vec_add1 (apif->rings, ring);
+ ring_addr = ring.ring_start_addr;
+ }
if (rx_queue)
{
@@ -452,8 +455,10 @@ af_packet_queue_init (vlib_main_t *vm, af_packet_if_t *apif,
return 0;
error:
vlib_log_err (apm->log_class, "Failed to set queue %u error", queue_id);
- vec_free (rx_queue->rx_req);
- vec_free (tx_queue->tx_req);
+ if (rx_queue)
+ vec_free (rx_queue->rx_req);
+ if (tx_queue)
+ vec_free (tx_queue->tx_req);
return ret;
}