mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-mgw.git
				synced 2025-11-03 21:43:32 +00:00 
			
		
		
		
	bssap: Use gsm0808 method to create complete layer3 message.
This commit is contained in:
		@@ -45,12 +45,6 @@
 | 
			
		||||
static void bts_queue_send(struct msgb *msg, int link_id);
 | 
			
		||||
static void bssmap_free_secondary(struct bss_sccp_connection_data *data);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
static void put_data_16(uint8_t *data, const uint16_t val)
 | 
			
		||||
{
 | 
			
		||||
	memcpy(data, &val, sizeof(val));
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static uint32_t read_data32(const uint8_t *data)
 | 
			
		||||
{
 | 
			
		||||
	uint32_t res;
 | 
			
		||||
@@ -735,50 +729,12 @@ int dtap_rcvmsg(struct gsm_lchan *lchan, struct msgb *msg, unsigned int length)
 | 
			
		||||
/* Create messages */
 | 
			
		||||
struct msgb *bssmap_create_layer3(struct msgb *msg_l3)
 | 
			
		||||
{
 | 
			
		||||
	u_int8_t *data;
 | 
			
		||||
	uint8_t *ci;
 | 
			
		||||
	struct msgb* msg;
 | 
			
		||||
	struct gsm48_loc_area_id *lai;
 | 
			
		||||
	struct gsm_bts *bts = msg_l3->lchan->ts->trx->bts;
 | 
			
		||||
	u_int16_t network_code = get_network_code_for_msc(bts->network);
 | 
			
		||||
	u_int16_t country_code = get_country_code_for_msc(bts->network);
 | 
			
		||||
 | 
			
		||||
	msg  = msgb_alloc_headroom(BSSMAP_MSG_SIZE, BSSMAP_MSG_HEADROOM,
 | 
			
		||||
				   "bssmap cmpl l3");
 | 
			
		||||
	if (!msg)
 | 
			
		||||
		return NULL;
 | 
			
		||||
 | 
			
		||||
	/* create the bssmap header */
 | 
			
		||||
	msg->l3h = msgb_put(msg, 2);
 | 
			
		||||
	msg->l3h[0] = 0x0;
 | 
			
		||||
 | 
			
		||||
	/* create layer 3 header */
 | 
			
		||||
	data = msgb_put(msg, 1);
 | 
			
		||||
	data[0] = BSS_MAP_MSG_COMPLETE_LAYER_3;
 | 
			
		||||
 | 
			
		||||
	/* create the cell header */
 | 
			
		||||
	data = msgb_put(msg, 3);
 | 
			
		||||
	data[0] = GSM0808_IE_CELL_IDENTIFIER;
 | 
			
		||||
	data[1] = 1 + sizeof(*lai) + 2;
 | 
			
		||||
	data[2] = CELL_IDENT_WHOLE_GLOBAL;
 | 
			
		||||
 | 
			
		||||
	lai = (struct gsm48_loc_area_id *) msgb_put(msg, sizeof(*lai));
 | 
			
		||||
	gsm48_generate_lai(lai, country_code,
 | 
			
		||||
			   network_code, bts->location_area_code);
 | 
			
		||||
 | 
			
		||||
	ci = msgb_put(msg, 2);
 | 
			
		||||
	put_data_16(ci, htons(bts->cell_identity));
 | 
			
		||||
 | 
			
		||||
	/* copy the layer3 data */
 | 
			
		||||
	data = msgb_put(msg, msgb_l3len(msg_l3) + 2);
 | 
			
		||||
	data[0] = GSM0808_IE_LAYER_3_INFORMATION;
 | 
			
		||||
	data[1] = msgb_l3len(msg_l3);
 | 
			
		||||
	memcpy(&data[2], msg_l3->l3h, data[1]);
 | 
			
		||||
 | 
			
		||||
	/* update the size */
 | 
			
		||||
	msg->l3h[1] = msgb_l3len(msg) - 2;
 | 
			
		||||
 | 
			
		||||
	return msg;
 | 
			
		||||
	return gsm0808_create_layer3(msg_l3, network_code, country_code,
 | 
			
		||||
				     bts->location_area_code, bts->cell_identity);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
static u_int8_t chan_mode_to_speech(struct gsm_lchan *lchan)
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user