Statistics
| Branch: | Revision:

root / hw / vmxnet_rx_pkt.h @ 82ca8912

History | View | Annotate | Download (3.8 kB)

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