mirror of https://gerrit.osmocom.org/libosmocore
gb: Fix NS RESET/RESET_ACK abnormal cases
This changes the implementations for the reception of RESET and RESET_ACK to be compatible with 3GPP TS 08.16, 7.3.1: - Just send a RESET_ACK with correct values back to the SGSN when a RESET with an invalid NSVCI or NSEI has been received. - Check RESET_ACK for matching NSEI and NSVCI. - Ignore unexpected RESET_ACKs. In addition, use RESET_ACK from a BSS to update the BSS source address based on the NSVCI to be tolerant with changing UDP source addresses/ports. Sponsored-by: On-Waves ehf
This commit is contained in:
parent
81d7c14756
commit
5405a104bb
|
@ -36,6 +36,7 @@ enum ns_timeout {
|
||||||
|
|
||||||
#define NSE_S_BLOCKED 0x0001
|
#define NSE_S_BLOCKED 0x0001
|
||||||
#define NSE_S_ALIVE 0x0002
|
#define NSE_S_ALIVE 0x0002
|
||||||
|
#define NSE_S_RESET 0x0004
|
||||||
|
|
||||||
/*! \brief Osmocom NS link layer types */
|
/*! \brief Osmocom NS link layer types */
|
||||||
enum gprs_ns_ll {
|
enum gprs_ns_ll {
|
||||||
|
@ -199,12 +200,16 @@ enum signal_ns {
|
||||||
S_NS_UNBLOCK,
|
S_NS_UNBLOCK,
|
||||||
S_NS_ALIVE_EXP, /* Tns-alive expired more than N times */
|
S_NS_ALIVE_EXP, /* Tns-alive expired more than N times */
|
||||||
S_NS_REPLACED, /* nsvc object is replaced (sets old_nsvc) */
|
S_NS_REPLACED, /* nsvc object is replaced (sets old_nsvc) */
|
||||||
|
S_NS_MISMATCH, /* got an unexpected IE (sets msg, pdu_type, ie_type) */
|
||||||
};
|
};
|
||||||
|
|
||||||
struct ns_signal_data {
|
struct ns_signal_data {
|
||||||
struct gprs_nsvc *nsvc;
|
struct gprs_nsvc *nsvc;
|
||||||
struct gprs_nsvc *old_nsvc;
|
struct gprs_nsvc *old_nsvc;
|
||||||
uint8_t cause;
|
uint8_t cause;
|
||||||
|
uint8_t pdu_type;
|
||||||
|
uint8_t ie_type;
|
||||||
|
struct msgb *msg;
|
||||||
};
|
};
|
||||||
|
|
||||||
void gprs_ns_set_log_ss(int ss);
|
void gprs_ns_set_log_ss(int ss);
|
||||||
|
|
271
src/gb/gprs_ns.c
271
src/gb/gprs_ns.c
|
@ -102,6 +102,8 @@ enum ns_ctr {
|
||||||
NS_CTR_DEAD,
|
NS_CTR_DEAD,
|
||||||
NS_CTR_REPLACED,
|
NS_CTR_REPLACED,
|
||||||
NS_CTR_NSEI_CHG,
|
NS_CTR_NSEI_CHG,
|
||||||
|
NS_CTR_INV_VCI,
|
||||||
|
NS_CTR_INV_NSEI,
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct rate_ctr_desc nsvc_ctr_description[] = {
|
static const struct rate_ctr_desc nsvc_ctr_description[] = {
|
||||||
|
@ -113,6 +115,8 @@ static const struct rate_ctr_desc nsvc_ctr_description[] = {
|
||||||
{ "dead", "NS-VC gone dead count " },
|
{ "dead", "NS-VC gone dead count " },
|
||||||
{ "replaced", "NS-VC replaced other count" },
|
{ "replaced", "NS-VC replaced other count" },
|
||||||
{ "nsei-chg", "NS-VC changed NSEI " },
|
{ "nsei-chg", "NS-VC changed NSEI " },
|
||||||
|
{ "inv-nsvci", "NS-VCI was invalid count " },
|
||||||
|
{ "inv-nsei", "NSEI was invalid count " },
|
||||||
};
|
};
|
||||||
|
|
||||||
static const struct rate_ctr_group_desc nsvc_ctrg_desc = {
|
static const struct rate_ctr_group_desc nsvc_ctrg_desc = {
|
||||||
|
@ -225,6 +229,20 @@ static void ns_osmo_signal_dispatch(struct gprs_nsvc *nsvc, unsigned int signal,
|
||||||
osmo_signal_dispatch(SS_L_NS, signal, &nssd);
|
osmo_signal_dispatch(SS_L_NS, signal, &nssd);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void ns_osmo_signal_dispatch_mismatch(struct gprs_nsvc *nsvc,
|
||||||
|
struct msgb *msg,
|
||||||
|
uint8_t pdu_type, uint8_t ie_type)
|
||||||
|
{
|
||||||
|
struct ns_signal_data nssd = {0};
|
||||||
|
|
||||||
|
nssd.nsvc = nsvc;
|
||||||
|
nssd.pdu_type = pdu_type;
|
||||||
|
nssd.ie_type = ie_type;
|
||||||
|
nssd.msg = msg;
|
||||||
|
|
||||||
|
osmo_signal_dispatch(SS_L_NS, S_NS_MISMATCH, &nssd);
|
||||||
|
}
|
||||||
|
|
||||||
static void ns_osmo_signal_dispatch_replaced(struct gprs_nsvc *nsvc, struct gprs_nsvc *old_nsvc)
|
static void ns_osmo_signal_dispatch_replaced(struct gprs_nsvc *nsvc, struct gprs_nsvc *old_nsvc)
|
||||||
{
|
{
|
||||||
struct ns_signal_data nssd = {0};
|
struct ns_signal_data nssd = {0};
|
||||||
|
@ -323,6 +341,8 @@ int gprs_ns_tx_reset(struct gprs_nsvc *nsvc, uint8_t cause)
|
||||||
LOGP(DNS, LOGL_INFO, "NSEI=%u Tx NS RESET (NSVCI=%u, cause=%s)\n",
|
LOGP(DNS, LOGL_INFO, "NSEI=%u Tx NS RESET (NSVCI=%u, cause=%s)\n",
|
||||||
nsvc->nsei, nsvc->nsvci, gprs_ns_cause_str(cause));
|
nsvc->nsei, nsvc->nsvci, gprs_ns_cause_str(cause));
|
||||||
|
|
||||||
|
nsvc->state |= NSE_S_RESET;
|
||||||
|
|
||||||
msg->l2h = msgb_put(msg, sizeof(*nsh));
|
msg->l2h = msgb_put(msg, sizeof(*nsh));
|
||||||
nsh = (struct gprs_ns_hdr *) msg->l2h;
|
nsh = (struct gprs_ns_hdr *) msg->l2h;
|
||||||
nsh->pdu_type = NS_PDUT_RESET;
|
nsh->pdu_type = NS_PDUT_RESET;
|
||||||
|
@ -672,6 +692,49 @@ static int gprs_ns_rx_status(struct gprs_nsvc *nsvc, struct msgb *msg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Replace a nsvc object with another based on NSVCI.
|
||||||
|
* This function replaces looks for a NSVC with the given NSVCI and replaces it
|
||||||
|
* if possible and necessary. If replaced, the former value of *nsvc is
|
||||||
|
* returned in *old_nsvc.
|
||||||
|
* \return != 0 if *nsvc points to a matching NSVC.
|
||||||
|
*/
|
||||||
|
static int gprs_nsvc_replace_if_found(uint16_t nsvci,
|
||||||
|
struct gprs_nsvc **nsvc,
|
||||||
|
struct gprs_nsvc **old_nsvc)
|
||||||
|
{
|
||||||
|
struct gprs_nsvc *matching_nsvc;
|
||||||
|
|
||||||
|
if ((*nsvc)->nsvci == nsvci) {
|
||||||
|
*old_nsvc = NULL;
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
matching_nsvc = gprs_nsvc_by_nsvci((*nsvc)->nsi, nsvci);
|
||||||
|
|
||||||
|
if (!matching_nsvc)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* The NS-VCI is already used by this NS-VC */
|
||||||
|
|
||||||
|
char *old_peer;
|
||||||
|
|
||||||
|
/* Exchange the NS-VC objects */
|
||||||
|
*old_nsvc = *nsvc;
|
||||||
|
*nsvc = matching_nsvc;
|
||||||
|
|
||||||
|
/* Do logging */
|
||||||
|
old_peer = talloc_strdup(*old_nsvc, gprs_ns_ll_str(*old_nsvc));
|
||||||
|
LOGP(DNS, LOGL_INFO, "NS-VC changed link (NSVCI=%u) from %s to %s\n",
|
||||||
|
nsvci, old_peer, gprs_ns_ll_str(*nsvc));
|
||||||
|
|
||||||
|
talloc_free(old_peer);
|
||||||
|
|
||||||
|
/* Do statistics */
|
||||||
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_REPLACED]);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
/* Section 7.3 */
|
/* Section 7.3 */
|
||||||
static int gprs_ns_rx_reset(struct gprs_nsvc **nsvc, struct msgb *msg)
|
static int gprs_ns_rx_reset(struct gprs_nsvc **nsvc, struct msgb *msg)
|
||||||
{
|
{
|
||||||
|
@ -679,7 +742,7 @@ static int gprs_ns_rx_reset(struct gprs_nsvc **nsvc, struct msgb *msg)
|
||||||
struct tlv_parsed tp;
|
struct tlv_parsed tp;
|
||||||
uint8_t cause;
|
uint8_t cause;
|
||||||
uint16_t nsvci, nsei;
|
uint16_t nsvci, nsei;
|
||||||
struct gprs_nsvc *other_nsvc = NULL;
|
struct gprs_nsvc *orig_nsvc = NULL;
|
||||||
int rc;
|
int rc;
|
||||||
|
|
||||||
rc = tlv_parse(&tp, &ns_att_tlvdef, nsh->data,
|
rc = tlv_parse(&tp, &ns_att_tlvdef, nsh->data,
|
||||||
|
@ -706,57 +769,47 @@ static int gprs_ns_rx_reset(struct gprs_nsvc **nsvc, struct msgb *msg)
|
||||||
(*nsvc)->nsvci, (*nsvc)->nsvci_is_valid ? "" : "(invalid)",
|
(*nsvc)->nsvci, (*nsvc)->nsvci_is_valid ? "" : "(invalid)",
|
||||||
nsei, nsvci, gprs_ns_cause_str(cause));
|
nsei, nsvci, gprs_ns_cause_str(cause));
|
||||||
|
|
||||||
if ((*nsvc)->nsvci_is_valid && (*nsvc)->nsvci != nsvci) {
|
if (!(*nsvc)->nsvci_is_valid) {
|
||||||
/* NS-VCI has changed */
|
/* It's a new uninitialised NS-VC, nothing to check here */
|
||||||
other_nsvc = gprs_nsvc_by_nsvci((*nsvc)->nsi, nsvci);
|
} else if ((*nsvc)->nsvci != nsvci) {
|
||||||
|
if ((*nsvc)->remote_end_is_sgsn) {
|
||||||
if (other_nsvc) {
|
/* The incoming RESET doesn't match the NSVCI. Send an
|
||||||
/* The NS-VCI is already used by this NS-VC */
|
* appropriate RESET_ACK and ignore the RESET.
|
||||||
|
* See 3GPP TS 08.16, 7.3.1, 2nd paragraph.
|
||||||
struct gprs_nsvc *tmp_nsvc;
|
*/
|
||||||
char *old_peer;
|
ns_osmo_signal_dispatch_mismatch(*nsvc, msg,
|
||||||
|
NS_PDUT_RESET,
|
||||||
/* Exchange the NS-VC objects */
|
NS_IE_VCI);
|
||||||
tmp_nsvc = *nsvc;
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_VCI]);
|
||||||
*nsvc = other_nsvc;
|
gprs_ns_tx_reset_ack(*nsvc);
|
||||||
other_nsvc = tmp_nsvc;
|
return 0;
|
||||||
|
|
||||||
/* Do logging */
|
|
||||||
old_peer = talloc_strdup(other_nsvc,
|
|
||||||
gprs_ns_ll_str(other_nsvc));
|
|
||||||
LOGP(DNS, LOGL_INFO,
|
|
||||||
"NS-VC changed link (NSVCI=%u) from %s to %s\n",
|
|
||||||
nsvci, old_peer, gprs_ns_ll_str(*nsvc));
|
|
||||||
|
|
||||||
talloc_free(old_peer);
|
|
||||||
|
|
||||||
/* Do statistics */
|
|
||||||
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_REPLACED]);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* NS-VCI has changed */
|
||||||
|
gprs_nsvc_replace_if_found(nsvci, nsvc, &orig_nsvc);
|
||||||
|
|
||||||
|
} else if ((*nsvc)->nsei != nsei) {
|
||||||
|
/* The incoming RESET doesn't match the NSEI. Send an
|
||||||
|
* appropriate RESET_ACK and ignore the RESET.
|
||||||
|
* See 3GPP TS 08.16, 7.3.1, 3rd paragraph.
|
||||||
|
*/
|
||||||
|
ns_osmo_signal_dispatch_mismatch(*nsvc, msg,
|
||||||
|
NS_PDUT_RESET,
|
||||||
|
NS_IE_NSEI);
|
||||||
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_NSEI]);
|
||||||
|
gprs_ns_tx_reset_ack(*nsvc);
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Mark NS-VC as blocked and alive */
|
/* Mark NS-VC as blocked and alive */
|
||||||
(*nsvc)->state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
(*nsvc)->state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
||||||
|
|
||||||
if (other_nsvc) {
|
if (orig_nsvc) {
|
||||||
/* Check NSEI */
|
ns_osmo_signal_dispatch_replaced(*nsvc, orig_nsvc);
|
||||||
if ((*nsvc)->nsei != nsei) {
|
|
||||||
LOGP(DNS, LOGL_NOTICE,
|
|
||||||
"NS-VC changed NSEI (NSVCI=%u) from %u to %u\n",
|
|
||||||
nsvci, (*nsvc)->nsei, nsei);
|
|
||||||
|
|
||||||
/* Override old NSEI */
|
|
||||||
(*nsvc)->nsei = nsei;
|
|
||||||
|
|
||||||
/* Do statistics */
|
|
||||||
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_NSEI_CHG]);
|
|
||||||
}
|
|
||||||
|
|
||||||
ns_osmo_signal_dispatch_replaced(*nsvc, other_nsvc);
|
|
||||||
|
|
||||||
/* Update the ll info fields */
|
/* Update the ll info fields */
|
||||||
gprs_ns_ll_copy(*nsvc, other_nsvc);
|
gprs_ns_ll_copy(*nsvc, orig_nsvc);
|
||||||
gprs_ns_ll_clear(other_nsvc);
|
gprs_ns_ll_clear(orig_nsvc);
|
||||||
} else {
|
} else {
|
||||||
(*nsvc)->nsei = nsei;
|
(*nsvc)->nsei = nsei;
|
||||||
(*nsvc)->nsvci = nsvci;
|
(*nsvc)->nsvci = nsvci;
|
||||||
|
@ -776,6 +829,121 @@ static int gprs_ns_rx_reset(struct gprs_nsvc **nsvc, struct msgb *msg)
|
||||||
return rc;
|
return rc;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int gprs_ns_rx_reset_ack(struct gprs_nsvc **nsvc, struct msgb *msg)
|
||||||
|
{
|
||||||
|
struct gprs_ns_hdr *nsh = (struct gprs_ns_hdr *) msg->l2h;
|
||||||
|
struct tlv_parsed tp;
|
||||||
|
uint16_t nsvci, nsei;
|
||||||
|
struct gprs_nsvc *orig_nsvc = NULL;
|
||||||
|
int rc;
|
||||||
|
|
||||||
|
rc = tlv_parse(&tp, &ns_att_tlvdef, nsh->data,
|
||||||
|
msgb_l2len(msg) - sizeof(*nsh), 0, 0);
|
||||||
|
if (rc < 0) {
|
||||||
|
LOGP(DNS, LOGL_ERROR, "NSEI=%u Rx NS RESET ACK "
|
||||||
|
"Error during TLV Parse\n", (*nsvc)->nsei);
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!TLVP_PRESENT(&tp, NS_IE_VCI) ||
|
||||||
|
!TLVP_PRESENT(&tp, NS_IE_NSEI)) {
|
||||||
|
LOGP(DNS, LOGL_ERROR, "NS RESET ACK Missing mandatory IE\n");
|
||||||
|
gprs_ns_tx_status(*nsvc, NS_CAUSE_MISSING_ESSENT_IE, 0, msg);
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
nsvci = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_VCI));
|
||||||
|
nsei = ntohs(*(uint16_t *) TLVP_VAL(&tp, NS_IE_NSEI));
|
||||||
|
|
||||||
|
LOGP(DNS, LOGL_INFO, "NSVCI=%u%s Rx NS RESET ACK (NSEI=%u, NSVCI=%u)\n",
|
||||||
|
(*nsvc)->nsvci, (*nsvc)->nsvci_is_valid ? "" : "(invalid)",
|
||||||
|
nsei, nsvci);
|
||||||
|
|
||||||
|
if (!((*nsvc)->state & NSE_S_RESET)) {
|
||||||
|
/* Not waiting for a RESET_ACK on this NS-VC, ignore it.
|
||||||
|
* See 3GPP TS 08.16, 7.3.1, 5th paragraph.
|
||||||
|
*/
|
||||||
|
LOGP(DNS, LOGL_ERROR,
|
||||||
|
"NS RESET ACK Discarding unexpected message for "
|
||||||
|
"NS-VCI %d from SGSN NSEI=%d\n",
|
||||||
|
nsvci, nsei);
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (!(*nsvc)->nsvci_is_valid) {
|
||||||
|
LOGP(DNS, LOGL_NOTICE,
|
||||||
|
"NS RESET ACK Uninitialised NS-VC (%u) for "
|
||||||
|
"NS-VCI %d, NSEI=%d from %s\n",
|
||||||
|
(*nsvc)->nsvci, nsvci, nsei, gprs_ns_ll_str(*nsvc));
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
if ((*nsvc)->nsvci != nsvci) {
|
||||||
|
/* NS-VCI has changed */
|
||||||
|
|
||||||
|
/* if !0, use another NSVC object that matches the NSVCI */
|
||||||
|
int use_other_nsvc;
|
||||||
|
|
||||||
|
/* Only do this with BSS peers */
|
||||||
|
use_other_nsvc = !(*nsvc)->remote_end_is_sgsn;
|
||||||
|
|
||||||
|
if (use_other_nsvc)
|
||||||
|
/* Update *nsvc to point to the right NSVC object */
|
||||||
|
use_other_nsvc = gprs_nsvc_replace_if_found(nsvci, nsvc,
|
||||||
|
&orig_nsvc);
|
||||||
|
|
||||||
|
if (!use_other_nsvc) {
|
||||||
|
/* The incoming RESET_ACK doesn't match the NSVCI.
|
||||||
|
* See 3GPP TS 08.16, 7.3.1, 4th paragraph.
|
||||||
|
*/
|
||||||
|
ns_osmo_signal_dispatch_mismatch(*nsvc, msg,
|
||||||
|
NS_PDUT_RESET_ACK,
|
||||||
|
NS_IE_VCI);
|
||||||
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_VCI]);
|
||||||
|
LOGP(DNS, LOGL_ERROR,
|
||||||
|
"NS RESET ACK Unknown NS-VCI %d (%s NSEI=%d) "
|
||||||
|
"from %s\n",
|
||||||
|
nsvci,
|
||||||
|
(*nsvc)->remote_end_is_sgsn ? "SGSN" : "BSS",
|
||||||
|
nsei, gprs_ns_ll_str(*nsvc));
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Notify others */
|
||||||
|
ns_osmo_signal_dispatch_replaced(*nsvc, orig_nsvc);
|
||||||
|
|
||||||
|
/* Update the ll info fields */
|
||||||
|
gprs_ns_ll_copy(*nsvc, orig_nsvc);
|
||||||
|
gprs_ns_ll_clear(orig_nsvc);
|
||||||
|
} else if ((*nsvc)->nsei != nsei) {
|
||||||
|
/* The incoming RESET_ACK doesn't match the NSEI.
|
||||||
|
* See 3GPP TS 08.16, 7.3.1, 4th paragraph.
|
||||||
|
*/
|
||||||
|
ns_osmo_signal_dispatch_mismatch(*nsvc, msg,
|
||||||
|
NS_PDUT_RESET_ACK,
|
||||||
|
NS_IE_NSEI);
|
||||||
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_INV_NSEI]);
|
||||||
|
LOGP(DNS, LOGL_ERROR,
|
||||||
|
"NS RESET ACK Unknown NSEI %d (NS-VCI=%u) from %s\n",
|
||||||
|
nsei, nsvci, gprs_ns_ll_str(*nsvc));
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Mark NS-VC as blocked and alive */
|
||||||
|
(*nsvc)->state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
||||||
|
(*nsvc)->remote_state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
||||||
|
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_BLOCKED]);
|
||||||
|
if ((*nsvc)->persistent || (*nsvc)->remote_end_is_sgsn) {
|
||||||
|
/* stop RESET timer */
|
||||||
|
osmo_timer_del(&(*nsvc)->timer);
|
||||||
|
}
|
||||||
|
/* Initiate TEST proc.: Send ALIVE and start timer */
|
||||||
|
rc = gprs_ns_tx_simple(*nsvc, NS_PDUT_ALIVE);
|
||||||
|
nsvc_start_timer(*nsvc, NSVC_TIMER_TNS_TEST);
|
||||||
|
|
||||||
|
return rc;
|
||||||
|
}
|
||||||
|
|
||||||
static int gprs_ns_rx_block(struct gprs_nsvc *nsvc, struct msgb *msg)
|
static int gprs_ns_rx_block(struct gprs_nsvc *nsvc, struct msgb *msg)
|
||||||
{
|
{
|
||||||
struct gprs_ns_hdr *nsh = (struct gprs_ns_hdr *) msg->l2h;
|
struct gprs_ns_hdr *nsh = (struct gprs_ns_hdr *) msg->l2h;
|
||||||
|
@ -944,6 +1112,7 @@ int gprs_ns_vc_create(struct gprs_ns_inst *nsi, struct msgb *msg,
|
||||||
"from %s for non-existing NS-VC\n",
|
"from %s for non-existing NS-VC\n",
|
||||||
nsh->pdu_type, gprs_ns_ll_str(fallback_nsvc));
|
nsh->pdu_type, gprs_ns_ll_str(fallback_nsvc));
|
||||||
fallback_nsvc->nsvci = fallback_nsvc->nsei = 0xfffe;
|
fallback_nsvc->nsvci = fallback_nsvc->nsei = 0xfffe;
|
||||||
|
fallback_nsvc->nsvci_is_valid = 0;
|
||||||
fallback_nsvc->state = NSE_S_ALIVE;
|
fallback_nsvc->state = NSE_S_ALIVE;
|
||||||
|
|
||||||
rc = gprs_ns_tx_status(fallback_nsvc,
|
rc = gprs_ns_tx_status(fallback_nsvc,
|
||||||
|
@ -1057,18 +1226,7 @@ int gprs_ns_process_msg(struct gprs_ns_inst *nsi, struct msgb *msg,
|
||||||
rc = gprs_ns_rx_reset(nsvc, msg);
|
rc = gprs_ns_rx_reset(nsvc, msg);
|
||||||
break;
|
break;
|
||||||
case NS_PDUT_RESET_ACK:
|
case NS_PDUT_RESET_ACK:
|
||||||
LOGP(DNS, LOGL_INFO, "NSEI=%u Rx NS RESET ACK\n", (*nsvc)->nsei);
|
rc = gprs_ns_rx_reset_ack(nsvc, msg);
|
||||||
/* mark NS-VC as blocked + active */
|
|
||||||
(*nsvc)->state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
|
||||||
(*nsvc)->remote_state = NSE_S_BLOCKED | NSE_S_ALIVE;
|
|
||||||
rate_ctr_inc(&(*nsvc)->ctrg->ctr[NS_CTR_BLOCKED]);
|
|
||||||
if ((*nsvc)->persistent || (*nsvc)->remote_end_is_sgsn) {
|
|
||||||
/* stop RESET timer */
|
|
||||||
osmo_timer_del(&(*nsvc)->timer);
|
|
||||||
}
|
|
||||||
/* Initiate TEST proc.: Send ALIVE and start timer */
|
|
||||||
rc = gprs_ns_tx_simple(*nsvc, NS_PDUT_ALIVE);
|
|
||||||
nsvc_start_timer(*nsvc, NSVC_TIMER_TNS_TEST);
|
|
||||||
break;
|
break;
|
||||||
case NS_PDUT_UNBLOCK:
|
case NS_PDUT_UNBLOCK:
|
||||||
/* Section 7.2: unblocking procedure */
|
/* Section 7.2: unblocking procedure */
|
||||||
|
@ -1323,6 +1481,7 @@ struct gprs_nsvc *gprs_ns_nsip_connect(struct gprs_ns_inst *nsi,
|
||||||
nsvc->ip.bts_addr = *dest;
|
nsvc->ip.bts_addr = *dest;
|
||||||
nsvc->nsei = nsei;
|
nsvc->nsei = nsei;
|
||||||
nsvc->nsvci = nsvci;
|
nsvc->nsvci = nsvci;
|
||||||
|
nsvc->nsvci_is_valid = 1;
|
||||||
nsvc->remote_end_is_sgsn = 1;
|
nsvc->remote_end_is_sgsn = 1;
|
||||||
|
|
||||||
gprs_nsvc_reset(nsvc, NS_CAUSE_OM_INTERVENTION);
|
gprs_nsvc_reset(nsvc, NS_CAUSE_OM_INTERVENTION);
|
||||||
|
|
|
@ -357,6 +357,12 @@ static int test_signal(unsigned int subsys, unsigned int signal,
|
||||||
gprs_ns_ll_str(nssd->old_nsvc));
|
gprs_ns_ll_str(nssd->old_nsvc));
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case S_NS_MISMATCH:
|
||||||
|
printf("==> got signal NS_MISMATCH: 0x%04x/%s pdu=%d, ie=%d\n",
|
||||||
|
nssd->nsvc->nsvci, gprs_ns_ll_str(nssd->nsvc),
|
||||||
|
nssd->pdu_type, nssd->ie_type);
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
printf("==> got signal %d, NS-VC 0x%04x/%s\n", signal,
|
printf("==> got signal %d, NS-VC 0x%04x/%s\n", signal,
|
||||||
nssd->nsvc->nsvci,
|
nssd->nsvc->nsvci,
|
||||||
|
|
|
@ -196,7 +196,7 @@ PROCESSING RESET from 0x01020304:3333
|
||||||
==> got signal NS_REPLACED: 0x1122/1.2.3.4:4444 -> 0x3344/1.2.3.4:3333
|
==> got signal NS_REPLACED: 0x1122/1.2.3.4:4444 -> 0x3344/1.2.3.4:3333
|
||||||
==> got signal NS_RESET, NS-VC 0x1122/1.2.3.4:3333
|
==> got signal NS_RESET, NS-VC 0x1122/1.2.3.4:3333
|
||||||
MESSAGE to BSS, msg length 9
|
MESSAGE to BSS, msg length 9
|
||||||
03 01 82 11 22 04 82 11 22
|
03 01 82 11 22 04 82 33 44
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
MESSAGE to BSS, msg length 1
|
||||||
0a
|
0a
|
||||||
|
@ -205,9 +205,9 @@ result (RESET) = 9
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x3344, NSEI 0x1122, peer 0x00000000:0, blocked
|
VCI 0x3344, NSEI 0x1122, peer 0x00000000:0, blocked
|
||||||
VCI 0x1122, NSEI 0x1122, peer 0x01020304:3333, blocked
|
VCI 0x1122, NSEI 0x3344, peer 0x01020304:3333, blocked
|
||||||
NS-VC replaced other count: 1
|
NS-VC replaced other count: 1
|
||||||
NS-VC changed NSEI : 2
|
NS-VC changed NSEI : 1
|
||||||
|
|
||||||
--- Peer port 4444, RESET, NSEI is changed back ---
|
--- Peer port 4444, RESET, NSEI is changed back ---
|
||||||
|
|
||||||
|
@ -340,35 +340,21 @@ MESSAGE to BSS, msg length 12
|
||||||
PROCESSING RESET_ACK from 0x01020304:2222
|
PROCESSING RESET_ACK from 0x01020304:2222
|
||||||
03 01 82 10 01 04 82 10 00
|
03 01 82 10 01 04 82 10 00
|
||||||
|
|
||||||
|
==> got signal NS_REPLACED: 0x1001/1.2.3.4:1111 -> 0x2001/1.2.3.4:2222
|
||||||
MESSAGE to BSS, msg length 1
|
MESSAGE to BSS, msg length 1
|
||||||
0a
|
0a
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
result (RESET_ACK) = 1
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:2222, blocked
|
VCI 0x2001, NSEI 0x2000, peer 0x00000000:0
|
||||||
NS-VC Block count : 1
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:1111, blocked
|
NS-VC Block count : 2
|
||||||
NS-VC Block count : 1
|
NS-VC replaced other count: 1
|
||||||
|
|
||||||
--- Setup VC 2 SGSN -> BSS (hits NSEI 2) ---
|
--- Setup VC 2 SGSN -> BSS (hits NSEI 2) ---
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 12
|
Failed to send RESET to 0.0.0.0:0
|
||||||
02 00 81 01 01 82 20 01 04 82 20 00
|
|
||||||
|
|
||||||
PROCESSING RESET_ACK from 0x01020304:1111
|
|
||||||
03 01 82 20 01 04 82 20 00
|
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:2222, blocked
|
|
||||||
NS-VC Block count : 1
|
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:1111, blocked
|
|
||||||
NS-VC Block count : 2
|
|
||||||
|
|
||||||
--- Setup VC 1 SGSN -> BSS (hits NSEI 1) ---
|
--- Setup VC 1 SGSN -> BSS (hits NSEI 1) ---
|
||||||
|
|
||||||
|
@ -384,10 +370,10 @@ MESSAGE to BSS, msg length 1
|
||||||
result (RESET_ACK) = 1
|
result (RESET_ACK) = 1
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:2222, blocked
|
VCI 0x2001, NSEI 0x2000, peer 0x00000000:0
|
||||||
NS-VC Block count : 2
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:1111, blocked
|
NS-VC Block count : 3
|
||||||
NS-VC Block count : 2
|
NS-VC replaced other count: 1
|
||||||
|
|
||||||
--- Setup VC 2 BSS -> SGSN ---
|
--- Setup VC 2 BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -396,7 +382,6 @@ Setup NS-VC: remote 0x01020304:1111, NSVCI 0x2001(8193), NSEI 0x2000(8192)
|
||||||
PROCESSING RESET from 0x01020304:1111
|
PROCESSING RESET from 0x01020304:1111
|
||||||
02 00 81 01 01 82 20 01 04 82 20 00
|
02 00 81 01 01 82 20 01 04 82 20 00
|
||||||
|
|
||||||
==> got signal NS_REPLACED: 0x2001/1.2.3.4:2222 -> 0x1001/1.2.3.4:1111
|
|
||||||
==> got signal NS_RESET, NS-VC 0x2001/1.2.3.4:1111
|
==> got signal NS_RESET, NS-VC 0x2001/1.2.3.4:1111
|
||||||
MESSAGE to BSS, msg length 9
|
MESSAGE to BSS, msg length 9
|
||||||
03 01 82 20 01 04 82 20 00
|
03 01 82 20 01 04 82 20 00
|
||||||
|
@ -430,32 +415,27 @@ result (ALIVE_ACK) = 0
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
|
NS-VC Block count : 3
|
||||||
NS-VC replaced other count: 1
|
NS-VC replaced other count: 1
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x00000000:0, blocked
|
|
||||||
NS-VC Block count : 2
|
|
||||||
|
|
||||||
--- RESET with invalid NSEI, BSS -> SGSN ---
|
--- RESET with invalid NSEI, BSS -> SGSN ---
|
||||||
|
|
||||||
PROCESSING RESET from 0x01020304:2222
|
PROCESSING RESET from 0x01020304:2222
|
||||||
02 00 81 01 01 82 10 01 04 82 f0 00
|
02 00 81 01 01 82 10 01 04 82 f0 00
|
||||||
|
|
||||||
==> got signal NS_RESET, NS-VC 0x1001/1.2.3.4:2222
|
==> got signal NS_MISMATCH: 0x1001/1.2.3.4:2222 pdu=2, ie=4
|
||||||
MESSAGE to BSS, msg length 9
|
MESSAGE to BSS, msg length 9
|
||||||
03 01 82 10 01 04 82 f0 00
|
03 01 82 10 01 04 82 10 00
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
result (RESET) = 0
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET) = 9
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
|
NS-VC Block count : 3
|
||||||
NS-VC replaced other count: 1
|
NS-VC replaced other count: 1
|
||||||
VCI 0x1001, NSEI 0xf000, peer 0x01020304:2222, blocked
|
NSEI was invalid count : 1
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC changed NSEI : 1
|
|
||||||
|
|
||||||
--- RESET with invalid NSVCI, BSS -> SGSN ---
|
--- RESET with invalid NSVCI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -473,11 +453,10 @@ result (RESET) = 9
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC replaced other count: 1
|
|
||||||
VCI 0xf001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
VCI 0xf001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
NS-VC Block count : 2
|
NS-VC Block count : 3
|
||||||
NS-VC changed NSEI : 1
|
NS-VC replaced other count: 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- RESET with old NSEI, NSVCI, BSS -> SGSN ---
|
--- RESET with old NSEI, NSVCI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -495,29 +474,24 @@ result (RESET) = 9
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC replaced other count: 1
|
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
NS-VC Block count : 2
|
NS-VC Block count : 3
|
||||||
NS-VC changed NSEI : 1
|
NS-VC replaced other count: 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- Unexpected RESET_ACK VC 1, BSS -> SGSN ---
|
--- Unexpected RESET_ACK VC 1, BSS -> SGSN ---
|
||||||
|
|
||||||
PROCESSING RESET_ACK from 0x01020304:2222
|
PROCESSING RESET_ACK from 0x01020304:2222
|
||||||
03 01 82 10 01 04 82 10 00
|
03 01 82 10 01 04 82 10 00
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
result (RESET_ACK) = 0
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC replaced other count: 1
|
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
NS-VC Block count : 3
|
NS-VC Block count : 3
|
||||||
NS-VC changed NSEI : 1
|
NS-VC replaced other count: 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- RESET_ACK with invalid NSEI, BSS -> SGSN ---
|
--- RESET_ACK with invalid NSEI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -527,18 +501,15 @@ MESSAGE to BSS, msg length 12
|
||||||
PROCESSING RESET_ACK from 0x01020304:2222
|
PROCESSING RESET_ACK from 0x01020304:2222
|
||||||
03 01 82 10 01 04 82 f0 00
|
03 01 82 10 01 04 82 f0 00
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
==> got signal NS_MISMATCH: 0x1001/1.2.3.4:2222 pdu=3, ie=4
|
||||||
0a
|
result (RESET_ACK) = -22
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC replaced other count: 1
|
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
NS-VC Block count : 4
|
NS-VC Block count : 3
|
||||||
NS-VC changed NSEI : 1
|
NS-VC replaced other count: 1
|
||||||
|
NSEI was invalid count : 2
|
||||||
|
|
||||||
--- RESET_ACK with invalid NSVCI, BSS -> SGSN ---
|
--- RESET_ACK with invalid NSVCI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -548,18 +519,16 @@ MESSAGE to BSS, msg length 12
|
||||||
PROCESSING RESET_ACK from 0x01020304:2222
|
PROCESSING RESET_ACK from 0x01020304:2222
|
||||||
03 01 82 f0 01 04 82 10 00
|
03 01 82 f0 01 04 82 10 00
|
||||||
|
|
||||||
MESSAGE to BSS, msg length 1
|
==> got signal NS_MISMATCH: 0x1001/1.2.3.4:2222 pdu=3, ie=1
|
||||||
0a
|
result (RESET_ACK) = -22
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
VCI 0x2001, NSEI 0x2000, peer 0x01020304:1111
|
||||||
NS-VC Block count : 2
|
|
||||||
NS-VC replaced other count: 1
|
|
||||||
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
VCI 0x1001, NSEI 0x1000, peer 0x01020304:2222, blocked
|
||||||
NS-VC Block count : 5
|
NS-VC Block count : 3
|
||||||
NS-VC changed NSEI : 1
|
NS-VC replaced other count: 1
|
||||||
|
NS-VCI was invalid count : 1
|
||||||
|
NSEI was invalid count : 2
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
|
|
||||||
|
@ -617,36 +586,33 @@ Current NS-VCIs:
|
||||||
PROCESSING RESET from 0x05060708:32000
|
PROCESSING RESET from 0x05060708:32000
|
||||||
02 00 81 01 01 82 01 01 04 82 f0 00
|
02 00 81 01 01 82 01 01 04 82 f0 00
|
||||||
|
|
||||||
==> got signal NS_RESET, NS-VC 0x0101/5.6.7.8:32000
|
==> got signal NS_MISMATCH: 0x0101/5.6.7.8:32000 pdu=2, ie=4
|
||||||
MESSAGE to SGSN, msg length 9
|
MESSAGE to SGSN, msg length 9
|
||||||
03 01 82 01 01 04 82 f0 00
|
03 01 82 01 01 04 82 01 00
|
||||||
|
|
||||||
MESSAGE to SGSN, msg length 1
|
result (RESET) = 0
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET) = 9
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x0101, NSEI 0xf000, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 1
|
NS-VC Block count : 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- RESET with invalid NSVCI, SGSN -> BSS ---
|
--- RESET with invalid NSVCI, SGSN -> BSS ---
|
||||||
|
|
||||||
PROCESSING RESET from 0x05060708:32000
|
PROCESSING RESET from 0x05060708:32000
|
||||||
02 00 81 01 01 82 f0 01 04 82 01 00
|
02 00 81 01 01 82 f0 01 04 82 01 00
|
||||||
|
|
||||||
==> got signal NS_RESET, NS-VC 0xf001/5.6.7.8:32000
|
==> got signal NS_MISMATCH: 0x0101/5.6.7.8:32000 pdu=2, ie=1
|
||||||
MESSAGE to SGSN, msg length 9
|
MESSAGE to SGSN, msg length 9
|
||||||
03 01 82 f0 01 04 82 01 00
|
03 01 82 01 01 04 82 01 00
|
||||||
|
|
||||||
MESSAGE to SGSN, msg length 1
|
result (RESET) = 0
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET) = 9
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0xf001, NSEI 0x0100, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 1
|
NS-VC Block count : 1
|
||||||
|
NS-VCI was invalid count : 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- RESET, SGSN -> BSS ---
|
--- RESET, SGSN -> BSS ---
|
||||||
|
|
||||||
|
@ -665,20 +631,21 @@ result (RESET) = 9
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 1
|
NS-VC Block count : 1
|
||||||
|
NS-VCI was invalid count : 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- Unexpected RESET_ACK VC 1, BSS -> SGSN ---
|
--- Unexpected RESET_ACK VC 1, BSS -> SGSN ---
|
||||||
|
|
||||||
PROCESSING RESET_ACK from 0x05060708:32000
|
PROCESSING RESET_ACK from 0x05060708:32000
|
||||||
03 01 82 01 01 04 82 01 00
|
03 01 82 01 01 04 82 01 00
|
||||||
|
|
||||||
MESSAGE to SGSN, msg length 1
|
result (RESET_ACK) = 0
|
||||||
0a
|
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 2
|
NS-VC Block count : 1
|
||||||
|
NS-VCI was invalid count : 1
|
||||||
|
NSEI was invalid count : 1
|
||||||
|
|
||||||
--- RESET_ACK with invalid NSEI, BSS -> SGSN ---
|
--- RESET_ACK with invalid NSEI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -688,14 +655,14 @@ MESSAGE to SGSN, msg length 12
|
||||||
PROCESSING RESET_ACK from 0x05060708:32000
|
PROCESSING RESET_ACK from 0x05060708:32000
|
||||||
03 01 82 01 01 04 82 e0 00
|
03 01 82 01 01 04 82 e0 00
|
||||||
|
|
||||||
MESSAGE to SGSN, msg length 1
|
==> got signal NS_MISMATCH: 0x0101/5.6.7.8:32000 pdu=3, ie=4
|
||||||
0a
|
result (RESET_ACK) = -22
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 3
|
NS-VC Block count : 1
|
||||||
|
NS-VCI was invalid count : 1
|
||||||
|
NSEI was invalid count : 2
|
||||||
|
|
||||||
--- RESET_ACK with invalid NSVCI, BSS -> SGSN ---
|
--- RESET_ACK with invalid NSVCI, BSS -> SGSN ---
|
||||||
|
|
||||||
|
@ -705,14 +672,14 @@ MESSAGE to SGSN, msg length 12
|
||||||
PROCESSING RESET_ACK from 0x05060708:32000
|
PROCESSING RESET_ACK from 0x05060708:32000
|
||||||
03 01 82 e0 01 04 82 01 00
|
03 01 82 e0 01 04 82 01 00
|
||||||
|
|
||||||
MESSAGE to SGSN, msg length 1
|
==> got signal NS_MISMATCH: 0x0101/5.6.7.8:32000 pdu=3, ie=1
|
||||||
0a
|
result (RESET_ACK) = -22
|
||||||
|
|
||||||
result (RESET_ACK) = 1
|
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
VCI 0x0101, NSEI 0x0100, peer 0x05060708:32000, blocked
|
||||||
NS-VC Block count : 4
|
NS-VC Block count : 1
|
||||||
|
NS-VCI was invalid count : 2
|
||||||
|
NSEI was invalid count : 2
|
||||||
|
|
||||||
Current NS-VCIs:
|
Current NS-VCIs:
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue