/* OpenBSC allocation contexts initialization code */
/* (C) 2011-2016 by sysmocom s.f.m.c. GmbH <info@sysmocom.de>
 * All Rights Reserved
 *
 * This program is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Affero General Public License as published by
 * the Free Software Foundation; either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Affero General Public License for more details.
 *
 * You should have received a copy of the GNU Affero General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 */

#include <osmocom/core/talloc.h>

extern void *tall_bsc_ctx;
extern void *tall_msgb_ctx;
extern void *tall_fle_ctx;
extern void *tall_locop_ctx;
extern void *tall_authciphop_ctx;
extern void *tall_gsms_ctx;
extern void *tall_subscr_ctx;
extern void *tall_sub_req_ctx;
extern void *tall_call_ctx;
extern void *tall_paging_ctx;
extern void *tall_sigh_ctx;
extern void *tall_tqe_ctx;
extern void *tall_trans_ctx;
extern void *tall_map_ctx;
extern void *tall_upq_ctx;
extern void *tall_ctr_ctx;

void talloc_ctx_init(void *ctx_root)
{
	tall_msgb_ctx = talloc_named_const(ctx_root, 0, "msgb");
	tall_fle_ctx = talloc_named_const(ctx_root, 0, "bs11_file_list_entry");
	tall_locop_ctx = talloc_named_const(ctx_root, 0, "loc_updating_oper");
	tall_authciphop_ctx = talloc_named_const(ctx_root, 0, "auth_ciph_oper");
	tall_gsms_ctx = talloc_named_const(ctx_root, 0, "sms");
	tall_subscr_ctx = talloc_named_const(ctx_root, 0, "subscriber");
	tall_sub_req_ctx = talloc_named_const(ctx_root, 0, "subscr_request");
	tall_call_ctx = talloc_named_const(ctx_root, 0, "gsm_call");
	tall_paging_ctx = talloc_named_const(ctx_root, 0, "paging_request");
	tall_sigh_ctx = talloc_named_const(ctx_root, 0, "signal_handler");
	tall_tqe_ctx = talloc_named_const(ctx_root, 0, "subch_txq_entry");
	tall_trans_ctx = talloc_named_const(ctx_root, 0, "transaction");
	tall_map_ctx = talloc_named_const(ctx_root, 0, "trau_map_entry");
	tall_upq_ctx = talloc_named_const(ctx_root, 0, "trau_upq_entry");
	tall_ctr_ctx = talloc_named_const(ctx_root, 0, "counter");
}
