Please see presentation of nextepc developer Sukchan Kim at OsmoDevCon 2019
This talk is about a "behind the scenes" look at the nextepc codebase through the eyes of an Osmocom developer.
Goal is to understand the high-level software architecture, and whether there is any chance for sharing code/infrastructure between the two projects
lib/core/include/core_list.h
linuxlist.h
list_insert_sorted()
has no libosmo* equivalent
⇒ looks very much compatible to libosmocore logging
⇒ looks very much compatible to libosmocore logging
lib/core/src/fsm.c
fsm_init()
, fsm_dispatch()
and fsm_final()
are only API functions
⇒ migration to osmo_fsm
seems feasible
lib/core/src/event.c
event_{create,delete,send,recv,timedrecv}()
event_timer_create()
, timer_create()
, periodic_timer_create()
⇒ nice idea. libosmo* signals and FSM input events are entirely synchronous. This ensures that all related data structures exist while the event is being processed. Having queued events would require very careful code design and possibly refcounting for pretty much all objects :/
lib/core/src/unix/pkbuf.c
sk_buff
, where you can skb_clone()
whcih just duplicates the struct sk_buff
but not the actual packet data
payload
pointer to distinguish headers from payload
lib/core/src/unix/malloc.c
core_{malloc,free,calloc,realloc}()
pkbuf
as backing storage (not other way around)
lib/core/include/core_msgq.h
msgbq_{init,final,create,delete,send,recv,timedrecv}()
⇒ may be candidate for osmo_it_msgq
which si currently WIP. Signaling happens via osmo-select compatible eventfd, not condition variable
core_strdup
, core_strndup
core_malloc
lib/core/include/core_timer.h
lib/core/src/event.c
lib/core/include/core_tlv.h
sm_thread
/ sm_main()
net_thread
/ net_main()
sock_select_loop()
sgw_thread
/ sgw_main()
sgw_sm
FSM
pgw_thread
/ pgw_main()
⇒ I love it :)
End of File