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 <vyanitskiy@sysmocom.de>  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 <vyanitskiy@sysmocom.de>  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 <vyanitskiy@sysmocom.de>  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 <osmith@sysmocom.de>  Fri, 09 Aug 2024 10:02:27 +0200

osmo-s1gw (0.1.0) unstable; urgency=medium

  * Initial debian packaging

 -- Vadim Yanitskiy <vyanitskiy@sysmocom.de>  Mon, 05 Aug 2024 20:42:11 +0700
