It took me a few days to determine this issue, so I wanted to share it with the community if you come across this issue. If your pairing process is not sharing the IRK/ Resolvable address and your can't figure out why, you need to downgrade your address privacy. I did this in peer_manager_init()
err_code = pm_sec_params_set(&m_sec_param);
APP_ERROR_CHECK(err_code);// -- added start
pm_privacy_params_t privacy_params; memset(&privacy_params, 0, sizeof(pm_privacy_params_t));
privacy_params.privacy_mode = BLE_GAP_PRIVACY_MODE_DEVICE_PRIVACY; privacy_params.private_addr_type = BLE_GAP_ADDR_TYPE_RANDOM_PRIVATE_RESOLVABLE; privacy_params.private_addr_cycle_s = 900; // Change address every 15 minutes
err_code = pm_privacy_set(&privacy_params);// -- added end
[SDK BUG] In addition, in peer_manager_init, it appears the local sec_param is set to a pointer to be used outside of the scope of the function. This variable is local and although the function is static, it doesn't mean the local variable will be static. I made mine as a global or it should be explicitly defined as static within the peer_manager_init.