osmo-s1gw (0.4.0) unstable; urgency=medium [ Vadim Yanitskiy ] * debian: drop unneeded libpcap-dev * erab_fsm: clarify type spec for teid_addr() * s1ap_proxy: parse and store Global-ENB-ID IE * s1ap_proxy: use Global-ENB-ID as logging prefix * osmo_s1gw: move get_env/2 here and export it * sctp_server: add type spec for clients dict * sctp_server: pass conn_info() to the handler * s1gw_metrics: add ctr_list/0 and gauge_list/0 * s1gw_metrics: expose get_current_value/1 * s1ap_proxy_test: also test exometer counters * s1ap_proxy: forward E-RAB RELEASE INDICATION as-is * s1ap_proxy: forward E-RAB RELEASE COMMAND/RESPONSE as-is * s1ap_proxy: implement per-eNB counters * enft_kpi: retrieve per-eNB traffic counters * enft_kpi: support different UL/DL GTP-U addresses * enft_kpi: make enb_set_addr/1 non-blocking * enft_kpi: use command/expression templates from enftables * enft_kpi: keep NFT counters intact * enft_kpi: enb_set_addr/1: restrict ULDL values * enft_kpi: flush the table on init * s1ap_proxy: support using NFT KPI UL/DL address from SCTP * Rename enft_kpi -> gtpu_kpi * rebar.lock: use more recent exometer_core * rebar.{config,lock}: use a fork of exometer_report_statsd * s1ap_proxy_test: test_s1_setup/1: proxy S1 SETUP RESPONSE PDU * s1ap_proxy_test: also test per-eNB counters * s1ap_proxy: cache GlobalENBId string * s1ap_proxy: fix per-eNB ?S1GW_CTR_S1AP_PROXY_IN_PKT_ALL * gtpu_kpi_cfg/0: fix typo in env param name * debian/control: add Vcs-Git, Vcs-Browser, Homepage * systemd: add CAP_NET_ADMIN for running with GTPU KPI * rebar.config: tune default relx configuration * s1ap_proxy: drop PDUs that we failed to process * Makefile: add REBAR_BASE_DIR variable * Makefile: generate and install complete release package * Makefile: 'run' becomes an alias of 'shell' * debian: add copyright file * contrib/osmo-s1gw.sh: add help * Add GSMTAP logging handler * contrib/osmo-s1gw.sh: fix 'Illegal option -h' * enb_uptime: track eNB uptime * rebar.lock: bump logger_gsmtap version * enb_uptime: handle 'stop' when Global-eNB-ID is unknown * enb_uptime: remove debugging leftover * sctp_server: remove unused include of s1ap.hrl * s1ap_proxy: erab_fsm_start_reg/2: check if already registered * s1ap_proxy: remove eNB-ID from erab_uid() * s1ap_proxy: add type hints for #proxy_state.erabs * s1ap_proxy: add fetch_enb_info/1 * s1ap_proxy: add type spec for the eNB-ID * s1ap_proxy_test: do more s1ap_proxy:fetch_erab/2 * sctp_proxy: fix non-existent fields in fetch_info/0 * sctp_proxy: return handler Pid in fetch_info/0 * sctp_proxy: make fetch_info/1 return a map * erab_fsm: make fetch_info/1 return a map * {gtpu_kpi,pfcp_peer}: do not set trap_exit * pfcp_peer: add fetch_info/0 * s1gw_metrics: export metric types * README.md: cosmetic: s/osmo_s1gw/OsmoS1GW/ * README.md: mention 'make analyze' * README.md: document installation * enb_registry: new module * enb_registry: track eNB uptime * enb_registry: fetch_enb_list/0: return sorted list * contrib/generate_build_dep.sh: pass '-n' to mv * debian: add missing libsctp dependency * debian: add osmo-s1gw.install * [REST] OpenAPI specification skeleton * [REST] osmo-s1gw-cli.py skeleton * [REST] Integrate Erlang REST Framework * [REST] Implement MetricsList * [REST] Implement Pfcp{AssocState,Heartbeat} * [REST] Implement EnbList and EnbInfo * [REST] Implement EnbErabList * [REST] Implement ErabList and ErabInfo * README.md, doc/osmo-s1gw-cli.md: fix broken links * debian: fixup: add missing libsctp dependency * [REST] Implement {Enb,Erab}Delete * [REST] MetricsList: return 404 on invalid path * [REST] osmo-s1gw-cli.py: implement eNB/E-RAB list sorting * doc/osmo-s1gw-cli.md: fix 'enb_list' command name * doc/osmo-s1gw-cli.md: document {enb,erab}_delete * config/sys.config: separate GTP-U KPI and REST params * osmo_s1gw: add set_env/2 * [REST] OpenAPI: fix regexp to permit IPv6 addr in EnbId * erab_fsm: log the creation event and UID * sctp_proxy: move catch-all for SCTP events to handle_event/4 * sctp_{server,proxy}: handle sctp_error messages from gen_sctp * s1ap_proxy: correct handling of UE CONTEXT RELEASE REQUEST * s1ap_proxy_test: update TC scenario for test_drop_proc_error * s1ap_proxy_test: add TCs simulating late E-RAB SETUP Rsp * erab_fsm: handle E-RAB SETUP Rsp during release * config/sys.config: group sctp_{client,server} params into maps * config/sys.config: document available sockopts [ Oliver Smith ] * rebar.lock: update enftables commit to latest * debian/control: add pkg-config [ Andreas Eversberg ] * s1ap_proxy: Add support for S1 HANDOVER procedure * s1ap_proxy_test: Add unit tests for S1 HANDOVER procedure * s1ap_proxy: Handle "E-RABs Failed to Setup List" IE [ Pau Espin Pedrol ] * config: Set pfcp_net_inst_* fields as strings -- Vadim Yanitskiy Sat, 06 Dec 2025 02:54:05 +0700 osmo-s1gw (0.3.0) unstable; urgency=medium * s1ap_proxy: merge process_pdu_safe() with process_pdu() * s1ap_proxy: do not expose {en,de}code_pdu() API * s1ap_proxy: turn this module into a gen_server * s1ap_proxy: add E-RAB introspection API * erab_fsm: rename erab_release_req/1 -> erab_release_cmd/1 * erab_fsm: add erab_release/2 and erab_release_ind/1 * s1ap_proxy: properly handle E-RAB RELEASE IND * erab_fsm: add all-state event handler * erab_fsm: add fetch_info/1 for state introspection * sctp_server: add type hints * sctp_server: cosmetic: use ?FUNCTION_NAME in send_data/2 * sctp_server: pass MME addr/port to sctp_proxy as opaque data * sctp_server: cosmetic: rename State -> S * sctp_server: cosmetic: make #server_state last argument * sctp_server: pass #server_state to client_{add,del}() * sctp_server: make it abstract from sctp_proxy logic * sctp_server: add fetch_conn_list/0 for state introspection * sctp_proxy: add all-state event handler * sctp_proxy: add fetch_info/1 for state introspection * s1ap_proxy: use erab_uid() to log unique E-RAB ID * s1ap_proxy: add a TODO about an optional IE * s1ap_proxy: rework handle_ie/2 into handle_ie/3 * s1ap_proxy: handle_ies(): reorder arguments * s1ap_proxy: handle_ies(): pass IEI path to handle_ie() * s1ap_proxy: handle_ies(): also handle #'ProtocolExtensionField' * erab_fsm: store UID, expose it via fetch_info/1 * erab_fsm: session_modify(): split PFCP PDU handling * s1ap_proxy: cosmetic: fix wrong arity in comment * s1ap_proxy: fix IEI path leak in handle_ies/4 * erab_fsm: fix copy-paste in a log message * erab_fsm: add more logging to clarify timeout events * rebar.config: remove unneeded parse_transform * erab_fsm: add pretty printer for F-TEID * s1ap_proxy: handle UE CONTEXT RELEASE PDUs * osmo_s1gw.app.src: set 'vsn' to 'semver' * rebar.config: cosmetic: use spaces, not tabs * rebar.config: relx: fix release name (must be an atom) * rebar.config: relx: generate the version automatically * {erab_fsm,sctp_proxy}: handle_event/4: fix return value * {erab_fsm,sctp_proxy}: handle_event/4: reply to unknown calls * erab_fsm: make erab_release_{cmd,ind}/1 non-blocking * erab_fsm: handle RELEASE.{cmd,ind} in state erab_wait_setup_rsp * erab_fsm: handle RELEASE.ind in state erab_wait_release_rsp * erab_fsm: implement E-RAB MODIFY Req/Rsp procedure * erab_fsm: implement E-RAB MODIFY Ind/Cnf procedure * erab_fsm: pretty-print U2CM and U2AM during MODIFY Req/Ind * s1ap_proxy: catch exceptions in handle_pdu/2 * s1ap_proxy: handle E-RAB MODIFY REQ/RSP * s1ap_proxy: handle E-RAB MODIFICATION IND/CNF * s1ap_proxy: increment *_IN_PKT_* counters on exception * sctp_server: invalidate handler's Pid on 'EXIT' * sctp_{server,proxy}: log SCTP TSN, SID, SSN, and data len * sctp_common: new module with common SCTP/S1AP API * s1gw_metrics: use lists:filter/2 to create counters/gauges * sctp_{client,server}: disable Nagle by setting sctp_nodelay * s1gw_metrics: make exometer_report_statsd less verbose * sctp_{client,server}: add and use sctp_common:parse_addr/1 * sctp_{client,server}: accept arguments in form of a map * sctp_{client,server}: allow passing additional sockopts * sctp_{client,server}: make sctp_nodelay configurable * sctp_{client,server}: set sndbuf/recbuf explicitly -- Vadim Yanitskiy Fri, 18 Apr 2025 02:56:33 +0700 osmo-s1gw (0.2.0) unstable; urgency=medium [ Vadim Yanitskiy ] * pfcp_peer: PFCP peer implementation * erab_fsm: E-RAB FSM implementation * sctp_proxy: maintain opaque state for s1ap_proxy * config: rename upf_{loc,rem}_addr to pfcp_{loc,rem}_addr * fix misconceptions about E-RAB establishment * erab_fsm: fix API docs: UID was moved to start_link() * erab_fsm: fix message flow misconceptions * erab_fsm: implement handling of GTP-U address * erab_fsm: include Network Instance IE in PDRs and FARs * erab_fsm: fix improper IEs in session_modify_req() * erab_fsm: properly omit Network Instance IE * {sctp,s1ap}_proxy: employ E-RAB FSMs * s1ap_proxy: handle E-RAB RELEASE COMMAND/RESPONSE * config/sys.config: fix grammar in comments * pfcp_peer: store local/remote Recovery Time Stamp in #peer_state * pfcp_peer: log IP address / port of {in,out}going PDUs * pfcp_peer: implement the Heartbeat procedure * pfcp_peer: fix incorrect order of logging arguments * s1ap_proxy: fix E-RAB FSM lookup for RELEASE related IEs * pfcp_peer: fix handling of IPv6 addr in get_f_seid() * pfcp_peer: do not assign SEID=0, increment properly * s1ap_proxy: clarify a logging statement, reduce verbosity * s1ap_proxy: add types for S1AP PDU and IE tuples * s1ap_proxy: print unique E-RAB ID in error messages * s1ap_proxy_test: re-generate E-RAB RELEASE.{cmd,rsp} PDU blobs * s1ap_proxy: handle E-RAB RELEASE INDICATION * sctp_proxy: fix calling gauge_dec() on a counter * s1gw_metrics: more precise type hints * s1ap_proxy: move sctp_proxy:handle_pdu() to process_pdu_safe() * pfcp_peer: cosmetic: fix a comment * pfcp_peer: do not route incoming PDUs without SEID * pfcp_peer: implement Heartbeat Request procedure * s1gw_metrics: add counters for PFCP Heartbeat Req/Resp * s1gw_metrics: add a counter for unexpected PFCP PDUs [ Pau Espin Pedrol ] * pfcp_peer: Retry PFCP assiciation towards UPF instead of exiting * sctp_proxy: Allow handling EXIT signal * pfcp_peer: Error if requested to create session without being associated * erab_fsm: Abort and reply call with error if unable to establish PFCP sess * s1ap_proxy: Support replying errors * Introduce initial metrics support -- Vadim Yanitskiy Sat, 02 Nov 2024 03:26:52 +0700 osmo-s1gw (0.1.1) unstable; urgency=medium [ Vadim Yanitskiy ] * contrib/jenkins.sh: also run Dialyzer * config/sys.config: print prefix before msg, if present * Makefile: allow overriding the config file * rebar.{config,lock}: add pfcplib to deps[] * sctp_client: add type hints * sctp_proxy: add type hints for public API * sctp_proxy: fix typo in field name: s/mmr_port/mme_port/g * sctp_proxy: handle_pdu/2: print stacktrace on exception * sctp_server: do not let sctp_proxy:shutdown() crash the server * contrib/jenkins.sh: increase EUnit verbosity * Makefile: add 'install' target * contrib: add systemd unit file * add debian package files -- Oliver Smith Fri, 09 Aug 2024 10:02:27 +0200 osmo-s1gw (0.1.0) unstable; urgency=medium * Initial debian packaging -- Vadim Yanitskiy Mon, 05 Aug 2024 20:42:11 +0700