aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHarald Welte <laforge@gnumonks.org>2018-03-02 21:39:09 +0100
committerHarald Welte <laforge@gnumonks.org>2018-03-03 22:39:56 +0100
commitacc93ab873d79399c17e2b7e83d1b42a1a910061 (patch)
tree6e3bd792e87cc4c6e161d8655d6d5eab5abcb8b3
parent3a40ec7acb08787b35c5e8793c78a19492354747 (diff)
GSM_Types: Switch TLLI from uint32_t to OCT4
The TLLI is not really a number, but an opaque 4-byte value. Change-Id: I0901340a2211eeeb899f312bcc60573fec11f220
-rw-r--r--gprs_gb/Test.ttcn6
-rw-r--r--library/GSM_Types.ttcn2
-rw-r--r--library/Osmocom_Gb_Types.ttcn6
-rw-r--r--library/RLCMAC_CSN1_Types.ttcn17
-rw-r--r--library/RLCMAC_EncDec.cc17
5 files changed, 22 insertions, 26 deletions
diff --git a/gprs_gb/Test.ttcn b/gprs_gb/Test.ttcn
index e9cb40e8..7251ef90 100644
--- a/gprs_gb/Test.ttcn
+++ b/gprs_gb/Test.ttcn
@@ -47,7 +47,7 @@ module Test {
var BSSGP_CT bssgp_component;
var MmContext g_mmctx := {
- tlli := 0,
+ tlli := 'FFFFFFFF'O,
n_u := 0
};
@@ -334,7 +334,7 @@ uint3_t usf) := {
/* compute a random TLLI; FIXME: what about TLLI prefix / local/foreign/...? */
function f_random_tlli() return GprsTlli {
- var GprsTlli tlli := float2int(rnd()* 4294967295.0);
+ var GprsTlli tlli := f_rnd_octstring(4);
return tlli;
}
@@ -402,7 +402,7 @@ uint3_t usf) := {
[] BSSGP.receive(tr_BD_BSSGP(?)) -> value bd {
log("BSSGP Rx: ", bd);
//log("GMM Rx: ", dec_PDU_L3_MS_SGSN(pdu.payload));
- g_mmctx.tlli := oct2int(bd.bssgp.pDU_BSSGP_UL_UNITDATA.tLLI);
+ g_mmctx.tlli := bd.bssgp.pDU_BSSGP_UL_UNITDATA.tLLI;
tx_gmm(LLC_CR_DL_CMD, gmm_auth_req);
}
[] BSSGP.receive(t_BssgpStsInd(?, ?, BVC_S_UNBLOCKED)) { repeat; }
diff --git a/library/GSM_Types.ttcn b/library/GSM_Types.ttcn
index b86bfd71..c7b79916 100644
--- a/library/GSM_Types.ttcn
+++ b/library/GSM_Types.ttcn
@@ -16,7 +16,7 @@ module GSM_Types {
type integer GsmRxLev (0..63);
type integer GsmTsc (0..7) with { variant "FIELDLENGTH(8)" };
type uint32_t GsmTmsi;
- type uint32_t GprsTlli;
+ type OCT4 GprsTlli;
type hexstring GsmMcc length(3);
type hexstring GsmMnc length(2 .. 3);
type uint16_t GsmLac;
diff --git a/library/Osmocom_Gb_Types.ttcn b/library/Osmocom_Gb_Types.ttcn
index 2f2a8baf..a3121b5a 100644
--- a/library/Osmocom_Gb_Types.ttcn
+++ b/library/Osmocom_Gb_Types.ttcn
@@ -551,7 +551,7 @@ octetstring sdu) := {
template PDU_BSSGP ts_BSSGP_DL_UD(GprsTlli tlli, octetstring pdu) := {
pDU_BSSGP_DL_UNITDATA := {
bssgpPduType := '00'O,
- tLLI_current := f_oct_or_wc(tlli, 4),
+ tLLI_current := tlli,
qoS_Profile := t_defaultQos,
pDU_Lifetime := t_DefaultLifetime(65535),
mS_Radio_Access_Capability := omit,
@@ -608,7 +608,7 @@ octetstring sdu) := {
}
}
- template PDU_BSSGP ts_BSSGP_UL_UD(OCT4 tlli, BssgpCellId cell_id, octetstring payload) := {
+ template PDU_BSSGP ts_BSSGP_UL_UD(GprsTlli tlli, BssgpCellId cell_id, octetstring payload) := {
pDU_BSSGP_UL_UNITDATA := {
bssgpPduType := '01'O,
tLLI := tlli,
@@ -631,7 +631,7 @@ octetstring sdu) := {
template octetstring payload := ?) := {
pDU_BSSGP_UL_UNITDATA := {
bssgpPduType := '01'O,
- tLLI := f_oct_or_wc(tlli, 4),
+ tLLI := tlli,
qoS_Profile := ?,
cell_Identifier := t_BSSGP_IE_CellId(cell_id),
pFI := *,
diff --git a/library/RLCMAC_CSN1_Types.ttcn b/library/RLCMAC_CSN1_Types.ttcn
index 076b1c16..2335c29d 100644
--- a/library/RLCMAC_CSN1_Types.ttcn
+++ b/library/RLCMAC_CSN1_Types.ttcn
@@ -52,7 +52,9 @@ module RLCMAC_CSN1_Types {
type record TenTlli {
BIT2 presence ('10'B),
GprsTlli tlli
- } with { variant "" };
+ } with { variant ""
+ variant (tlli) "BYTEORDER(first)"
+ };
type union GlobalTfiOrTlli {
NullGlobalTfi global_tfi,
@@ -78,7 +80,9 @@ module RLCMAC_CSN1_Types {
type record IO_Tlli {
BIT2 presence ('10'B),
GprsTlli tlli
- } with { variant "" };
+ } with { variant ""
+ variant (tlli) "BYTEORDER(first)"
+ };
type record IIO_Tqi {
BIT3 presence ('110'B),
PacketRequestReference pkt_req_ref
@@ -244,6 +248,7 @@ module RLCMAC_CSN1_Types {
variant (cont_res_tlli) "PRESENCE(cont_res_tlli_present = '1'B)"
variant (pkt_ta) "PRESENCE(pkt_ta_present = '1'B)"
variant (pwr_ctrl) "PRESENCE(pwr_ctrl_present = '1'B)"
+ variant (cont_res_tlli) "BYTEORDER(first)"
};
type record PacketUlAckNack {
PageMode page_mode,
@@ -323,12 +328,16 @@ module RLCMAC_CSN1_Types {
GprsTlli tlli,
CtrlAck ctrl_ack
/* TODO: Rel5 additions */
- } with { variant "" };
+ } with { variant ""
+ variant (tlli) "BYTEORDER(first)"
+ };
/* 1.2.8b Packet Uplink Dummy Control Block */
type record PacketUlDummy {
GprsTlli tlli
- } with { variant "" };
+ } with { variant ""
+ variant (tlli) "BYTEORDER(first)"
+ };
/* 11.2.0.2 */
type union RlcmacUlCtrlUnion {
diff --git a/library/RLCMAC_EncDec.cc b/library/RLCMAC_EncDec.cc
index 4cdeae7e..ad52f913 100644
--- a/library/RLCMAC_EncDec.cc
+++ b/library/RLCMAC_EncDec.cc
@@ -136,14 +136,7 @@ OCTETSTRING enc__RlcmacUlDataBlock(const RlcmacUlDataBlock& si)
}
if (in.mac__hdr().tlli__ind()) {
- /* FIXME */
- //in.tlli().encode(GSM__Types::GprsTlli_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
- INTEGER t = in.tlli();
- unsigned int tmp = t.get_long_long_val();
- ttcn_buffer.put_c(tmp >> 24);
- ttcn_buffer.put_c(tmp >> 16);
- ttcn_buffer.put_c(tmp >> 8);
- ttcn_buffer.put_c(tmp);
+ ttcn_buffer.put_string(in.tlli());
}
if (in.mac__hdr().pfi__ind()) {
@@ -215,13 +208,7 @@ RlcmacUlDataBlock dec__RlcmacUlDataBlock(const OCTETSTRING& stream)
/* parse optional TLLI */
if (ret_val.mac__hdr().tlli__ind()) {
- /* FIXME: Why is this not working ?!? */
- //ret_val.tlli().decode(GSM__Types::GprsTlli_descr_, ttcn_buffer, TTCN_EncDec::CT_RAW);
- const unsigned char *cur = ttcn_buffer.get_read_data();
- unsigned int tmp = cur[0] << 24 | cur[1] << 16 | cur[2] << 8 | cur[3];
- INTEGER t;
- t.set_long_long_val(tmp);
- ret_val.tlli() = t;
+ ret_val.tlli() = OCTETSTRING(4, ttcn_buffer.get_read_data());
ttcn_buffer.increase_pos(4);
}
/* parse optional PFI */