]> git.proxmox.com Git - mirror_qemu.git/blame - hw/net/vmxnet_rx_pkt.h
s390x: Migrate guest storage keys (initial memory only)
[mirror_qemu.git] / hw / net / vmxnet_rx_pkt.h
CommitLineData
e263cd49
DF
1/*
2 * QEMU VMWARE VMXNET* paravirtual NICs - RX packets abstraction
3 *
4 * Copyright (c) 2012 Ravello Systems LTD (http://ravellosystems.com)
5 *
6 * Developed by Daynix Computing LTD (http://www.daynix.com)
7 *
8 * Authors:
9 * Dmitry Fleytman <dmitry@daynix.com>
10 * Tamir Shomer <tamirs@daynix.com>
11 * Yan Vugenfirer <yan@daynix.com>
12 *
13 * This work is licensed under the terms of the GNU GPL, version 2 or later.
14 * See the COPYING file in the top-level directory.
15 *
16 */
17
18#ifndef VMXNET_RX_PKT_H
19#define VMXNET_RX_PKT_H
20
21#include "stdint.h"
22#include "stdbool.h"
23#include "net/eth.h"
24
25/* defines to enable packet dump functions */
26/*#define VMXNET_RX_PKT_DEBUG*/
27
28struct VmxnetRxPkt;
29
30/**
31 * Clean all rx packet resources
32 *
33 * @pkt: packet
34 *
35 */
36void vmxnet_rx_pkt_uninit(struct VmxnetRxPkt *pkt);
37
38/**
39 * Init function for rx packet functionality
40 *
41 * @pkt: packet pointer
42 * @has_virt_hdr: device uses virtio header
43 *
44 */
45void vmxnet_rx_pkt_init(struct VmxnetRxPkt **pkt, bool has_virt_hdr);
46
47/**
48 * returns total length of data attached to rx context
49 *
50 * @pkt: packet
51 *
52 * Return: nothing
53 *
54 */
55size_t vmxnet_rx_pkt_get_total_len(struct VmxnetRxPkt *pkt);
56
fcf0cdc3
SL
57/**
58 * parse and set packet analysis results
59 *
60 * @pkt: packet
61 * @data: pointer to the data buffer to be parsed
62 * @len: data length
63 *
64 */
65void vmxnet_rx_pkt_set_protocols(struct VmxnetRxPkt *pkt, const void *data,
66 size_t len);
67
e263cd49
DF
68/**
69 * fetches packet analysis results
70 *
71 * @pkt: packet
72 * @isip4: whether the packet given is IPv4
73 * @isip6: whether the packet given is IPv6
74 * @isudp: whether the packet given is UDP
75 * @istcp: whether the packet given is TCP
76 *
77 */
78void vmxnet_rx_pkt_get_protocols(struct VmxnetRxPkt *pkt,
79 bool *isip4, bool *isip6,
80 bool *isudp, bool *istcp);
81
82/**
83 * returns virtio header stored in rx context
84 *
85 * @pkt: packet
86 * @ret: virtio header
87 *
88 */
89struct virtio_net_hdr *vmxnet_rx_pkt_get_vhdr(struct VmxnetRxPkt *pkt);
90
91/**
92 * returns packet type
93 *
94 * @pkt: packet
95 * @ret: packet type
96 *
97 */
98eth_pkt_types_e vmxnet_rx_pkt_get_packet_type(struct VmxnetRxPkt *pkt);
99
100/**
101 * returns vlan tag
102 *
103 * @pkt: packet
104 * @ret: VLAN tag
105 *
106 */
107uint16_t vmxnet_rx_pkt_get_vlan_tag(struct VmxnetRxPkt *pkt);
108
109/**
110 * tells whether vlan was stripped from the packet
111 *
112 * @pkt: packet
113 * @ret: VLAN stripped sign
114 *
115 */
116bool vmxnet_rx_pkt_is_vlan_stripped(struct VmxnetRxPkt *pkt);
117
118/**
119 * notifies caller if the packet has virtio header
120 *
121 * @pkt: packet
122 * @ret: true if packet has virtio header, false otherwize
123 *
124 */
125bool vmxnet_rx_pkt_has_virt_hdr(struct VmxnetRxPkt *pkt);
126
e263cd49
DF
127/**
128 * attach data to rx packet
129 *
130 * @pkt: packet
131 * @data: pointer to the data buffer
132 * @len: data length
133 * @strip_vlan: should the module strip vlan from data
134 *
135 */
136void vmxnet_rx_pkt_attach_data(struct VmxnetRxPkt *pkt, const void *data,
137 size_t len, bool strip_vlan);
138
139/**
140 * returns io vector that holds the attached data
141 *
142 * @pkt: packet
143 * @ret: pointer to IOVec
144 *
145 */
146struct iovec *vmxnet_rx_pkt_get_iovec(struct VmxnetRxPkt *pkt);
147
148/**
149 * prints rx packet data if debug is enabled
150 *
151 * @pkt: packet
152 *
153 */
154void vmxnet_rx_pkt_dump(struct VmxnetRxPkt *pkt);
155
156/**
157 * copy passed vhdr data to packet context
158 *
159 * @pkt: packet
160 * @vhdr: VHDR buffer
161 *
162 */
163void vmxnet_rx_pkt_set_vhdr(struct VmxnetRxPkt *pkt,
164 struct virtio_net_hdr *vhdr);
165
166/**
167 * save packet type in packet context
168 *
169 * @pkt: packet
170 * @packet_type: the packet type
171 *
172 */
173void vmxnet_rx_pkt_set_packet_type(struct VmxnetRxPkt *pkt,
174 eth_pkt_types_e packet_type);
175
176#endif