FD.io VPP  v21.01.1
Vector Packet Processing
segment_manager.h File Reference
+ Include dependency graph for segment_manager.h:
+ This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Data Structures

struct  segment_manager_main_init_args_
 

Macros

#define SEGMENT_MANAGER_INVALID_APP_INDEX   ((u32) ~0)
 

Typedefs

typedef struct _segment_manager_props segment_manager_props_t
 
typedef enum seg_manager_flag_ seg_manager_flag_t
 
typedef struct _segment_manager segment_manager_t
 
typedef struct segment_manager_main_init_args_ segment_manager_main_init_args_t
 

Enumerations

enum  seg_manager_flag_ { SEG_MANAGER_F_DETACHED = 1 << 0, SEG_MANAGER_F_DETACHED_LISTENER = 1 << 1 }
 

Functions

segment_manager_tsegment_manager_alloc (void)
 
int segment_manager_init (segment_manager_t *sm)
 
int segment_manager_init_first (segment_manager_t *sm)
 Initializes segment manager based on options provided. More...
 
void segment_manager_free (segment_manager_t *sm)
 Cleanup segment manager. More...
 
void segment_manager_init_free (segment_manager_t *sm)
 Initiate segment manager cleanup. More...
 
segment_manager_tsegment_manager_get (u32 index)
 
segment_manager_tsegment_manager_get_if_valid (u32 index)
 
u32 segment_manager_index (segment_manager_t *sm)
 
int segment_manager_add_segment (segment_manager_t *sm, uword segment_size)
 Adds segment to segment manager's pool. More...
 
void segment_manager_del_segment (segment_manager_t *sm, fifo_segment_t *fs)
 Remove segment without lock. More...
 
void segment_manager_lock_and_del_segment (segment_manager_t *sm, u32 fs_index)
 
fifo_segment_tsegment_manager_get_segment (segment_manager_t *sm, u32 segment_index)
 Reads a segment from the segment manager's pool without lock. More...
 
fifo_segment_tsegment_manager_get_segment_w_handle (u64 sh)
 
fifo_segment_tsegment_manager_get_segment_w_lock (segment_manager_t *sm, u32 segment_index)
 Reads a segment from the segment manager's pool and acquires reader lock. More...
 
int segment_manager_add_first_segment (segment_manager_t *sm, u32 segment_size)
 
u64 segment_manager_make_segment_handle (u32 segment_manager_index, u32 segment_index)
 
u64 segment_manager_segment_handle (segment_manager_t *sm, fifo_segment_t *segment)
 
void segment_manager_segment_reader_unlock (segment_manager_t *sm)
 
void segment_manager_segment_writer_unlock (segment_manager_t *sm)
 
int segment_manager_alloc_session_fifos (segment_manager_t *sm, u32 thread_index, svm_fifo_t **rx_fifo, svm_fifo_t **tx_fifo)
 
int segment_manager_try_alloc_fifos (fifo_segment_t *fs, u32 thread_index, u32 rx_fifo_size, u32 tx_fifo_size, svm_fifo_t **rx_fifo, svm_fifo_t **tx_fifo)
 
void segment_manager_dealloc_fifos (svm_fifo_t *rx_fifo, svm_fifo_t *tx_fifo)
 
void segment_manager_detach_fifo (segment_manager_t *sm, svm_fifo_t *f)
 
void segment_manager_attach_fifo (segment_manager_t *sm, svm_fifo_t *f, session_t *s)
 
void segment_manager_set_watermarks (segment_manager_t *sm, u8 high_watermark, u8 low_watermark)
 
u8 segment_manager_has_fifos (segment_manager_t *sm)
 
svm_msg_q_tsegment_manager_alloc_queue (fifo_segment_t *fs, segment_manager_props_t *props)
 Allocates shm queue in the first segment. More...
 
void segment_manager_dealloc_queue (segment_manager_t *sm, svm_queue_t *q)
 Frees shm queue allocated in the first segment. More...
 
svm_msg_q_tsegment_manager_event_queue (segment_manager_t *sm)
 
u32 segment_manager_evt_q_expected_size (u32 q_size)
 
u8 segment_manager_app_detached (segment_manager_t *sm)
 
void segment_manager_app_detach (segment_manager_t *sm)
 
void segment_manager_del_sessions (segment_manager_t *sm)
 Cleanup segment manager sessions. More...
 
void segment_manager_format_sessions (segment_manager_t *sm, int verbose)
 
void segment_manager_main_init (segment_manager_main_init_args_t *a)
 
segment_manager_props_tsegment_manager_props_init (segment_manager_props_t *sm)
 
static void segment_manager_parse_segment_handle (u64 segment_handle, u32 *sm_index, u32 *segment_index)
 

Macro Definition Documentation

◆ SEGMENT_MANAGER_INVALID_APP_INDEX

#define SEGMENT_MANAGER_INVALID_APP_INDEX   ((u32) ~0)

Definition at line 87 of file segment_manager.h.

Typedef Documentation

◆ seg_manager_flag_t

◆ segment_manager_main_init_args_t

◆ segment_manager_props_t

typedef struct _segment_manager_props segment_manager_props_t

◆ segment_manager_t

typedef struct _segment_manager segment_manager_t

Enumeration Type Documentation

◆ seg_manager_flag_

Enumerator
SEG_MANAGER_F_DETACHED 
SEG_MANAGER_F_DETACHED_LISTENER 

Definition at line 45 of file segment_manager.h.

Function Documentation

◆ segment_manager_add_first_segment()

int segment_manager_add_first_segment ( segment_manager_t sm,
u32  segment_size 
)

◆ segment_manager_add_segment()

int segment_manager_add_segment ( segment_manager_t sm,
uword  segment_size 
)

Adds segment to segment manager's pool.

If needed a writer's lock is acquired before allocating a new segment to avoid affecting any of the segments pool readers.

Definition at line 92 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc()

segment_manager_t* segment_manager_alloc ( void  )

Definition at line 332 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc_queue()

svm_msg_q_t* segment_manager_alloc_queue ( fifo_segment_t segment,
segment_manager_props_t props 
)

Allocates shm queue in the first segment.

Must be called with lock held

Definition at line 871 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_alloc_session_fifos()

int segment_manager_alloc_session_fifos ( segment_manager_t sm,
u32  thread_index,
svm_fifo_t **  rx_fifo,
svm_fifo_t **  tx_fifo 
)

Definition at line 678 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_app_detach()

void segment_manager_app_detach ( segment_manager_t sm)

Definition at line 74 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_app_detached()

u8 segment_manager_app_detached ( segment_manager_t sm)

Definition at line 68 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_attach_fifo()

void segment_manager_attach_fifo ( segment_manager_t sm,
svm_fifo_t f,
session_t s 
)

Definition at line 835 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_dealloc_fifos()

void segment_manager_dealloc_fifos ( svm_fifo_t rx_fifo,
svm_fifo_t tx_fifo 
)

Definition at line 782 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_dealloc_queue()

void segment_manager_dealloc_queue ( segment_manager_t sm,
svm_queue_t q 
)

Frees shm queue allocated in the first segment.

Definition at line 915 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_del_segment()

void segment_manager_del_segment ( segment_manager_t sm,
fifo_segment_t fs 
)

Remove segment without lock.

Definition at line 194 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_del_sessions()

void segment_manager_del_sessions ( segment_manager_t sm)

Cleanup segment manager sessions.

Initiates disconnects for all sessions 'owned' by a segment manager by leveraging the backpointers that fifos keep.

Parameters
smsegment manager whose sessions are to be disconnected

Cleanup segment manager sessions.

Definition at line 591 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_detach_fifo()

void segment_manager_detach_fifo ( segment_manager_t sm,
svm_fifo_t f 
)

Definition at line 825 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_event_queue()

svm_msg_q_t* segment_manager_event_queue ( segment_manager_t sm)

Definition at line 906 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_evt_q_expected_size()

u32 segment_manager_evt_q_expected_size ( u32  q_size)

Definition at line 849 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_format_sessions()

void segment_manager_format_sessions ( segment_manager_t sm,
int  verbose 
)

Definition at line 1029 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_free()

void segment_manager_free ( segment_manager_t sm)

Cleanup segment manager.

Parameters
smsegment manager to be freed

Definition at line 467 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_get()

segment_manager_t* segment_manager_get ( u32  index)

Definition at line 542 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_if_valid()

segment_manager_t* segment_manager_get_if_valid ( u32  index)

Definition at line 548 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment()

fifo_segment_t* segment_manager_get_segment ( segment_manager_t sm,
u32  segment_index 
)

Reads a segment from the segment manager's pool without lock.

Definition at line 265 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_get_segment_w_handle()

fifo_segment_t* segment_manager_get_segment_w_handle ( u64  sh)

Definition at line 286 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_get_segment_w_lock()

fifo_segment_t* segment_manager_get_segment_w_lock ( segment_manager_t sm,
u32  segment_index 
)

Reads a segment from the segment manager's pool and acquires reader lock.

Caller must drop the reader's lock by calling segment_manager_segment_reader_unlock once it finishes working with the segment.

Definition at line 307 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_has_fifos()

u8 segment_manager_has_fifos ( segment_manager_t sm)

Definition at line 562 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_index()

u32 segment_manager_index ( segment_manager_t sm)

Definition at line 556 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_init()

int segment_manager_init ( segment_manager_t sm)

Definition at line 343 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_init_first()

int segment_manager_init_first ( segment_manager_t sm)

Initializes segment manager based on options provided.

Returns error if ssvm segment(s) allocation fails.

Definition at line 364 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_init_free()

void segment_manager_init_free ( segment_manager_t sm)

Initiate segment manager cleanup.

Parameters
smsegment manager to be freed

Definition at line 527 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_lock_and_del_segment()

void segment_manager_lock_and_del_segment ( segment_manager_t sm,
u32  fs_index 
)

Definition at line 256 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_main_init()

void segment_manager_main_init ( segment_manager_main_init_args_t a)

Definition at line 936 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_make_segment_handle()

u64 segment_manager_make_segment_handle ( u32  segment_manager_index,
u32  segment_index 
)

Definition at line 279 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_parse_segment_handle()

static void segment_manager_parse_segment_handle ( u64  segment_handle,
u32 sm_index,
u32 segment_index 
)
inlinestatic

Definition at line 175 of file segment_manager.h.

+ Here is the caller graph for this function:

◆ segment_manager_props_init()

segment_manager_props_t* segment_manager_props_init ( segment_manager_props_t sm)

Definition at line 54 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_handle()

u64 segment_manager_segment_handle ( segment_manager_t sm,
fifo_segment_t segment 
)

Definition at line 271 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_reader_unlock()

void segment_manager_segment_reader_unlock ( segment_manager_t sm)

Definition at line 320 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function:

◆ segment_manager_segment_writer_unlock()

void segment_manager_segment_writer_unlock ( segment_manager_t sm)

Definition at line 326 of file segment_manager.c.

+ Here is the call graph for this function:

◆ segment_manager_set_watermarks()

void segment_manager_set_watermarks ( segment_manager_t sm,
u8  high_watermark,
u8  low_watermark 
)

Definition at line 1091 of file segment_manager.c.

+ Here is the caller graph for this function:

◆ segment_manager_try_alloc_fifos()

int segment_manager_try_alloc_fifos ( fifo_segment_t fs,
u32  thread_index,
u32  rx_fifo_size,
u32  tx_fifo_size,
svm_fifo_t **  rx_fifo,
svm_fifo_t **  tx_fifo 
)

Definition at line 639 of file segment_manager.c.

+ Here is the call graph for this function:
+ Here is the caller graph for this function: