diff options
author | Harald Welte <laforge@gnumonks.org> | 2018-02-09 01:49:01 +0100 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2018-02-09 02:22:22 +0100 |
commit | 1f477442dd508a01d8d6bc64e9ed593ba5fddb3f (patch) | |
tree | ee45c73c3e4a44393f8bc5e7e26a773f5b1f3314 | |
parent | c9e785931113483f4a1588bc9136e96ca36a629b (diff) |
Introduce new BSSAP logging category/subsystem
Having all BSSAP related logs in the "DMSC" category is overly
generic, and dosn't provide useful granularity.
Change-Id: Id1e52dad03840dfd026fb23f3845a8771c8cc308
-rw-r--r-- | include/osmocom/msc/a_iface.h | 4 | ||||
-rw-r--r-- | include/osmocom/msc/debug.h | 1 | ||||
-rw-r--r-- | src/libcommon/debug.c | 6 | ||||
-rw-r--r-- | src/libmsc/a_iface.c | 38 | ||||
-rw-r--r-- | src/libmsc/a_iface_bssap.c | 42 |
5 files changed, 49 insertions, 42 deletions
diff --git a/include/osmocom/msc/a_iface.h b/include/osmocom/msc/a_iface.h index 9133e1b6b..3098b514d 100644 --- a/include/osmocom/msc/a_iface.h +++ b/include/osmocom/msc/a_iface.h @@ -26,12 +26,12 @@ #include <osmocom/gsm/protocol/gsm_08_08.h> #define LOGPCONN(conn, level, fmt, args...) \ - LOGP(DMSC, level, "(subscr %s, conn_id %d) " fmt, \ + LOGP(DBSSAP, level, "(subscr %s, conn_id %d) " fmt, \ vlr_subscr_name(conn ? conn->vsub : NULL), conn ? conn->a.conn_id : -1, \ ## args) #define LOGPBSCCONN(conn, level, fmt, args...) \ - LOGP(DMSC, level, "(conn_id %u) " fmt, conn ? conn->conn_id : (uint32_t)(-1), ## args) + LOGP(DBSSAP, level, "(conn_id %u) " fmt, conn ? conn->conn_id : (uint32_t)(-1), ## args) /* A struct to keep a context information about the BSCs we are associated with */ struct bsc_context { diff --git a/include/osmocom/msc/debug.h b/include/osmocom/msc/debug.h index f99dba57b..384453e78 100644 --- a/include/osmocom/msc/debug.h +++ b/include/osmocom/msc/debug.h @@ -24,6 +24,7 @@ enum { DRANAP, DVLR, DIUCS, + DBSSAP, Debug_LastEntry, }; diff --git a/src/libcommon/debug.c b/src/libcommon/debug.c index 8c0e7875e..fbdab8020 100644 --- a/src/libcommon/debug.c +++ b/src/libcommon/debug.c @@ -122,6 +122,12 @@ static const struct log_info_cat default_categories[] = { .description = "Iu-CS Protocol", .enabled = 1, .loglevel = LOGL_DEBUG, }, + [DBSSAP] = { + .name = "DBSSAP", + .description = "BSSAP Protocol (A Interface)", + .enabled = 1, .loglevel = LOGL_NOTICE, + }, + }; static int filter_fn(const struct log_context *ctx, struct log_target *tar) diff --git a/src/libmsc/a_iface.c b/src/libmsc/a_iface.c index 5605ad1a6..e2fe3c6b9 100644 --- a/src/libmsc/a_iface.c +++ b/src/libmsc/a_iface.c @@ -134,7 +134,7 @@ static struct bsc_context *get_bsc_context_by_sccp_addr(const struct osmo_sccp_a ss7 = osmo_ss7_instance_find(gsm_network->a.cs7_instance); OSMO_ASSERT(ss7); - LOGP(DMSC, LOGL_NOTICE, "The calling BSC (%s) is unknown to this MSC ...\n", + LOGP(DBSSAP, LOGL_NOTICE, "The calling BSC (%s) is unknown to this MSC ...\n", osmo_sccp_addr_name(ss7, addr)); return NULL; } @@ -182,7 +182,7 @@ int a_iface_tx_cipher_mode(const struct gsm_subscriber_connection *conn, OSMO_ASSERT(conn); LOGPCONN(conn, LOGL_DEBUG, "Tx BSSMAP CIPHER MODE COMMAND to BSC, %u ciphers (%s)", ei->perm_algo_len, osmo_hexdump_nospc(ei->perm_algo, ei->perm_algo_len)); - LOGPC(DMSC, LOGL_DEBUG, " key %s\n", osmo_hexdump_nospc(ei->key, ei->key_len)); + LOGPC(DBSSAP, LOGL_DEBUG, " key %s\n", osmo_hexdump_nospc(ei->key, ei->key_len)); msg_resp = gsm0808_create_cipher(ei, include_imeisv ? &crm : NULL); LOGPCONN(conn, LOGL_DEBUG, "N-DATA.req(%s)\n", msgb_hexdump_l2(msg_resp)); @@ -211,7 +211,7 @@ int a_iface_tx_paging(const char *imsi, uint32_t tmsi, uint16_t lac) /* Deliver paging request to all known BSCs */ llist_for_each_entry(bsc_ctx, &gsm_network->a.bscs, list) { if (a_reset_conn_ready(bsc_ctx->reset)) { - LOGP(DMSC, LOGL_DEBUG, + LOGP(DBSSAP, LOGL_DEBUG, "Tx BSSMAP paging message from MSC %s to BSC %s (imsi=%s, tmsi=0x%08x, lac=%u)\n", osmo_sccp_addr_name(ss7, &bsc_ctx->msc_addr), osmo_sccp_addr_name(ss7, &bsc_ctx->bsc_addr), imsi, tmsi, lac); @@ -220,7 +220,7 @@ int a_iface_tx_paging(const char *imsi, uint32_t tmsi, uint16_t lac) &bsc_ctx->msc_addr, &bsc_ctx->bsc_addr, msg); page_count++; } else { - LOGP(DMSC, LOGL_DEBUG, + LOGP(DBSSAP, LOGL_DEBUG, "Connection down, dropping paging from MSC %s to BSC %s (imsi=%s, tmsi=0x%08x, lac=%u)\n", osmo_sccp_addr_name(ss7, &bsc_ctx->msc_addr), osmo_sccp_addr_name(ss7, &bsc_ctx->bsc_addr), imsi, tmsi, lac); @@ -228,7 +228,7 @@ int a_iface_tx_paging(const char *imsi, uint32_t tmsi, uint16_t lac) } if (page_count <= 0) - LOGP(DMSC, LOGL_ERROR, "Could not deliver paging because none of the associated BSCs is available!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Could not deliver paging because none of the associated BSCs is available!\n"); return page_count; } @@ -265,7 +265,7 @@ static uint8_t convert_Abis_sv_to_A_sv(int speech_ver) } /* If nothing matches, tag the result as invalid */ - LOGP(DMSC, LOGL_ERROR, "Invalid permitted speech version: %d\n", speech_ver); + LOGP(DBSSAP, LOGL_ERROR, "Invalid permitted speech version: %d\n", speech_ver); return 0xFF; } @@ -288,7 +288,7 @@ static uint8_t convert_Abis_prev_to_A_pref(int radio) return GSM0808_SPEECH_HALF_PREF; } - LOGP(DMSC, LOGL_ERROR, "Invalid radio channel preference: %d; defaulting to full rate.\n", + LOGP(DBSSAP, LOGL_ERROR, "Invalid radio channel preference: %d; defaulting to full rate.\n", radio); return GSM0808_SPEECH_FULL_BM; } @@ -440,7 +440,7 @@ static void a_reset_cb(const void *priv) /* Send reset to the remote BSC */ ss7 = osmo_ss7_instance_find(gsm_network->a.cs7_instance); OSMO_ASSERT(ss7); - LOGP(DMSC, LOGL_NOTICE, "Tx BSSMAP RESET to BSC %s\n", osmo_sccp_addr_name(ss7, &bsc_ctx->bsc_addr)); + LOGP(DBSSAP, LOGL_NOTICE, "Tx BSSMAP RESET to BSC %s\n", osmo_sccp_addr_name(ss7, &bsc_ctx->bsc_addr)); msg = gsm0808_create_reset(); osmo_sccp_tx_unitdata_msg(bsc_ctx->sccp_user, &bsc_ctx->msc_addr, &bsc_ctx->bsc_addr, msg); @@ -455,7 +455,7 @@ static struct bsc_context *add_bsc(const struct osmo_sccp_addr *msc_addr, ss7 = osmo_ss7_instance_find(gsm_network->a.cs7_instance); OSMO_ASSERT(ss7); - LOGP(DMSC, LOGL_NOTICE, "Adding new BSC connection for BSC %s...\n", osmo_sccp_addr_name(ss7, bsc_addr)); + LOGP(DBSSAP, LOGL_NOTICE, "Adding new BSC connection for BSC %s...\n", osmo_sccp_addr_name(ss7, bsc_addr)); /* Generate and fill up a new bsc context */ bsc_ctx = talloc_zero(gsm_network, struct bsc_context); @@ -520,7 +520,7 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) } else { /* This BSC is already known to us, check if we have been through reset yet */ if (a_reset_conn_ready(a_conn_info.bsc->reset) == false) { - LOGP(DMSC, LOGL_NOTICE, "Refusing N-CONNECT.ind(%u, %s), BSC not reset yet\n", + LOGP(DBSSAP, LOGL_NOTICE, "Refusing N-CONNECT.ind(%u, %s), BSC not reset yet\n", scu_prim->u.connect.conn_id, msgb_hexdump_l2(oph->msg)); rc = osmo_sccp_tx_disconn(scu, a_conn_info.conn_id, &a_conn_info.bsc->msc_addr, SCCP_RETURN_CAUSE_UNQUALIFIED); @@ -529,11 +529,11 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) osmo_sccp_tx_conn_resp(scu, scu_prim->u.connect.conn_id, &scu_prim->u.connect.called_addr, NULL, 0); if (msgb_l2len(oph->msg) > 0) { - LOGP(DMSC, LOGL_DEBUG, "N-CONNECT.ind(%u, %s)\n", + LOGP(DBSSAP, LOGL_DEBUG, "N-CONNECT.ind(%u, %s)\n", scu_prim->u.connect.conn_id, msgb_hexdump_l2(oph->msg)); rc = a_sccp_rx_dt(scu, &a_conn_info, oph->msg); } else - LOGP(DMSC, LOGL_DEBUG, "N-CONNECT.ind(%u)\n", scu_prim->u.connect.conn_id); + LOGP(DBSSAP, LOGL_DEBUG, "N-CONNECT.ind(%u)\n", scu_prim->u.connect.conn_id); record_bsc_con(scu, a_conn_info.bsc, scu_prim->u.connect.conn_id); } @@ -543,13 +543,13 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) /* Handle incoming connection oriented data */ bsc_con = find_bsc_con(scu_prim->u.data.conn_id); if (!bsc_con) { - LOGP(DMSC, LOGL_ERROR, "N-DATA.ind(%u, %s) for unknown conn_id\n", + LOGP(DBSSAP, LOGL_ERROR, "N-DATA.ind(%u, %s) for unknown conn_id\n", scu_prim->u.data.conn_id, msgb_hexdump_l2(oph->msg)); break; } a_conn_info.conn_id = scu_prim->u.data.conn_id; a_conn_info.bsc = bsc_con->bsc; - LOGP(DMSC, LOGL_DEBUG, "N-DATA.ind(%u, %s)\n", + LOGP(DBSSAP, LOGL_DEBUG, "N-DATA.ind(%u, %s)\n", scu_prim->u.data.conn_id, msgb_hexdump_l2(oph->msg)); a_sccp_rx_dt(scu, &a_conn_info, oph->msg); break; @@ -563,7 +563,7 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) &scu_prim->u.unitdata.calling_addr, scu); /* if this not an inbound RESET, trigger an outbound RESET */ if (!bssmap_is_reset(oph->msg)) { - LOGP(DMSC, LOGL_NOTICE, "Ignoring N-UNITDATA.ind(%s), BSC not reset yet\n", + LOGP(DBSSAP, LOGL_NOTICE, "Ignoring N-UNITDATA.ind(%s), BSC not reset yet\n", msgb_hexdump_l2(oph->msg)); a_start_reset(a_conn_info.bsc, false); break; @@ -571,17 +571,17 @@ static int sccp_sap_up(struct osmo_prim_hdr *oph, void *_scu) } else { /* This BSC is already known to us, check if we have been through reset yet */ if (a_reset_conn_ready(a_conn_info.bsc->reset) == false) { - LOGP(DMSC, LOGL_NOTICE, "Ignoring N-UNITDATA.ind(%s), BSC not reset yet\n", + LOGP(DBSSAP, LOGL_NOTICE, "Ignoring N-UNITDATA.ind(%s), BSC not reset yet\n", msgb_hexdump_l2(oph->msg)); break; } } - DEBUGP(DMSC, "N-UNITDATA.ind(%s)\n", msgb_hexdump_l2(oph->msg)); + DEBUGP(DBSSAP, "N-UNITDATA.ind(%s)\n", msgb_hexdump_l2(oph->msg)); a_sccp_rx_udt(scu, &a_conn_info, oph->msg); break; default: - LOGP(DMSC, LOGL_ERROR, "Unhandled SIGTRAN operation %s on primitive %u\n", + LOGP(DBSSAP, LOGL_ERROR, "Unhandled SIGTRAN operation %s on primitive %u\n", get_value_string(osmo_prim_op_names, oph->operation), oph->primitive); break; } @@ -623,7 +623,7 @@ int a_init(struct osmo_sccp_instance *sccp, struct gsm_network *network) OSMO_ASSERT(network); /* FIXME: Remove hardcoded parameters, use parameters in parameter list */ - LOGP(DMSC, LOGL_NOTICE, "Initalizing SCCP connection to stp...\n"); + LOGP(DBSSAP, LOGL_NOTICE, "Initalizing SCCP connection to stp...\n"); /* Set GSM network variable, there can only be * one network by design */ diff --git a/src/libmsc/a_iface_bssap.c b/src/libmsc/a_iface_bssap.c index 61e1d4ec6..01cb71d85 100644 --- a/src/libmsc/a_iface_bssap.c +++ b/src/libmsc/a_iface_bssap.c @@ -111,7 +111,7 @@ static void bssmap_rx_reset(struct osmo_sccp_user *scu, const struct a_conn_info ss7 = osmo_ss7_instance_find(network->a.cs7_instance); OSMO_ASSERT(ss7); - LOGP(DMSC, LOGL_NOTICE, "Rx BSSMAP RESET from BSC %s, sending RESET ACK\n", + LOGP(DBSSAP, LOGL_NOTICE, "Rx BSSMAP RESET from BSC %s, sending RESET ACK\n", osmo_sccp_addr_name(ss7, &a_conn_info->bsc->bsc_addr)); osmo_sccp_tx_unitdata_msg(scu, &a_conn_info->bsc->msc_addr, &a_conn_info->bsc->bsc_addr, gsm0808_create_reset_ack()); @@ -137,12 +137,12 @@ static void bssmap_rx_reset_ack(const struct osmo_sccp_user *scu, const struct a OSMO_ASSERT(ss7); if (a_conn_info->bsc->reset == NULL) { - LOGP(DMSC, LOGL_ERROR, "Received RESET ACK from an unknown BSC %s, ignoring...\n", + LOGP(DBSSAP, LOGL_ERROR, "Received RESET ACK from an unknown BSC %s, ignoring...\n", osmo_sccp_addr_name(ss7, &a_conn_info->bsc->bsc_addr)); goto fail; } - LOGP(DMSC, LOGL_NOTICE, "Received RESET ACK from BSC %s\n", + LOGP(DBSSAP, LOGL_NOTICE, "Received RESET ACK from BSC %s\n", osmo_sccp_addr_name(ss7, &a_conn_info->bsc->bsc_addr)); /* Confirm that we managed to get the reset ack message @@ -160,12 +160,12 @@ static void bssmap_rcvmsg_udt(struct osmo_sccp_user *scu, const struct a_conn_in * can be received via UNITDATA */ if (msgb_l3len(msg) < 1) { - LOGP(DMSC, LOGL_NOTICE, "Error: No data received -- discarding message!\n"); + LOGP(DBSSAP, LOGL_NOTICE, "Error: No data received -- discarding message!\n"); msgb_free(msg); return; } - LOGP(DMSC, LOGL_DEBUG, "Rx BSSMAP UDT %s\n", gsm0808_bssmap_name(msg->l3h[0])); + LOGP(DBSSAP, LOGL_DEBUG, "Rx BSSMAP UDT %s\n", gsm0808_bssmap_name(msg->l3h[0])); switch (msg->l3h[0]) { case BSS_MAP_MSG_RESET: @@ -175,7 +175,7 @@ static void bssmap_rcvmsg_udt(struct osmo_sccp_user *scu, const struct a_conn_in bssmap_rx_reset_ack(scu, a_conn_info, msg); break; default: - LOGP(DMSC, LOGL_NOTICE, "Unimplemented message format: %s -- message discarded!\n", + LOGP(DBSSAP, LOGL_NOTICE, "Unimplemented message format: %s -- message discarded!\n", gsm0808_bssmap_name(msg->l3h[0])); msgb_free(msg); } @@ -192,17 +192,17 @@ void a_sccp_rx_udt(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_ OSMO_ASSERT(a_conn_info); OSMO_ASSERT(msg); - LOGP(DMSC, LOGL_DEBUG, "Rx BSSMAP UDT: %s\n", msgb_hexdump_l2(msg)); + LOGP(DBSSAP, LOGL_DEBUG, "Rx BSSMAP UDT: %s\n", msgb_hexdump_l2(msg)); if (msgb_l2len(msg) < sizeof(*bs)) { - LOGP(DMSC, LOGL_ERROR, "Error: Header is too short -- discarding message!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Error: Header is too short -- discarding message!\n"); msgb_free(msg); return; } bs = (struct bssmap_header *)msgb_l2(msg); if (bs->length < msgb_l2len(msg) - sizeof(*bs)) { - LOGP(DMSC, LOGL_ERROR, "Error: Message is too short -- discarding message!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Error: Message is too short -- discarding message!\n"); msgb_free(msg); return; } @@ -213,7 +213,7 @@ void a_sccp_rx_udt(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_ bssmap_rcvmsg_udt(scu, a_conn_info, msg); break; default: - LOGP(DMSC, LOGL_ERROR, + LOGP(DBSSAP, LOGL_ERROR, "Error: Unimplemented message type: %s -- message discarded!\n", gsm0808_bssmap_name(bs->type)); msgb_free(msg); } @@ -235,7 +235,7 @@ static int bssmap_rx_clear_rqst(struct gsm_subscriber_connection *conn, struct m tlv_parse(&tp, gsm0808_att_tlvdef(), msg->l3h + 1, msgb_l3len(msg) - 1, 0, 0); if (!TLVP_PRESENT(&tp, GSM0808_IE_CAUSE)) { - LOGP(DMSC, LOGL_ERROR, "Cause code is missing -- discarding message!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Cause code is missing -- discarding message!\n"); goto fail; } cause = TLVP_VAL(&tp, GSM0808_IE_CAUSE)[0]; @@ -289,15 +289,15 @@ static int bssmap_rx_l3_compl(struct osmo_sccp_user *scu, const struct a_conn_in struct gsm_network *network = a_conn_info->network; struct gsm_subscriber_connection *conn; - LOGP(DMSC, LOGL_INFO, "Rx BSSMAP COMPLETE L3 INFO (conn_id=%i)\n", a_conn_info->conn_id); + LOGP(DBSSAP, LOGL_INFO, "Rx BSSMAP COMPLETE L3 INFO (conn_id=%i)\n", a_conn_info->conn_id); tlv_parse(&tp, gsm0808_att_tlvdef(), msg->l3h + 1, msgb_l3len(msg) - 1, 0, 0); if (!TLVP_PRESENT(&tp, GSM0808_IE_CELL_IDENTIFIER)) { - LOGP(DMSC, LOGL_ERROR, "Mandatory CELL IDENTIFIER not present -- discarding message!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Mandatory CELL IDENTIFIER not present -- discarding message!\n"); goto fail; } if (!TLVP_PRESENT(&tp, GSM0808_IE_LAYER_3_INFORMATION)) { - LOGP(DMSC, LOGL_ERROR, "Mandatory LAYER 3 INFORMATION not present -- discarding message!\n"); + LOGP(DBSSAP, LOGL_ERROR, "Mandatory LAYER 3 INFORMATION not present -- discarding message!\n"); goto fail; } @@ -308,18 +308,18 @@ static int bssmap_rx_l3_compl(struct osmo_sccp_user *scu, const struct a_conn_in data_length = TLVP_LEN(&tp, GSM0808_IE_CELL_IDENTIFIER); data = TLVP_VAL(&tp, GSM0808_IE_CELL_IDENTIFIER); if (sizeof(lai_ci) != data_length) { - LOGP(DMSC, LOGL_ERROR, + LOGP(DBSSAP, LOGL_ERROR, "Unable to parse element CELL IDENTIFIER (wrong field length) -- discarding message!\n"); goto fail; } memcpy(&lai_ci, data, sizeof(lai_ci)); if (lai_ci.ident != CELL_IDENT_WHOLE_GLOBAL) { - LOGP(DMSC, LOGL_ERROR, + LOGP(DBSSAP, LOGL_ERROR, "Unable to parse element CELL IDENTIFIER (wrong cell identification discriminator) -- discarding message!\n"); goto fail; } if (gsm48_decode_lai(&lai_ci.lai, &mcc, &mnc, &lac) != 0) { - LOGP(DMSC, LOGL_ERROR, + LOGP(DBSSAP, LOGL_ERROR, "Unable to parse element CELL IDENTIFIER (lai decoding failed) -- discarding message!\n"); goto fail; } @@ -580,7 +580,7 @@ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_con struct gsm_subscriber_connection *conn; if (msgb_l3len(msg) < 1) { - LOGP(DMSC, LOGL_NOTICE, "Error: No data received -- discarding message!\n"); + LOGP(DBSSAP, LOGL_NOTICE, "Error: No data received -- discarding message!\n"); msgb_free(msg); return -1; } @@ -597,7 +597,7 @@ static int rx_bssmap(struct osmo_sccp_user *scu, const struct a_conn_info *a_con conn = subscr_conn_lookup_a(a_conn_info->network, a_conn_info->conn_id); if (!conn) { - LOGP(DMSC, LOGL_ERROR, "Couldn't find subscr_conn for conn_id=%d\n", a_conn_info->conn_id); + LOGP(DBSSAP, LOGL_ERROR, "Couldn't find subscr_conn for conn_id=%d\n", a_conn_info->conn_id); msgb_free(msg); return -EINVAL; } @@ -660,7 +660,7 @@ int a_sccp_rx_dt(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_in OSMO_ASSERT(msg); if (msgb_l2len(msg) < sizeof(struct bssmap_header)) { - LOGP(DMSC, LOGL_NOTICE, "The header is too short -- discarding message!\n"); + LOGP(DBSSAP, LOGL_NOTICE, "The header is too short -- discarding message!\n"); msgb_free(msg); return -EINVAL; } @@ -672,7 +672,7 @@ int a_sccp_rx_dt(struct osmo_sccp_user *scu, const struct a_conn_info *a_conn_in case BSSAP_MSG_DTAP: return rx_dtap(scu, a_conn_info, msg); default: - LOGP(DMSC, LOGL_ERROR, "Unimplemented BSSAP msg type: %s\n", gsm0808_bssap_name(msg->l2h[0])); + LOGP(DBSSAP, LOGL_ERROR, "Unimplemented BSSAP msg type: %s\n", gsm0808_bssap_name(msg->l2h[0])); msgb_free(msg); return -EINVAL; } |