@@ -75,41 +75,106 @@ uint64_t pman_get_probe_schema_ver() {
75
75
76
76
/*=============================== BPF GLOBAL VARIABLES ===============================*/
77
77
78
+ int pman_get_capture_settings (struct capture_settings * settings ) {
79
+ char error_message [MAX_ERROR_MESSAGE_LEN ];
80
+ int ret ;
81
+ uint32_t key = 0 ;
82
+ int fd = bpf_map__fd (g_state .skel -> maps .capture_settings );
83
+ if (fd <= 0 ) {
84
+ snprintf (error_message , MAX_ERROR_MESSAGE_LEN , "unable to get capture_settings map fd!" );
85
+ pman_print_error ((const char * )error_message );
86
+ return errno ;
87
+ }
88
+ if ((ret = bpf_map_lookup_elem (fd , & key , settings )) != 0 ) {
89
+ snprintf (error_message , MAX_ERROR_MESSAGE_LEN , "unable to get capture_settings!" );
90
+ pman_print_error ((const char * )error_message );
91
+ }
92
+
93
+ return ret ;
94
+ }
95
+
96
+ int pman_update_capture_settings (struct capture_settings * settings ) {
97
+ char error_message [MAX_ERROR_MESSAGE_LEN ];
98
+ int ret ;
99
+ int fd = bpf_map__fd (g_state .skel -> maps .capture_settings );
100
+ if (fd <= 0 ) {
101
+ snprintf (error_message , MAX_ERROR_MESSAGE_LEN , "unable to get capture_settings map fd!" );
102
+ pman_print_error ((const char * )error_message );
103
+ return errno ;
104
+ }
105
+ uint32_t key = 0 ;
106
+ if ((ret = bpf_map_update_elem (fd , & key , settings , BPF_ANY )) != 0 ) {
107
+ snprintf (error_message ,
108
+ MAX_ERROR_MESSAGE_LEN ,
109
+ "unable to initialize capture_settings map!" );
110
+ pman_print_error ((const char * )error_message );
111
+ }
112
+
113
+ return ret ;
114
+ }
115
+
78
116
void pman_set_snaplen (uint32_t desired_snaplen ) {
79
- g_state .skel -> bss -> g_settings .snaplen = desired_snaplen ;
117
+ struct capture_settings settings ;
118
+ pman_get_capture_settings (& settings );
119
+ settings .snaplen = desired_snaplen ;
120
+ pman_update_capture_settings (& settings );
80
121
}
81
122
82
123
void pman_set_boot_time (uint64_t boot_time ) {
83
- g_state .skel -> bss -> g_settings .boot_time = boot_time ;
124
+ struct capture_settings settings ;
125
+ pman_get_capture_settings (& settings );
126
+ settings .boot_time = boot_time ;
127
+ pman_update_capture_settings (& settings );
84
128
}
85
129
86
130
void pman_set_dropping_mode (bool value ) {
87
- g_state .skel -> bss -> g_settings .dropping_mode = value ;
131
+ struct capture_settings settings ;
132
+ pman_get_capture_settings (& settings );
133
+ settings .dropping_mode = value ;
134
+ pman_update_capture_settings (& settings );
88
135
}
89
136
90
137
void pman_set_sampling_ratio (uint32_t value ) {
91
- g_state .skel -> bss -> g_settings .sampling_ratio = value ;
138
+ struct capture_settings settings ;
139
+ pman_get_capture_settings (& settings );
140
+ settings .sampling_ratio = value ;
141
+ pman_update_capture_settings (& settings );
92
142
}
93
143
94
144
void pman_set_drop_failed (bool drop_failed ) {
95
- g_state .skel -> bss -> g_settings .drop_failed = drop_failed ;
145
+ struct capture_settings settings ;
146
+ pman_get_capture_settings (& settings );
147
+ settings .drop_failed = drop_failed ;
148
+ pman_update_capture_settings (& settings );
96
149
}
97
150
98
151
void pman_set_do_dynamic_snaplen (bool do_dynamic_snaplen ) {
99
- g_state .skel -> bss -> g_settings .do_dynamic_snaplen = do_dynamic_snaplen ;
152
+ struct capture_settings settings ;
153
+ pman_get_capture_settings (& settings );
154
+ settings .do_dynamic_snaplen = do_dynamic_snaplen ;
155
+ pman_update_capture_settings (& settings );
100
156
}
101
157
102
158
void pman_set_fullcapture_port_range (uint16_t range_start , uint16_t range_end ) {
103
- g_state .skel -> bss -> g_settings .fullcapture_port_range_start = range_start ;
104
- g_state .skel -> bss -> g_settings .fullcapture_port_range_end = range_end ;
159
+ struct capture_settings settings ;
160
+ pman_get_capture_settings (& settings );
161
+ settings .fullcapture_port_range_start = range_start ;
162
+ settings .fullcapture_port_range_end = range_end ;
163
+ pman_update_capture_settings (& settings );
105
164
}
106
165
107
166
void pman_set_statsd_port (uint16_t statsd_port ) {
108
- g_state .skel -> bss -> g_settings .statsd_port = statsd_port ;
167
+ struct capture_settings settings ;
168
+ pman_get_capture_settings (& settings );
169
+ settings .statsd_port = statsd_port ;
170
+ pman_update_capture_settings (& settings );
109
171
}
110
172
111
173
void pman_set_scap_tid (int32_t scap_tid ) {
112
- g_state .skel -> bss -> g_settings .scap_tid = scap_tid ;
174
+ struct capture_settings settings ;
175
+ pman_get_capture_settings (& settings );
176
+ settings .scap_tid = scap_tid ;
177
+ pman_update_capture_settings (& settings );
113
178
}
114
179
115
180
void pman_fill_syscall_sampling_table () {
@@ -133,6 +198,28 @@ void pman_fill_syscall_sampling_table() {
133
198
}
134
199
}
135
200
201
+ int pman_init_settings_map () {
202
+ char error_message [MAX_ERROR_MESSAGE_LEN ];
203
+ struct capture_settings settings = {};
204
+ uint32_t key = 0 ;
205
+ int fd = bpf_map__fd (g_state .skel -> maps .capture_settings );
206
+ if (fd <= 0 ) {
207
+ snprintf (error_message , MAX_ERROR_MESSAGE_LEN , "unable to get capture_settings map!" );
208
+ pman_print_error ((const char * )error_message );
209
+ return errno ;
210
+ }
211
+
212
+ if (bpf_map_update_elem (fd , & key , & settings , BPF_ANY )) {
213
+ snprintf (error_message ,
214
+ MAX_ERROR_MESSAGE_LEN ,
215
+ "unable to initialize capture_settings map!" );
216
+ pman_print_error ((const char * )error_message );
217
+ return errno ;
218
+ }
219
+
220
+ return 0 ;
221
+ }
222
+
136
223
void pman_fill_ia32_to_64_table () {
137
224
for (int syscall_id = 0 ; syscall_id < SYSCALL_TABLE_SIZE ; syscall_id ++ ) {
138
225
// Note: we will map all syscalls from the upper limit of the ia32 table
@@ -294,13 +381,14 @@ int pman_fill_syscall_exit_extra_tail_table() {
294
381
int pman_fill_interesting_syscalls_table_64bit () {
295
382
char error_message [MAX_ERROR_MESSAGE_LEN ];
296
383
int fd = bpf_map__fd (g_state .skel -> maps .interesting_syscalls_table_64bit );
297
- for (uint32_t i = 0 ; i < SYSCALL_TABLE_SIZE ; i ++ ) {
384
+ for (uint32_t i = 0 ; i < SYSCALL_TABLE_SIZE ; i ++ ) {
298
385
const bool interesting = false;
299
386
if (bpf_map_update_elem (fd , & i , & interesting , BPF_ANY ) < 0 ) {
300
387
snprintf (error_message ,
301
- MAX_ERROR_MESSAGE_LEN ,
302
- "unable to initialize interesting syscall table at index %d!" , i );
303
- pman_print_error ((const char * )error_message );
388
+ MAX_ERROR_MESSAGE_LEN ,
389
+ "unable to initialize interesting syscall table at index %d!" ,
390
+ i );
391
+ pman_print_error ((const char * )error_message );
304
392
return errno ;
305
393
}
306
394
}
@@ -312,9 +400,11 @@ int pman_mark_single_64bit_syscall(int syscall_id, bool interesting) {
312
400
int fd = bpf_map__fd (g_state .skel -> maps .interesting_syscalls_table_64bit );
313
401
if (bpf_map_update_elem (fd , & syscall_id , & interesting , BPF_ANY ) < 0 ) {
314
402
snprintf (error_message ,
315
- MAX_ERROR_MESSAGE_LEN ,
316
- "unable to set interesting syscall at index %d as %d!" , syscall_id , interesting );
317
- pman_print_error ((const char * )error_message );
403
+ MAX_ERROR_MESSAGE_LEN ,
404
+ "unable to set interesting syscall at index %d as %d!" ,
405
+ syscall_id ,
406
+ interesting );
407
+ pman_print_error ((const char * )error_message );
318
408
return errno ;
319
409
}
320
410
return 0 ;
@@ -362,6 +452,10 @@ int pman_prepare_maps_before_loading() {
362
452
363
453
int pman_finalize_maps_after_loading () {
364
454
int err ;
455
+ err = pman_init_settings_map ();
456
+ if (err != 0 ) {
457
+ return err ;
458
+ }
365
459
366
460
/* set bpf global variables. */
367
461
pman_set_snaplen (80 );
0 commit comments