]>
Commit | Line | Data |
---|---|---|
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 <[email protected]> | |
10 | * Tamir Shomer <[email protected]> | |
11 | * Yan Vugenfirer <[email protected]> | |
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 | ||
28 | struct VmxnetRxPkt; | |
29 | ||
30 | /** | |
31 | * Clean all rx packet resources | |
32 | * | |
33 | * @pkt: packet | |
34 | * | |
35 | */ | |
36 | void 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 | */ | |
45 | void 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 | */ | |
55 | size_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 | */ | |
65 | void 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 | */ | |
78 | void 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 | */ | |
89 | struct 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 | */ | |
98 | eth_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 | */ | |
107 | uint16_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 | */ | |
116 | bool 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 | */ | |
125 | bool 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 | */ | |
136 | void 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 | */ | |
146 | struct 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 | */ | |
154 | void 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 | */ | |
163 | void 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 | */ | |
173 | void vmxnet_rx_pkt_set_packet_type(struct VmxnetRxPkt *pkt, | |
174 | eth_pkt_types_e packet_type); | |
175 | ||
176 | #endif |