Exemplo n.º 1
0
struct gsm_subscriber *subscr_active_by_imsi(struct gsm_network *net, const char *imsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (strcmp(subscr->imsi, imsi) == 0 && subscr->net == net)
			return subscr_get(subscr);
	}

	return NULL;
}
Exemplo n.º 2
0
struct gsm_subscriber *subscr_active_by_tmsi(struct gsm_network *net, uint32_t tmsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (subscr->tmsi == tmsi && subscr->net == net)
			return subscr_get(subscr);
	}

	return NULL;
}
Exemplo n.º 3
0
struct gsm_subscriber *subscr_active_by_imsi(struct gsm_subscriber_group *sgrp,
					     const char *imsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (strcmp(subscr->imsi, imsi) == 0 && subscr->group == sgrp)
			return subscr_get(subscr);
	}

	return NULL;
}
Exemplo n.º 4
0
struct gsm_subscriber *subscr_active_by_tmsi(struct gsm_subscriber_group *sgrp,
					     uint32_t tmsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (subscr->tmsi == tmsi && subscr->group == sgrp)
			return subscr_get(subscr);
	}

	return NULL;
}
Exemplo n.º 5
0
int subscr_purge_inactive(struct gsm_subscriber_group *sgrp)
{
	struct gsm_subscriber *subscr, *tmp;
	int purged = 0;

	llist_for_each_entry_safe(subscr, tmp, subscr_bsc_active_subscribers(), entry) {
		if (subscr->group == sgrp && subscr->use_count <= 0) {
			subscr_free(subscr);
			purged += 1;
		}
	}

	return purged;
}
Exemplo n.º 6
0
int subscr_purge_inactive(struct gsm_network *net)
{
	struct gsm_subscriber *subscr, *tmp;
	int purged = 0;

	llist_for_each_entry_safe(subscr, tmp, subscr_bsc_active_subscribers(), entry) {
		if (subscr->net == net && subscr->use_count <= 0) {
			subscr_free(subscr);
			purged += 1;
		}
	}

	return purged;
}
Exemplo n.º 7
0
struct gsm_subscriber *subscr_get_or_create(struct gsm_subscriber_group *sgrp,
					    const char *imsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (strcmp(subscr->imsi, imsi) == 0 && subscr->group == sgrp)
			return subscr_get(subscr);
	}

	subscr = subscr_alloc();
	if (!subscr)
		return NULL;

	osmo_strlcpy(subscr->imsi, imsi, sizeof(subscr->imsi));
	subscr->group = sgrp;
	return subscr;
}
Exemplo n.º 8
0
struct gsm_subscriber *subscr_get_or_create(struct gsm_network *net,
					    const char *imsi)
{
	struct gsm_subscriber *subscr;

	llist_for_each_entry(subscr, subscr_bsc_active_subscribers(), entry) {
		if (strcmp(subscr->imsi, imsi) == 0 && subscr->net == net)
			return subscr_get(subscr);
	}

	subscr = subscr_alloc();
	if (!subscr)
		return NULL;

	strcpy(subscr->imsi, imsi);
	subscr->net = net;
	return subscr;
}