From: Max msuraev@sysmocom.de
Print string representation of Cause IE and PDU type in addition to numerical value. --- src/gb/gprs_bssgp.c | 28 ++++++++++++++-------------- src/gb/gprs_bssgp_bss.c | 6 +++--- 2 files changed, 17 insertions(+), 17 deletions(-)
diff --git a/src/gb/gprs_bssgp.c b/src/gb/gprs_bssgp.c index e3e69c9..e724d00 100644 --- a/src/gb/gprs_bssgp.c +++ b/src/gb/gprs_bssgp.c @@ -896,8 +896,8 @@ static int bssgp_rx_ptp(struct msgb *msg, struct tlv_parsed *tp, case BSSGP_PDUT_CREATE_BSS_PFC_NACK: case BSSGP_PDUT_MODIFY_BSS_PFC: case BSSGP_PDUT_DELETE_BSS_PFC_ACK: - DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type 0x%02x not [yet] " - "implemented\n", bctx->bvci, pdu_type); + DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type %s not [yet] " + "implemented\n", bctx->bvci, bssgp_pdu_str(pdu_type)); rc = bssgp_tx_status(BSSGP_CAUSE_PDU_INCOMP_FEAT, NULL, msg); break; /* those only exist in the SGSN -> BSS direction */ @@ -907,14 +907,14 @@ static int bssgp_rx_ptp(struct msgb *msg, struct tlv_parsed *tp, case BSSGP_PDUT_RA_CAPA_UPDATE_ACK: case BSSGP_PDUT_FLOW_CONTROL_BVC_ACK: case BSSGP_PDUT_FLOW_CONTROL_MS_ACK: - DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x only exists " - "in DL\n", bctx->bvci, pdu_type); + DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x (%s) only exists " + "in DL\n", bctx->bvci, pdu_type, bssgp_pdu_str(pdu_type)); bssgp_tx_status(BSSGP_CAUSE_PROTO_ERR_UNSPEC, NULL, msg); rc = -EINVAL; break; default: - DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x unknown\n", - bctx->bvci, pdu_type); + DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x (%s) unknown\n", + bctx->bvci, pdu_type, bssgp_pdu_str(pdu_type)); rc = bssgp_tx_status(BSSGP_CAUSE_PROTO_ERR_UNSPEC, NULL, msg); break; } @@ -999,14 +999,14 @@ static int bssgp_rx_sign(struct msgb *msg, struct tlv_parsed *tp, case BSSGP_PDUT_BVC_BLOCK_ACK: case BSSGP_PDUT_BVC_UNBLOCK_ACK: case BSSGP_PDUT_SGSN_INVOKE_TRACE: - DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type 0x%02x only exists " - "in DL\n", bvci, pdu_type); + DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type 0x%02x (%s) only exists " + "in DL\n", bvci, pdu_type, bssgp_pdu_str(pdu_type)); bssgp_tx_status(BSSGP_CAUSE_PROTO_ERR_UNSPEC, NULL, msg); rc = -EINVAL; break; default: - DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type 0x%02x unknown\n", - bvci, pdu_type); + DEBUGP(DBSSGP, "BSSGP BVCI=%u Rx PDU type 0x%02x (%s) unknown\n", + bvci, pdu_type, bssgp_pdu_str(pdu_type)); rc = bssgp_tx_status(BSSGP_CAUSE_PROTO_ERR_UNSPEC, NULL, msg); break; } @@ -1066,8 +1066,8 @@ int bssgp_rcvmsg(struct msgb *msg) if (!bctx && bvci != BVCI_SIGNALLING && pdu_type != BSSGP_PDUT_BVC_RESET) { LOGP(DBSSGP, LOGL_NOTICE, "NSEI=%u/BVCI=%u Rejecting PDU " - "type %u for unknown BVCI\n", msgb_nsei(msg), bvci, - pdu_type); + "type %u (%s) for unknown BVCI\n", msgb_nsei(msg), bvci, + pdu_type, bssgp_pdu_str(pdu_type)); return bssgp_tx_status(BSSGP_CAUSE_UNKNOWN_BVCI, &bvci, msg); }
@@ -1079,9 +1079,9 @@ int bssgp_rcvmsg(struct msgb *msg) rc = bssgp_rx_ptp(msg, &tp, bctx); else LOGP(DBSSGP, LOGL_NOTICE, - "NSEI=%u/BVCI=%u Cannot handle PDU type %u for " + "NSEI=%u/BVCI=%u Cannot handle PDU type %u (%s) for " "unknown BVCI, NS BVCI %u\n", - msgb_nsei(msg), bvci, pdu_type, ns_bvci); + msgb_nsei(msg), bvci, pdu_type, bssgp_pdu_str(pdu_type), ns_bvci);
return rc; } diff --git a/src/gb/gprs_bssgp_bss.c b/src/gb/gprs_bssgp_bss.c index 3a9012e..955e2b4 100644 --- a/src/gb/gprs_bssgp_bss.c +++ b/src/gb/gprs_bssgp_bss.c @@ -135,7 +135,7 @@ static struct msgb *common_tx_radio_status(struct bssgp_bvc_ctx *bctx) static int common_tx_radio_status2(struct msgb *msg, uint8_t cause) { msgb_tvlv_put(msg, BSSGP_IE_CAUSE, 1, &cause); - LOGPC(DBSSGP, LOGL_NOTICE, "CAUSE=%u\n", cause); + LOGPC(DBSSGP, LOGL_NOTICE, "CAUSE=%u (%s)\n", cause, bssgp_cause_str(cause));
return gprs_ns_sendmsg(bssgp_nsi, msg); } @@ -247,7 +247,7 @@ int bssgp_tx_bvc_block(struct bssgp_bvc_ctx *bctx, uint8_t cause) uint16_t _bvci = htons(bctx->bvci);
LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-BLOCK " - "CAUSE=%u\n", bctx->bvci, cause); + "CAUSE=%u (%s)\n", bctx->bvci, cause, bssgp_cause_str(cause));
msgb_nsei(msg) = bctx->nsei; msgb_bvci(msg) = 0; /* Signalling */ @@ -287,7 +287,7 @@ int bssgp_tx_bvc_reset(struct bssgp_bvc_ctx *bctx, uint16_t bvci, uint8_t cause) uint16_t _bvci = htons(bvci);
LOGP(DBSSGP, LOGL_NOTICE, "BSSGP (BVCI=%u) Tx BVC-RESET " - "CAUSE=%u\n", bvci, cause); + "CAUSE=%u (%s)\n", bvci, cause, bssgp_cause_str(cause));
msgb_nsei(msg) = bctx->nsei; msgb_bvci(msg) = 0; /* Signalling */
From: Max msuraev@sysmocom.de
It's useful for debugging and is similar to existing nsvc reset vty command. --- src/gb/gprs_bssgp_vty.c | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+)
diff --git a/src/gb/gprs_bssgp_vty.c b/src/gb/gprs_bssgp_vty.c index 080867b..2725d1f 100644 --- a/src/gb/gprs_bssgp_vty.c +++ b/src/gb/gprs_bssgp_vty.c @@ -33,6 +33,7 @@ #include <osmocom/core/rate_ctr.h> #include <osmocom/gprs/gprs_ns.h> #include <osmocom/gprs/gprs_bssgp.h> +#include <osmocom/gprs/gprs_bssgp_bss.h>
#include <osmocom/vty/vty.h> #include <osmocom/vty/command.h> @@ -113,6 +114,31 @@ static void dump_bssgp(struct vty *vty, int stats) } }
+DEFUN(bvc_reset, bvc_reset_cmd, + "bvc reset nsei <0-65535> bvci <0-65535>", + "Initiate BVC RESET procedure for a given NSEI and BVCI\n") +{ + uint16_t nsei = atoi(argv[0]), bvci = atoi(argv[1]); + struct bssgp_bvc_ctx *bvc; + + if (!strcmp(argv[0], "reset")) + return CMD_WARNING; + + if (argc != 2) + return CMD_WARNING; + + bvc = btsctx_by_bvci_nsei(bvci, nsei); + if (!bvc) { + vty_out(vty, "No BVC for NSEI %d BVCI %d%s", nsei, bvci, + VTY_NEWLINE); + return CMD_WARNING; + } + int r = bssgp_tx_bvc_reset(bvc, bvci, BSSGP_CAUSE_OML_INTERV); + vty_out(vty, "Sent BVC RESET for NSEI %d BVCI %d: %d%s", nsei, bvci, r, + VTY_NEWLINE); + return CMD_SUCCESS; +} + #define BSSGP_STR "Show information about the BSSGP protocol\n"
DEFUN(show_bssgp, show_bssgp_cmd, "show bssgp", @@ -185,6 +211,7 @@ int bssgp_vty_init(void) install_element_ve(&show_bssgp_stats_cmd); install_element_ve(&show_bvc_cmd); install_element_ve(&logging_fltr_bvc_cmd); + install_element_ve(&bvc_reset_cmd);
install_element(CFG_LOG_NODE, &logging_fltr_bvc_cmd);
Hi Max,
On Mon, Mar 14, 2016 at 06:27:54PM +0100, msuraev@sysmocom.de wrote:
DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x only exists "
"in DL\n", bctx->bvci, pdu_type);
DEBUGP(DBSSGP, "BSSGP BVCI=%u PDU type 0x%02x (%s) only exists "
"in DL\n", bctx->bvci, pdu_type, bssgp_pdu_str(pdu_type));
Sorry, but did you read my last feedback? There are still lots of places where you print the 0x%02x _and_ the value_string...
On 14 Mar 2016, at 18:27, msuraev@sysmocom.de wrote:
From: Max msuraev@sysmocom.de
Print string representation of Cause IE and PDU type in addition to numerical value.
and this has no test output change?
holger
The "make check" passes just fine in libosmocore so I think it's not used by tests.
On 03/14/2016 07:06 PM, Holger Freyther wrote:
On 14 Mar 2016, at 18:27, msuraev@sysmocom.de wrote:
From: Max msuraev@sysmocom.de
Print string representation of Cause IE and PDU type in addition to numerical value.
and this has no test output change?
holger