|
|
|
/*
|
|
|
|
* Copyright 2013-2019 Software Radio Systems Limited
|
|
|
|
*
|
|
|
|
* This file is part of srsLTE.
|
|
|
|
*
|
|
|
|
* srsLTE is free software: you can redistribute it and/or modify
|
|
|
|
* it under the terms of the GNU Affero General Public License as
|
|
|
|
* published by the Free Software Foundation, either version 3 of
|
|
|
|
* the License, or (at your option) any later version.
|
|
|
|
*
|
|
|
|
* srsLTE is distributed in the hope that it will be useful,
|
|
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
|
|
* GNU Affero General Public License for more details.
|
|
|
|
*
|
|
|
|
* A copy of the GNU Affero General Public License can be found in
|
|
|
|
* the LICENSE file in the top-level directory of this distribution
|
|
|
|
* and at http://www.gnu.org/licenses/.
|
|
|
|
*
|
|
|
|
*/
|
|
|
|
|
|
|
|
#ifndef SRSLTE_GTPC_IES_H
|
|
|
|
#define SRSLTE_GTPC_IES_H
|
|
|
|
|
|
|
|
#include "srslte/phy/io/netsource.h"
|
|
|
|
|
|
|
|
namespace srslte {
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C IE Types
|
|
|
|
* Ref: TS 29.274 v10.14.0 Table 8.1-1
|
|
|
|
*
|
|
|
|
****************************************************************/
|
|
|
|
enum gtpc_ie_type {
|
|
|
|
// const uint8_t GTPC_IE_TYPE_RESERVED = 0;
|
|
|
|
GTPC_IE_TYPE_IMSI = 1,
|
|
|
|
GTPC_IE_TYPE_CAUSE = 2,
|
|
|
|
GTPC_IE_TYPE_RECOVERY = 3,
|
|
|
|
// 4 to 50 RESERVED_FOR_S101_INTERFACE
|
|
|
|
GTPC_IE_TYPE_STN_SR = 51,
|
|
|
|
// 52 to 70 RESERVED_FOR_SV_INTERFACE
|
|
|
|
GTPC_IE_TYPE_APN = 71,
|
|
|
|
GTPC_IE_TYPE_AMBR = 72,
|
|
|
|
GTPC_IE_TYPE_EBI = 73,
|
|
|
|
GTPC_IE_TYPE_IP_ADDRESS = 74,
|
|
|
|
GTPC_IE_TYPE_MEI = 75,
|
|
|
|
GTPC_IE_TYPE_MSISDN = 76,
|
|
|
|
GTPC_IE_TYPE_INDICATION = 77,
|
|
|
|
GTPC_IE_TYPE_PCO = 78,
|
|
|
|
GTPC_IE_TYPE_PDN_ADDRESS_ALLOCATION = 79,
|
|
|
|
GTPC_IE_TYPE_BEARER_QOS = 80,
|
|
|
|
GTPC_IE_TYPE_FLOW_QOS = 81,
|
|
|
|
GTPC_IE_TYPE_RAT_TYPE = 82,
|
|
|
|
GTPC_IE_TYPE_SERVING_NETWORK = 83,
|
|
|
|
GTPC_IE_TYPE_BEARER_TFT = 84,
|
|
|
|
GTPC_IE_TYPE_TAD = 85,
|
|
|
|
GTPC_IE_TYPE_ULI = 86,
|
|
|
|
GTPC_IE_TYPE_F_TEID = 87,
|
|
|
|
GTPC_IE_TYPE_TMSI = 88,
|
|
|
|
GTPC_IE_TYPE_GLOBAL_CN_ID = 89,
|
|
|
|
GTPC_IE_TYPE_S103_PDN_DATA_FORWARDING_INFO = 90,
|
|
|
|
GTPC_IE_TYPE_S1_U_DATA_FORWARDING_INFO = 91,
|
|
|
|
GTPC_IE_TYPE_DELAY_VALUE = 92,
|
|
|
|
GTPC_IE_TYPE_BEARER_CONTEXT = 93,
|
|
|
|
GTPC_IE_TYPE_CHARGING_ID = 94,
|
|
|
|
GTPC_IE_TYPE_CHARGING_CHARACTERISTICS = 95,
|
|
|
|
GTPC_IE_TYPE_TRACE_INFORMATION = 96,
|
|
|
|
GTPC_IE_TYPE_BEARER_FLAGS = 97,
|
|
|
|
// 98 Reserved
|
|
|
|
GTPC_IE_TYPE_PDN_TYPE = 99,
|
|
|
|
GTPC_IE_TYPE_PROCEDURE_TRANSACTION_ID = 100,
|
|
|
|
GTPC_IE_TYPE_DRX_PARAMETER = 101,
|
|
|
|
// 102 Reserved
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_GSM_KEY_AND_TRIPLETS = 103,
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_UMTS_KEY_USED_CIPHER_AND_QUINTUPLETS = 104,
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_GSM_KEY_USED_CIPHER_AND_QUINTUPLETS = 105,
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_UMTS_KEY_AND_QUINTUPLETS = 106,
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_EPS_SECURITY_CONTEXT_QUADRUPLETS_AND_QUINTUPLETS = 107,
|
|
|
|
GTPC_IE_TYPE_MM_CONTEXT_UMTS_KEY_QUADRUPLETS_AND_QUINTUPLETS = 108,
|
|
|
|
GTPC_IE_TYPE_PDN_CONNECTION = 109,
|
|
|
|
GTPC_IE_TYPE_PDU_NUMBERS = 110,
|
|
|
|
GTPC_IE_TYPE_P_TMSI = 111,
|
|
|
|
GTPC_IE_TYPE_P_TMSI_SIGNATURE = 112,
|
|
|
|
GTPC_IE_TYPE_HOP_COUNTER = 113,
|
|
|
|
GTPC_IE_TYPE_UE_TIME_ZONE = 114,
|
|
|
|
GTPC_IE_TYPE_TRACE_REFERENCE = 115,
|
|
|
|
GTPC_IE_TYPE_COMPLETE_REQUEST_MESSAGE = 116,
|
|
|
|
GTPC_IE_TYPE_GUTI = 117,
|
|
|
|
GTPC_IE_TYPE_F_CONTAINER = 118,
|
|
|
|
GTPC_IE_TYPE_F_CAUSE = 119,
|
|
|
|
GTPC_IE_TYPE_SELECTED_PLMN_ID = 120,
|
|
|
|
GTPC_IE_TYPE_TARGET_IDENTIFICATION = 121,
|
|
|
|
// 122 Reserved
|
|
|
|
GTPC_IE_TYPE_PACKET_FLOW_ID = 123,
|
|
|
|
GTPC_IE_TYPE_RAB_CONTEXT = 124,
|
|
|
|
GTPC_IE_TYPE_SOURCE_RNC_PDCP_CONTEXT_INFO = 125,
|
|
|
|
GTPC_IE_TYPE_UDP_SOURCE_PORT_NUMBER = 126,
|
|
|
|
GTPC_IE_TYPE_APN_RESTRICTION = 127,
|
|
|
|
GTPC_IE_TYPE_SELECTION_MODE = 128,
|
|
|
|
GTPC_IE_TYPE_SOURCE_IDENTIFICATION = 129,
|
|
|
|
// 130 RESERVED
|
|
|
|
GTPC_IE_TYPE_CHANGE_REPORTING_ACTION = 131,
|
|
|
|
GTPC_IE_TYPE_FQ_CSID = 132,
|
|
|
|
GTPC_IE_TYPE_CHANNEL_NEEDED = 133,
|
|
|
|
GTPC_IE_TYPE_EMLPP_PRIORITY = 134,
|
|
|
|
GTPC_IE_TYPE_NODE_TYPE = 135,
|
|
|
|
GTPC_IE_TYPE_FQDN = 136,
|
|
|
|
GTPC_IE_TYPE_TI = 137,
|
|
|
|
GTPC_IE_TYPE_MBMS_SESSION_DURATION = 138,
|
|
|
|
GTPC_IE_TYPE_MBMS_SERVICE_AREA = 139,
|
|
|
|
GTPC_IE_TYPE_MBMS_SESSION_IDENTIFIER = 140,
|
|
|
|
GTPC_IE_TYPE_MBMS_FLOW_IDENTIFIER = 141,
|
|
|
|
GTPC_IE_TYPE_MBMS_IP_MULTICAST_DISTRIBUTION = 142,
|
|
|
|
GTPC_IE_TYPE_MBMS_DISTRIBUTION_ACKNOWLEDGE = 143,
|
|
|
|
GTPC_IE_TYPE_RFSP_INDEX = 144,
|
|
|
|
GTPC_IE_TYPE_UCI = 145,
|
|
|
|
GTPC_IE_TYPE_CSG_INFORMATION_REPORTING_ACTION = 146,
|
|
|
|
GTPC_IE_TYPE_CSG_ID = 147,
|
|
|
|
GTPC_IE_TYPE_CMI = 148,
|
|
|
|
GTPC_IE_TYPE_SERVICE_INDICATOR = 149,
|
|
|
|
GTPC_IE_TYPE_DETACH_TYPE = 150,
|
|
|
|
GTPC_IE_TYPE_LDN = 151,
|
|
|
|
GTPC_IE_TYPE_NODE_FEATURES = 152,
|
|
|
|
GTPC_IE_TYPE_MBMS_TIME_TO_DATA_TRANSFER = 153,
|
|
|
|
GTPC_IE_TYPE_THROTTLING = 154,
|
|
|
|
GTPC_IE_TYPE_ARP = 155,
|
|
|
|
GTPC_IE_TYPE_EPC_TIMER = 156,
|
|
|
|
GTPC_IE_TYPE_SIGNALLING_PRIORITY_INDICATION = 157,
|
|
|
|
GTPC_IE_TYPE_TMGI = 158,
|
|
|
|
GTPC_IE_TYPE_ADDITIONAL_MM_CONTEXT_FOR_SRVCC = 159,
|
|
|
|
GTPC_IE_TYPE_ADDITIONAL_FLAGS_FOR_SRVCC = 160,
|
|
|
|
// 161 RESERVED
|
|
|
|
GTPC_IE_TYPE_MDT_CONFIGURATION = 162,
|
|
|
|
GTPC_IE_TYPE_APCO = 163,
|
|
|
|
// 164 RESERVED
|
|
|
|
GTPC_IE_TYPE_CHANGE_TO_REPORT_FLAGS = 165,
|
|
|
|
// 168 TO 254 SPARE. FOR FUTURE USE.
|
|
|
|
GTPC_IE_TYPE_PRIVATE_EXTENSION = 255
|
|
|
|
};
|
|
|
|
|
|
|
|
/****************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C IMSI IE
|
|
|
|
* Ref: TS 29.274 v10.14.0 Figure 8.3-1
|
|
|
|
*
|
|
|
|
****************************************************************/
|
|
|
|
/*
|
|
|
|
* The IMSI should be kept as an uint64_t.
|
|
|
|
* The responsibility to convert from uint64_t to BCD coded is on
|
|
|
|
* the pack_imsi_ie function
|
|
|
|
*/
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Cause IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.4-1 and Table 8.4-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
enum gtpc_cause_value {
|
|
|
|
// Reserved
|
|
|
|
GTPC_CAUSE_VALUE_LOCAL_DETACH = 2,
|
|
|
|
GTPC_CAUSE_VALUE_COMPLETE_DETACH = 3,
|
|
|
|
GTPC_CAUSE_VALUE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP = 4,
|
|
|
|
GTPC_CAUSE_VALUE_ISR_DEACTIVATION = 5,
|
|
|
|
GTPC_CAUSE_VALUE_ERROR_INDICATION_RECEIVED_FROM_RNC_ENODEB_S4_SGSN = 6,
|
|
|
|
GTPC_CAUSE_VALUE_IMSI_DETACH_ONLY = 7,
|
|
|
|
GTPC_CAUSE_VALUE_REACTIVATION_REQUESTED = 8,
|
|
|
|
GTPC_CAUSE_VALUE_PDN_RECONNECTION_TO_THIS_APN_DISALLOWED = 9,
|
|
|
|
GTPC_CAUSE_VALUE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP = 10,
|
|
|
|
GTPC_CAUSE_VALUE_PDN_CONNECTION_INACTIVITY_TIMER_EXPIRES = 11,
|
|
|
|
// Spare. This value range shall be used by Cause values in an initial/request message.
|
|
|
|
GTPC_CAUSE_VALUE_REQUEST_ACCEPTED = 16,
|
|
|
|
GTPC_CAUSE_VALUE_REQUEST_ACCEPTED_PARTIALLY = 17,
|
|
|
|
GTPC_CAUSE_VALUE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE = 18,
|
|
|
|
GTPC_CAUSE_VALUE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY = 19,
|
|
|
|
// 20-63 Spare.
|
|
|
|
GTPC_CAUSE_VALUE_CONTEXT_NOT_FOUND = 64,
|
|
|
|
GTPC_CAUSE_VALUE_INVALID_MESSAGE_FORMAT = 65,
|
|
|
|
GTPC_CAUSE_VALUE_VERSION_NOT_SUPPORTED_BY_NEXT_PEER = 66,
|
|
|
|
GTPC_CAUSE_VALUE_INVALID_LENGTH = 67,
|
|
|
|
GTPC_CAUSE_VALUE_SERVICE_NOT_SUPPORTED = 68,
|
|
|
|
GTPC_CAUSE_VALUE_MANDATORY_IE_INCORRECT = 69,
|
|
|
|
GTPC_CAUSE_VALUE_MANDATORY_IE_MISSING = 70,
|
|
|
|
// 71 Shall not be used.
|
|
|
|
GTPC_CAUSE_VALUE_SYSTEM_FAILURE = 72,
|
|
|
|
GTPC_CAUSE_VALUE_NO_RESOURCES_AVAILABLE = 73,
|
|
|
|
GTPC_CAUSE_VALUE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION = 74,
|
|
|
|
GTPC_CAUSE_VALUE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION = 75,
|
|
|
|
GTPC_CAUSE_VALUE_SEMANTIC_ERRORS_IN_PACKET_FILTER = 76,
|
|
|
|
GTPC_CAUSE_VALUE_SYNTACTIC_ERRORS_IN_PACKET_FILTER = 77,
|
|
|
|
GTPC_CAUSE_VALUE_MISSING_OR_UNKNOWN_APN = 78,
|
|
|
|
// 79 Shall not be used.
|
|
|
|
GTPC_CAUSE_VALUE_GRE_KEY_NOT_FOUND = 80,
|
|
|
|
GTPC_CAUSE_VALUE_RELOCATION_FAILURE = 81,
|
|
|
|
GTPC_CAUSE_VALUE_DENIED_IN_RAT = 82,
|
|
|
|
GTPC_CAUSE_VALUE_PREFERRED_PDN_TYPE_NOT_SUPPORTED = 83,
|
|
|
|
GTPC_CAUSE_VALUE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED = 84,
|
|
|
|
GTPC_CAUSE_VALUE_UE_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED = 85,
|
|
|
|
GTPC_CAUSE_VALUE_PROTOCOL_TYPE_NOT_SUPPORTED = 86,
|
|
|
|
GTPC_CAUSE_VALUE_UE_NOT_RESPONDING = 87,
|
|
|
|
GTPC_CAUSE_VALUE_UE_REFUSES = 88,
|
|
|
|
GTPC_CAUSE_VALUE_SERVICE_DENIED = 89,
|
|
|
|
GTPC_CAUSE_VALUE_UNABLE_TO_PAGE_UE = 90,
|
|
|
|
GTPC_CAUSE_VALUE_NO_MEMORY_AVAILABLE = 91,
|
|
|
|
GTPC_CAUSE_VALUE_USER_AUTHENTICATION_FAILED = 92,
|
|
|
|
GTPC_CAUSE_VALUE_APN_ACCESS_DENIED_NO_SUBSCRIPTION = 93,
|
|
|
|
GTPC_CAUSE_VALUE_REQUEST_REJECTED = 94,
|
|
|
|
GTPC_CAUSE_VALUE_P_TMSI_SIGNATURE_MISMATCH = 95,
|
|
|
|
GTPC_CAUSE_VALUE_IMSI_IMEI_NOT_KNOWN = 96,
|
|
|
|
GTPC_CAUSE_VALUE_SEMANTIC_ERROR_IN_THE_TAD_OPERATION = 97,
|
|
|
|
GTPC_CAUSE_VALUE_SYNTACTIC_ERROR_IN_THE_TAD_OPERATION = 98,
|
|
|
|
// 99 Shall not be used.
|
|
|
|
GTPC_CAUSE_VALUE_REMOTE_PEER_NOT_RESPONDING = 100,
|
|
|
|
GTPC_CAUSE_VALUE_COLLISION_WITH_NETWORK_INITIATED_REQUEST = 101,
|
|
|
|
GTPC_CAUSE_VALUE_UNABLE_TO_PAGE_UE_DUE_TO_SUSPENSION = 102,
|
|
|
|
GTPC_CAUSE_VALUE_CONDITIONAL_IE_MISSING = 103,
|
|
|
|
GTPC_CAUSE_VALUE_APN_RESTRICTION_TYPE_INCOMPATIBLE_WITH_CURRENTLY_ACTIVE_PDN_CONNECTION = 104,
|
|
|
|
GTPC_CAUSE_VALUE_INVALID_OVERALL_LENGTH_OF_THE_TRIGGERED_RESPONSE_MSG_AND_A_PIGGYBACKED_INITIAL_MSG = 105,
|
|
|
|
GTPC_CAUSE_VALUE_DATA_FORWARDING_NOT_SUPPORTED = 106,
|
|
|
|
GTPC_CAUSE_VALUE_INVALID_REPLY_FROM_REMOTE_PEER = 107,
|
|
|
|
GTPC_CAUSE_VALUE_FALLBACK_TO_GTPV1 = 108,
|
|
|
|
GTPC_CAUSE_VALUE_INVALID_PEER = 109,
|
|
|
|
GTPC_CAUSE_VALUE_TEMPORARILY_REJECTED_DUE_TO_HANDOVER_PROCEDURE_IN_PROGRESS = 110,
|
|
|
|
GTPC_CAUSE_VALUE_MODIFICATIONS_NOT_LIMITED_TO_S1_U_BEARERS = 111,
|
|
|
|
GTPC_CAUSE_VALUE_REQUEST_REJECTED_FOR_A_PMIPV6_REASON = 112,
|
|
|
|
GTPC_CAUSE_VALUE_APN_CONGESTION = 113,
|
|
|
|
GTPC_CAUSE_VALUE_BEARER_HANDLING_NOT_SUPPORTED = 114,
|
|
|
|
GTPC_CAUSE_VALUE_UE_ALREADY_RE_ATTACHED = 115,
|
|
|
|
GTPC_CAUSE_VALUE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED = 116
|
|
|
|
// 117-239 Spare. For future use in a triggered/response message.
|
|
|
|
// 240-255 Spare. For future use in an initial/request message.
|
|
|
|
};
|
|
|
|
|
|
|
|
struct gtpc_cause_ie {
|
|
|
|
enum gtpc_cause_value cause_value;
|
|
|
|
bool pce;
|
|
|
|
bool bce;
|
|
|
|
bool cs;
|
|
|
|
enum gtpc_ie_type offending_ie_type;
|
|
|
|
uint16_t length_of_offending_ie;
|
|
|
|
uint8_t offending_ie_instance;
|
|
|
|
};
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Recovery IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.5-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
/*
|
|
|
|
* The Recovery (Restart Counter) IE should be kept as an uint8_t.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Access Point Name IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.6-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
/*
|
|
|
|
* APN IE should be kept as an null terminated string.
|
|
|
|
* This string will be kept in a char[MAX_APN_LENGTH] buffer.
|
|
|
|
*/
|
|
|
|
#define MAX_APN_LENGTH 1024
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Aggregate Maximum bit-rate IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Table 8.7-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
struct gtpc_ambr_ie {
|
|
|
|
uint32_t apn_ambr_uplink;
|
|
|
|
uint32_t apn_ambr_downlink;
|
|
|
|
};
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C EPS Bearer ID address IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.8-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
/*
|
|
|
|
* The EPS Bearer ID (EBI) IE should be kept as an uint8_t.
|
|
|
|
*/
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C IP address IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.9-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
/*
|
|
|
|
* IP addresse IEs should the sockaddr_storage struct, which can hold IPv4
|
|
|
|
* and IPv6 addresses.
|
|
|
|
*/
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
// TODO IEs between 8.10 and 8.13 missing
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C PDN Type IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.14-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
enum gtpc_pdn_type { GTPC_PDN_TYPE_IPV4 = 1, GTPC_PDN_TYPE_IPV6 = 2, GTPC_PDN_TYPE_IPV4V6 = 3 };
|
|
|
|
|
|
|
|
struct gtpc_pdn_address_allocation_ie {
|
|
|
|
enum gtpc_pdn_type pdn_type;
|
|
|
|
bool ipv4_present;
|
|
|
|
bool ipv6_present;
|
|
|
|
in_addr_t ipv4;
|
|
|
|
struct in6_addr ipv6;
|
|
|
|
};
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Bearer Quality of Service IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.15-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
struct gtpc_bearer_qos_ie {
|
|
|
|
struct {
|
|
|
|
uint8_t pvi : 1;
|
|
|
|
uint8_t spare : 1;
|
|
|
|
uint8_t pl : 4;
|
|
|
|
uint8_t pci : 1;
|
|
|
|
uint8_t spare2 : 1;
|
|
|
|
} arp;
|
|
|
|
uint8_t qci;
|
|
|
|
uint8_t mbr_ul;
|
|
|
|
uint8_t mbr_dl;
|
|
|
|
uint8_t gbr_ul;
|
|
|
|
uint8_t gbr_dl;
|
|
|
|
};
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
// TODO IEs between 8.16 and 8.17 missing
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C RAT Type IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.17-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
|
|
|
|
enum gtpc_rat_type { UTRAN = 1, GERAN, WLAN, GAN, HSPA_EVOLUTION, EUTRAN, Virtual };
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
// TODO IEs between 8.17 and 8.22 missing
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Fully Qualified Tunnel End-point Identifier (F-TEID) IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Figure 8.22-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
enum gtpc_interface_type {
|
|
|
|
S1_U_ENODEB_GTP_U_INTERFACE,
|
|
|
|
S1_U_SGW_GTP_U_INTERFACE,
|
|
|
|
S12_RNC_GTP_U_INTERFACE,
|
|
|
|
S12_SGW_GTP_U_INTERFACE,
|
|
|
|
S5_S8_SGW_GTP_U_INTERFACE,
|
|
|
|
S5_S8_PGW_GTP_U_INTERFACE,
|
|
|
|
S5_S8_SGW_GTP_C_INTERFACE,
|
|
|
|
S5_S8_PGW_GTP_C_INTERFACE,
|
|
|
|
S5_S8_SGW_PMIPV6_INTERFACE, //(the 32 bit GRE key is encoded in 32 bit TEID field and since alternate CoA is not used
|
|
|
|
// the control plane and user plane addresses are the same for PMIPv6)
|
|
|
|
S5_S8_PGW_PMIPV6_INTERFACE, //(the 32 bit GRE key is encoded in 32 bit TEID field and the control plane and user plane
|
|
|
|
// addresses are the same for PMIPv6)
|
|
|
|
S11_MME_GTP_C_INTERFACE,
|
|
|
|
S11_S4_SGW_GTP_C_INTERFACE,
|
|
|
|
S10_MME_GTP_C_INTERFACE,
|
|
|
|
S3_MME_GTP_C_INTERFACE,
|
|
|
|
S3_SGSN_GTP_C_INTERFACE,
|
|
|
|
S4_SGSN_GTP_U_INTERFACE,
|
|
|
|
S4_SGW_GTP_U_INTERFACE,
|
|
|
|
S4_SGSN_GTP_C_INTERFACE,
|
|
|
|
S16_SGSN_GTP_C_INTERFACE,
|
|
|
|
ENODEB_GTP_U_INTERFACE_FOR_DL_DATA_FORWARDING,
|
|
|
|
ENODEB_GTP_U_INTERFACE_FOR_UL_DATA_FORWARDING,
|
|
|
|
RNC_GTP_U_INTERFACE_FOR_DATA_FORWARDING,
|
|
|
|
SGSN_GTP_U_INTERFACE_FOR_DATA_FORWARDING,
|
|
|
|
SGW_GTP_U_INTERFACE_FOR_DL_DATA_FORWARDING,
|
|
|
|
SM_MBMS_GW_GTP_C_INTERFACE,
|
|
|
|
SN_MBMS_GW_GTP_C_INTERFACE,
|
|
|
|
SM_MME_GTP_C_INTERFACE,
|
|
|
|
SN_SGSN_GTP_C_INTERFACE,
|
|
|
|
SGW_GTP_U_INTERFACE_FOR_UL_DATA_FORWARDING,
|
|
|
|
SN_SGSN_GTP_U_INTERFACE,
|
|
|
|
S2B_EPDG_GTP_C_INTERFACE,
|
|
|
|
S2B_U_EPDG_GTP_U_INTERFACE,
|
|
|
|
S2B_PGW_GTP_C_INTERFACE,
|
|
|
|
S2B_U_PGW_GTP_U_INTERFACE
|
|
|
|
};
|
|
|
|
|
|
|
|
typedef struct gtpc_f_teid_ie {
|
|
|
|
bool ipv4_present;
|
|
|
|
bool ipv6_present;
|
|
|
|
enum gtpc_interface_type interface_type;
|
|
|
|
uint32_t teid;
|
|
|
|
in_addr_t ipv4;
|
|
|
|
struct in6_addr ipv6; // TODO
|
|
|
|
} gtp_fteid_t;
|
|
|
|
|
|
|
|
// TODO
|
|
|
|
// TODO IEs between 8.22 and 8.28 missing
|
|
|
|
// TODO
|
|
|
|
|
|
|
|
/****************************************************************************
|
|
|
|
*
|
|
|
|
* GTP-C Bearer Context IE
|
|
|
|
* Ref: 3GPP TS 29.274 v10.14.0 Table 8.28-1
|
|
|
|
*
|
|
|
|
***************************************************************************/
|
|
|
|
// The usage of this grouped IE is specific to the GTP-C message being sent.
|
|
|
|
// As such, each GTP-C message will define it's bearer context structures
|
|
|
|
// locally, according to the rules of TS 29.274 v10.14.0 Section 7.
|
|
|
|
|
|
|
|
} // namespace srslte
|
|
|
|
#endif // SRSLTE_GTPC_IES_H
|