mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-pcu.git
				synced 2025-11-04 06:03:30 +00:00 
			
		
		
		
	Compare commits
	
		
			4 Commits
		
	
	
		
			1.5.2
			...
			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