Compare commits

...

2 Commits

20 changed files with 574 additions and 1 deletions

5
.gitignore vendored
View File

@ -1,3 +1,6 @@
.vscode/
*.pdf
# libreoffice:
\.~lock\.*#
*.pdf

View File

@ -0,0 +1,3 @@
slides*.png
slides*.txt
slides.html

View File

@ -0,0 +1,9 @@
html: slides.html
slides.html: slides.adoc
asciidoc slides.adoc
.PHONY: html
clean:
rm -f slides*.png slides*.txt slides.html

View File

@ -0,0 +1,39 @@
open5gs - feedback from user point of view
==========================================
:author: Alexander Couzens <acouzens@sysmocom.de>, Oliver Smith <osmith@sysmocom.de>, Pau Espin Pedrol <pespin@sysmocom.de>
:copyright: 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de> (License: CC-BY-SA)
:backend: slidy
:max-width: 45em
== open5gs - feedback from user point of view
* Source file structure:
** (*-build.c, *-path.c, *-handler.c, *-context.c, *-sm.c)
== open5gs - feedback from user point of view
* Enc/dec code generated automatically from .docx spec files using python scripts
== open5gs - feedback from user point of view
* Split git repository vs unique git repository
== open5gs - feedback from user point of view
* Commits:
** Meaningful commit messages
** Logical change per commit
== open5gs - feedback from user point of view
* `assert()`
== open5gs - feedback from user point of view
* Config file syntax backward compatibility
== open5gs - feedback from user point of view
* mongodb backend:
** DB requirements?
** Alternatives?

View File

@ -0,0 +1,3 @@
slides*.png
slides*.txt
slides.html

View File

@ -0,0 +1,9 @@
html: slides.html
slides.html: slides.adoc
asciidoc slides.adoc
.PHONY: html
clean:
rm -f slides*.png slides*.txt slides.html

View File

@ -0,0 +1,21 @@
osmo-epdg: The osmocom ePDG for VoWiFi
======================================
:author: Pau Espin Pedrol <pespin@sysmocom.de>
:copyright: 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de> (License: CC-BY-SA)
:backend: slidy
:max-width: 45em
== One Slide
* hello
== Second slide
* bye
== Know more
* IRC: #osmocom @ freenode
* link:https://osmocom.org/projects/cellular-infrastructure/wiki/Mailing_Lists[Osmocom Mailing lists]
* link:https://osmocom.org/projects/cellular-infrastructure/wiki/Videos_of_Presentations[Osmocom Recorded Presentations, Talks]
* Contributing patches via link:https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit[Osmocom Gerrit]

View File

@ -0,0 +1,3 @@
slides*.png
slides*.txt
slides.html

View File

@ -0,0 +1,9 @@
html: slides.html
slides.html: *.adoc
asciidoc slides.adoc
.PHONY: html
clean:
rm -f slides*.png slides*.txt slides.html

View File

@ -0,0 +1,66 @@
[graphviz]
----
digraph hierarchy {
node[shape=record,style=filled,fillcolor=gray95]
edge[dir=back, arrowtail=empty]
PCU[label = "{gprs_pcu|+ pcu_sock_state\l+ bssgp\l+ bts_list[]\l}"]
BTS[label = "{gprs_rlcmac_bts|+ gsm_sysinfo\l+ trx_list[]\l+ ms_list[]\l}"]
TRX[label = "{gprs_rlcmac_bts_trx|+ul_tbfs[]\l+dl_tbfs[]\l}"]
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}"]
ULC[label = "{pdch_ulc|+ registered_polls[]\l}"]
ULC_NODE[label = "{pdch_ulc_node|+ fn\l+ type\l}"]
ULC_NODE_TBF_USF[label = "{pdch_ulc_node_tbf_usf|+ ul_tbf\l}"]
ULC_NODE_TBF_POLL[label = "{pdch_ulc_node_tbf_poll|+ poll_tbf (UL/DL)\l+ reason\l}"]
ULC_NODE_SBA[label = "{pdch_ulc_node_sba|+ sba\l}"]
MS[label = "{GprsMs|+ imsi, tlli, ta...\l+ refcount\l+ current_trx\l+ first_common_ts\l+ llc_queue\l}"]
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}"]
UL_TBF[label = "{gprs_rlcmac_ul_tbf|+ state_fsm\l+ ul_ack_fsm\l+ usf[]\l}"]
DL_TBF[label = "{gprs_rlcmac_dl_tbf|+ state_fsm\l}"]
SBA[label = "{gprs_rlcmac_sba|+ pdch\l+ fn\l+ ta\l}"]
RLC_WINDOW[label = "{gprs_rlcmac_window|+ sns\l+ ws\l}"]
RLC_WINDOW_UL[label = "{gprs_rlcmac_window_ul|+ v_r\l+ v_q\l+ v_n[]\l}"]
RLC_WINDOW_DL[label = "{gprs_rlcmac_window_dl|+ v_s\l+ v_a\l+ v_b[]\l}"]
LLC_QUEUE[label = "{gprs_llc_queue|+ prio_queues[]\l}"]
LLC_PRIO_QUEUE[label = "{gprs_llc_prio_queue|+ codel_state\l+ priority\l+ frames[]\l}"]
LLC_FRAME[label = "{gprs_llc_frame|+ payload[]\l+ priority\l}"]
RLC_BLOCK[label = "{gprs_rlcmac_rlc_block|...}"]
PCU -> BTS [headlabel="*", taillabel="1"]
BTS -> TRX [headlabel="0..8", taillabel="1"]
BTS -> MS [headlabel="*", taillabel="1"]
TRX -> PDCH [headlabel="0..8", taillabel="1"]
PDCH -> ULC [headlabel="1", taillabel="0..1"]
ULC -> ULC_NODE [headlabel="*", taillabel="1"]
ULC_NODE -> ULC_NODE_TBF_USF [arrowtail=odiamond]
ULC_NODE -> ULC_NODE_TBF_POLL [arrowtail=odiamond]
ULC_NODE -> ULC_NODE_SBA [arrowtail=odiamond]
ULC_NODE_SBA -> SBA[headlabel="1", taillabel="1"]
TBF -> UL_TBF [arrowtail=odiamond]
TBF -> DL_TBF [arrowtail=odiamond]
RLC_WINDOW -> RLC_WINDOW_UL [arrowtail=odiamond]
RLC_WINDOW -> RLC_WINDOW_DL [arrowtail=odiamond]
MS -> TBF [headlabel="*", taillabel="1"]
MS -> LLC_QUEUE [headlabel="1", taillabel="1"]
LLC_QUEUE -> LLC_PRIO_QUEUE [headlabel="*", taillabel="1"]
LLC_PRIO_QUEUE -> LLC_FRAME [headlabel="*", taillabel="1"]
TBF -> RLC_WINDOW [headlabel="*", taillabel="1"]
TBF -> LLC_FRAME [headlabel="0..1", taillabel="1"]
TBF -> RLC_BLOCK [headlabel="*", taillabel="1"]
TRX -> MS [headlabel="*", taillabel="1", style=dashed, arrowtail=none, label="assigned"]
TBF -> PDCH [headlabel="0..8", taillabel="1", style=dashed, arrowtail=none, label="assigned"]
UL_TBF -> ULC_NODE_TBF_USF [style=dashed, arrowtail=none, label="registered"]
TBF -> ULC_NODE_TBF_POLL [style=dashed, arrowtail=none, label="registered"]
TRX -> UL_TBF [headlabel="*", taillabel="1", style=dashed, label="assigned"]
TRX -> DL_TBF [headlabel="*", taillabel="1", style=dashed, label="assigned"]
}
----

Binary file not shown.

After

Width:  |  Height:  |  Size: 52 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 75 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 73 KiB

View File

@ -0,0 +1,17 @@
[graphviz]
----
digraph G {
rankdir = LR;
BTS -> OsmoBSC [label="Abis/IP"];
BTS -> OsmoPCU [label="GPRS/TRAU"];
OsmoBSC -> OsmoMSC [label="3GPP AoIP"];
OsmoBSC -> OsmoPCU [label="pcu_sock"];
OsmoPCU -> OsmoSGSN [label="Gb/IP"];
OsmoMSC -> OsmoHLR [label="GSUP"];
OsmoSGSN -> OsmoHLR [label="GSUP"];
OsmoSGSN -> OsmoGGSN [label="Gp"];
OsmoGGSN -> Internet [label="Gi"];
OsmoPCU [color=red];
{ rank=same OsmoBSC OsmoPCU }
}
----

View File

@ -0,0 +1,17 @@
[graphviz]
----
digraph G {
rankdir = LR;
OsmoBTS -> OsmoBSC [label="Abis/IP"];
OsmoBSC -> OsmoMSC [label="3GPP AoIP"];
OsmoBTS -> OsmoPCU [label="pcu_sock"];
OsmoPCU -> OsmoSGSN [label="Gb/IP"];
OsmoMSC -> OsmoHLR [label="GSUP"];
OsmoSGSN -> OsmoHLR [label="GSUP"];
OsmoSGSN -> OsmoGGSN [label="Gp"];
OsmoGGSN -> Internet [label="Gi"];
OsmoPCU [color=red];
{ rank=same OsmoBTS OsmoPCU }
{ rank=same OsmoMSC OsmoSGSN }
}
----

View File

@ -0,0 +1,255 @@
OsmoPCU: past, present and future
=================================
:author: Pau Espin Pedrol <pespin@sysmocom.de>
:copyright: 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de> (License: CC-BY-SA)
:backend: slidy
:max-width: 54em
== PCU: GPRS Packet Control Unit
* Forwards LLC data frames between MS and SGSN:
** SNDCP (link:https://www.etsi.org/deliver/etsi_ts/144000_144099/144065/06.06.00_60/ts_144065v060600p.pdf[3GPP TS 44.065]): user plane (IP/UDP/TCP/...)
** GMM (link:https://www.etsi.org/deliver/etsi_ts/124000_124099/124008/16.07.00_60/ts_124008v160700p.pdf[3GPP TS 24.008]): control plane
* Towards the MS (Um): RLC/MAC (link:https://www.etsi.org/deliver/etsi_ts/144000_144099/144060/16.00.00_60/ts_144060v160000p.pdf[3GPP TS 44.060])
* Towards the SGSN (Gb): BSSGP (link:https://www.etsi.org/deliver/etsi_ts/144000_144099/144064/16.00.00_60/ts_144064v160000p.pdf[3GPP TS 44.064]), NS (link:https://www.etsi.org/deliver/etsi_ts/148000_148099/148016/16.00.00_60/ts_148016v160000p.pdf[3GPP TS 48.016])
* Towards the BTS/BSC: Not specified, Osmocom link:https://gitea.osmocom.org/cellular-infrastructure/osmo-pcu/src/branch/master/include/osmocom/pcu/pcuif_proto.h[PCU_IF]
image::gprs_stack.jpg[width="100%"]
== PCU: Location
.Co-located with BTS:
** OsmoBTS (with/without `direct_phy`)
include::pcu_loc_bts_graphviz.adoc[]
.Co-located with BSC:
** Ericsson RBS
include::pcu_loc_bsc_graphviz.adoc[]
== Past:
[role="incremental"]
* It's 2017..2019 AD
* PCU, the Ugly Ducking => no looking at it, no touching it
* Heap of debris, people keep adding stuff on to it _(dramatic exaggeration)_
* Not much architecture/API documentation
* Code lacking spec references backing logic
* C++ (problems with talloc, osmo_*, `llist` ASan false positives, ...)
* Code really entangled:
[role="incremental"]
** Lots of spaghetti code
** Object lifecycle not clear
** No separation between `bts` and `pcu` object
** `tbf`/`dl_tbf`/`ul_tbf` classes in same file
** `tbf`/`GprsMs` object relation mess,`tbf` didn't have an MS object assigned sometimes
** `alloc_algo` resource allocation not logically separated from `tbf` allocation, directly modifying them
* Code lacking use of osmocom infra:
** No FSMs
** Lots of timers not using osmo_tdef
* Existing logging not that useful / difficult to follow
* Really difficult to figure out when certain events or code paths triggered (eg. DL vs UL TBF).
* Functional architectural problems:
** GPRS vs EGPRS mode, exclusive
** No differentiation between CS/MCS L1 capabilities and GPRS/EGPRS (eg using EGPRS with only MCS1..MCS4)
** Not receiving all TDMA blocks (DATA.ind): no fullTDMA clock. Procedures based on wall clock timers.
[role="incremental"]
*** Impossible for PCU scheduler to track T31XY, lost packets, etc.
*** Stuff based on wall clock timers.
== Past: Tests
* No TTCN-3 tests
* Only unit tests:
** Long and difficult to follow/debug
** Using osmo-pcu objects/code in an artifical way, sometimes wrong
** Lots of code in osmo-pcu only used by unit tests => death code
* Modifying code = high risk of breaking stuff, regressions
== Motto 1:
image::one_does_not_simply_change_pcu.jpg[width="100%"]
* Consequence: New bugs and regressions are coming (TM)
== Motto 2:
image::one_does_not_simply_fix_bug_pcu.jpg[width="100%"]
* Consequence: lots of refactoring commits required usually prior to fixing a bug without breaking more stuff
== Chronology (1)
// Refactoring rounds done in iterations: Submit bunch of commits, let them settle and see if regressions show up, next round.
// Refactoring rounds or interesting events, in chronological order:
.The Dark Age:
[role="incremental"]
* _2017_: Attempts at splitting spaghetti code (Max, no ttcn3, regressions sometimes)
* _2017-08-09_: I start coding on osmo-pcu (owning 749/1333 commits since then)
* _2018-03-08_: TTCN3 PCU_Tests added (mostly only NS tests from Harald)
== Chronology (2)
.Refactoring, refactoring, refactoring...
[role="incremental"]
* _2019-09-*_: TTCN3 PCU_Tests testing RLC/MAC (w/ Vadim)
* _2019-09-*_: Move several timers to osmo_tdef; tdef subclass moved to own files
* _2019-12-*_: Support PAGING-CS/PS from SGSN
* _2020-0{1,2,3}-*_: Lots of CSN.1 enc/dec improvements on MS RA Capability (w/ Vadim)
* _2020-05-*_: GprsMs object now allocated before tbf object; C++--
* _2020-06-*_: 11bit RACH support for EGPRS (Vadim)
* _2020-07-*_: PCUIFv10: IPv6 NSVC support, NS2 lib (lynxis)
* _2020-10-*_: More `tbf`/`dl_tbf`/`ul_tbf` untangling, Allocator fixes
* _2020-11-*_: GPRS + EGPRS multiplex support
* _2020-12-16_: Convert lots of C++ classes to C
* _2021-01-*_: Split `pcu` and `bts` objects, C++--
* _2021-01-*_: NACC/RIM support. Frist FSM! `nacc_fsm`
* _2021-02-22_: Multi-slot UL TBF support
* _2021-03-*_: PCUIF: Rx DATA.ind len=0, track TDMA clock on block basis
* _2021-0{3,4}-*_: Introduce PDCH UL Controller (`pdch_ulc`): sb, RRBP polls (other than N+13), sba, etc.
* _2021-05-14_: Initial FSM `tbf_state`! (logic *slowly* moved inside)
* _2021-07-27_: FSMS `tbf_ul_ass_state`, `tbf_dl_ass_state`
* _2021-09-20_: Skip Tx idle blocks over PCUIF: BTS BCCH Tx power reduction
* _2021-11-15_: Release 1.0.0, tons of stuff was moved to FSMs
== Chronology (3)
.Not done refactoring yet:
[role="incremental"]
* _2022-03-31_: LLC schedule with SAPI priority. LLC code C++--
* _2022-10-27_: Refactor GprsMs code assigning TBFs (new APIs). Improved logging.
* _2022-11-17_: Split tbf_fsm as tbf_{ul,dl}_fsm!
* _2023-0{2,3,4}-*_: Ericsson RBS support (Philipp)
* _2023-04-*_: gprs_rlcmac.cpp C++-- (Max)
* _2023-04-*_: Rewrite GprsMs lifecycle (refcounts, etc.), GprsMsStorage merged into BTS.
* _2023-04-*_: Split tbf allocation from resource allocation (`alloc_algo` becomes idempotent).
* _2023-06-*_: Start fixing issues spotted during osmocom-bb gprs implementation
* _2023-08-*_: PCUIFv11: DATA.cnf s/tlli/msg_id/, new paging SAPIs
* _2023-08-22_: Allow modifying default msclass
* _2023-10-05_: PCUIFv12: Signal BTS model in INFO.ind
* _2024-03-25_: More `tbf`/`GprsMs` lifecycle fixes
== Present
.Great:
[role="incremental"]
* We have a TTCN-3 testsuite with 117 test cases (405 commits in osmo-ttcn3-hacks/pcu/)
* Logging is more standarized and provides related context (eg. FSM): easier debug
* Better documented code with spec references backing logic
* More robust code base
* TDMA clock tracking: Proper implementation of T31XY and N31XY
* More efficient: multi-slot UL_TBF, RRBP != N+13, ...
* Closer to multi-BTS per OsmoPCU co-located with OsmoBSC
* Allocation of resources without the need to allocate a TBF: Allows for future TBF load-based reallocation
* Good base for new functionalitites and improvements
.Not so great:
[role="incremental"]
* Refactoring not yet complete
* Limit of 8-TRX per BTS
* BSSGP/NS code in bad shape (focus so far in RLC/MAC)
== Ericsson RBS support
* TODO: Merged, support since when?
* OsmoPCU Co-located with OsmoBSC
* `./configure --enable-er-e1-ccu`
* Enabled in Osmocom OBS package repositories
* TODO: look at related redmine tickets
* TODO: look at related commit history:
* TODO: ask pmaier for review
* TODO:
== Data Model
include::data_model_graphviz.adoc[]
== Code Architecture
[role="incremental"]
* Rx PCUIF `INFO.ind`: when BTS/BSC connects, initial configuration of BTS/TRXs/PDCHs
* Rx PCUIF `DATA.ind`: SAPI=`BCCH` from BTS/BSC with SystemInformation used for configuration
== Code Architecture: Uplink, RACH
[role="incremental"]
. Rx PCUIF `RACH.ind(BTS-TRX-TS,FN,RA)` from BTS/BSC (over `pcu_sock` or `direct_phy`)
. One-phase-access:
[role="incremental"]
.. Allocate resources: MS, UL_TBF (single slot), TFI, USF, ...
.. Tx ImmAss over CCCH
.. Register `TBF_POLL` for the TBF in PDCH ULC
. Two-phase-access:
[role="incremental"]
.. Allocate resources: SBA
.. Register `SBA` in PDCH ULC, Tx ImmAss over CCCH
.. Wait for Pkt Resource Request
== Code Architecture: Uplink, PDTCH
[role="incremental"]
. Rx PCUIF `DATA.ind(BTS-TRX-TS,FN)` SAPI=`PDTCH` from BTS/BSC (over `pcu_sock` or `direct_phy`)
. Update TDMA clock (per BTS), detect FN jumps
. `pdch->rcv_block(data, len, fn, meas)`: Handle block: GPRS vs EPGRS, CTRL vs DATA
.. UL CONTROL:
[role="incremental"]
... Decode whole block
... Handle specifically per msg type (Validate against registered entries in PDCH ULC `TBF_POLL` or `SBA`)
.. UL DATA:
[role="incremental"]
... Decode header => TFI => UL TBF
... Validate against registered entries in PDCH ULC (`TBF_USF`)
... Handle data in TBF
. Expire registered polls up to BTS-TRX-TS included (trigger timeouts)
== Code Architecture Downlink, PDTCH
[role="incremental"]
. Rx PCUIF `RTS.req(BTS-TRX-TS,FN)` SAPI=`PDTCH` from BTS/BSC (over `pcu_sock` or `direct_phy`), FN in the future!
. scheduler: `gprs_rlcmac_rcv_rts_block()`
[role="incremental"]
.. Check if EGPRS can be used due to GPRS-only MS synchronization requirements
.. Figure out USF for dl_block based on PDCH ULC state (SBA, polls), or allow UL data Tx (round-robin)
.. Maybe Tx: DL CTRL block (FSMs, MS/TBF state)
.. Maybe Tx: DL DATA block (TBF state, round-robin, priority)
.. Maybe Tx: Dummy control message
.. Tx PCUIF `DATA.req`
== TTCN-3 testsuite
include::ttcn3_component_diagram.adoc[]
== Future
[role="incremental"]
* Improve TTCN-3 testsuite
* Convert more C++ -> C
* Multi-bts support for BSC-colocated
* >8 TRX per BTS
* Improve BSSGP/NS code
* Clean up L1IF vs PCUIF layers (`direct_phy`)
* Drop dummy ul_tbf objects created during RACH request, instead use some specific type
* Improve `alloc_algo`, reconfigure TBFs to adapt for user load
* Improve scheduler
* Implement TA loop
* ImplementPower loop
* ANR: WIP in a branch, not working (deed90dd0030e6ea32ad4d74386cd91fc2f67436)
== Questions ?
* IRC: #osmocom @ freenode
* link:https://osmocom.org/projects/osmopcu/wiki/OsmoPCU[OsmoPCU redmine project]
* link:https://gitea.osmocom.org/cellular-infrastructure/osmo-pcu[osmo-pcu.git git repository]
* Contributing patches via link:https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit[Osmocom Gerrit]
* Pau Espin Pedrol <pespin@sysmocom.de>

View File

@ -0,0 +1,86 @@
[graphviz]
----
digraph G {
PCU [label="IUT\nosmo-pcu",shape="box", color=red];
subgraph cluster_ats {
label = "ATS\n(TTCN-3)";
system_PCU_PT [label="port system:PCU"];
subgraph cluster_RAW_PCU_Test_CT {
label = "RAW_PCU_Test_CT\n(PCU_Tests.ttcn)";
RAW_PCU_MSG_PT_PCUIF_A [label="port RAW_PCU_MSG_PT PCUIF\n(unused)"]
PCUVTY [label="PCUVTY"];
StatsD_ConnHdlr [label="StatsD_ConnHdlr"];
CTRL_Adapter_CT [label="CTRL_Adapter_CT"];
test [label="testcasename()\n(PCU_Tests.ttcn)", color=red];
subgraph cluster_bssgp_CT {
label="bssgp_CT\nSGSN_Components.ttcn";
subgraph cluster_BSSGP_Client_CT {
label="BSSGP_Client_CT\nBSSGP_Emulation.ttcnpp";
BSSGP_PT [label="port BSSGP_PT BSSGP"];
}
}
subgraph cluster_MS_BTS_IFACE_CT {
label = "MS_BTS_IFACE_CT\n(GPRS_Components.ttcn)";
RAW_PCU_MSG_PT_BTS_IFACE [label="port RAW_PCU_MSG_PT BTS"];
}
}
subgraph cluster_RAW_PCU_BTS_CT {
label = "RAW_PCU_BTS_CT\n(PCUIF_Components.ttcn)";
RAW_PCU_MSG_PT_CLCK_A [label="port RAW_PCU_MSG_PT CLCK"];
RAW_PCU_MSG_PT_PCUIF_B [label="port RAW_PCU_MSG_PT PCUIF"];
RAW_PCU_MSG_PT_TC [label="port RAW_PCU_MSG_PT TC"];
subgraph cluster_RAW_PCU_ClckGen_CT {
label = "RAW_PCU_ClckGen_CT\n(PCUIF_Components.ttcn)";
RAW_PCU_MSG_PT_CLCK_B [label="port RAW_PCU_MSG_PT CLCK", color=purple];
}
RAW_PCU_MSG_PT_CLCK_A -> RAW_PCU_MSG_PT_CLCK_B [dir=back];
RAW_PCU_MSG_PT_PCUIF_B -> RAW_PCU_MSG_PT_TC [dir=none];
}
subgraph cluster_RAW_PCUIF_CT {
label = "RAW_PCUIF_CT\n(PCUIF_Components.ttcn)";
PCUIF_CODEC_PT_PCU [label="port PCUIF_CODEC_PT PCU"];
RAW_PCU_MSG_PT_BTS [label="port RAW_PCU_MSG_PT BTS"];
RAW_PCU_MSG_PT_MTC [label="port RAW_PCU_MSG_PT MTC"];
PCUIF_CODEC_PT_PCU -> RAW_PCU_MSG_PT_BTS [dir=none];
PCUIF_CODEC_PT_PCU -> RAW_PCU_MSG_PT_MTC [dir=none];
}
RAW_PCU_MSG_PT_TC -> RAW_PCU_MSG_PT_BTS_IFACE [dir=none];
RAW_PCU_MSG_PT_PCUIF_A -> RAW_PCU_MSG_PT_MTC [dir=none];
RAW_PCU_MSG_PT_PCUIF_B -> RAW_PCU_MSG_PT_BTS [dir=none];
system_PCU_PT -> PCUIF_CODEC_PT_PCU [dir=none];
test -> RAW_PCU_MSG_PT_BTS_IFACE [dir=none];
test -> RAW_PCU_MSG_PT_PCUIF_A [label="(unused)", dir=none];
test -> BSSGP_PT;
test -> PCUVTY;
test -> StatsD_ConnHdlr;
test -> CTRL_Adapter_CT;
}
PCU -> BSSGP_PT [label="Gb"];
PCU -> StatsD_ConnHdlr [label="statsd"];
system_PCU_PT -> PCU [label="PCUIF"];
PCUVTY -> PCU [label="VTY"];
CTRL_Adapter_CT -> PCU [label="CTRL"];
}
----

View File

@ -0,0 +1,3 @@
slides*.png
slides*.txt
slides.html

View File

@ -0,0 +1,9 @@
html: slides.html
slides.html: slides.adoc
asciidoc slides.adoc
.PHONY: html
clean:
rm -f slides*.png slides*.txt slides.html

View File

@ -0,0 +1,21 @@
GPRS support in osmocom-bb
==========================
:author: Pau Espin Pedrol <pespin@sysmocom.de>
:copyright: 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de> (License: CC-BY-SA)
:backend: slidy
:max-width: 45em
== One Slide
* hello
== Second slide
* bye
== Know more
* IRC: #osmocom @ freenode
* link:https://osmocom.org/projects/cellular-infrastructure/wiki/Mailing_Lists[Osmocom Mailing lists]
* link:https://osmocom.org/projects/cellular-infrastructure/wiki/Videos_of_Presentations[Osmocom Recorded Presentations, Talks]
* Contributing patches via link:https://osmocom.org/projects/cellular-infrastructure/wiki/Gerrit[Osmocom Gerrit]