mirror of
				https://gitea.osmocom.org/cellular-infrastructure/osmo-pcu.git
				synced 2025-11-03 21:53:32 +00:00 
			
		
		
		
	Compare commits
	
		
			1 Commits
		
	
	
		
			1.0.0
			...
			fixeria/re
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
| 
						 | 
					e22aa1dc70 | 
@@ -1639,3 +1639,60 @@ void Encoding::write_packet_access_reject(
 | 
			
		||||
	bitvec_write_field(dest, &wp, 5, 8);  //  WAIT_INDICATION value
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0, 1);  //  WAIT_INDICATION size in seconds
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
void Encoding::write_packet_access_reject_tfi(struct bitvec *dest, uint8_t tfi, bool ul)
 | 
			
		||||
{
 | 
			
		||||
	unsigned wp = 0;
 | 
			
		||||
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0x1, 2);  // Payload Type
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0x0, 2);  // Uplink block with TDMA FN
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0, 1);  // No Polling Bit
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0x0, 3);  // Uplink state flag
 | 
			
		||||
	bitvec_write_field(dest, &wp,
 | 
			
		||||
				MT_PACKET_ACCESS_REJECT, 6);  // MESSAGE TYPE
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0, 2); // fixed 00
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0x03, 2);  //  Global TFI
 | 
			
		||||
	bitvec_write_field(dest, &wp, !ul, 1);  //  Uplink / Downlink
 | 
			
		||||
	bitvec_write_field(dest, &wp, tfi, 5); // TFI
 | 
			
		||||
	bitvec_write_field(dest, &wp, 1, 1);  //  WAIT_INDICATION size in seconds
 | 
			
		||||
	/* TODO: make it configurable */
 | 
			
		||||
	bitvec_write_field(dest, &wp, 5, 8);  //  WAIT_INDICATION value
 | 
			
		||||
	bitvec_write_field(dest, &wp, 0, 1);  //  WAIT_INDICATION size in seconds
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if 0
 | 
			
		||||
void Encoding::write_packet_access_reject_tfi(struct bitvec *bv, uint8_t tfi, bool ul)
 | 
			
		||||
{
 | 
			
		||||
	/* The PACKET ACCESS REJECT message (with RLC header) */
 | 
			
		||||
	Packet_Access_Reject_t RejectMsg = {
 | 
			
		||||
		.MESSAGE_TYPE = MT_PACKET_ACCESS_REJECT,
 | 
			
		||||
		.PAGE_MODE = 0x00, /* Normal Paging */
 | 
			
		||||
 | 
			
		||||
		.Count_Reject = 1,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/* Prepare the identity part (Global TFI) */
 | 
			
		||||
	RejectID_t RejectID = { .UnionType = 0x03 };
 | 
			
		||||
	if (ul) {
 | 
			
		||||
		RejectID.u.Global_TFI.UnionType = 0x00;
 | 
			
		||||
		RejectID.u.Global_TFI.u.UPLINK_TFI = tfi;
 | 
			
		||||
	} else {
 | 
			
		||||
		RejectID.u.Global_TFI.UnionType = 0x01;
 | 
			
		||||
		RejectID.u.Global_TFI.u.DOWNLINK_TFI = tfi;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	RejectMsg.Reject[0] = (Reject_t) {
 | 
			
		||||
		.ID = RejectID,
 | 
			
		||||
		.Exist_Wait = 0,
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	/* Complete block with both MAC and RLC headers */
 | 
			
		||||
	RlcMacDownlink_t dl_block = {
 | 
			
		||||
		.u = { .Packet_Access_Reject = RejectMsg },
 | 
			
		||||
		.PAYLOAD_TYPE = PAYLOAD_TYPE_CTRL_NO_OPT_OCTET,
 | 
			
		||||
		.USF = 7, /* Why should we deal with MAC header here?!? */
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	OSMO_ASSERT(encode_gsm_rlcmac_downlink(bv, &dl_block) == 0);
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
 
 | 
			
		||||
@@ -73,6 +73,8 @@ public:
 | 
			
		||||
	static void write_packet_access_reject(
 | 
			
		||||
		bitvec * dest, uint32_t tlli);
 | 
			
		||||
 | 
			
		||||
	static void write_packet_access_reject_tfi(struct bitvec *bv, uint8_t tfi, bool ul);
 | 
			
		||||
 | 
			
		||||
	static void write_packet_uplink_ack(
 | 
			
		||||
			bitvec * dest, struct gprs_rlcmac_ul_tbf *tbf, bool is_final,
 | 
			
		||||
			uint8_t rrbp);
 | 
			
		||||
 
 | 
			
		||||
@@ -172,6 +172,12 @@ static struct msgb *sched_select_ctrl_msg(
 | 
			
		||||
			if (!tbf)
 | 
			
		||||
				continue;
 | 
			
		||||
 | 
			
		||||
			/* HACK: send PACKET ACCESS REJECT if needed */
 | 
			
		||||
			if ((msg = tbf->sched_pkt_acc_req) != NULL) {
 | 
			
		||||
				tbf->sched_pkt_acc_req = NULL;
 | 
			
		||||
				return msg;
 | 
			
		||||
			}
 | 
			
		||||
 | 
			
		||||
			/*
 | 
			
		||||
			 * Assignments for the same direction have lower precedence,
 | 
			
		||||
			 * because they may kill the TBF when the CONTROL ACK is
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										10
									
								
								src/pdch.cpp
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								src/pdch.cpp
									
									
									
									
									
								
							@@ -638,6 +638,12 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
 | 
			
		||||
		return;
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	struct msgb *msg = msgb_alloc(23, "access_reject");
 | 
			
		||||
	struct bitvec bv = {
 | 
			
		||||
		.data_len = GSM_MACBLOCK_LEN,
 | 
			
		||||
		.data = msgb_put(msg, GSM_MACBLOCK_LEN)
 | 
			
		||||
	};
 | 
			
		||||
 | 
			
		||||
	if (request->ID.u.Global_TFI.UnionType) {
 | 
			
		||||
		struct gprs_rlcmac_dl_tbf *dl_tbf;
 | 
			
		||||
		int8_t tfi = request->ID.u.Global_TFI.u.DOWNLINK_TFI;
 | 
			
		||||
@@ -648,6 +654,8 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
 | 
			
		||||
		}
 | 
			
		||||
		LOGPTBFDL(dl_tbf, LOGL_ERROR,
 | 
			
		||||
			"RX: [PCU <- BTS] FIXME: Packet resource request\n");
 | 
			
		||||
		Encoding::write_packet_access_reject_tfi(&bv, tfi, false);
 | 
			
		||||
		dl_tbf->sched_pkt_acc_req = msg;
 | 
			
		||||
 | 
			
		||||
		/* Reset N3101 counter: */
 | 
			
		||||
		dl_tbf->n_reset(N3101);
 | 
			
		||||
@@ -661,6 +669,8 @@ void gprs_rlcmac_pdch::rcv_resource_request(Packet_Resource_Request_t *request,
 | 
			
		||||
		}
 | 
			
		||||
		LOGPTBFUL(ul_tbf, LOGL_ERROR,
 | 
			
		||||
			"RX: [PCU <- BTS] FIXME: Packet resource request\n");
 | 
			
		||||
		Encoding::write_packet_access_reject_tfi(&bv, tfi, true);
 | 
			
		||||
		ul_tbf->sched_pkt_acc_req = msg;
 | 
			
		||||
 | 
			
		||||
		/* Reset N3101 counter: */
 | 
			
		||||
		ul_tbf->n_reset(N3101);
 | 
			
		||||
 
 | 
			
		||||
@@ -232,6 +232,9 @@ gprs_rlcmac_tbf::gprs_rlcmac_tbf(BTS *bts_, gprs_rlcmac_tbf_direction dir) :
 | 
			
		||||
	m_rlc.init();
 | 
			
		||||
	m_llc.init();
 | 
			
		||||
 | 
			
		||||
	/* HACK HACK HACK */
 | 
			
		||||
	sched_pkt_acc_req = NULL;
 | 
			
		||||
 | 
			
		||||
	m_name_buf[0] = '\0';
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user