FD.io VPP
v21.06-3-gbb25fbf28
Vector Packet Processing
Main Page
Related Pages
Modules
Namespaces
Namespace List
Namespace Members
All
b
d
e
f
g
i
l
m
n
o
p
r
s
t
v
w
Functions
d
f
g
l
m
n
o
p
t
v
Variables
Typedefs
Enumerations
Enumerator
Data Structures
Data Structures
Data Structure Index
Class Hierarchy
Data Fields
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
~
Functions
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
r
s
t
u
v
w
z
~
Variables
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
y
z
Typedefs
c
e
g
h
k
m
n
o
r
s
Related Functions
c
d
e
h
i
m
o
p
r
s
v
Source
Files
Symbols
All
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Functions
a
b
c
d
e
f
g
h
i
j
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Variables
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Typedefs
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
z
Enumerations
a
b
c
d
e
f
g
h
i
l
m
n
o
p
q
r
s
t
u
v
w
x
Enumerator
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
Macros
a
b
c
d
e
f
g
h
i
k
l
m
n
o
p
q
r
s
t
u
v
w
x
z
•
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Friends
Macros
Modules
Pages
util.c
Go to the documentation of this file.
1
/*
2
* Copyright (c) 2016 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
* pci.c: Linux user space PCI bus management.
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
#include <
vlib/vlib.h
>
41
#include <
vlib/unix/unix.h
>
42
43
#include <sys/types.h>
44
#include <sys/stat.h>
45
#include <fcntl.h>
46
#include <dirent.h>
47
48
clib_error_t
*
49
foreach_directory_file
(
char
*dir_name,
50
clib_error_t
* (*
f
) (
void
*arg,
u8
* path_name,
51
u8
* file_name),
void
*arg,
52
int
scan_dirs)
53
{
54
DIR *d;
55
struct
dirent *e;
56
clib_error_t
*
error
= 0;
57
u8
*s, *t;
58
59
d = opendir (dir_name);
60
if
(!d)
61
{
62
if
(errno == ENOENT)
63
return
0;
64
return
clib_error_return_unix
(0,
"open `%s'"
, dir_name);
65
}
66
67
s = t = 0;
68
while
(1)
69
{
70
e = readdir (d);
71
if
(!e)
72
break
;
73
if
(scan_dirs)
74
{
75
if
(e->d_type == DT_DIR
76
&& (!strncmp (e->d_name,
"."
, 1) ||
77
!strncmp (e->d_name,
".."
, 2)))
78
continue
;
79
}
80
else
81
{
82
if
(e->d_type == DT_DIR)
83
continue
;
84
}
85
86
s =
format
(s,
"%s/%s"
, dir_name, e->d_name);
87
t =
format
(t,
"%s"
, e->d_name);
88
error
=
f
(arg, s, t);
89
_vec_len (s) = 0;
90
_vec_len (t) = 0;
91
92
if
(
error
)
93
break
;
94
}
95
96
vec_free
(s);
97
closedir (d);
98
99
return
error
;
100
}
101
102
clib_error_t
*
103
vlib_unix_recursive_mkdir
(
char
*
path
)
104
{
105
clib_error_t
*
error
= 0;
106
char
*
c
= 0;
107
int
i
= 0;
108
109
while
(
path
[
i
] != 0)
110
{
111
if
(
c
&&
path
[
i
] ==
'/'
)
112
{
113
vec_add1
(
c
, 0);
114
if
((mkdir (
c
, 0755)) && (errno != EEXIST))
115
{
116
error
=
clib_error_return_unix
(0,
"mkdir '%s'"
,
c
);
117
goto
done;
118
}
119
_vec_len (
c
)--;
120
}
121
vec_add1
(
c
,
path
[
i
]);
122
i
++;
123
}
124
125
if
((mkdir (
path
, 0755)) && (errno != EEXIST))
126
{
127
error
=
clib_error_return_unix
(0,
"mkdir '%s'"
,
path
);
128
goto
done;
129
}
130
131
done:
132
vec_free
(
c
);
133
134
return
error
;
135
}
136
137
clib_error_t
*
138
vlib_unix_validate_runtime_file
(
unix_main_t
* um,
139
const
char
*
path
,
u8
** full_path)
140
{
141
u8
*fp = 0;
142
char
*last_slash = 0;
143
144
if
(
path
[0] ==
'\0'
)
145
{
146
return
clib_error_return
(0,
"path is an empty string"
);
147
}
148
else
if
(strncmp (
path
,
"../"
, 3) == 0 || strstr (
path
,
"/../"
))
149
{
150
return
clib_error_return
(0,
"'..' not allowed in runtime path"
);
151
}
152
else
if
(
path
[0] ==
'/'
)
153
{
154
/* Absolute path. Has to start with runtime directory */
155
if
(strncmp ((
char
*) um->
runtime_dir
,
path
,
156
strlen ((
char
*) um->
runtime_dir
)))
157
{
158
return
clib_error_return
(0,
159
"file %s is not in runtime directory %s"
,
160
path
, um->
runtime_dir
);
161
}
162
fp =
format
(0,
"%s%c"
,
path
,
'\0'
);
163
}
164
else
165
{
166
/* Relative path, just append to runtime */
167
fp =
format
(0,
"%s/%s%c"
, um->
runtime_dir
,
path
,
'\0'
);
168
}
169
170
/* We don't want to create a directory out of the last file */
171
if
((last_slash = strrchr ((
char
*) fp,
'/'
)) != NULL)
172
*last_slash =
'\0'
;
173
174
clib_error_t
*
error
=
vlib_unix_recursive_mkdir
((
char
*) fp);
175
176
if
(last_slash != NULL)
177
*last_slash =
'/'
;
178
179
if
(
error
)
180
vec_free
(fp);
181
182
*full_path = fp;
183
return
error
;
184
}
185
186
/*
187
* fd.io coding-style-patch-verification: ON
188
*
189
* Local Variables:
190
* eval: (c-set-style "gnu")
191
* End:
192
*/
vlib.h
f
vlib_frame_t * f
Definition:
interface_output.c:1080
path
vl_api_fib_path_t path
Definition:
mfib_types.api:44
clib_error_return
#define clib_error_return(e, args...)
Definition:
error.h:99
unix_main_t
Definition:
unix.h:53
foreach_directory_file
clib_error_t * foreach_directory_file(char *dir_name, clib_error_t *(*f)(void *arg, u8 *path_name, u8 *file_name), void *arg, int scan_dirs)
Definition:
util.c:49
unix_main_t::runtime_dir
u8 * runtime_dir
Definition:
unix.h:79
error
Definition:
cJSON.c:88
vlib_unix_validate_runtime_file
clib_error_t * vlib_unix_validate_runtime_file(unix_main_t *um, const char *path, u8 **full_path)
Definition:
util.c:138
vec_add1
#define vec_add1(V, E)
Add 1 element to end of vector (unspecified alignment).
Definition:
vec.h:606
c
svmdb_client_t * c
Definition:
vpp_get_metrics.c:48
i
sll srl srl sll sra u16x4 i
Definition:
vector_sse42.h:261
vec_free
#define vec_free(V)
Free vector's memory (no header).
Definition:
vec.h:395
format
description fragment has unexpected format
Definition:
map.api:433
clib_error_return_unix
#define clib_error_return_unix(e, args...)
Definition:
error.h:102
u8
unsigned char u8
Definition:
types.h:56
clib_error_t
Definition:
clib_error.h:21
unix.h
vlib_unix_recursive_mkdir
clib_error_t * vlib_unix_recursive_mkdir(char *path)
Definition:
util.c:103
src
vlib
unix
util.c
Generated on Sat Jan 8 2022 10:04:02 for FD.io VPP by
1.8.17