osmo-sgsn (1.5.0) unstable; urgency=medium

  [ Max ]
  * Improve 'show subscriber cache' vty command
  * GMM: permit VLR_ANSWERED event in attach FSM
  * Fix IMSI padding in imsi-acl

  [ Harald Welte ]
  * gbproxy_test: Fix test expectations of gprs_ns_rcvmsg()
  * LLC XID: Fix string representation of N201_U
  * LLC: Don't blindly assume all LLC frames have data payload
  * LLC: Avoid NOTICE message on LLC NULL
  * gprs_llc: Correctly refuse any ABM command (SABM, DISC) with DM
  * LLC: Store the XID inside the LLC Entity, not LLC Mgmg Entity
  * gb_proxy.h: Add missing comments; improve comments
  * gb_proxy: cosmetic: Use 'bool' in data structures where applicable

  [ efistokl ]
  * gsm0408_rcv_gmm: send Iu-ReleaseCommand upon receiving Attach Complete.
  * gprs_gmm: send Service Reject when no PDP ctxs are available.

  [ Alexander Couzens ]
  * gprs_gmm: reintroduce calling gsm48_gmm_authorize when not handling GMM Attach Requests
  * gbproxy: parse dtap GSM48_MT_GSM_DEACT_PDP_REQ|ACK

  [ Pau Espin Pedrol ]
  * gprs_sndcp_comp_free: Replace ifelse with switch and better handling of error
  * sgsn: vty: Improve log warning content with spec section
  * Document max retransmit times for T3395
  * sgsn: Fix echo timer not started upon first pdp ctx created
  * sgsn_libgtp: Use new per-GSN libgtp API instead of deprecated API
  * sgsn: Have authentication required on by default
  * Remove undefined param passed to {logging,osmo_stats}_vty_add_cmds
  * Require newer versions of dependencies

  [ Keith ]
  * Echo zero byte XID-Field of Type L3_PAR

  [ Oliver Smith ]
  * debian: create -doc subpackage with pdf manuals
  * contrib/jenkins.sh: run "make maintainer-clean"
  * osmo-gtphub.cfg: fix conflict with osmo-sgsn.cfg
  * osmo-gbproxy.cfg: fix conflict with osmo-sgsn.cfg

  [ Vadim Yanitskiy ]
  * doc/manuals/vty: regenerate sgsn_vty_reference.xml
  * osmo-sgsn: add VTY parameter to toggle authentication
  * sgsn_mm_ctx_find_ggsn_ctx(): fix: always set gsm_cause

  [ Eric Wild ]
  * replace magic tmsi constant with define
  * turn -Werror=null-dereference into a warning

  [ Daniel Willmann ]
  * manuals: Add script to regenerate vty/counter documentation
  * manuals: Update vty/counter documentation
  * Add/fix help string for version option
  * osmo-sgsn: Fix outdated information in usermanual
  * configuration.adoc: Small fixes
  * configuration.adoc: Add a section about encryption

  [ Ruben Undheim ]
  * Spelling fixes

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 08 Aug 2019 16:46:31 +0200

osmo-sgsn (1.4.0) unstable; urgency=medium

  [ Alexander Couzens ]
  * gprs_subscriber: gsup_auth_error: reject MS in all cases
  * gprs_gmm: make functions relating to GMM Attach Request public
  * gprs_gmm: make extract_subscr_msisdn extract_subscr_hlr public
  * gprs_gmm: Cancel Location: use detach type IMSI
  * vty: add cmd "reset sgsn state"
  * tests: remove gmm unit tests
  * gprs_gmm: introduce a GMM Attach Request FSM
  * debian: add missing build dependencies
  * sgsn: use gtp_clear_queues() when reset sgsn state
  * vty: restart sgsn state: improve output message
  * sgsn_ggsn_ctx_drop_pdp: protect against nullpointer when MM is gone
  * gprs_sgsn.h: fix wrong type of re-attempts
  * GTP: refactor the echo timer
  * gprs_gmm: dont answer unknown IMSI/TMSI on Service Requests NET_FAIL
  * gprs_gmm: Fix missing Security Command for 3G when attaching
  * sgsn_libgtp: fix a potential memleak when the GGSN is not reachable
  * gprs_llc: remove the FCS from the msgb by trim'ing the msgb
  * OsmoSGSN: add rate counter documentation

  [ Daniel Willmann ]
  * gb_proxy: tallocate memory for gbproxy cfg so it can be a talloc ctx
  * gb_proxy: Add ctrl interface and nsvc-state, gbproxy-state commands
  * git-version-gen: Don't check for .git directory

  [ Stefan Sperling ]
  * add a test for OS#3178 (invalid unitdata message)
  * finish gbproxy_parse_bssgp_unitdata test
  * fix bogus assertion in encode_comp_field()
  * fix bogus error check in gprs_sndcp_comp_create()
  * use enums consistently instead of falling back to int
  * update gbproxy test expected output
  * consistently check the result of osmo_shift_v_fixed()
  * remove pointless declaration of struct gsm_network
  * make gsup ipa name configurable in osmo-sgsn.cfg

  [ Pau Espin Pedrol ]
  * jenkins.sh: Use --enable-werror only when iu support is disabled
  * jenkins.sh: Remove non-existent configure options
  * Drop all references of unused SMPP
  * Drop all references of unused MGCP
  * Drop unused common_vty.c
  * sgsn_libgtp.c: Log pointer of deleted context
  * Maintain per ggsn pdp ctx list
  * osmo-sgsn: ping GGSN periodically and check for restart counter
  * Disarm T3395 when dettaching mmctx from pdpctx
  * examples: Enable by default echo req towards active GGSNs
  * vty: Add cmd to disable echo loop explictly
  * Add optional TearDownInd IE in PDP DEACT REQ towards PCU
  * sgsn: Don't attempt to delete GTP pdp ctx if GGSN was restarted
  * Forward GGSN originated DEACT PDP CTX REQ
  * sgsn: Fix T3395 firing forever
  * sgsn: subscriber: Avoid calling memcpy with NULL src
  * sgsn: cdr: Fix uninitialized string access if ggsn is detached
  * sgsn: gtp: Use new API to send PDP DEL CTX REQ without freeing ctx locally
  * sgsn: Fix crash using new libgtp cb_recovery2 API
  * gbproxy: Replace '.' in counter names with ':'
  * Drop gprs_msgb_copy with libosmocore replacement
  * Drop gprs_msgb_resize_area with libosmocore replacement
  * Use osmo_clock_gettime from libosmocore
  * gbproxy: Add VTY parameter: link stored-msgs-max-length
  * gbproxy: Add new VTY-managed timer: link-list clean-stale-timer
  * gbproxy: Replace '.' in counter names with ':'
  * Add osmo-gtphub systemd service file
  * debian: Fix typo in rules preventing build with IU support
  * Install systemd services with autotools
  * Install sample cfg file to /etc/osmocom
  * Update wrong references to bsc in sgsn code
  * Allocate sgsn_instance with talloc
  * gbproxy: flag gbproxy_assign_imsi as static
  * gbproxy: Fix abort during APN patch
  * gbproxy: Remove unneeded parse_ctx param
  * gbproxy: flush_stored_messages: Move comment to func description
  * gbproxy: flush_stored_messages: Log and route using stored_msg info
  * gbproxy: flush_stored_messages: Get rid of msg param
  * Allow easily disabling GFDL references
  * OsmoSGSN: configuration: Move pdp ctx specific CDR fields to its own table
  * OsmoSGSN: configuration: Add missing pdp-periodic event
  * OsmoSGSN: configuration: Document CDR CTRL interface
  * OsmoSGSN: overview: Fix typo and reference OpenGGSN->OsmoGGSN

  [ Harald Welte ]
  * migrate to oap_client in libosmogsm
  * remove libcommon
  * gbproxy-legacy: Ensure well-formed config file
  * Remove local libgsupclient; Use libosmo-gsup-client from osmo-hlr
  * initial checkin of manuals to public repo
  * Add link to Asciidoc source code of manual
  * OsmoSGSN: Fix formatting/cross reference in CDR section
  * Update GSUP chapter regarding UMTS AKA and other recent changes
  * GSUP: Add ladder diagrams for protocol transactions / procedures
  * share chapters/gsup.adoc from OsmoSGSN to OsmoMSC + OsmoHLR
  * vty-ref: Update URI of docbook 5.0 schema

  [ Neels Hofmeyr ]
  * use __FILE__, not __BASE_FILE__
  * vty: fix doc str for 'reset sgsn state'
  * vty: add SCCP related vty commands
  * fix build: remove unused variable
  * Importing history from osmo-gsm-manuals.git
  * add 'make check' target
  * fix 'make clean': shell glob, ignore failure
  * refactor Makefile build rules, don't use the FORCE
  * OsmoSGSN: update VTY reference
  * sgsn: update vty reference

  [ Oliver Smith ]
  * gtphub: Add --version cmdline option
  * build manuals moved here from osmo-gsm-manuals.git
  * Fix DISTCHECK_CONFIGURE_FLAGS override
  * contrib/jenkins.sh: build and publish manuals
  * contrib: fix makedistcheck with disabled systemd

  [ Max ]
  * Cleanup non-existent files from debian/copyright
  * Use safer functions for IMSI ACL
  * gbproxy: fix formatting in gbproxy-state command
  * gbproxy: add number-of-peers ctrl command
  * Revert "gbproxy: fix formatting in gbproxy-state command"
  * Add OsmoSGSN control interface description
  * Remove misleading comment
  * Constify sgsn_acl_lookup() parameter
  * Drop unused osmo-sgsn.pc
  * Use explicit length check
  * Use explicit parameter for sgsn_auth_init()

  [ Jonathan Brielmaier ]
  * fix various typos across all manuals

  [ ikostov ]
  * SGSN: add Auth. policy, NS Statistics and BSSGP state examples, tweaks
  * GSUP, OAP: fix AUTS length to 14, not 16

  [ Philipp Maier ]
  * osmo-sgsn: Update VTY command reference
  * osmo-sgsn: improve auth-policy explaination
  * osmo-sgsn: Explain TCP/IP header compression
  * osmo-sgsn: fix arrow tips in flow diagrams

  [ Holger Hans Peter Freyther ]
  * sgsn: Fix numbering of QoS and add basic description for APN
  * sgsn: Add charging characteristics to GSUP

 -- Harald Welte <laforge@gnumonks.org>  Wed, 23 Jan 2019 18:32:41 +0100

osmo-sgsn (1.3.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * drop osmo_sgsn.cfg from src/gprs dir
  * change default config filename to osmo-sgsn.cfg, not osmo_sgsn.cfg
  * vty: skip installing cmds now always installed by default
  * add --enable-sanitize config option
  * use default point-code as listed on Point_Codes wiki page
  * gprs_gmm: segfault: gracefully handle failure to alloc context
  * gsm48_rx_gmm_att_req: fix error handling: don't clean up NULL llme
  * gprs_llc: tx dl ud: make mismatching LLE not crash osmo-sgsn
  * fix build: missing LIBGTP_CFLAGS in sgsn_test
  * sgsn_test: guard against struct gprs_ra_id changing
  * vty: absorb command explanations from osmo-gsm-manuals
  * configure: add --enable-werror
  * implement support for 3-digit MNC with leading zeros
  * osmo-gbproxy: use 'osmo-gbproxy.cfg' as default config name
  * compiler warnings: use enum ranap_nsap_addr_enc, constify local var
  * use osmo_init_logging2(), fix regression test memleaks
  * auth+ciph: log is_r99 and auth types
  * log two RA Update Request failure causes
  * GERAN: allow GSM SRES on UMTS AKA challenge

  [ Alexander Couzens ]
  * .gitignore: remove unneeded ignores of bsc/msc/nitb files
  * tests/ctrl_test_runner.py: remove BSC/NAT TestRunner
  * debian: remove doublicated project name in example files
  * .gitignore: remove non-existent /src/utils exludes
  * configure.ac: remove pcap check
  * configure.ac: remove unused libcdk check
  * .service: remove OpenBSC from service desription
  * mandatory depend on libc-ares and libgtp
  * GMM: dont reply to GMM_DETACH_REQ with POWER OFF when MS is unknown

  [ Harald Welte ]
  * Replace '.' in counter names with ':'
  * Add talloc context introspection via VTY

  [ Pau Espin Pedrol ]
  * Replace '.' in counter names with ':'
  * tests: Fix selection of python version
  * sgsn_cdr: Split log formatting into a snprintf function
  * Add vty cmd 'cdr trap' to send CDR through CTRL iface
  * tests: sgsn_test: Define wrap APIs with correct parameters
  * cosmetic: tests: sgsn_test: Use proper formatting and remove uneeded semicolons
  * gprs_gmm: Remove unused variable
  * cosmetic: gprs_gmm: Remove trailing whitespace
  * gprs_gmm: Convert warning message to pragma message
  * configure.ac: Enable Wall in CFLAGS
  * .gitignore: Add m4 files
  * sgsn_libgtp.c: Fix typos and whitespace

  [ Max ]
  * Fix display of GTP addresses
  * Show GTP version for PDP context in vty
  * Remove unneeded .py scripts
  * Replace '.' in counter names with ':'
  * Remove dead code
  * Enable sanitize for CI tests
  * cosmetic: use macro for gtphub plane iteration
  * Use connection id when allocating rate counters
  * Migrate from OpenSSL to osmo_get_rand_id()
  * Remove obsolete ./configure option
  * Fix RAI construction
  * gtphub: make rate_ctr unique
  * Remove unused bsc_version.c
  * Use gsm48_encode_ra() for RAI encoding
  * gtphub: check for gsn_addr_from_sockaddr() errors
  * gtphub: check for gsn_addr_from_sockaddr() error

 -- Pau Espin Pedrol <pespin@sysmocom.de>  Thu, 03 May 2018 19:01:44 +0200

osmo-sgsn (1.2.0) unstable; urgency=medium

  [ Neels Hofmeyr ]
  * jenkins: fix build: remove unused dependencies
  * debian: fix osmo-sgsn.install, tweak VCS link and descriptions
  * drop files unrelated to osmo-sgsn
  * rewrite README
  * configure.ac: set name to osmo-sgsn, fix ML addr
  * move openbsc.pc to osmo-sgsn.pc
  * move include/openbsc to include/osmocom/sgsn
  * jenkins.sh: fix echo string to say osmo-sgsn, not msc
  * jenkins: use osmo-clean-workspace.sh before and after build

  [ Alexander Couzens ]
  * debian: fix paths of examples
  * debian/rules: show testsuite.log when tests are failing

  [ Max ]
  * Remove rest_octets.h
  * gbproxy: ensure peer allocation result
  * jenkins: use osmo-ggsn for tests
  * Cleanup configure checks
  * Use extended logging for PDP contexts
  * deb: fix copyright file issues
  * Move P-TMSI alloc/update into separate function
  * Check for correct P-TMSI allocation
  * Use new FSF address in license header
  * SGSN: uncomment BSSGP vty tests
  * SGSN: print additional GTP-related info
  * SGSN: check that GSN is created in proper mode
  * Fix APN printing
  * Fix build after recent rate_ctr patches
  * gbproxy: don't link unnecessary
  * Fix libosmo-sigtran dependency
  * jenkins: check for IU properly
  * Log GTP-U endpoints update
  * Log address on GTP creation

  [ Pau Espin Pedrol ]
  * Remove unneeded dep libdbi

  [ Philipp Maier ]
  * log: fix default loglevels
  * non-iu-build: guard vty libosmo-sigtran function calls.
  * configure: fix libosmo-sigtran dependency

  [ Harald Welte ]
  * Debian: Add systemd service files for osmo-sgsn and osmo-gbproxy
  * Debian: fix dh_strip rules for creating one -dbg per program

 -- Harald Welte <laforge@gnumonks.org>  Sat, 28 Oct 2017 19:07:48 +0200

osmo-sgsn (0.1.0) unstable; urgency=low

  * Initial release.

 -- Alexander Couzens <lynxis@fe80.eu>  Tue, 08 Aug 2017 01:13:05 +0000
