Statistics
| Branch: | Revision:

root / hw / vmxnet_rx_pkt.h @ 82ca8912

History | View | Annotate | Download (3.8 kB)

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

    
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

    
57
/**
58
 * fetches packet analysis results
59
 *
60
 * @pkt:            packet
61
 * @isip4:          whether the packet given is IPv4
62
 * @isip6:          whether the packet given is IPv6
63
 * @isudp:          whether the packet given is UDP
64
 * @istcp:          whether the packet given is TCP
65
 *
66
 */
67
void vmxnet_rx_pkt_get_protocols(struct VmxnetRxPkt *pkt,
68
                                 bool *isip4, bool *isip6,
69
                                 bool *isudp, bool *istcp);
70

    
71
/**
72
 * returns virtio header stored in rx context
73
 *
74
 * @pkt:            packet
75
 * @ret:            virtio header
76
 *
77
 */
78
struct virtio_net_hdr *vmxnet_rx_pkt_get_vhdr(struct VmxnetRxPkt *pkt);
79

    
80
/**
81
 * returns packet type
82
 *
83
 * @pkt:            packet
84
 * @ret:            packet type
85
 *
86
 */
87
eth_pkt_types_e vmxnet_rx_pkt_get_packet_type(struct VmxnetRxPkt *pkt);
88

    
89
/**
90
 * returns vlan tag
91
 *
92
 * @pkt:            packet
93
 * @ret:            VLAN tag
94
 *
95
 */
96
uint16_t vmxnet_rx_pkt_get_vlan_tag(struct VmxnetRxPkt *pkt);
97

    
98
/**
99
 * tells whether vlan was stripped from the packet
100
 *
101
 * @pkt:            packet
102
 * @ret:            VLAN stripped sign
103
 *
104
 */
105
bool vmxnet_rx_pkt_is_vlan_stripped(struct VmxnetRxPkt *pkt);
106

    
107
/**
108
 * notifies caller if the packet has virtio header
109
 *
110
 * @pkt:            packet
111
 * @ret:            true if packet has virtio header, false otherwize
112
 *
113
 */
114
bool vmxnet_rx_pkt_has_virt_hdr(struct VmxnetRxPkt *pkt);
115

    
116
/**
117
 * returns number of frags attached to the packet
118
 *
119
 * @pkt:            packet
120
 * @ret:            number of frags
121
 *
122
 */
123
uint16_t vmxnet_rx_pkt_get_num_frags(struct VmxnetRxPkt *pkt);
124

    
125
/**
126
 * attach data to rx packet
127
 *
128
 * @pkt:            packet
129
 * @data:           pointer to the data buffer
130
 * @len:            data length
131
 * @strip_vlan:     should the module strip vlan from data
132
 *
133
 */
134
void vmxnet_rx_pkt_attach_data(struct VmxnetRxPkt *pkt, const void *data,
135
    size_t len, bool strip_vlan);
136

    
137
/**
138
 * returns io vector that holds the attached data
139
 *
140
 * @pkt:            packet
141
 * @ret:            pointer to IOVec
142
 *
143
 */
144
struct iovec *vmxnet_rx_pkt_get_iovec(struct VmxnetRxPkt *pkt);
145

    
146
/**
147
 * prints rx packet data if debug is enabled
148
 *
149
 * @pkt:            packet
150
 *
151
 */
152
void vmxnet_rx_pkt_dump(struct VmxnetRxPkt *pkt);
153

    
154
/**
155
 * copy passed vhdr data to packet context
156
 *
157
 * @pkt:            packet
158
 * @vhdr:           VHDR buffer
159
 *
160
 */
161
void vmxnet_rx_pkt_set_vhdr(struct VmxnetRxPkt *pkt,
162
    struct virtio_net_hdr *vhdr);
163

    
164
/**
165
 * save packet type in packet context
166
 *
167
 * @pkt:            packet
168
 * @packet_type:    the packet type
169
 *
170
 */
171
void vmxnet_rx_pkt_set_packet_type(struct VmxnetRxPkt *pkt,
172
    eth_pkt_types_e packet_type);
173

    
174
#endif