mirror of
				https://github.com/brmlab/osmo-tetra.git
				synced 2025-10-30 23:14:00 +01:00 
			
		
		
		
	fix parsing of slot granting in RESOURCE MAC PDU
This commit is contained in:
		
							parent
							
								
									5c14298646
								
							
						
					
					
						commit
						8c2db3d630
					
				
					 2 changed files with 46 additions and 7 deletions
				
			
		|  | @ -116,6 +116,30 @@ static int decode_chan_alloc(struct tetra_chan_alloc_decoded *cad, const uint8_t | ||||||
| 	return cur - bits; | 	return cur - bits; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | /* According to table 21.90 */ | ||||||
|  | static int decode_nr_slots(uint8_t in) | ||||||
|  | { | ||||||
|  | 	const uint8_t dec_tbl[] = { | ||||||
|  | 		[0x0]	= 0,	/* first sub-slot */ | ||||||
|  | 		[0x1]	= 1, | ||||||
|  | 		[0x2]	= 2, | ||||||
|  | 		[0x3]	= 3, | ||||||
|  | 		[0x4]	= 4, | ||||||
|  | 		[0x5]	= 5, | ||||||
|  | 		[0x6]	= 6, | ||||||
|  | 		[0x7]	= 8, | ||||||
|  | 		[0x8]	= 10, | ||||||
|  | 		[0x9]	= 13, | ||||||
|  | 		[0xa]	= 17, | ||||||
|  | 		[0xb]	= 24, | ||||||
|  | 		[0xc]	= 34, | ||||||
|  | 		[0xd]	= 51, | ||||||
|  | 		[0xe]	= 68, | ||||||
|  | 		[0xf]	= 0xff	/* second sub-slot */ | ||||||
|  | 	}; | ||||||
|  | 	return dec_tbl[in & 0xf]; | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /* Section 21.4.3.1 MAC-RESOURCE */ | /* Section 21.4.3.1 MAC-RESOURCE */ | ||||||
| int macpdu_decode_resource(struct tetra_resrc_decoded *rsd, const uint8_t *bits) | int macpdu_decode_resource(struct tetra_resrc_decoded *rsd, const uint8_t *bits) | ||||||
| { | { | ||||||
|  | @ -128,6 +152,7 @@ int macpdu_decode_resource(struct tetra_resrc_decoded *rsd, const uint8_t *bits) | ||||||
| 	rsd->addr.type = bits_to_uint(cur, 3); cur += 3; | 	rsd->addr.type = bits_to_uint(cur, 3); cur += 3; | ||||||
| 	switch (rsd->addr.type) { | 	switch (rsd->addr.type) { | ||||||
| 	case ADDR_TYPE_NULL: | 	case ADDR_TYPE_NULL: | ||||||
|  | 		return 0; | ||||||
| 		break; | 		break; | ||||||
| 	case ADDR_TYPE_SSI: | 	case ADDR_TYPE_SSI: | ||||||
| 	case ADDR_TYPE_USSI: | 	case ADDR_TYPE_USSI: | ||||||
|  | @ -148,16 +173,26 @@ int macpdu_decode_resource(struct tetra_resrc_decoded *rsd, const uint8_t *bits) | ||||||
| 		break; | 		break; | ||||||
| 	} | 	} | ||||||
| 	cur += addr_len_by_type[rsd->addr.type]; | 	cur += addr_len_by_type[rsd->addr.type]; | ||||||
| 	/* no intermediate mapping in pi/4 */ | 	/* no intermediate napping in pi/4 */ | ||||||
| 	rsd->power_control_pres = *cur++; | 	rsd->power_control_pres = *cur++; | ||||||
| 	if (rsd->power_control_pres) | 	if (rsd->power_control_pres) | ||||||
| 		cur += 4; | 		cur += 4; | ||||||
| 	rsd->slot_granting_pres = *cur++; | 	rsd->slot_granting.pres = *cur++; | ||||||
| 	if (rsd->slot_granting_pres) { | 	if (rsd->slot_granting.pres) { | ||||||
| 		if (*cur++) | #if 0 | ||||||
|  | 		/* check for multiple slot granting flag (can only exist in QAM) */ | ||||||
|  | 		if (*cur++) { | ||||||
| 			cur += 0; //FIXME;
 | 			cur += 0; //FIXME;
 | ||||||
| 		else | 		} else { | ||||||
| 			cur += 8; | #endif | ||||||
|  | 			rsd->slot_granting.nr_slots = | ||||||
|  | 				decode_nr_slots(bits_to_uint(cur, 4)); | ||||||
|  | 			cur += 4; | ||||||
|  | 			rsd->slot_granting.delay = bits_to_uint(cur, 4); | ||||||
|  | 			cur += 4; | ||||||
|  | #if 0 | ||||||
|  | 		} | ||||||
|  | #endif | ||||||
| 	} | 	} | ||||||
| 	rsd->chan_alloc_pres = *cur++; | 	rsd->chan_alloc_pres = *cur++; | ||||||
| 	/* FIXME: If encryption is enabled, Channel Allocation is encrypted !!! */ | 	/* FIXME: If encryption is enabled, Channel Allocation is encrypted !!! */ | ||||||
|  |  | ||||||
|  | @ -207,7 +207,11 @@ struct tetra_resrc_decoded { | ||||||
| 
 | 
 | ||||||
| 	uint8_t power_control_pres; | 	uint8_t power_control_pres; | ||||||
| 
 | 
 | ||||||
| 	uint8_t slot_granting_pres; | 	struct { | ||||||
|  | 		uint8_t nr_slots; | ||||||
|  | 		uint8_t delay; | ||||||
|  | 		uint8_t pres; | ||||||
|  | 	} slot_granting; | ||||||
| 
 | 
 | ||||||
| 	uint8_t chan_alloc_pres; | 	uint8_t chan_alloc_pres; | ||||||
| 	struct tetra_chan_alloc_decoded cad; | 	struct tetra_chan_alloc_decoded cad; | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue
	
	 Harald Welte
						Harald Welte