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