FD.io VPP
v18.10-34-gcce845e
Vector Packet Processing
Main Page
Related Pages
Modules
Namespaces
Data Structures
Source
Files
Symbols
FD.io VPP
Vector Packet Processing
Release Notes
DHCPv6 prefix delegation
IPFIX support
Introduction
Statistics
VMWARE vmxnet3 device driver plugin
Debug CLI
Startup Configuration
Todo List
Node Identifiers
Modules
Namespaces
Data Structures
Source
Files
Symbols
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
file.h
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2017 Cisco and/or its affiliates.
3
* Licensed under the Apache License, Version 2.0 (the "License");
4
* you may not use this file except in compliance with the License.
5
* You may obtain a copy of the License at:
6
*
7
* http://www.apache.org/licenses/LICENSE-2.0
8
*
9
* Unless required by applicable law or agreed to in writing, software
10
* distributed under the License is distributed on an "AS IS" BASIS,
11
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
* See the License for the specific language governing permissions and
13
* limitations under the License.
14
*/
15
/*
16
* file.h: unix file handling
17
*
18
* Copyright (c) 2008 Eliot Dresselhaus
19
*
20
* Permission is hereby granted, free of charge, to any person obtaining
21
* a copy of this software and associated documentation files (the
22
* "Software"), to deal in the Software without restriction, including
23
* without limitation the rights to use, copy, modify, merge, publish,
24
* distribute, sublicense, and/or sell copies of the Software, and to
25
* permit persons to whom the Software is furnished to do so, subject to
26
* the following conditions:
27
*
28
* The above copyright notice and this permission notice shall be
29
* included in all copies or substantial portions of the Software.
30
*
31
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
32
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
33
* MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
34
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
35
* LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
36
* OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
37
* WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
38
*/
39
40
#ifndef included_clib_file_h
41
#define included_clib_file_h
42
43
#include <
vppinfra/socket.h
>
44
#include <
vppinfra/pool.h
>
45
#include <termios.h>
46
47
48
struct
clib_file
;
49
typedef
clib_error_t
*(
clib_file_function_t
) (
struct
clib_file
* f);
50
51
typedef
struct
clib_file
52
{
53
/* Unix file descriptor from open/socket. */
54
u32
file_descriptor
;
55
56
u32
flags
;
57
#define UNIX_FILE_DATA_AVAILABLE_TO_WRITE (1 << 0)
58
#define UNIX_FILE_EVENT_EDGE_TRIGGERED (1 << 1)
59
60
/* polling thread index */
61
u32
polling_thread_index
;
62
63
/* Data available for function's use. */
64
uword
private_data
;
65
66
/* Functions to be called when read/write data becomes ready. */
67
clib_file_function_t
*
read_function
, *
write_function
, *
error_function
;
68
69
/* Description */
70
u8
*
description
;
71
72
/* Stats */
73
u64
read_events
;
74
u64
write_events
;
75
u64
error_events
;
76
}
clib_file_t
;
77
78
typedef
enum
79
{
80
UNIX_FILE_UPDATE_ADD
,
81
UNIX_FILE_UPDATE_MODIFY
,
82
UNIX_FILE_UPDATE_DELETE
,
83
}
clib_file_update_type_t
;
84
85
typedef
struct
86
{
87
/* Pool of files to poll for input/output. */
88
clib_file_t
*
file_pool
;
89
90
void (*file_update) (
clib_file_t
* file,
91
clib_file_update_type_t
update_type);
92
93
}
clib_file_main_t
;
94
95
always_inline
uword
96
clib_file_add
(
clib_file_main_t
* um,
clib_file_t
*
template
)
97
{
98
clib_file_t
*f;
99
pool_get
(um->
file_pool
, f);
100
f[0] =
template
[0];
101
f->
read_events
= 0;
102
f->
write_events
= 0;
103
f->
error_events
= 0;
104
um->
file_update
(f,
UNIX_FILE_UPDATE_ADD
);
105
return
f - um->
file_pool
;
106
}
107
108
always_inline
void
109
clib_file_del
(
clib_file_main_t
* um,
clib_file_t
* f)
110
{
111
um->
file_update
(f,
UNIX_FILE_UPDATE_DELETE
);
112
close (f->
file_descriptor
);
113
f->
file_descriptor
= ~0;
114
vec_free
(f->
description
);
115
pool_put
(um->
file_pool
, f);
116
}
117
118
always_inline
void
119
clib_file_del_by_index
(
clib_file_main_t
* um,
uword
index)
120
{
121
clib_file_t
*uf;
122
uf =
pool_elt_at_index
(um->
file_pool
, index);
123
clib_file_del
(um, uf);
124
}
125
126
always_inline
void
127
clib_file_set_polling_thread
(
clib_file_main_t
* um,
uword
index,
128
u32
thread_index)
129
{
130
clib_file_t
*f =
pool_elt_at_index
(um->
file_pool
, index);
131
um->
file_update
(f,
UNIX_FILE_UPDATE_DELETE
);
132
f->
polling_thread_index
= thread_index;
133
um->
file_update
(f,
UNIX_FILE_UPDATE_ADD
);
134
}
135
136
always_inline
uword
137
clib_file_set_data_available_to_write
(
clib_file_main_t
* um,
138
u32
clib_file_index,
139
uword
is_available)
140
{
141
clib_file_t
*uf =
pool_elt_at_index
(um->
file_pool
, clib_file_index);
142
uword
was_available = (uf->
flags
&
UNIX_FILE_DATA_AVAILABLE_TO_WRITE
);
143
if
((was_available != 0) != (is_available != 0))
144
{
145
uf->
flags
^=
UNIX_FILE_DATA_AVAILABLE_TO_WRITE
;
146
um->
file_update
(uf,
UNIX_FILE_UPDATE_MODIFY
);
147
}
148
return
was_available != 0;
149
}
150
151
always_inline
clib_file_t
*
152
clib_file_get
(
clib_file_main_t
*
fm
,
u32
file_index)
153
{
154
if
(
pool_is_free_index
(fm->
file_pool
, file_index))
155
return
0;
156
return
pool_elt_at_index
(fm->
file_pool
, file_index);
157
}
158
159
always_inline
clib_error_t
*
160
clib_file_write
(
clib_file_t
* f)
161
{
162
f->
write_events
++;
163
return
f->
write_function
(f);
164
}
165
166
#endif
/* included_clib_file_h */
167
168
/*
169
* fd.io coding-style-patch-verification: ON
170
*
171
* Local Variables:
172
* eval: (c-set-style "gnu")
173
* End:
174
*/
clib_file_del
static void clib_file_del(clib_file_main_t *um, clib_file_t *f)
Definition:
file.h:109
u64
unsigned long u64
Definition:
types.h:89
pool.h
Fixed length block allocator.
clib_file_t
struct clib_file clib_file_t
clib_file::file_descriptor
u32 file_descriptor
Definition:
file.h:54
clib_file::polling_thread_index
u32 polling_thread_index
Definition:
file.h:61
clib_file_write
static clib_error_t * clib_file_write(clib_file_t *f)
Definition:
file.h:160
clib_file_function_t
clib_error_t *( clib_file_function_t)(struct clib_file *f)
Definition:
file.h:49
pool_get
#define pool_get(P, E)
Allocate an object E from a pool P (unspecified alignment).
Definition:
pool.h:228
clib_file_set_data_available_to_write
static uword clib_file_set_data_available_to_write(clib_file_main_t *um, u32 clib_file_index, uword is_available)
Definition:
file.h:137
u8
unsigned char u8
Definition:
types.h:56
clib_file::read_function
clib_file_function_t * read_function
Definition:
file.h:67
fm
#define fm
clib_file_main_t::file_pool
clib_file_t * file_pool
Definition:
file.h:88
clib_file_get
static clib_file_t * clib_file_get(clib_file_main_t *fm, u32 file_index)
Definition:
file.h:152
always_inline
#define always_inline
Definition:
clib.h:94
clib_file_update_type_t
clib_file_update_type_t
Definition:
file.h:78
u32
unsigned int u32
Definition:
types.h:88
clib_file::description
u8 * description
Definition:
file.h:70
pool_elt_at_index
#define pool_elt_at_index(p, i)
Returns pointer to element at given index.
Definition:
pool.h:464
UNIX_FILE_UPDATE_ADD
Definition:
file.h:80
UNIX_FILE_UPDATE_DELETE
Definition:
file.h:82
pool_put
#define pool_put(P, E)
Free an object E in pool P.
Definition:
pool.h:274
clib_file::flags
u32 flags
Definition:
file.h:56
clib_file_main_t::file_update
void(* file_update)(clib_file_t *file, clib_file_update_type_t update_type)
Definition:
file.h:90
clib_file_set_polling_thread
static void clib_file_set_polling_thread(clib_file_main_t *um, uword index, u32 thread_index)
Definition:
file.h:127
vec_free
#define vec_free(V)
Free vector's memory (no header).
Definition:
vec.h:339
pool_is_free_index
#define pool_is_free_index(P, I)
Use free bitmap to query whether given index is free.
Definition:
pool.h:271
socket.h
clib_file_add
static uword clib_file_add(clib_file_main_t *um, clib_file_t *template)
Definition:
file.h:96
clib_file_del_by_index
static void clib_file_del_by_index(clib_file_main_t *um, uword index)
Definition:
file.h:119
UNIX_FILE_DATA_AVAILABLE_TO_WRITE
#define UNIX_FILE_DATA_AVAILABLE_TO_WRITE
Definition:
file.h:57
clib_error_t
Definition:
clib_error.h:21
clib_file::read_events
u64 read_events
Definition:
file.h:73
uword
u64 uword
Definition:
types.h:112
clib_file::error_function
clib_file_function_t * error_function
Definition:
file.h:67
clib_file::write_events
u64 write_events
Definition:
file.h:74
clib_file::error_events
u64 error_events
Definition:
file.h:75
clib_file::private_data
uword private_data
Definition:
file.h:64
clib_file
Definition:
file.h:51
clib_file_main_t
Definition:
file.h:85
clib_file::write_function
clib_file_function_t * write_function
Definition:
file.h:67
UNIX_FILE_UPDATE_MODIFY
Definition:
file.h:81
src
vppinfra
file.h
Generated on Thu May 16 2019 14:27:13 for FD.io VPP by
1.8.11