Make alert notifications vty configurable per ESME

Adds (no) alert-notifications as a per-esme vty command,
in order to allow some ESMEs to be excluded from alerts.

The default is still to send alert notifications to all esme,
so no changes are required to the config file to maintain
identical operation after this patch.

Change-Id: I57f4d268ca6fe6a233f2caaffce62e4aade01274
This commit is contained in:
Keith Whyte 2019-01-17 01:01:59 +01:00 committed by Keith Whyte
parent 0e8dfadc7a
commit c6d219cd83
4 changed files with 35 additions and 2 deletions

View File

@ -283,8 +283,13 @@ static void alert_all_esme(struct smsc *smsc, struct vlr_subscr *vsub,
llist_for_each_entry(esme, &smsc->esme_list, list) {
/* we currently send an alert notification to each ESME that is
* connected, and do not require a (non-existant) delivery
* pending flag to be set before, FIXME: make this VTY
* configurable */
* pending flag to be set before. */
if (!esme->acl->alert_notifications) {
LOGP(DSMPP, LOGL_DEBUG,
"[%s] is not set to receive Alert Notifications\n",
esme->system_id);
continue;
}
if (esme->acl && esme->acl->deliver_src_imsi) {
smpp_tx_alert(esme, TON_Subscriber_Number,
NPI_Land_Mobile_E212,

View File

@ -148,6 +148,7 @@ struct osmo_smpp_acl *smpp_acl_alloc(struct smsc *smsc, const char *sys_id)
acl->smsc = smsc;
strcpy(acl->system_id, sys_id);
acl->alert_notifications = 1;
INIT_LLIST_HEAD(&acl->route_list);
llist_add_tail(&acl->list, &smsc->acl_list);

View File

@ -68,6 +68,7 @@ struct osmo_smpp_acl {
int deliver_src_imsi;
int osmocom_ext;
int dcs_transparent;
int alert_notifications;
struct llist_head route_list;
};

View File

@ -499,6 +499,28 @@ DEFUN(cfg_esme_no_dcs_transp, cfg_esme_no_dcs_transp_cmd,
return CMD_SUCCESS;
}
DEFUN(cfg_esme_alert_notif, cfg_esme_alert_notif_cmd,
"alert-notifications",
"Disable sending of SMPP Alert Notifications for this ESME")
{
struct osmo_smpp_acl *acl = vty->index;
acl->alert_notifications = 1;
return CMD_SUCCESS;
}
DEFUN(cfg_esme_no_alert_notif, cfg_esme_no_alert_notif_cmd,
"no alert-notifications", NO_STR
"Disable sending of SMPP Alert Notifications for this ESME")
{
struct osmo_smpp_acl *acl = vty->index;
acl->alert_notifications = 0;
return CMD_SUCCESS;
}
static void dump_one_esme(struct vty *vty, struct osmo_esme *esme)
{
@ -560,6 +582,8 @@ static void config_write_esme_single(struct vty *vty, struct osmo_smpp_acl *acl)
vty_out(vty, " osmocom-extensions%s", VTY_NEWLINE);
if (acl->dcs_transparent)
vty_out(vty, " dcs-transparent%s", VTY_NEWLINE);
if (acl->alert_notifications)
vty_out(vty, " alert-notifications%s", VTY_NEWLINE);
llist_for_each_entry(r, &acl->route_list, list)
write_esme_route_single(vty, r);
@ -603,6 +627,8 @@ int smpp_vty_init(void)
install_element(SMPP_ESME_NODE, &cfg_esme_no_osmo_ext_cmd);
install_element(SMPP_ESME_NODE, &cfg_esme_dcs_transp_cmd);
install_element(SMPP_ESME_NODE, &cfg_esme_no_dcs_transp_cmd);
install_element(SMPP_ESME_NODE, &cfg_esme_alert_notif_cmd);
install_element(SMPP_ESME_NODE, &cfg_esme_no_alert_notif_cmd);
install_element_ve(&show_esme_cmd);