mirror of
https://gitea.osmocom.org/cellular-infrastructure/osmo-pcu.git
synced 2025-11-11 17:35:56 +00:00
Compare commits
4 Commits
jerlbeck/w
...
jolly/test
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
2a2ea42fca | ||
|
|
65d589bb24 | ||
|
|
047a1a5e39 | ||
|
|
2d4a477a0f |
@@ -468,7 +468,7 @@ int bssgp_prim_cb(struct osmo_prim_hdr *oph, void *ctx)
|
|||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static int sgsn_ns_cb(enum gprs_ns_evt event, struct gprs_nsvc *nsvc, struct msgb *msg, uint16_t bvci)
|
int sgsn_ns_cb(enum gprs_ns_evt event, struct gprs_nsvc *nsvc, struct msgb *msg, uint16_t bvci)
|
||||||
{
|
{
|
||||||
int rc = 0;
|
int rc = 0;
|
||||||
switch (event) {
|
switch (event) {
|
||||||
@@ -590,18 +590,11 @@ int gprs_bssgp_create(uint16_t local_port, uint32_t sgsn_ip,
|
|||||||
if (bctx)
|
if (bctx)
|
||||||
return 0; /* if already created, must return 0: no error */
|
return 0; /* if already created, must return 0: no error */
|
||||||
|
|
||||||
bssgp_nsi = gprs_ns_instantiate(&sgsn_ns_cb, tall_pcu_ctx);
|
|
||||||
if (!bssgp_nsi) {
|
|
||||||
LOGP(DBSSGP, LOGL_ERROR, "Failed to create NS instance\n");
|
|
||||||
return -EINVAL;
|
|
||||||
}
|
|
||||||
gprs_ns_vty_init(bssgp_nsi);
|
|
||||||
bssgp_nsi->nsip.local_port = local_port;
|
bssgp_nsi->nsip.local_port = local_port;
|
||||||
rc = gprs_ns_nsip_listen(bssgp_nsi);
|
rc = gprs_ns_nsip_listen(bssgp_nsi);
|
||||||
if (rc < 0) {
|
if (rc < 0) {
|
||||||
LOGP(DBSSGP, LOGL_ERROR, "Failed to create socket\n");
|
LOGP(DBSSGP, LOGL_ERROR, "Failed to create socket\n");
|
||||||
gprs_ns_destroy(bssgp_nsi);
|
gprs_ns_close(bssgp_nsi);
|
||||||
bssgp_nsi = NULL;
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -612,17 +605,16 @@ int gprs_bssgp_create(uint16_t local_port, uint32_t sgsn_ip,
|
|||||||
nsvc = gprs_ns_nsip_connect(bssgp_nsi, &dest, nsei, nsvci);
|
nsvc = gprs_ns_nsip_connect(bssgp_nsi, &dest, nsei, nsvci);
|
||||||
if (!nsvc) {
|
if (!nsvc) {
|
||||||
LOGP(DBSSGP, LOGL_ERROR, "Failed to create NSVCt\n");
|
LOGP(DBSSGP, LOGL_ERROR, "Failed to create NSVCt\n");
|
||||||
gprs_ns_destroy(bssgp_nsi);
|
gprs_ns_close(bssgp_nsi);
|
||||||
bssgp_nsi = NULL;
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
|
|
||||||
bctx = btsctx_alloc(bvci, nsei);
|
bctx = btsctx_alloc(bvci, nsei);
|
||||||
if (!bctx) {
|
if (!bctx) {
|
||||||
LOGP(DBSSGP, LOGL_ERROR, "Failed to create BSSGP context\n");
|
LOGP(DBSSGP, LOGL_ERROR, "Failed to create BSSGP context\n");
|
||||||
|
gprs_nsvc_delete(nsvc);
|
||||||
nsvc = NULL;
|
nsvc = NULL;
|
||||||
gprs_ns_destroy(bssgp_nsi);
|
gprs_ns_close(bssgp_nsi);
|
||||||
bssgp_nsi = NULL;
|
|
||||||
return -EINVAL;
|
return -EINVAL;
|
||||||
}
|
}
|
||||||
bctx->ra_id.mcc = spoof_mcc ? : mcc;
|
bctx->ra_id.mcc = spoof_mcc ? : mcc;
|
||||||
@@ -637,13 +629,12 @@ int gprs_bssgp_create(uint16_t local_port, uint32_t sgsn_ip,
|
|||||||
|
|
||||||
bvc_timer.cb = bvc_timeout;
|
bvc_timer.cb = bvc_timeout;
|
||||||
|
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
void gprs_bssgp_destroy(void)
|
void gprs_bssgp_destroy(void)
|
||||||
{
|
{
|
||||||
if (!bssgp_nsi)
|
if (!bctx)
|
||||||
return;
|
return;
|
||||||
|
|
||||||
if (osmo_timer_pending(&bvc_timer))
|
if (osmo_timer_pending(&bvc_timer))
|
||||||
@@ -651,6 +642,7 @@ void gprs_bssgp_destroy(void)
|
|||||||
|
|
||||||
osmo_signal_unregister_handler(SS_L_NS, nsvc_signal_cb, NULL);
|
osmo_signal_unregister_handler(SS_L_NS, nsvc_signal_cb, NULL);
|
||||||
|
|
||||||
|
gprs_nsvc_delete(nsvc);
|
||||||
nsvc = NULL;
|
nsvc = NULL;
|
||||||
|
|
||||||
/* FIXME: move this to libgb: btsctx_free() */
|
/* FIXME: move this to libgb: btsctx_free() */
|
||||||
@@ -660,7 +652,6 @@ void gprs_bssgp_destroy(void)
|
|||||||
|
|
||||||
/* FIXME: blocking... */
|
/* FIXME: blocking... */
|
||||||
|
|
||||||
gprs_ns_destroy(bssgp_nsi);
|
gprs_ns_close(bssgp_nsi);
|
||||||
bssgp_nsi = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -51,6 +51,8 @@ int gprs_bssgp_pcu_rx_sign(struct msgb *msg, struct tlv_parsed *tp, struct bssgp
|
|||||||
|
|
||||||
int gprs_bssgp_pcu_rcvmsg(struct msgb *msg);
|
int gprs_bssgp_pcu_rcvmsg(struct msgb *msg);
|
||||||
|
|
||||||
|
int sgsn_ns_cb(enum gprs_ns_evt event, struct gprs_nsvc *nsvc, struct msgb *msg, uint16_t bvci);
|
||||||
|
|
||||||
int gprs_bssgp_create(uint16_t local_port, uint32_t sgsn_ip, uint16_t
|
int gprs_bssgp_create(uint16_t local_port, uint32_t sgsn_ip, uint16_t
|
||||||
sgsn_port, uint16_t nsei, uint16_t nsvci, uint16_t bvci,
|
sgsn_port, uint16_t nsei, uint16_t nsvci, uint16_t bvci,
|
||||||
uint16_t mcc, uint16_t mnc, uint16_t lac, uint16_t rac,
|
uint16_t mcc, uint16_t mnc, uint16_t lac, uint16_t rac,
|
||||||
|
|||||||
@@ -33,7 +33,7 @@
|
|||||||
/* default categories */
|
/* default categories */
|
||||||
|
|
||||||
static const struct log_info_cat default_categories[] = {
|
static const struct log_info_cat default_categories[] = {
|
||||||
{"DCSN1", "\033[1;31m", "Concrete Syntax Notation One (CSN1)", LOGL_INFO, 0},
|
{"DCSN1", "\033[1;31m", "Concrete Syntax Notation One (CSN1)", LOGL_ERROR, 0},
|
||||||
{"DL1IF", "\033[1;32m", "GPRS PCU L1 interface (L1IF)", LOGL_INFO, 1},
|
{"DL1IF", "\033[1;32m", "GPRS PCU L1 interface (L1IF)", LOGL_INFO, 1},
|
||||||
{"DRLCMAC", "\033[0;33m", "GPRS RLC/MAC layer (RLCMAC)", LOGL_NOTICE, 1},
|
{"DRLCMAC", "\033[0;33m", "GPRS RLC/MAC layer (RLCMAC)", LOGL_NOTICE, 1},
|
||||||
{"DRLCMACDATA", "\033[0;33m", "GPRS RLC/MAC layer Data (RLCMAC)", LOGL_NOTICE, 1},
|
{"DRLCMACDATA", "\033[0;33m", "GPRS RLC/MAC layer Data (RLCMAC)", LOGL_NOTICE, 1},
|
||||||
@@ -41,6 +41,7 @@ static const struct log_info_cat default_categories[] = {
|
|||||||
{"DRLCMACUL", "\033[1;36m", "GPRS RLC/MAC layer Uplink (RLCMAC)", LOGL_NOTICE, 1},
|
{"DRLCMACUL", "\033[1;36m", "GPRS RLC/MAC layer Uplink (RLCMAC)", LOGL_NOTICE, 1},
|
||||||
{"DRLCMACSCHED", "\033[0;36m", "GPRS RLC/MAC layer Scheduling (RLCMAC)", LOGL_NOTICE, 1},
|
{"DRLCMACSCHED", "\033[0;36m", "GPRS RLC/MAC layer Scheduling (RLCMAC)", LOGL_NOTICE, 1},
|
||||||
{"DRLCMACMEAS", "\033[1;31m", "GPRS RLC/MAC layer Measurements (RLCMAC)", LOGL_INFO, 1},
|
{"DRLCMACMEAS", "\033[1;31m", "GPRS RLC/MAC layer Measurements (RLCMAC)", LOGL_INFO, 1},
|
||||||
|
{"DNS","\033[0;34m", "GPRS Network Service (NS)", LOGL_INFO , 1},
|
||||||
{"DBSSGP","\033[1;34m", "GPRS BSS Gateway Protocol (BSSGP)", LOGL_INFO , 1},
|
{"DBSSGP","\033[1;34m", "GPRS BSS Gateway Protocol (BSSGP)", LOGL_INFO , 1},
|
||||||
{"DPCU", "\033[1;35m", "GPRS Packet Control Unit (PCU)", LOGL_NOTICE, 1},
|
{"DPCU", "\033[1;35m", "GPRS Packet Control Unit (PCU)", LOGL_NOTICE, 1},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -39,6 +39,7 @@ enum {
|
|||||||
DRLCMACUL,
|
DRLCMACUL,
|
||||||
DRLCMACSCHED,
|
DRLCMACSCHED,
|
||||||
DRLCMACMEAS,
|
DRLCMACMEAS,
|
||||||
|
DNS,
|
||||||
DBSSGP,
|
DBSSGP,
|
||||||
DPCU,
|
DPCU,
|
||||||
aDebug_LastEntry
|
aDebug_LastEntry
|
||||||
|
|||||||
@@ -257,7 +257,7 @@ int gprs_rlcmac_rcv_rts_block(uint8_t trx, uint8_t ts, uint16_t arfcn,
|
|||||||
? "UL" : "DL", poll_tbf->tfi);
|
? "UL" : "DL", poll_tbf->tfi);
|
||||||
/* use free USF */
|
/* use free USF */
|
||||||
/* else. check for sba */
|
/* else. check for sba */
|
||||||
else if ((sba_fn = sched_sba(trx, ts, fn, block_nr) != 0xffffffff))
|
else if ((sba_fn = sched_sba(trx, ts, fn, block_nr)) != 0xffffffff)
|
||||||
LOGP(DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: TRX=%d "
|
LOGP(DRLCMACSCHED, LOGL_DEBUG, "Received RTS for PDCH: TRX=%d "
|
||||||
"TS=%d FN=%d block_nr=%d scheduling free USF for "
|
"TS=%d FN=%d block_nr=%d scheduling free USF for "
|
||||||
"single block allocation at FN=%d\n", trx, ts, fn,
|
"single block allocation at FN=%d\n", trx, ts, fn,
|
||||||
|
|||||||
@@ -178,10 +178,19 @@ int main(int argc, char *argv[])
|
|||||||
msgb_set_talloc_ctx(tall_pcu_ctx);
|
msgb_set_talloc_ctx(tall_pcu_ctx);
|
||||||
|
|
||||||
osmo_init_logging(&gprs_log_info);
|
osmo_init_logging(&gprs_log_info);
|
||||||
|
bssgp_set_log_ss(DBSSGP);
|
||||||
|
gprs_ns_set_log_ss(DNS);
|
||||||
|
|
||||||
vty_init(&pcu_vty_info);
|
vty_init(&pcu_vty_info);
|
||||||
pcu_vty_init(&gprs_log_info);
|
pcu_vty_init(&gprs_log_info);
|
||||||
|
|
||||||
|
bssgp_nsi = gprs_ns_instantiate(&sgsn_ns_cb, tall_pcu_ctx);
|
||||||
|
if (!bssgp_nsi) {
|
||||||
|
LOGP(DBSSGP, LOGL_ERROR, "Failed to create NS instance\n");
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
gprs_ns_vty_init(bssgp_nsi);
|
||||||
|
|
||||||
handle_options(argc, argv);
|
handle_options(argc, argv);
|
||||||
if ((!!spoof_mcc) + (!!spoof_mnc) == 1) {
|
if ((!!spoof_mcc) + (!!spoof_mnc) == 1) {
|
||||||
fprintf(stderr, "--mcc and --mnc must be specified "
|
fprintf(stderr, "--mcc and --mnc must be specified "
|
||||||
@@ -248,6 +257,9 @@ int main(int argc, char *argv[])
|
|||||||
|
|
||||||
pcu_l1if_close();
|
pcu_l1if_close();
|
||||||
|
|
||||||
|
gprs_ns_destroy(bssgp_nsi);
|
||||||
|
bssgp_nsi = NULL;
|
||||||
|
|
||||||
flush_timing_advance();
|
flush_timing_advance();
|
||||||
|
|
||||||
talloc_free(gprs_rlcmac_bts);
|
talloc_free(gprs_rlcmac_bts);
|
||||||
|
|||||||
Reference in New Issue
Block a user