|
@@ -157,19 +157,28 @@ void connection_destroy(void *opaque)
|
|
|
|
|
|
Packet *packet_new(const void *data, int size, int vnet_hdr_len)
|
|
|
{
|
|
|
- Packet *pkt = g_slice_new(Packet);
|
|
|
+ Packet *pkt = g_slice_new0(Packet);
|
|
|
|
|
|
pkt->data = g_memdup(data, size);
|
|
|
pkt->size = size;
|
|
|
pkt->creation_ms = qemu_clock_get_ms(QEMU_CLOCK_HOST);
|
|
|
pkt->vnet_hdr_len = vnet_hdr_len;
|
|
|
- pkt->tcp_seq = 0;
|
|
|
- pkt->tcp_ack = 0;
|
|
|
- pkt->seq_end = 0;
|
|
|
- pkt->header_size = 0;
|
|
|
- pkt->payload_size = 0;
|
|
|
- pkt->offset = 0;
|
|
|
- pkt->flags = 0;
|
|
|
+
|
|
|
+ return pkt;
|
|
|
+}
|
|
|
+
|
|
|
+/*
|
|
|
+ * packet_new_nocopy will not copy data, so the caller can't release
|
|
|
+ * the data. And it will be released in packet_destroy.
|
|
|
+ */
|
|
|
+Packet *packet_new_nocopy(void *data, int size, int vnet_hdr_len)
|
|
|
+{
|
|
|
+ Packet *pkt = g_slice_new0(Packet);
|
|
|
+
|
|
|
+ pkt->data = data;
|
|
|
+ pkt->size = size;
|
|
|
+ pkt->creation_ms = qemu_clock_get_ms(QEMU_CLOCK_HOST);
|
|
|
+ pkt->vnet_hdr_len = vnet_hdr_len;
|
|
|
|
|
|
return pkt;
|
|
|
}
|