From 7b6bb640930cf3c8d10bbbaed15453f0d7e85bcc Mon Sep 17 00:00:00 2001
From: Lionel Gauthier <lionel.gauthier@eurecom.fr>
Date: Thu, 23 Oct 2014 14:30:37 +0000
Subject: [PATCH] git-svn-id: http://svn.eurecom.fr/openair4G/trunk@5935
 818b1a75-f10b-46b9-bf7c-635c3b92a50f

---
 openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c   |  4 ++-
 .../EURECOM-NAS/src/emm/msg/AttachAccept.c    |  4 +++
 ...ActivateDedicatedEpsBearerContextRequest.h |  2 +-
 .../NAS/EURECOM-NAS/src/esm/sap/esm_send.c    | 12 +++++++
 .../src/ies/ApnAggregateMaximumBitRate.c      | 32 +++++++++++++++++++
 .../src/ies/ApnAggregateMaximumBitRate.h      |  8 +++++
 6 files changed, 60 insertions(+), 2 deletions(-)

diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c b/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c
index 2ae268d28e..11fc4b0822 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c
+++ b/openair-cn/NAS/EURECOM-NAS/src/emm/Attach.c
@@ -2320,7 +2320,9 @@ static int _emm_attach_accept(emm_data_context_t *emm_ctx, attach_data_t *data)
         emm_sap.u.emm_as.u.establish.new_guti  = emm_ctx->guti;
     } else {
         emm_sap.u.emm_as.u.establish.UEid.guti = emm_ctx->guti;
-        emm_sap.u.emm_as.u.establish.new_guti  = NULL;
+#warning "TEST LG FORCE GUTI IE IN ATTACH ACCEPT"
+        emm_sap.u.emm_as.u.establish.new_guti  = emm_ctx->guti;
+        //emm_sap.u.emm_as.u.establish.new_guti  = NULL;
     }
     emm_sap.u.emm_as.u.establish.n_tacs  = emm_ctx->n_tacs;
     emm_sap.u.emm_as.u.establish.tac     = emm_ctx->tac;
diff --git a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c
index 20669028dd..d9b2567501 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c
+++ b/openair-cn/NAS/EURECOM-NAS/src/emm/msg/AttachAccept.c
@@ -269,6 +269,10 @@ int encode_attach_accept(attach_accept_msg *attach_accept, uint8_t *buffer, uint
             encoded += encode_result;
     }
 
+#warning "LG TEST override t3402value"
+    attach_accept->presencemask |= ATTACH_ACCEPT_T3402_VALUE_PRESENT;
+    attach_accept->t3402value.unit = GPRS_TIMER_UNIT_60S;
+    attach_accept->t3402value.timervalue = 12;
     if ((attach_accept->presencemask & ATTACH_ACCEPT_T3402_VALUE_PRESENT)
         == ATTACH_ACCEPT_T3402_VALUE_PRESENT)
     {
diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h b/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h
index fe3a0f5171..3a18057c8a 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h
+++ b/openair-cn/NAS/EURECOM-NAS/src/esm/msg/ActivateDedicatedEpsBearerContextRequest.h
@@ -61,7 +61,7 @@
     LLC_SERVICE_ACCESS_POINT_IDENTIFIER_MAXIMUM_LENGTH + \
     RADIO_PRIORITY_MAXIMUM_LENGTH + \
     PACKET_FLOW_IDENTIFIER_MAXIMUM_LENGTH + \
-    PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_LENGTH )
+    PROTOCOL_CONFIGURATION_OPTIONS_MAXIMUM_LENGTH)
 
 /* If an optional value is present and should be encoded, the corresponding
  * Bit mask should be set to 1.
diff --git a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c b/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c
index f17ccd4ccb..84a7374551 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c
+++ b/openair-cn/NAS/EURECOM-NAS/src/esm/sap/esm_send.c
@@ -610,6 +610,18 @@ int esm_send_activate_default_eps_bearer_context_request(int pti,
         msg->esmcause = esm_cause;
     }
 
+#warning "TEST LG FORCE APN-AMBR"
+    LOG_TRACE(INFO, "ESM-SAP   - FORCE APN-AMBR");
+    msg->presencemask |=
+            ACTIVATE_DEFAULT_EPS_BEARER_CONTEXT_REQUEST_APNAMBR_PRESENT;
+    msg->apnambr.apnambrfordownlink             = 0xfe; // (8640kbps)
+    msg->apnambr.apnambrforuplink               = 0xfe; // (8640kbps)
+    msg->apnambr.apnambrfordownlink_extended    = 0xde; // (200Mbps)
+    msg->apnambr.apnambrforuplink_extended      = 0x9e; // (100Mbps)
+    msg->apnambr.apnambrfordownlink_extended2   = 0;
+    msg->apnambr.apnambrforuplink_extended2     = 0;
+    msg->apnambr.extensions                     = 0 | APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT;
+
     LOG_TRACE(INFO, "ESM-SAP   - Send Activate Default EPS Bearer Context "
               "Request message (pti=%d, ebi=%d)",
               msg->proceduretransactionidentity, msg->epsbeareridentity);
diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c b/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c
index dbe85a885f..3cc25b48d2 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c
+++ b/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.c
@@ -51,6 +51,18 @@ int decode_apn_aggregate_maximum_bit_rate(ApnAggregateMaximumBitRate *apnaggrega
     decoded++;
     apnaggregatemaximumbitrate->apnambrforuplink = *(buffer + decoded);
     decoded++;
+    if (ielen >= 4) {
+        apnaggregatemaximumbitrate->apnambrfordownlink_extended = *(buffer + decoded);
+        decoded++;
+        apnaggregatemaximumbitrate->apnambrforuplink_extended = *(buffer + decoded);
+        decoded++;
+        if (ielen >= 6) {
+            apnaggregatemaximumbitrate->apnambrfordownlink_extended2 = *(buffer + decoded);
+            decoded++;
+            apnaggregatemaximumbitrate->apnambrforuplink_extended2 = *(buffer + decoded);
+            decoded++;
+        }
+    }
 #if defined (NAS_DEBUG)
     dump_apn_aggregate_maximum_bit_rate_xml(apnaggregatemaximumbitrate, iei);
 #endif
@@ -76,6 +88,18 @@ int encode_apn_aggregate_maximum_bit_rate(ApnAggregateMaximumBitRate *apnaggrega
     encoded++;
     *(buffer + encoded) = apnaggregatemaximumbitrate->apnambrforuplink;
     encoded++;
+    if (apnaggregatemaximumbitrate->extensions & APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT) {
+        *(buffer + encoded) = apnaggregatemaximumbitrate->apnambrfordownlink_extended;
+        encoded++;
+        *(buffer + encoded) = apnaggregatemaximumbitrate->apnambrforuplink_extended;
+        encoded++;
+        if (apnaggregatemaximumbitrate->extensions & APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION2_PRESENT) {
+            *(buffer + encoded) = apnaggregatemaximumbitrate->apnambrfordownlink_extended2;
+            encoded++;
+            *(buffer + encoded) = apnaggregatemaximumbitrate->apnambrforuplink_extended2;
+            encoded++;
+        }
+    }
     *lenPtr = encoded - 1 - ((iei > 0) ? 1 : 0);
     return encoded;
 }
@@ -88,6 +112,14 @@ void dump_apn_aggregate_maximum_bit_rate_xml(ApnAggregateMaximumBitRate *apnaggr
         printf("    <IEI>0x%X</IEI>\n", iei);
     printf("    <APN AMBR for downlink>%u</APN AMBR for downlink>\n", apnaggregatemaximumbitrate->apnambrfordownlink);
     printf("    <APN AMBR for uplink>%u</APN AMBR for uplink>\n", apnaggregatemaximumbitrate->apnambrforuplink);
+    if (apnaggregatemaximumbitrate->extensions & APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT) {
+        printf("    <APN AMBR extended for downlink>%u</APN AMBR for downlink>\n", apnaggregatemaximumbitrate->apnambrfordownlink_extended);
+        printf("    <APN AMBR extended for uplink>%u</APN AMBR for uplink>\n", apnaggregatemaximumbitrate->apnambrforuplink_extended);
+        if (apnaggregatemaximumbitrate->extensions & APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION2_PRESENT) {
+            printf("    <APN AMBR extended2 for downlink>%u</APN AMBR for downlink>\n", apnaggregatemaximumbitrate->apnambrfordownlink_extended);
+            printf("    <APN AMBR extended2 for uplink>%u</APN AMBR for uplink>\n", apnaggregatemaximumbitrate->apnambrforuplink_extended);
+        }
+    }
     printf("</Apn Aggregate Maximum Bit Rate>\n");
 }
 
diff --git a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h b/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h
index 620ec81719..6823c53476 100644
--- a/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h
+++ b/openair-cn/NAS/EURECOM-NAS/src/ies/ApnAggregateMaximumBitRate.h
@@ -38,9 +38,17 @@
 #define APN_AGGREGATE_MAXIMUM_BIT_RATE_MINIMUM_LENGTH 4
 #define APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_LENGTH 8
 
+#define APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION_PRESENT  (1<<0)
+#define APN_AGGREGATE_MAXIMUM_BIT_RATE_MAXIMUM_EXTENSION2_PRESENT (1<<1)
+
 typedef struct ApnAggregateMaximumBitRate_tag {
     uint8_t  apnambrfordownlink;
     uint8_t  apnambrforuplink;
+    uint8_t  apnambrfordownlink_extended;
+    uint8_t  apnambrforuplink_extended;
+    uint8_t  apnambrfordownlink_extended2;
+    uint8_t  apnambrforuplink_extended2;
+    uint8_t  extensions;
 } ApnAggregateMaximumBitRate;
 
 int encode_apn_aggregate_maximum_bit_rate(ApnAggregateMaximumBitRate *apnaggregatemaximumbitrate, uint8_t iei, uint8_t *buffer, uint32_t len);
-- 
GitLab