blob: c3c0c7094e660727c36a5ac38f44e5092aa5b5d2 [file] [log] [blame]
Pau Espin Pedrol75727402024-04-12 17:55:59 +02001[[code_architecture]]
2== Code Architecture
3
4[[fig-code-architecture-general]]
5.General overview of main OsmoTRX components
6[graphviz]
7----
8digraph hierarchy {
9node[shape=record,style=filled,fillcolor=gray95]
10edge[dir=back, arrowtail=empty]
11
12PCU[label = "{gprs_pcu|+ pcu_sock_state\l+ bssgp\l+ bts_list[]\l}"]
13BTS[label = "{gprs_rlcmac_bts|+ gsm_sysinfo\l+ trx_list[]\l+ ms_list[]\l}"]
14TRX[label = "{gprs_rlcmac_bts_trx|+ul_tbfs[]\l+dl_tbfs[]\l}"]
15PDCH[label = "{gprs_rlcmac_pdch|+ is_enabled\l+ pdch_ulc\l+ assigned_usf_mask\l+ assigned_tfi_mask_(dl,ul)\l+ tbfs_dl[]\l+ tbfs_ul[]\l+ pagings[]\l}"]
16ULC[label = "{pdch_ulc|+ registered_polls[]\l}"]
17ULC_NODE[label = "{pdch_ulc_node|+ fn\l+ type\l}"]
18ULC_NODE_TBF_USF[label = "{pdch_ulc_node_tbf_usf|+ ul_tbf\l}"]
19ULC_NODE_TBF_POLL[label = "{pdch_ulc_node_tbf_poll|+ poll_tbf (UL/DL)\l+ reason\l}"]
20ULC_NODE_SBA[label = "{pdch_ulc_node_sba|+ sba\l}"]
21MS[label = "{GprsMs|+ imsi, tlli, ta...\l+ refcount\l+ current_trx\l+ first_common_ts\l+ llc_queue\l}"]
22TBF[label = "{gprs_rlcmac_tbf|+ tfi\l+ egprs_enabled\l+ control_ts\l+ pdch[]\l+ ul_ass_fsm\l+ dl_ass_fsm\l+ window\l+ llc_frame\l+ rlc_blocks\l}"]
23UL_TBF[label = "{gprs_rlcmac_ul_tbf|+ state_fsm\l+ ul_ack_fsm\l+ usf[]\l}"]
24DL_TBF[label = "{gprs_rlcmac_dl_tbf|+ state_fsm\l}"]
25SBA[label = "{gprs_rlcmac_sba|+ pdch\l+ fn\l+ ta\l}"]
26RLC_WINDOW[label = "{gprs_rlcmac_window|+ sns\l+ ws\l}"]
27RLC_WINDOW_UL[label = "{gprs_rlcmac_window_ul|+ v_r\l+ v_q\l+ v_n[]\l}"]
28RLC_WINDOW_DL[label = "{gprs_rlcmac_window_dl|+ v_s\l+ v_a\l+ v_b[]\l}"]
29LLC_QUEUE[label = "{gprs_llc_queue|+ prio_queues[]\l}"]
30LLC_PRIO_QUEUE[label = "{gprs_llc_prio_queue|+ codel_state\l+ priority\l+ frames[]\l}"]
31LLC_FRAME[label = "{gprs_llc_frame|+ payload[]\l+ priority\l}"]
32RLC_BLOCK[label = "{gprs_rlcmac_rlc_block|...}"]
33
34PCU -> BTS [headlabel="*", taillabel="1"]
35BTS -> TRX [headlabel="0..8", taillabel="1"]
36BTS -> MS [headlabel="*", taillabel="1"]
37TRX -> PDCH [headlabel="0..8", taillabel="1"]
38
39PDCH -> ULC [headlabel="1", taillabel="0..1"]
40ULC -> ULC_NODE [headlabel="*", taillabel="1"]
41ULC_NODE -> ULC_NODE_TBF_USF [arrowtail=odiamond]
42ULC_NODE -> ULC_NODE_TBF_POLL [arrowtail=odiamond]
43ULC_NODE -> ULC_NODE_SBA [arrowtail=odiamond]
44ULC_NODE_SBA -> SBA[headlabel="1", taillabel="1"]
45
46TBF -> UL_TBF [arrowtail=odiamond]
47TBF -> DL_TBF [arrowtail=odiamond]
48
49RLC_WINDOW -> RLC_WINDOW_UL [arrowtail=odiamond]
50RLC_WINDOW -> RLC_WINDOW_DL [arrowtail=odiamond]
51
52MS -> TBF [headlabel="*", taillabel="1"]
53
54MS -> LLC_QUEUE [headlabel="1", taillabel="1"]
55LLC_QUEUE -> LLC_PRIO_QUEUE [headlabel="*", taillabel="1"]
56LLC_PRIO_QUEUE -> LLC_FRAME [headlabel="*", taillabel="1"]
57
58TBF -> RLC_WINDOW [headlabel="*", taillabel="1"]
59TBF -> LLC_FRAME [headlabel="0..1", taillabel="1"]
60TBF -> RLC_BLOCK [headlabel="*", taillabel="1"]
61
62TRX -> MS [headlabel="*", taillabel="1", style=dashed, arrowtail=none, label="assigned"]
63TBF -> PDCH [headlabel="0..8", taillabel="1", style=dashed, arrowtail=none, label="assigned"]
64
65UL_TBF -> ULC_NODE_TBF_USF [style=dashed, arrowtail=none, label="registered"]
66TBF -> ULC_NODE_TBF_POLL [style=dashed, arrowtail=none, label="registered"]
67
68TRX -> UL_TBF [headlabel="*", taillabel="1", style=dashed, label="assigned"]
69TRX -> DL_TBF [headlabel="*", taillabel="1", style=dashed, label="assigned"]
70}
71----