laforge also did a study about the location and usage of IPA related functions:
libosmocore
* ipa_ccm_idtag_name()
* ipa_ccm_idtag_parse()
** libosmo-abis
** libosmo-sccp
** osmo-bsc
* ipa_ccm_idtag_parse_off()
* ipa_parse_unitid()
* ipa_ccm_tlv_to_unitdata()
* ipa_ccm_make_id_resp()
* ipa_ccm_make_id_resp_from_req()
** libosmo-sccp
* ipa_send()
** libosmoabis
* ipa_ccm_send_pong()
** osmo-bsc/ipaccess-proxy
* ipa_ccm_send_id_ack()
** osmo-bsc/ipaccess-proxy
* ipa_ccm_send_id_req()
** osmo-bsc/ipaccess-proxy
** libosmo-abis
** libosmo-sccp
* ipa_ccm_rcvmsg_base()
** libosmo-abis
* ipa_ccm_rcvmsg_bts_base()
** libosmo-abis
** osmo-bts/sysmbts_mgr_calib
* ipa_prepend_header_ext()
** osmo-bsc, osmo-bts, osmo-hlr, osmo-msc, osmo-sgsn, osmo-sysmon, ...
* ipa_prepend_header()
** osmo-bsc, osmo-bts, osmo-hlr, osmo-msc, osmo-sgsn, osmo-sysmon, ...
* ipa_msg_recv()
** UNUSED
* ipa_msg_recv_buffered()
** libosmo-abis, libosmo-sccp
* ipa_msg_alloc()
** libosmo-abis, libosmo-sccp
libosmo-abis
* ipa_msg_push_header
** libosmo-netif, libosmo-sccp, osmo-msc, osmo-sgan
* ipa_client_conn_close
** osmo-msc, osmo-sgsn
* ipa_client_conn_create
** osmo-bts, osmo-msc, osmo-sgsn
* ipa_client_conn_destroy
** osmo-msc, osmo-sgsn
* ipa_client_conn_open
** osmo-bts, osmo-msc, osmo-sgsn
* ipa_client_conn_send
** osmo-bts, osmo-msc, osmo-sgsn, osmo-remsim
* ipa_client_conn_clear_queue
** osmo-msc, osmo-sgsn
* ipa_server_link_create
** osmo-hlr
* ipa_server_link_close
** osmo-hlr
* ipa_server_conn_create
** osmo-hlr
* ipa_server_conn_ccm
** osmo-hlr
* ipa_server_conn_destroy
** osmo-hlr
* ipa_server_conn_send
** osmo-hlr
* ipa_keepalive_fsm_start
libosmo-netif
* chan_abis_ipa_srv / chan_abis_ipa_clnt
** cannot deal with fragmented IPA messages!
** nowhere used, let's remove
* ipaccess_idtag_name()
* osmo_ipa_msg_alloc()
** only inside library
* osmo_ipa_msg_push_header()
** libosmo-sccp
* osmo_ipa_process_msg()
** libosmo-sccp
* osmo_ipa_idtag_parse()
** only inside library
* osmo_ipa_parse_unitid()
** only inside library
* ipaccess_send_pong()
** identical to ipa_ccm_send_pong/libosmogsm
** libosmo-sccp
* ipaccess_send_id_ack()
** identical to ipa_ccm_send_ack/libosmogsm
** libosmo-sccp
* ipaccess_send_id_req()
** identical to ipa_ccm_send_req/libosmogsm
** only inside library
* osmo_ipa_rcvmsg_base()
** only inside library
* ipaccess_parse_unitid()
** identical to ipa_parse_unitid/libosmogsm?
** only inside library
* ipa_cli_id_resp()
** only inside library
* ipa_cli_id_ack()
** only inside library
* osmo_ipa_parse_msg_id_resp()
** only inside library
I think one of the main difficulties here is that this is not only about moving the IPA code out of libosmo-abis. There is also a larger refactoring required. Its also not only one IPA implementations but several different ones.