# 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
core      ADD       osmo_sock_multiaddr_{add,del}_local_addr()
core      ADD       osmo_sock_multiaddr_get_ip_and_port(), osmo_multiaddr_ip_and_port_snprintf(), osmo_sock_multiaddr_get_name_buf()
core      ADD       osmo_sock_sctp_get_peer_addr_info()
core      ADD       gsmtap_inst_fd2() core, DEPRECATE gsmtap_inst_fd()
core		behavior change		osmo_tdef_fsm_inst_state_chg(): allow millisecond precision
core		ABI change		osmo_io_ops now contains a struct of structs, not union of structs
core		ABI change		osmo_iofd_set_ioops() now returns a value (error code)
isdn		ABI change		add states and flags for external T200 handling
isdn      ADD				initial implementation of the V.110 Terminal Adapter
gsm		ABI change		add T200 timer states to lapdm_datalink
gsm		ABI change		add UI queue to struct lapdm_datalink
gsm		ADD			gsup.h: struct osmo_gsup_pdp_info fields pdp_type_nr, pdp_type_org, deprecate pdp_type.
gsm		ABI change			gsup.h: Add field pdp_address in struct osmo_gsup_pdp_info shifts the struct, and in turn fields in struct osmo_gsup_message.
gsm		ABI change		gsup.h: Add field pco in struct osmo_gsup_message. Length of the struct osmo_gsup_message increase.
