Log AGCH and PCH blocks using GSMTAP
Change-Id: I4d62f98801af1b0a290d3dd35bd213ccf3151035
This commit is contained in:
parent
1ec211f57f
commit
58543709e4
|
@ -58,6 +58,8 @@ enum pcu_gsmtap_category {
|
||||||
PCU_GSMTAP_C_DL_DATA_GPRS = 3, /* downlink GPRS data blocks */
|
PCU_GSMTAP_C_DL_DATA_GPRS = 3, /* downlink GPRS data blocks */
|
||||||
PCU_GSMTAP_C_DL_DATA_EGPRS = 4, /* downlink EGPRS data blocks */
|
PCU_GSMTAP_C_DL_DATA_EGPRS = 4, /* downlink EGPRS data blocks */
|
||||||
PCU_GSMTAP_C_DL_PTCCH = 5, /* downlink PTCCH blocks */
|
PCU_GSMTAP_C_DL_PTCCH = 5, /* downlink PTCCH blocks */
|
||||||
|
PCU_GSMTAP_C_DL_AGCH = 6, /* downlink AGCH blocks */
|
||||||
|
PCU_GSMTAP_C_DL_PCH = 7, /* downlink PCH blocks */
|
||||||
|
|
||||||
PCU_GSMTAP_C_UL_UNKNOWN = 15, /* unknown or undecodable uplink blocks */
|
PCU_GSMTAP_C_UL_UNKNOWN = 15, /* unknown or undecodable uplink blocks */
|
||||||
PCU_GSMTAP_C_UL_DUMMY = 16, /* uplink dummy blocks */
|
PCU_GSMTAP_C_UL_DUMMY = 16, /* uplink dummy blocks */
|
||||||
|
|
|
@ -207,16 +207,22 @@ void pcu_l1if_tx_ptcch(msgb *msg, uint8_t trx, uint8_t ts, uint16_t arfcn,
|
||||||
|
|
||||||
void pcu_l1if_tx_agch(bitvec * block, int plen)
|
void pcu_l1if_tx_agch(bitvec * block, int plen)
|
||||||
{
|
{
|
||||||
|
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||||
uint8_t data[23]; /* prefix PLEN */
|
uint8_t data[23]; /* prefix PLEN */
|
||||||
|
|
||||||
/* FIXME: why does OpenBTS has no PLEN and no fill in message? */
|
/* FIXME: why does OpenBTS has no PLEN and no fill in message? */
|
||||||
bitvec_pack(block, data + 1);
|
bitvec_pack(block, data + 1);
|
||||||
data[0] = (plen << 2) | 0x01;
|
data[0] = (plen << 2) | 0x01;
|
||||||
|
|
||||||
|
if (bts->gsmtap_categ_mask & (1 << PCU_GSMTAP_C_DL_AGCH))
|
||||||
|
gsmtap_send(bts->gsmtap, 0, 0, GSMTAP_CHANNEL_AGCH, 0, 0, 0, 0, data, 23);
|
||||||
|
|
||||||
pcu_tx_data_req(0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, 23);
|
pcu_tx_data_req(0, 0, PCU_IF_SAPI_AGCH, 0, 0, 0, data, 23);
|
||||||
}
|
}
|
||||||
|
|
||||||
void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)
|
void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)
|
||||||
{
|
{
|
||||||
|
struct gprs_rlcmac_bts *bts = bts_main_data();
|
||||||
uint8_t data[3+1+23]; /* prefix PLEN */
|
uint8_t data[3+1+23]; /* prefix PLEN */
|
||||||
|
|
||||||
/* paging group */
|
/* paging group */
|
||||||
|
@ -230,6 +236,10 @@ void pcu_l1if_tx_pch(bitvec * block, int plen, const char *imsi)
|
||||||
OSMO_ASSERT(block->data_len <= sizeof(data) - (3+1));
|
OSMO_ASSERT(block->data_len <= sizeof(data) - (3+1));
|
||||||
bitvec_pack(block, data + 3+1);
|
bitvec_pack(block, data + 3+1);
|
||||||
data[3] = (plen << 2) | 0x01;
|
data[3] = (plen << 2) | 0x01;
|
||||||
|
|
||||||
|
if (bts->gsmtap_categ_mask & (1 << PCU_GSMTAP_C_DL_PCH))
|
||||||
|
gsmtap_send(bts->gsmtap, 0, 0, GSMTAP_CHANNEL_PCH, 0, 0, 0, 0, data + 4, 23);
|
||||||
|
|
||||||
pcu_tx_data_req(0, 0, PCU_IF_SAPI_PCH, 0, 0, 0, data, 23+3);
|
pcu_tx_data_req(0, 0, PCU_IF_SAPI_PCH, 0, 0, 0, data, 23+3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -28,6 +28,8 @@ static const struct value_string pcu_gsmtap_categ_names[] = {
|
||||||
{ PCU_GSMTAP_C_DL_DATA_GPRS, "dl-data-gprs" },
|
{ PCU_GSMTAP_C_DL_DATA_GPRS, "dl-data-gprs" },
|
||||||
{ PCU_GSMTAP_C_DL_DATA_EGPRS, "dl-data-egprs" },
|
{ PCU_GSMTAP_C_DL_DATA_EGPRS, "dl-data-egprs" },
|
||||||
{ PCU_GSMTAP_C_DL_PTCCH, "dl-ptcch" },
|
{ PCU_GSMTAP_C_DL_PTCCH, "dl-ptcch" },
|
||||||
|
{ PCU_GSMTAP_C_DL_AGCH, "dl-agch" },
|
||||||
|
{ PCU_GSMTAP_C_DL_PCH, "dl-pch" },
|
||||||
|
|
||||||
{ PCU_GSMTAP_C_UL_UNKNOWN, "ul-unknown" },
|
{ PCU_GSMTAP_C_UL_UNKNOWN, "ul-unknown" },
|
||||||
{ PCU_GSMTAP_C_UL_DUMMY, "ul-dummy" },
|
{ PCU_GSMTAP_C_UL_DUMMY, "ul-dummy" },
|
||||||
|
@ -46,6 +48,8 @@ static const struct value_string pcu_gsmtap_categ_help[] = {
|
||||||
{ PCU_GSMTAP_C_DL_DATA_GPRS, "Downlink Data Blocks (GPRS)" },
|
{ PCU_GSMTAP_C_DL_DATA_GPRS, "Downlink Data Blocks (GPRS)" },
|
||||||
{ PCU_GSMTAP_C_DL_DATA_EGPRS, "Downlink Data Blocks (EGPRS)" },
|
{ PCU_GSMTAP_C_DL_DATA_EGPRS, "Downlink Data Blocks (EGPRS)" },
|
||||||
{ PCU_GSMTAP_C_DL_PTCCH, "Downlink PTCCH Blocks" },
|
{ PCU_GSMTAP_C_DL_PTCCH, "Downlink PTCCH Blocks" },
|
||||||
|
{ PCU_GSMTAP_C_DL_AGCH, "Downlink AGCH Blocks" },
|
||||||
|
{ PCU_GSMTAP_C_DL_PCH, "Downlink PCH Blocks" },
|
||||||
|
|
||||||
{ PCU_GSMTAP_C_UL_UNKNOWN, "Unknown / Unparseable / Erroneous Downlink Blocks" },
|
{ PCU_GSMTAP_C_UL_UNKNOWN, "Unknown / Unparseable / Erroneous Downlink Blocks" },
|
||||||
{ PCU_GSMTAP_C_UL_DUMMY, "Uplink Dummy Blocks" },
|
{ PCU_GSMTAP_C_UL_DUMMY, "Uplink Dummy Blocks" },
|
||||||
|
|
Loading…
Reference in New Issue