# When cleaning up this file: bump API version in corresponding Makefile.am and rename corresponding debian/lib*.install
# according to https://osmocom.org/projects/cellular-infrastructure/wiki/Make_a_new_release
# In short: https://www.gnu.org/software/libtool/manual/html_node/Updating-version-info.html#Updating-version-info
# LIBVERSION=c:r:a
# If the library source code has changed at all since the last update, then increment revision: c:r + 1:a.
# If any interfaces have been added, removed, or changed since the last update: c + 1:0:0.
# If any interfaces have been added since the last public release: c:r:a + 1.
# If any interfaces have been removed or changed since the last public release: c:r:0.
#library	what			description / commit summary line
libosmogsm	gsm0480_l3hdr_push()	removed from gsm/gsm0480.h (was not exposed)
libosmogsm	gsm48_push_l3hdr()	(re)introduced in gsm/gsm48.h (GSM 04.08 API)
libosmogsm	gsm48_push_l3hdr_tid()	a wrapper around gsm48_push_l3hdr()
libosmocore	msgb_l4len		new symbol (exposed as 'static inline' in msgb.h)
libosmogsm     gsm0808_cause_class_name()      getter for class description
libosmogsm     gsm0808_cause_class()   getter for cause class
libosmogsm     gsm0808_cause_ext()     check for cause extended bit
libosmogsm     gsm0808_cause_name()    use enum as parameter
libosmogsm     gsm0808_create_cipher_reject()          use enum as parameter
libosmogsm	osmo_gsup_message			extended with SMS related fields
libosmogsm	osmo_gsup_sms_{en|de}code_sm_rp_da	GSUP SM-RP-DA coding helpers
libosmogsm	osmo_gsup_sms_{en|de}code_sm_rp_oa	GSUP SM-RP-OA coding helpers
