@@ -14,19 +14,16 @@ mod service_discovery;
1414use crate :: helpers:: { get_veth_channels, read_perf_buffer} ;
1515use aya:: {
1616 Ebpf ,
17- maps:: {
18- MapData ,
19- perf:: { PerfEventArray , PerfEventArrayBuffer } ,
20- } ,
2117 programs:: { SchedClassifier , TcAttachType , tc:: SchedClassifierLinkId } ,
2218 util:: online_cpus,
2319} ;
2420
2521#[ cfg( feature = "experimental" ) ]
2622use crate :: helpers:: scan_cgroup_cronjob;
2723
28- use bytes:: BytesMut ;
29- use cortexbrain_common:: map_handlers:: { init_bpf_maps, map_pinner, populate_blocklist} ;
24+ use cortexbrain_common:: map_handlers:: {
25+ init_bpf_maps, map_manager, map_pinner, populate_blocklist,
26+ } ;
3027use cortexbrain_common:: program_handlers:: load_program;
3128use cortexbrain_common:: { buffer_type:: BufferType , map_handlers:: BpfMapsData } ;
3229use std:: {
@@ -36,11 +33,11 @@ use std::{
3633} ;
3734
3835use anyhow:: { Context , Ok } ;
36+ use cortexbrain_common:: buffer_type:: BufferSize ;
3937use cortexbrain_common:: { constants, logger} ;
40- use tokio:: { fs, signal} ;
41- use tracing:: { debug, error, info, warn} ;
42-
4338use std:: collections:: HashMap ;
39+ use tokio:: { fs, signal} ;
40+ use tracing:: { error, info} ;
4441
4542#[ tokio:: main]
4643async fn main ( ) -> Result < ( ) , anyhow:: Error > {
@@ -203,34 +200,11 @@ async fn event_listener(bpf_maps: BpfMapsData) -> Result<(), anyhow::Error> {
203200
204201 //TODO: try to change from PerfEventArray to a RingBuffer data structure
205202
206- let mut map_manager =
207- HashMap :: < String , ( PerfEventArray < MapData > , Vec < PerfEventArrayBuffer < MapData > > ) > :: new ( ) ;
208-
209- // create the PerfEventArrays and the buffers from the BpfMapsData Objects
210- for ( map, name) in bpf_maps
211- . bpf_obj_map
212- . into_iter ( )
213- . zip ( bpf_maps. bpf_obj_names . into_iter ( ) )
214- // zip two iterators at the same time for map and mapnames
215- {
216- debug ! ( "Debugging map type:{:?} for map name {:?}" , map, & name) ;
217- info ! ( "Creating PerfEventArray for map name {:?}" , & name) ;
218-
219- // save the map in a registry if is a PerfEventArray to access them by name
220- if let std:: result:: Result :: Ok ( perf_event_array) = PerfEventArray :: try_from ( map) {
221- map_manager. insert ( name. clone ( ) , ( perf_event_array, Vec :: new ( ) ) ) ;
222-
223- // perf_event_arrays.push(perf_event_array); // this is step 1
224- // let perf_event_array_buffer = Vec::new();
225- // event_buffers.push(perf_event_array_buffer); //this is step 2
226- } else {
227- warn ! ( "Map {:?} is not a PerfEventArray, skipping load" , & name) ;
228- }
229- }
203+ let mut maps = map_manager ( bpf_maps) ?;
230204
231205 // fill the input buffers with data from the PerfEventArrays
232206 for cpu_id in online_cpus ( ) . map_err ( |e| anyhow:: anyhow!( "Error {:?}" , e) ) ? {
233- for ( name, ( perf_evt_array, perf_evt_array_buffer) ) in map_manager . iter_mut ( ) {
207+ for ( name, ( perf_evt_array, perf_evt_array_buffer) ) in maps . iter_mut ( ) {
234208 let buf = perf_evt_array. open ( cpu_id, None ) ?;
235209 info ! (
236210 "Buffer created for map {:?} on cpu_id {:?}. Buffer size: {}" ,
@@ -245,23 +219,20 @@ async fn event_listener(bpf_maps: BpfMapsData) -> Result<(), anyhow::Error> {
245219 info ! ( "Listening for events..." ) ;
246220
247221 // i need to use remove to move the values from the Map Manager to the the async tasks
248- let ( perf_veth_array, perf_veth_buffers) = map_manager
222+ let ( perf_veth_array, perf_veth_buffers) = maps
249223 . remove ( "veth_identity_map" )
250224 . expect ( "Cannot create perf_veth buffer" ) ;
251- let ( perf_net_events_array, perf_net_events_buffers) = map_manager
225+ let ( perf_net_events_array, perf_net_events_buffers) = maps
252226 . remove ( "events_map" )
253227 . expect ( "Cannot create perf_net_events buffer" ) ;
254- let ( tcp_registry_array, tcp_registry_buffers) = map_manager
228+ let ( tcp_registry_array, tcp_registry_buffers) = maps
255229 . remove ( "TcpPacketRegistry" )
256230 . expect ( "Cannot create tcp_registry buffer" ) ;
257231
258232 // init output buffers
259- let veth_buffers = vec ! [ BytesMut :: with_capacity( 10 * 1024 ) ; online_cpus( ) . iter( ) . len( ) ] ;
260- let events_buffers = vec ! [ BytesMut :: with_capacity( 1024 ) ; online_cpus( ) . iter( ) . len( ) ] ;
261- let tcp_buffers = vec ! [ BytesMut :: with_capacity( 1024 ) ; online_cpus( ) . iter( ) . len( ) ] ;
262-
263- // init veth link ids
264- //let veth_link_ids = link_ids;
233+ let veth_buffers = BufferSize :: VethEvents . set_buffer ( ) ;
234+ let events_buffers = BufferSize :: ClassifierNetEvents . set_buffer ( ) ;
235+ let tcp_buffers = BufferSize :: TcpEvents . set_buffer ( ) ;
265236
266237 // spawn async tasks
267238 let veth_events_displayer = tokio:: spawn ( async move {
0 commit comments