forked from luigirizzo/netmap
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathnetmap_classes.h
More file actions
140 lines (105 loc) · 4.28 KB
/
netmap_classes.h
File metadata and controls
140 lines (105 loc) · 4.28 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
/*
* Copyright (C) 2013-2015 Vincenzo Maffione. All rights reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in the
* documentation and/or other materials provided with the distribution.
*
* THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
* ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
*/
#ifndef NETMAP_PYTHON_CLASSES_H
#define NETMAP_PYTHON_CLASSES_H
#include <Python.h>
#include <net/if.h>
#include <net/netmap.h>
extern PyObject *NetmapError;
/* Utilities implemented in netmap.c. */
PyObject *string_get(PyObject *str);
int string_set(PyObject **str, PyObject *value);
void netmap_flags_pretty(unsigned int flags, char *str, int avail,
unsigned int *values, const char **strings, int items);
void ringid_pretty_print(uint32_t nr_ringid, uint32_t nr_flags,
char *ringid, int rsz, char *flags, int fsz);
/* Netmap memory representation. */
typedef struct {
PyObject *interface;
PyObject *transmit_rings;
PyObject *receive_rings;
} NetmapMemory;
void NetmapMemory_dealloc(NetmapMemory *memory);
void NetmapMemory_new(NetmapMemory *memory);
int NetmapMemory_setup(NetmapMemory *memory, struct netmap_if *nifp,
int num_tx_rings, int num_rx_rings);
void NetmapMemory_destroy(NetmapMemory *memory);
/*
* Main class of the netmap module, managing
* a netmap port.
*/
typedef struct {
PyObject_HEAD
PyObject *dev_name; /* Netmap device name. */
PyObject *if_name;
struct nmreq nmreq; /* The netmap request we are wrapping. */
/* Netmap memory representation. */
NetmapMemory memory;
/* Internal variables. */
int _state;
#define INVALID_FD (-1)
int _fd; /* Netmap device file descriptor. */
void *_memaddr; /* Netmap memory-mapped area. */
} NetmapManager;
extern PyTypeObject NetmapManagerType;
/*
* A simpler alternative to the NetmapManager class, which makes use of the
* nm_open()/nm_close() API.
*/
typedef struct {
PyObject_HEAD
struct nm_desc *nmd; /* The netmap descriptor object we are wrapping. */
/* Netmap memory representation. */
NetmapMemory memory;
} NetmapDesc;
extern PyTypeObject NetmapDescType;
/* Class wrapper for the netmap_if struct. */
typedef struct {
PyObject_HEAD
struct netmap_if *_nifp; /* Address of struct netmap_if. */
} NetmapInterface;
extern PyTypeObject NetmapInterfaceType;
int NetmapInterface_build(NetmapInterface *self, void *addr);
void NetmapInterface_destroy(NetmapInterface *self);
/* Class wrapper for the netmap_ring struct. */
typedef struct {
PyObject_HEAD
PyObject *slots;
struct netmap_ring *_ring; /* Address of struct netmap_ring. */
} NetmapRing;
extern PyTypeObject NetmapRingType;
int NetmapRing_build(NetmapRing *self, void *addr);
void NetmapRing_destroy(NetmapRing *self);
/* Class wrapper for the netmap_slot struct. */
typedef struct {
PyObject_HEAD
PyObject *memoryview;
Py_buffer _view;
struct netmap_slot *_slot; /* Address of struct netmap_slot. */
} NetmapSlot;
extern PyTypeObject NetmapSlotType;
int NetmapSlot_build(NetmapSlot *slot, void *addr, void *buf);
void NetmapSlot_destroy(NetmapSlot *slot);
#endif /* NETMAP_PYTHON_CLASSES_H */