gprs: Handle incoming IPA CCM message in gsup_client_read_cb
Currently the IPA CCM messages are not handled by the GSUP client. This means, that the client doesn't answer to PING and ID_GET and logs notices when receiving PONG or ID_ACK. At least the PING functionality (remotely originated PING) shall be supported. This patch extends gsup_client_read_cb by a call to ipaccess_bts_handle_ccm. Only when the return code is 0, the message is processed further and checked for an OSMO/GSUP message. ID_GET messages are answered by a dummy description, where only the unit_name is set to 'SGSN'. Sponsored-by: On-Waves ehf
This commit is contained in:
parent
69e16b9ea5
commit
e154d8bdd4
|
@ -105,6 +105,31 @@ static int gsup_client_read_cb(struct ipa_client_conn *link, struct msgb *msg)
|
|||
struct ipaccess_head *hh = (struct ipaccess_head *) msg->data;
|
||||
struct ipaccess_head_ext *he = (struct ipaccess_head_ext *) msgb_l2(msg);
|
||||
struct gprs_gsup_client *gsupc = (struct gprs_gsup_client *)link->data;
|
||||
int rc;
|
||||
static struct ipaccess_unit ipa_dev = {
|
||||
.unit_name = "SGSN"
|
||||
};
|
||||
|
||||
msg->l2h = &hh->data[0];
|
||||
|
||||
rc = ipaccess_bts_handle_ccm(link, &ipa_dev, msg);
|
||||
|
||||
if (rc < 0) {
|
||||
LOGP(DGPRS, LOGL_NOTICE,
|
||||
"GSUP received an invalid IPA/CCM message from %s:%d\n",
|
||||
link->addr, link->port);
|
||||
/* Link has been closed */
|
||||
gsupc->is_connected = 0;
|
||||
msgb_free(msg);
|
||||
return -1;
|
||||
}
|
||||
|
||||
if (rc == 1) {
|
||||
/* CCM message */
|
||||
|
||||
msgb_free(msg);
|
||||
return 0;
|
||||
}
|
||||
|
||||
if (hh->proto != IPAC_PROTO_OSMO)
|
||||
goto invalid;
|
||||
|
|
|
@ -66,6 +66,7 @@ static int gsup_read_cb(struct gprs_gsup_client *gsupc, struct msgb *msg)
|
|||
int rc;
|
||||
|
||||
rc = gprs_subscr_rx_gsup_message(msg);
|
||||
msgb_free(msg);
|
||||
if (rc < 0)
|
||||
return -1;
|
||||
|
||||
|
|
Loading…
Reference in New Issue