FD.io VPP
v18.01.2-1-g9b554f3
Vector Packet Processing
Main Page
Related Pages
Modules
Namespaces
Data Structures
Source
Files
Symbols
svm_common.h
Go to the documentation of this file.
1
/*
2
*------------------------------------------------------------------
3
* Copyright (c) 2009 Cisco and/or its affiliates.
4
* Licensed under the Apache License, Version 2.0 (the "License");
5
* you may not use this file except in compliance with the License.
6
* You may obtain a copy of the License at:
7
*
8
* http://www.apache.org/licenses/LICENSE-2.0
9
*
10
* Unless required by applicable law or agreed to in writing, software
11
* distributed under the License is distributed on an "AS IS" BASIS,
12
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13
* See the License for the specific language governing permissions and
14
* limitations under the License.
15
*------------------------------------------------------------------
16
*/
17
18
#ifndef __included_svm_common_h__
19
#define __included_svm_common_h__
20
21
#include <stdarg.h>
22
#include <pthread.h>
23
#include <
vppinfra/types.h
>
24
25
#define SVM_VERSION ((1<<16) | 1)
/* set to declare region ready. */
26
27
#define SVM_FLAGS_MHEAP (1<<0)
/* region contains an mheap */
28
#define SVM_FLAGS_FILE (1<<1)
/* region backed by one or more files */
29
#define SVM_FLAGS_NODATA (1<<2)
/* region will be further subdivided */
30
#define SVM_FLAGS_NEED_DATA_INIT (1<<3)
31
32
#define SVM_PVT_MHEAP_SIZE (128<<10)
/* region's private mheap (128k) */
33
34
typedef
struct
svm_region_
35
{
36
volatile
uword
version
;
37
pthread_mutex_t
mutex
;
38
pthread_cond_t
condvar
;
39
int
mutex_owner_pid
;
/* in case of trouble */
40
int
mutex_owner_tag
;
41
uword
flags
;
42
uword
virtual_base
;
/* base of the region object */
43
uword
virtual_size
;
44
void
*
region_heap
;
45
void
*
data_base
;
/* data portion base address */
46
void
*
data_heap
;
/* data heap, if any */
47
volatile
void
*
user_ctx
;
/* user context pointer */
48
/* stuff allocated in the region's heap */
49
uword
bitmap_size
;
/* nbits in virtual alloc bitmap */
50
uword
*
bitmap
;
/* the bitmap */
51
char
*
region_name
;
52
char
*
backing_file
;
53
char
**
filenames
;
54
uword
*
client_pids
;
55
/* pad */
56
57
/* next page:
58
* (64K) clib heap for the region itself
59
*
60
* data_base -> whatever is in this region
61
*/
62
63
}
svm_region_t
;
64
65
typedef
struct
svm_map_region_args_
66
{
67
const
char
*
root_path
;
/* NULL means use the truly global arena */
68
const
char
*
name
;
69
u64
baseva
;
70
u64
size
;
71
u64
pvt_heap_size
;
72
uword
flags
;
73
char
*
backing_file
;
74
uword
backing_mmap_size
;
75
/* uid, gid to own the svm region(s) */
76
int
uid
;
77
int
gid
;
78
}
svm_map_region_args_t
;
79
80
81
/*
82
* Memory shared across all router instances. Packet buffers, etc
83
* Base should be "out of the way," and size should be big enough to
84
* cover everything we plan to put here.
85
*/
86
#define SVM_GLOBAL_REGION_SIZE (64<<20)
87
#define SVM_GLOBAL_REGION_NAME "/global_vm"
88
#if defined (__aarch64__)
89
#define VA_BITS 48
90
#define BASEVA ((1ul << VA_BITS) / 4)
91
#define SVM_GLOBAL_REGION_BASEVA (BASEVA - (2 * SVM_GLOBAL_REGION_SIZE))
92
#else
93
#define SVM_GLOBAL_REGION_BASEVA 0x30000000
94
#endif
95
96
/*
97
* Memory shared across individual router instances.
98
*/
99
#define SVM_OVERLAY_REGION_BASEVA \
100
(SVM_GLOBAL_REGION_BASEVA + SVM_GLOBAL_REGION_SIZE)
101
#define SVM_OVERLAY_REGION_SIZE (1<<20)
102
#define SVM_OVERLAY_REGION_BASENAME "/overlay_vm"
103
104
typedef
struct
105
{
106
u8
*
subregion_name
;
107
}
svm_subregion_t
;
108
109
typedef
struct
110
{
111
svm_subregion_t
*
subregions
;
/* subregion pool */
112
uword
*
name_hash
;
113
u8
*
root_path
;
114
int
uid
;
115
int
gid
;
116
}
svm_main_region_t
;
117
118
119
void
*
svm_region_find_or_create
(
svm_map_region_args_t
*
a
);
120
void
svm_region_init
(
void
);
121
void
svm_region_init_mapped_region
(
svm_map_region_args_t
*
a
,
122
svm_region_t
* rp);
123
int
svm_region_init_chroot
(
const
char
*root_path);
124
void
svm_region_init_chroot_uid_gid
(
const
char
*root_path,
int
uid,
int
gid);
125
void
svm_region_init_args
(
svm_map_region_args_t
*
a
);
126
void
svm_region_exit
(
void
);
127
void
svm_region_unmap
(
void
*rp_arg);
128
void
svm_client_scan
(
const
char
*root_path);
129
void
svm_client_scan_this_region_nolock
(
svm_region_t
* rp);
130
u8
*
shm_name_from_svm_map_region_args
(
svm_map_region_args_t
*
a
);
131
u8
*
format_svm_region
(
u8
* s, va_list * args);
132
133
svm_region_t
*
svm_get_root_rp
(
void
);
134
135
#endif
/* __included_svm_common_h__ */
136
137
/*
138
* fd.io coding-style-patch-verification: ON
139
*
140
* Local Variables:
141
* eval: (c-set-style "gnu")
142
* End:
143
*/
svm_main_region_t::root_path
u8 * root_path
Definition:
svm_common.h:113
svm_map_region_args_::pvt_heap_size
u64 pvt_heap_size
Definition:
svm_common.h:71
svm_map_region_args_::root_path
const char * root_path
Definition:
svm_common.h:67
types.h
a
a
Definition:
bitmap.h:516
format_svm_region
u8 * format_svm_region(u8 *s, va_list *args)
Definition:
svm.c:143
svm_region_::virtual_base
uword virtual_base
Definition:
svm_common.h:42
svm_map_region_args_::flags
uword flags
Definition:
svm_common.h:72
svm_region_unmap
void svm_region_unmap(void *rp_arg)
Definition:
svm.c:1000
svm_map_region_args_t
struct svm_map_region_args_ svm_map_region_args_t
svm_region_::client_pids
uword * client_pids
Definition:
svm_common.h:54
svm_region_::user_ctx
volatile void * user_ctx
Definition:
svm_common.h:47
u64
unsigned long u64
Definition:
types.h:89
svm_get_root_rp
svm_region_t * svm_get_root_rp(void)
Definition:
svm.c:54
svm_map_region_args_
Definition:
svm_common.h:65
svm_region_
Definition:
svm_common.h:34
svm_region_::condvar
pthread_cond_t condvar
Definition:
svm_common.h:38
svm_region_init_chroot
int svm_region_init_chroot(const char *root_path)
Definition:
svm.c:817
svm_region_::data_base
void * data_base
Definition:
svm_common.h:45
svm_subregion_t::subregion_name
u8 * subregion_name
Definition:
svm_common.h:106
svm_main_region_t::name_hash
uword * name_hash
Definition:
svm_common.h:112
svm_region_init_args
void svm_region_init_args(svm_map_region_args_t *a)
Definition:
svm.c:851
svm_region_t
struct svm_region_ svm_region_t
svm_main_region_t::subregions
svm_subregion_t * subregions
Definition:
svm_common.h:111
svm_region_::backing_file
char * backing_file
Definition:
svm_common.h:52
svm_region_::virtual_size
uword virtual_size
Definition:
svm_common.h:43
svm_map_region_args_::backing_file
char * backing_file
Definition:
svm_common.h:73
svm_region_::region_name
char * region_name
Definition:
svm_common.h:51
svm_client_scan_this_region_nolock
void svm_client_scan_this_region_nolock(svm_region_t *rp)
Definition:
svm.c:1168
svm_map_region_args_::baseva
u64 baseva
Definition:
svm_common.h:69
svm_region_init_mapped_region
void svm_region_init_mapped_region(svm_map_region_args_t *a, svm_region_t *rp)
Definition:
svm.c:438
svm_region_init
void svm_region_init(void)
Definition:
svm.c:800
svm_map_region_args_::size
u64 size
Definition:
svm_common.h:70
svm_region_::bitmap_size
uword bitmap_size
Definition:
svm_common.h:49
shm_name_from_svm_map_region_args
u8 * shm_name_from_svm_map_region_args(svm_map_region_args_t *a)
Definition:
svm.c:388
svm_client_scan
void svm_client_scan(const char *root_path)
Definition:
svm.c:1196
svm_subregion_t
Definition:
svm_common.h:104
svm_region_::version
volatile uword version
Definition:
svm_common.h:36
svm_main_region_t
Definition:
svm_common.h:109
svm_region_::mutex_owner_tag
int mutex_owner_tag
Definition:
svm_common.h:40
svm_region_init_chroot_uid_gid
void svm_region_init_chroot_uid_gid(const char *root_path, int uid, int gid)
Definition:
svm.c:834
uword
u64 uword
Definition:
types.h:112
svm_region_exit
void svm_region_exit(void)
Definition:
svm.c:1117
svm_map_region_args_::backing_mmap_size
uword backing_mmap_size
Definition:
svm_common.h:74
svm_region_find_or_create
void * svm_region_find_or_create(svm_map_region_args_t *a)
Definition:
svm.c:857
svm_main_region_t::uid
int uid
Definition:
svm_common.h:114
u8
unsigned char u8
Definition:
types.h:56
svm_map_region_args_::name
const char * name
Definition:
svm_common.h:68
svm_map_region_args_::uid
int uid
Definition:
svm_common.h:76
svm_main_region_t::gid
int gid
Definition:
svm_common.h:115
svm_map_region_args_::gid
int gid
Definition:
svm_common.h:77
svm_region_::region_heap
void * region_heap
Definition:
svm_common.h:44
svm_region_::bitmap
uword * bitmap
Definition:
svm_common.h:50
svm_region_::filenames
char ** filenames
Definition:
svm_common.h:53
svm_region_::data_heap
void * data_heap
Definition:
svm_common.h:46
svm_region_::mutex_owner_pid
int mutex_owner_pid
Definition:
svm_common.h:39
svm_region_::flags
uword flags
Definition:
svm_common.h:41
svm_region_::mutex
pthread_mutex_t mutex
Definition:
svm_common.h:37
src
svm
svm_common.h
Generated on Wed Sep 5 2018 06:02:09 for FD.io VPP by
1.8.11