Rename GTPv2C specifics to gtp2 prefix (#1485)

In the past only GTPv2C was supported, and had the "gtp" generic prefix.
Later on, GTPv1C support was added, and "gtp1" prefix was used.
Let's move GTPv2C specific bits to have "gtp2" prefix too, and leave
"gtp" prefix for generic stuff among different GTP versions.
This commit is contained in:
Pau Espin 2022-04-13 00:07:39 +02:00 committed by GitHub
parent 8c22d8a20c
commit e3da7c9934
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
94 changed files with 4319 additions and 4321 deletions

View File

@ -548,7 +548,7 @@ void ogs_gtp_node_free(ogs_gtp_node_t *node)
}
ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
ogs_list_t *list, ogs_gtp_f_teid_t *f_teid, uint16_t port)
ogs_list_t *list, ogs_gtp2_f_teid_t *f_teid, uint16_t port)
{
int rv;
ogs_gtp_node_t *node = NULL;
@ -558,7 +558,7 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
ogs_assert(f_teid);
ogs_assert(port);
rv = ogs_gtp_f_teid_to_sockaddr(f_teid, port, &addr);
rv = ogs_gtp2_f_teid_to_sockaddr(f_teid, port, &addr);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
rv = ogs_filter_ip_version(
@ -576,7 +576,7 @@ ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
node = ogs_gtp_node_new(addr);
ogs_assert(node);
rv = ogs_gtp_f_teid_to_ip(f_teid, &node->ip);
rv = ogs_gtp2_f_teid_to_ip(f_teid, &node->ip);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
ogs_list_add(list, node);
@ -637,7 +637,7 @@ ogs_gtp_node_t *ogs_gtp_node_find_by_addr(
}
ogs_gtp_node_t *ogs_gtp_node_find_by_f_teid(
ogs_list_t *list, ogs_gtp_f_teid_t *f_teid)
ogs_list_t *list, ogs_gtp2_f_teid_t *f_teid)
{
int rv;
ogs_gtp_node_t *node = NULL;
@ -646,7 +646,7 @@ ogs_gtp_node_t *ogs_gtp_node_find_by_f_teid(
ogs_assert(list);
ogs_assert(f_teid);
rv = ogs_gtp_f_teid_to_ip(f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(f_teid, &ip);
ogs_assert(rv == OGS_OK);
ogs_list_for_each(list, node) {

View File

@ -92,7 +92,7 @@ ogs_gtp_node_t *ogs_gtp_node_new(ogs_sockaddr_t *sa_list);
void ogs_gtp_node_free(ogs_gtp_node_t *node);
ogs_gtp_node_t *ogs_gtp_node_add_by_f_teid(
ogs_list_t *list, ogs_gtp_f_teid_t *f_teid, uint16_t port);
ogs_list_t *list, ogs_gtp2_f_teid_t *f_teid, uint16_t port);
ogs_gtp_node_t *ogs_gtp_node_add_by_addr(
ogs_list_t *list, ogs_sockaddr_t *addr);
void ogs_gtp_node_remove(ogs_list_t *list, ogs_gtp_node_t *node);
@ -101,7 +101,7 @@ void ogs_gtp_node_remove_all(ogs_list_t *list);
ogs_gtp_node_t *ogs_gtp_node_find_by_addr(
ogs_list_t *list, ogs_sockaddr_t *addr);
ogs_gtp_node_t *ogs_gtp_node_find_by_f_teid(
ogs_list_t *list, ogs_gtp_f_teid_t *f_teid);
ogs_list_t *list, ogs_gtp2_f_teid_t *f_teid);
ogs_gtp_node_t *ogs_gtp_node_add_by_ip(
ogs_list_t *list, ogs_ip_t *ip, uint16_t port);

View File

@ -21,14 +21,14 @@
int ogs_gtpu_header_len(ogs_pkbuf_t *pkbuf)
{
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
uint8_t *ext_h = NULL;
uint16_t len = 0;
ogs_assert(pkbuf);
ogs_assert(pkbuf->data);
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
len = OGS_GTPV1U_HEADER_LEN;
if (pkbuf->len < len) return -1;

View File

@ -192,9 +192,9 @@ int16_t ogs_gtp1_build_uli(ogs_tlv_octet_t *octet,
#define OGS_GTP_GSN_ADDRESS_IPV6_LEN OGS_IPV6_LEN
typedef struct ogs_gtp1_gsn_addr_s {
union {
/* OGS_GTP_F_TEID_IPV4 */
/* OGS_GTP2_F_TEID_IPV4 */
uint32_t addr;
/* OGS_GTP_F_TEID_IPV6 */
/* OGS_GTP2_F_TEID_IPV6 */
uint8_t addr6[OGS_IPV6_LEN];
};
} __attribute__ ((packed)) ogs_gtp1_gsn_addr_t;

View File

@ -19,14 +19,14 @@
#include "ogs-gtp.h"
ogs_pkbuf_t *ogs_gtp_build_echo_request(
ogs_pkbuf_t *ogs_gtp2_build_echo_request(
uint8_t type, uint8_t recovery, uint8_t features)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_echo_request_t *req = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_echo_request_t *req = NULL;
req = &gtp_message.echo_request;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
req->recovery.presence = 1;
req->recovery.u8 = recovery;
@ -35,17 +35,17 @@ ogs_pkbuf_t *ogs_gtp_build_echo_request(
req->sending_node_features.u8 = features;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *ogs_gtp_build_echo_response(
ogs_pkbuf_t *ogs_gtp2_build_echo_response(
uint8_t type, uint8_t recovery, uint8_t features)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_echo_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_echo_response_t *rsp = NULL;
rsp = &gtp_message.echo_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
rsp->recovery.presence = 1;
rsp->recovery.u8 = recovery;
@ -54,10 +54,10 @@ ogs_pkbuf_t *ogs_gtp_build_echo_response(
rsp->sending_node_features.u8 = features;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *ogs_gtp_build_error_indication(
ogs_pkbuf_t *ogs_gtp2_build_error_indication(
uint32_t teid, ogs_sockaddr_t *addr)
{
ogs_pkbuf_t *pkbuf = NULL;

View File

@ -21,23 +21,23 @@
#error "This header cannot be included directly."
#endif
#ifndef OGS_GTP_BUILD_H
#define OGS_GTP_BUILD_H
#ifndef OGS_GTP2_BUILD_H
#define OGS_GTP2_BUILD_H
#ifdef __cplusplus
extern "C" {
#endif
ogs_pkbuf_t *ogs_gtp_build_echo_request(
ogs_pkbuf_t *ogs_gtp2_build_echo_request(
uint8_t type, uint8_t recovery, uint8_t features);
ogs_pkbuf_t *ogs_gtp_build_echo_response(
ogs_pkbuf_t *ogs_gtp2_build_echo_response(
uint8_t type, uint8_t recovery, uint8_t features);
ogs_pkbuf_t *ogs_gtp_build_error_indication(
ogs_pkbuf_t *ogs_gtp2_build_error_indication(
uint32_t teid, ogs_sockaddr_t *addr);
#ifdef __cplusplus
}
#endif
#endif /* OGS_GTP_BUILD_H */
#endif /* OGS_GTP2_BUILD_H */

View File

@ -19,8 +19,8 @@
#include "ogs-gtp.h"
int ogs_gtp_f_teid_to_sockaddr(
ogs_gtp_f_teid_t *f_teid, uint16_t port, ogs_sockaddr_t **list)
int ogs_gtp2_f_teid_to_sockaddr(
ogs_gtp2_f_teid_t *f_teid, uint16_t port, ogs_sockaddr_t **list)
{
ogs_sockaddr_t *addr = NULL, *addr6 = NULL;
@ -64,8 +64,8 @@ int ogs_gtp_f_teid_to_sockaddr(
return OGS_OK;
}
int ogs_gtp_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
ogs_gtp_f_teid_t *f_teid, int *len)
int ogs_gtp2_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
ogs_gtp2_f_teid_t *f_teid, int *len)
{
ogs_assert(f_teid);
@ -74,17 +74,17 @@ int ogs_gtp_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
f_teid->both.addr = addr->sin.sin_addr.s_addr;
f_teid->ipv6 = 1;
memcpy(f_teid->both.addr6, addr6->sin6.sin6_addr.s6_addr, OGS_IPV6_LEN);
*len = OGS_GTP_F_TEID_IPV4V6_LEN;
*len = OGS_GTP2_F_TEID_IPV4V6_LEN;
} else if (addr) {
f_teid->ipv4 = 1;
f_teid->ipv6 = 0;
f_teid->addr = addr->sin.sin_addr.s_addr;
*len = OGS_GTP_F_TEID_IPV4_LEN;
*len = OGS_GTP2_F_TEID_IPV4_LEN;
} else if (addr6) {
f_teid->ipv4 = 0;
f_teid->ipv6 = 1;
memcpy(f_teid->addr6, addr6->sin6.sin6_addr.s6_addr, OGS_IPV6_LEN);
*len = OGS_GTP_F_TEID_IPV6_LEN;
*len = OGS_GTP2_F_TEID_IPV6_LEN;
} else {
ogs_error("No IPv4 or IPv6");
return OGS_ERROR;
@ -93,7 +93,7 @@ int ogs_gtp_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
return OGS_OK;
}
int ogs_gtp_f_teid_to_ip(ogs_gtp_f_teid_t *f_teid, ogs_ip_t *ip)
int ogs_gtp2_f_teid_to_ip(ogs_gtp2_f_teid_t *f_teid, ogs_ip_t *ip)
{
ogs_assert(ip);
ogs_assert(f_teid);
@ -121,7 +121,7 @@ int ogs_gtp_f_teid_to_ip(ogs_gtp_f_teid_t *f_teid, ogs_ip_t *ip)
return OGS_OK;
}
int ogs_gtp_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp_f_teid_t *f_teid, int *len)
int ogs_gtp2_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp2_f_teid_t *f_teid, int *len)
{
ogs_assert(ip);
ogs_assert(f_teid);
@ -132,13 +132,13 @@ int ogs_gtp_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp_f_teid_t *f_teid, int *len)
if (f_teid->ipv4 && f_teid->ipv6) {
f_teid->both.addr = ip->addr;
memcpy(f_teid->both.addr6, ip->addr6, OGS_IPV6_LEN);
*len = OGS_GTP_F_TEID_IPV4V6_LEN;
*len = OGS_GTP2_F_TEID_IPV4V6_LEN;
} else if (f_teid->ipv4) {
f_teid->addr = ip->addr;
*len = OGS_GTP_F_TEID_IPV4_LEN;
*len = OGS_GTP2_F_TEID_IPV4_LEN;
} else if (f_teid->ipv6) {
memcpy(f_teid->addr6, ip->addr6, OGS_IPV6_LEN);
*len = OGS_GTP_F_TEID_IPV6_LEN;
*len = OGS_GTP2_F_TEID_IPV6_LEN;
} else {
ogs_error("No IPv4 or IPv6");
return OGS_ERROR;
@ -147,7 +147,7 @@ int ogs_gtp_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp_f_teid_t *f_teid, int *len)
return OGS_OK;
}
int ogs_gtp_paa_to_ip(ogs_paa_t *paa, ogs_ip_t *ip)
int ogs_gtp2_paa_to_ip(ogs_paa_t *paa, ogs_ip_t *ip)
{
ogs_assert(paa);
ogs_assert(ip);

View File

@ -21,21 +21,21 @@
#error "This header cannot be included directly."
#endif
#ifndef OGS_GTP_CONV_H
#define OGS_GTP_CONV_H
#ifndef OGS_GTP2_CONV_H
#define OGS_GTP2_CONV_H
#ifdef __cplusplus
extern "C" {
#endif
int ogs_gtp_f_teid_to_sockaddr(
ogs_gtp_f_teid_t *f_teid, uint16_t port, ogs_sockaddr_t **list);
int ogs_gtp_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
ogs_gtp_f_teid_t *f_teid, int *len);
int ogs_gtp_f_teid_to_ip(ogs_gtp_f_teid_t *f_teid, ogs_ip_t *ip);
int ogs_gtp_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp_f_teid_t *f_teid, int *len);
int ogs_gtp2_f_teid_to_sockaddr(
ogs_gtp2_f_teid_t *f_teid, uint16_t port, ogs_sockaddr_t **list);
int ogs_gtp2_sockaddr_to_f_teid(ogs_sockaddr_t *addr, ogs_sockaddr_t *addr6,
ogs_gtp2_f_teid_t *f_teid, int *len);
int ogs_gtp2_f_teid_to_ip(ogs_gtp2_f_teid_t *f_teid, ogs_ip_t *ip);
int ogs_gtp2_ip_to_f_teid(ogs_ip_t *ip, ogs_gtp2_f_teid_t *f_teid, int *len);
int ogs_gtp_paa_to_ip(ogs_paa_t *paa, ogs_ip_t *ip);
int ogs_gtp2_paa_to_ip(ogs_paa_t *paa, ogs_ip_t *ip);
#ifdef __cplusplus
}

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -19,16 +19,16 @@
#include "ogs-gtp.h"
int ogs_gtp_send_user_plane(
int ogs_gtp2_send_user_plane(
ogs_gtp_node_t *gnode,
ogs_gtp_header_t *gtp_hdesc, ogs_gtp_extension_header_t *ext_hdesc,
ogs_gtp2_header_t *gtp_hdesc, ogs_gtp2_extension_header_t *ext_hdesc,
ogs_pkbuf_t *pkbuf)
{
char buf[OGS_ADDRSTRLEN];
int rv;
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp_extension_header_t *ext_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
ogs_gtp2_extension_header_t *ext_h = NULL;
uint8_t flags;
uint8_t gtp_hlen = 0;
@ -53,7 +53,7 @@ int ogs_gtp_send_user_plane(
ogs_pkbuf_push(pkbuf, gtp_hlen);
/* Fill GTP Header */
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
ogs_assert(gtp_h);
memset(gtp_h, 0, gtp_hlen);
@ -90,24 +90,24 @@ int ogs_gtp_send_user_plane(
/* Fill Extention Header */
if (gtp_h->flags & OGS_GTPU_FLAGS_E) {
ext_h = (ogs_gtp_extension_header_t *)
ext_h = (ogs_gtp2_extension_header_t *)
(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_assert(ext_h);
if (ext_hdesc->qos_flow_identifier) {
/* 5G Core */
ext_h->type = OGS_GTP_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER;
ext_h->type = OGS_GTP2_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER;
ext_h->len = 1;
ext_h->pdu_type = ext_hdesc->pdu_type;
ext_h->qos_flow_identifier = ext_hdesc->qos_flow_identifier;
ext_h->next_type =
OGS_GTP_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS;
OGS_GTP2_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS;
} else {
/* EPC */
ext_h->type = ext_hdesc->type;
ext_h->len = 1;
ext_h->next_type =
OGS_GTP_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS;
OGS_GTP2_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS;
}
}
@ -126,17 +126,17 @@ int ogs_gtp_send_user_plane(
return rv;
}
ogs_pkbuf_t *ogs_gtp_handle_echo_req(ogs_pkbuf_t *pkb)
ogs_pkbuf_t *ogs_gtp2_handle_echo_req(ogs_pkbuf_t *pkb)
{
ogs_gtp_header_t *gtph = NULL;
ogs_gtp2_header_t *gtph = NULL;
ogs_pkbuf_t *pkb_resp = NULL;
ogs_gtp_header_t *gtph_resp = NULL;
ogs_gtp2_header_t *gtph_resp = NULL;
uint16_t length;
int idx;
ogs_assert(pkb);
gtph = (ogs_gtp_header_t *)pkb->data;
gtph = (ogs_gtp2_header_t *)pkb->data;
/* Check GTP version. Now only support GTPv1(version = 1) */
if ((gtph->flags >> 5) != 1) {
return NULL;
@ -151,7 +151,7 @@ ogs_pkbuf_t *ogs_gtp_handle_echo_req(ogs_pkbuf_t *pkb)
100 /* enough for ECHO_RSP; use smaller buffer */);
ogs_expect_or_return_val(pkb_resp, NULL);
ogs_pkbuf_put(pkb_resp, 100);
gtph_resp = (ogs_gtp_header_t *)pkb_resp->data;
gtph_resp = (ogs_gtp2_header_t *)pkb_resp->data;
/* reply back immediately */
gtph_resp->flags = (1 << 5); /* set version */
@ -202,53 +202,53 @@ void ogs_gtp2_send_error_message(
ogs_gtp_xact_t *xact, uint32_t teid, uint8_t type, uint8_t cause_value)
{
int rv;
ogs_gtp_message_t errmsg;
ogs_gtp_cause_t cause;
ogs_gtp_tlv_cause_t *tlv = NULL;
ogs_gtp2_message_t errmsg;
ogs_gtp2_cause_t cause;
ogs_gtp2_tlv_cause_t *tlv = NULL;
ogs_pkbuf_t *pkbuf = NULL;
memset(&errmsg, 0, sizeof(ogs_gtp_message_t));
memset(&errmsg, 0, sizeof(ogs_gtp2_message_t));
errmsg.h.teid = teid;
errmsg.h.type = type;
switch (type) {
case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
tlv = &errmsg.create_session_response.cause;
break;
case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE:
case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE:
tlv = &errmsg.modify_bearer_response.cause;
break;
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
tlv = &errmsg.delete_session_response.cause;
break;
case OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
tlv = &errmsg.release_access_bearers_response.cause;
break;
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
tlv = &errmsg.downlink_data_notification_acknowledge.cause;
break;
case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE:
tlv = &errmsg.create_bearer_response.cause;
break;
case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE:
tlv = &errmsg.update_bearer_response.cause;
break;
case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
tlv = &errmsg.delete_bearer_response.cause;
break;
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
tlv = &errmsg.create_indirect_data_forwarding_tunnel_response.cause;
break;
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
tlv = &errmsg.delete_indirect_data_forwarding_tunnel_response.cause;
break;
case OGS_GTP_MODIFY_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP2_MODIFY_BEARER_FAILURE_INDICATION_TYPE:
tlv = &errmsg.modify_bearer_failure_indication.cause;
break;
case OGS_GTP_DELETE_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP2_DELETE_BEARER_FAILURE_INDICATION_TYPE:
tlv = &errmsg.delete_bearer_failure_indication.cause;
break;
case OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
tlv = &errmsg.bearer_resource_failure_indication.cause;
break;
default:
@ -264,7 +264,7 @@ void ogs_gtp2_send_error_message(
tlv->len = sizeof(cause);
tlv->data = &cause;
pkbuf = ogs_gtp_build_msg(&errmsg);
pkbuf = ogs_gtp2_build_msg(&errmsg);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(xact, &errmsg.h, pkbuf);
@ -274,23 +274,23 @@ void ogs_gtp2_send_error_message(
ogs_expect(rv == OGS_OK);
}
void ogs_gtp_send_echo_request(
void ogs_gtp2_send_echo_request(
ogs_gtp_node_t *gnode, uint8_t recovery, uint8_t features)
{
int rv;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(gnode);
ogs_debug("[GTP] Sending Echo Request");
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_ECHO_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_ECHO_REQUEST_TYPE;
h.teid = 0;
pkbuf = ogs_gtp_build_echo_request(h.type, recovery, features);
pkbuf = ogs_gtp2_build_echo_request(h.type, recovery, features);
ogs_expect_or_return(pkbuf);
xact = ogs_gtp_xact_local_create(gnode, &h, pkbuf, NULL, NULL);
@ -299,22 +299,22 @@ void ogs_gtp_send_echo_request(
ogs_expect(rv == OGS_OK);
}
void ogs_gtp_send_echo_response(ogs_gtp_xact_t *xact,
void ogs_gtp2_send_echo_response(ogs_gtp_xact_t *xact,
uint8_t recovery, uint8_t features)
{
int rv;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_assert(xact);
ogs_debug("[GTP] Sending Echo Response");
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_ECHO_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_ECHO_RESPONSE_TYPE;
h.teid = 0;
pkbuf = ogs_gtp_build_echo_response(h.type, recovery, features);
pkbuf = ogs_gtp2_build_echo_response(h.type, recovery, features);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(xact, &h, pkbuf);

View File

@ -30,19 +30,18 @@ extern "C" {
typedef struct ogs_gtp_xact_s ogs_gtp_xact_t;
int ogs_gtp_send_user_plane(
int ogs_gtp2_send_user_plane(
ogs_gtp_node_t *gnode,
ogs_gtp_header_t *gtp_hdesc, ogs_gtp_extension_header_t *ext_hdesc,
ogs_gtp2_header_t *gtp_hdesc, ogs_gtp2_extension_header_t *ext_hdesc,
ogs_pkbuf_t *pkbuf);
ogs_pkbuf_t *ogs_gtp_handle_echo_req(ogs_pkbuf_t *pkt);
ogs_pkbuf_t *ogs_gtp2_handle_echo_req(ogs_pkbuf_t *pkt);
void ogs_gtp2_send_error_message(
ogs_gtp_xact_t *xact, uint32_t teid, uint8_t type, uint8_t cause_value);
void ogs_gtp_send_echo_request(
void ogs_gtp2_send_echo_request(
ogs_gtp_node_t *gnode, uint8_t recovery, uint8_t features);
void ogs_gtp_send_echo_response(ogs_gtp_xact_t *xact,
void ogs_gtp2_send_echo_response(ogs_gtp_xact_t *xact,
uint8_t recovery, uint8_t features);
#ifdef __cplusplus

View File

@ -440,8 +440,8 @@ f.write("""#if !defined(OGS_GTP_INSIDE) && !defined(OGS_GTP_COMPILATION)
#error "This header cannot be included directly."
#endif
#ifndef OGS_GTP_MESSAGE_H
#define OGS_GTP_MESSAGE_H
#ifndef OGS_GTP2_MESSAGE_H
#define OGS_GTP2_MESSAGE_H
#ifdef __cplusplus
extern "C" {
@ -450,12 +450,12 @@ extern "C" {
/* 5.1 General format */
#define OGS_GTPV1U_HEADER_LEN 8
#define OGS_GTPV2C_HEADER_LEN 12
#define OGS_GTP_TEID_LEN 4
typedef struct ogs_gtp_header_s {
#define OGS_GTP2_TEID_LEN 4
typedef struct ogs_gtp2_header_s {
union {
struct {
#define OGS_GTP_VERSION_0 0
#define OGS_GTP_VERSION_1 1
#define OGS_GTP2_VERSION_0 0
#define OGS_GTP2_VERSION_1 1
ED4(uint8_t version:3;,
uint8_t piggybacked:1;,
uint8_t teid_presence:1;,
@ -482,14 +482,14 @@ typedef struct ogs_gtp_header_s {
struct {
uint32_t teid;
/* sqn : 31bit ~ 8bit, spare : 7bit ~ 0bit */
#define OGS_GTP_XID_TO_SQN(__xid) htobe32(((__xid) << 8))
#define OGS_GTP_SQN_TO_XID(__sqn) (be32toh(__sqn) >> 8)
#define OGS_GTP2_XID_TO_SQN(__xid) htobe32(((__xid) << 8))
#define OGS_GTP2_SQN_TO_XID(__sqn) (be32toh(__sqn) >> 8)
uint32_t sqn;
};
/* sqn : 31bit ~ 8bit, spare : 7bit ~ 0bit */
uint32_t sqn_only;
};
} __attribute__ ((packed)) ogs_gtp_header_t;
} __attribute__ ((packed)) ogs_gtp2_header_t;
/* GTPv2-C message type */
""")
@ -497,13 +497,13 @@ typedef struct ogs_gtp_header_s {
tmp = [(k, v["type"]) for k, v in msg_list.items()]
sorted_msg_list = sorted(tmp, key=lambda tup: int(tup[1]))
for (k, v) in sorted_msg_list:
f.write("#define OGS_GTP_" + v_upper(k) + "_TYPE " + v + "\n")
f.write("#define OGS_GTP2_" + v_upper(k) + "_TYPE " + v + "\n")
f.write("\n")
tmp = [(k, v["type"]) for k, v in type_list.items()]
sorted_type_list = sorted(tmp, key=lambda tup: int(tup[1]))
for (k, v) in sorted_type_list:
f.write("#define OGS_GTP_" + v_upper(k) + "_TYPE " + v + "\n")
f.write("#define OGS_GTP2_" + v_upper(k) + "_TYPE " + v + "\n")
f.write("\n")
f.write("/* Information Element TLV Descriptor */\n")
@ -511,7 +511,7 @@ for (k, v) in sorted_type_list:
if k in group_list.keys():
continue
for instance in range(0, int(type_list[k]["max_instance"])+1):
f.write("extern ogs_tlv_desc_t ogs_gtp_tlv_desc_" + v_lower(k))
f.write("extern ogs_tlv_desc_t ogs_gtp2_tlv_desc_" + v_lower(k))
f.write("_" + str(instance) + ";\n")
f.write("\n")
@ -527,13 +527,13 @@ sorted_group_list = sorted(tmp, key=lambda tup: int(tup[1]))
f.write("/* Group Information Element TLV Descriptor */\n")
for (k, v) in sorted_group_list:
for instance in range(0, int(type_list[k]["max_instance"])+1):
f.write("extern ogs_tlv_desc_t ogs_gtp_tlv_desc_" + v_lower(k))
f.write("extern ogs_tlv_desc_t ogs_gtp2_tlv_desc_" + v_lower(k))
f.write("_" + str(instance) + ";\n")
f.write("\n")
f.write("/* Message Descriptor */\n")
for (k, v) in sorted_msg_list:
f.write("extern ogs_tlv_desc_t ogs_gtp_tlv_desc_" + v_lower(k) + ";\n")
f.write("extern ogs_tlv_desc_t ogs_gtp2_tlv_desc_" + v_lower(k) + ";\n")
f.write("\n")
f.write("/* Structure for Information Element */\n")
@ -542,25 +542,25 @@ for (k, v) in sorted_type_list:
continue
if "size" in type_list[k]:
if type_list[k]["size"] == 1:
f.write("typedef ogs_tlv_uint8_t ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("typedef ogs_tlv_uint8_t ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
elif type_list[k]["size"] == 2:
f.write("typedef ogs_tlv_uint16_t ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("typedef ogs_tlv_uint16_t ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
elif type_list[k]["size"] == 3:
f.write("typedef ogs_tlv_uint24_t ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("typedef ogs_tlv_uint24_t ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
elif type_list[k]["size"] == 4:
f.write("typedef ogs_tlv_uint32_t ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("typedef ogs_tlv_uint32_t ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
else:
assert False, "Unknown size = %d for key = %s" % (type_list[k]["size"], k)
else:
f.write("typedef ogs_tlv_octet_t ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("typedef ogs_tlv_octet_t ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
f.write("\n")
f.write("/* Structure for Group Information Element */\n")
for (k, v) in sorted_group_list:
f.write("typedef struct ogs_gtp_tlv_" + v_lower(k) + "_s {\n")
f.write("typedef struct ogs_gtp2_tlv_" + v_lower(k) + "_s {\n")
f.write(" ogs_tlv_presence_t presence;\n")
for ies in group_list[k]["ies"]:
f.write(" ogs_gtp_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
f.write(" ogs_gtp2_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
v_lower(ies["ie_value"]))
if ies["ie_type"] == "F-TEID":
if ies["ie_value"] == "S2b-U ePDG F-TEID":
@ -572,40 +572,40 @@ for (k, v) in sorted_group_list:
f.write(" /* Instance : " + ies["instance"] + " */\n")
else:
f.write(";\n")
f.write("} ogs_gtp_tlv_" + v_lower(k) + "_t;\n")
f.write("} ogs_gtp2_tlv_" + v_lower(k) + "_t;\n")
f.write("\n")
f.write("/* Structure for Message */\n")
for (k, v) in sorted_msg_list:
if "ies" in msg_list[k]:
f.write("typedef struct ogs_gtp_" + v_lower(k) + "_s {\n")
f.write("typedef struct ogs_gtp2_" + v_lower(k) + "_s {\n")
for ies in msg_list[k]["ies"]:
if (k == 'Create Indirect Data Forwarding Tunnel Request' or k == 'Create Indirect Data Forwarding Tunnel Response') and ies["ie_value"] == 'Bearer Contexts':
f.write(" ogs_gtp_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
f.write(" ogs_gtp2_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
v_lower(ies["ie_value"]) + "[8];\n")
else:
f.write(" ogs_gtp_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
f.write(" ogs_gtp2_tlv_" + v_lower(ies["ie_type"]) + "_t " + \
v_lower(ies["ie_value"]) + ";\n")
f.write("} ogs_gtp_" + v_lower(k) + "_t;\n")
f.write("} ogs_gtp2_" + v_lower(k) + "_t;\n")
f.write("\n")
f.write("typedef struct ogs_gtp_message_s {\n")
f.write(" ogs_gtp_header_t h;\n")
f.write("typedef struct ogs_gtp2_message_s {\n")
f.write(" ogs_gtp2_header_t h;\n")
f.write(" union {\n")
for (k, v) in sorted_msg_list:
if "ies" in msg_list[k]:
f.write(" ogs_gtp_" + v_lower(k) + "_t " + v_lower(k) + ";\n");
f.write(" ogs_gtp2_" + v_lower(k) + "_t " + v_lower(k) + ";\n");
f.write(" };\n");
f.write("} ogs_gtp_message_t;\n\n")
f.write("} ogs_gtp2_message_t;\n\n")
f.write("""int ogs_gtp_parse_msg(ogs_gtp_message_t *gtp_message, ogs_pkbuf_t *pkbuf);
ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message);
f.write("""int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp_message, ogs_pkbuf_t *pkbuf);
ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp_message);
#ifdef __cplusplus
}
#endif
#endif /* OGS_GTP_MESSAGE_H */
#endif /* OGS_GTP2_MESSAGE_H */
""")
f.close()
@ -619,7 +619,7 @@ for (k, v) in sorted_type_list:
if k in group_list.keys():
continue
for instance in range(0, int(type_list[k]["max_instance"])+1):
f.write("ogs_tlv_desc_t ogs_gtp_tlv_desc_%s_%d =\n" % (v_lower(k), instance))
f.write("ogs_tlv_desc_t ogs_gtp2_tlv_desc_%s_%d =\n" % (v_lower(k), instance))
f.write("{\n")
if "size" in type_list[k]:
if type_list[k]["size"] == 1:
@ -635,89 +635,89 @@ for (k, v) in sorted_type_list:
else:
f.write(" OGS_TLV_VAR_STR,\n")
f.write(" \"%s\",\n" % k)
f.write(" OGS_GTP_%s_TYPE,\n" % v_upper(k))
f.write(" OGS_GTP2_%s_TYPE,\n" % v_upper(k))
if "size" in type_list[k]:
f.write(" %d,\n" % type_list[k]["size"])
else:
f.write(" 0,\n")
f.write(" %d,\n" % instance)
f.write(" sizeof(ogs_gtp_tlv_%s_t),\n" % v_lower(k))
f.write(" sizeof(ogs_gtp2_tlv_%s_t),\n" % v_lower(k))
f.write(" { NULL }\n")
f.write("};\n\n")
for (k, v) in sorted_group_list:
for instance in range(0, int(type_list[k]["max_instance"])+1):
f.write("ogs_tlv_desc_t ogs_gtp_tlv_desc_%s_%d =\n" % (v_lower(k), instance))
f.write("ogs_tlv_desc_t ogs_gtp2_tlv_desc_%s_%d =\n" % (v_lower(k), instance))
f.write("{\n")
f.write(" OGS_TLV_COMPOUND,\n")
f.write(" \"%s\",\n" % k)
f.write(" OGS_GTP_%s_TYPE,\n" % v_upper(k))
f.write(" OGS_GTP2_%s_TYPE,\n" % v_upper(k))
f.write(" 0,\n")
f.write(" %d,\n" % instance)
f.write(" sizeof(ogs_gtp_tlv_%s_t),\n" % v_lower(k))
f.write(" sizeof(ogs_gtp2_tlv_%s_t),\n" % v_lower(k))
f.write(" {\n")
for ies in group_list[k]["ies"]:
f.write(" &ogs_gtp_tlv_desc_%s_%s,\n" % (v_lower(ies["ie_type"]), v_lower(ies["instance"])))
f.write(" &ogs_gtp2_tlv_desc_%s_%s,\n" % (v_lower(ies["ie_type"]), v_lower(ies["instance"])))
f.write(" NULL,\n")
f.write(" }\n")
f.write("};\n\n")
for (k, v) in sorted_msg_list:
if "ies" in msg_list[k]:
f.write("ogs_tlv_desc_t ogs_gtp_tlv_desc_%s =\n" % v_lower(k))
f.write("ogs_tlv_desc_t ogs_gtp2_tlv_desc_%s =\n" % v_lower(k))
f.write("{\n")
f.write(" OGS_TLV_MESSAGE,\n")
f.write(" \"%s\",\n" % k)
f.write(" 0, 0, 0, 0, {\n")
for ies in msg_list[k]["ies"]:
f.write(" &ogs_gtp_tlv_desc_%s_%s,\n" % (v_lower(ies["ie_type"]), v_lower(ies["instance"])))
f.write(" &ogs_gtp2_tlv_desc_%s_%s,\n" % (v_lower(ies["ie_type"]), v_lower(ies["instance"])))
if (k == 'Create Indirect Data Forwarding Tunnel Request' or k == 'Create Indirect Data Forwarding Tunnel Response') and ies["ie_value"] == 'Bearer Contexts':
f.write(" &ogs_tlv_desc_more8,\n")
f.write(" NULL,\n")
f.write("}};\n\n")
f.write("\n")
f.write("""int ogs_gtp_parse_msg(ogs_gtp_message_t *gtp_message, ogs_pkbuf_t *pkbuf)
f.write("""int ogs_gtp2_parse_msg(ogs_gtp2_message_t *gtp_message, ogs_pkbuf_t *pkbuf)
{
int rv = OGS_ERROR;
ogs_gtp_header_t *h = NULL;
ogs_gtp2_header_t *h = NULL;
uint16_t size = 0;
ogs_assert(gtp_message);
ogs_assert(gtp2_message);
ogs_assert(pkbuf);
ogs_assert(pkbuf->len);
h = (ogs_gtp_header_t *)pkbuf->data;
h = (ogs_gtp2_header_t *)pkbuf->data;
ogs_assert(h);
memset(gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(gtp2_message, 0, sizeof(ogs_gtp2_message_t));
if (h->teid_presence)
size = OGS_GTPV2C_HEADER_LEN;
else
size = OGS_GTPV2C_HEADER_LEN-OGS_GTP_TEID_LEN;
size = OGS_GTPV2C_HEADER_LEN-OGS_GTP2_TEID_LEN;
ogs_assert(ogs_pkbuf_pull(pkbuf, size));
memcpy(&gtp_message->h, pkbuf->data - size, size);
memcpy(&gtp2_message->h, pkbuf->data - size, size);
if (h->teid_presence)
gtp_message->h.teid = be32toh(gtp_message->h.teid);
gtp2_message->h.teid = be32toh(gtp_message->h.teid);
if (pkbuf->len == 0) {
ogs_assert(ogs_pkbuf_push(pkbuf, size));
return OGS_OK;
}
switch(gtp_message->h.type) {
switch(gtp2_message->h.type) {
""")
for (k, v) in sorted_msg_list:
if "ies" in msg_list[k]:
f.write(" case OGS_GTP_%s_TYPE:\n" % v_upper(k))
f.write(" rv = ogs_tlv_parse_msg(&gtp_message->%s,\n" % v_lower(k))
f.write(" &ogs_gtp_tlv_desc_%s, pkbuf, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k))
f.write(" case OGS_GTP2_%s_TYPE:\n" % v_upper(k))
f.write(" rv = ogs_tlv_parse_msg(&gtp2_message->%s,\n" % v_lower(k))
f.write(" &ogs_gtp2_tlv_desc_%s, pkbuf, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k))
f.write(" break;\n")
f.write(""" default:
ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type);
ogs_warn("Not implmeneted(type:%d)", gtp2_message->h.type);
break;
}
@ -728,21 +728,21 @@ f.write(""" default:
""")
f.write("""ogs_pkbuf_t *ogs_gtp_build_msg(ogs_gtp_message_t *gtp_message)
f.write("""ogs_pkbuf_t *ogs_gtp2_build_msg(ogs_gtp2_message_t *gtp_message)
{
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(gtp_message);
switch(gtp_message->h.type) {
ogs_assert(gtp2_message);
switch(gtp2_message->h.type) {
""")
for (k, v) in sorted_msg_list:
if "ies" in msg_list[k]:
f.write(" case OGS_GTP_%s_TYPE:\n" % v_upper(k))
f.write(" pkbuf = ogs_tlv_build_msg(&ogs_gtp_tlv_desc_%s,\n" % v_lower(k))
f.write(" &gtp_message->%s, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k))
f.write(" case OGS_GTP2_%s_TYPE:\n" % v_upper(k))
f.write(" pkbuf = ogs_tlv_build_msg(&ogs_gtp2_tlv_desc_%s,\n" % v_lower(k))
f.write(" &gtp2_message->%s, OGS_TLV_MODE_T1_L2_I1);\n" % v_lower(k))
f.write(" break;\n")
f.write(""" default:
ogs_warn("Not implmeneted(type:%d)", gtp_message->h.type);
ogs_warn("Not implmeneted(type:%d)", gtp2_message->h.type);
break;
}

View File

@ -23,17 +23,17 @@
* 10.5.6.3 Protocol configuration options in 3GPP TS 24.008 */
/* 8.15 Bearer Quality of Service (Bearer QoS) */
int16_t ogs_gtp_parse_bearer_qos(
ogs_gtp_bearer_qos_t *bearer_qos, ogs_tlv_octet_t *octet)
int16_t ogs_gtp2_parse_bearer_qos(
ogs_gtp2_bearer_qos_t *bearer_qos, ogs_tlv_octet_t *octet)
{
ogs_gtp_bearer_qos_t *source = (ogs_gtp_bearer_qos_t *)octet->data;
ogs_gtp2_bearer_qos_t *source = (ogs_gtp2_bearer_qos_t *)octet->data;
int16_t size = 0;
ogs_assert(bearer_qos);
ogs_assert(octet);
ogs_assert(octet->len == GTP_BEARER_QOS_LEN);
ogs_assert(octet->len == GTP2_BEARER_QOS_LEN);
memset(bearer_qos, 0, sizeof(ogs_gtp_bearer_qos_t));
memset(bearer_qos, 0, sizeof(ogs_gtp2_bearer_qos_t));
bearer_qos->pre_emption_capability = source->pre_emption_capability;
bearer_qos->priority_level = source->priority_level;
@ -66,19 +66,19 @@ int16_t ogs_gtp_parse_bearer_qos(
return size;
}
int16_t ogs_gtp_build_bearer_qos(ogs_tlv_octet_t *octet,
ogs_gtp_bearer_qos_t *bearer_qos, void *data, int data_len)
int16_t ogs_gtp2_build_bearer_qos(ogs_tlv_octet_t *octet,
ogs_gtp2_bearer_qos_t *bearer_qos, void *data, int data_len)
{
ogs_gtp_bearer_qos_t target;
ogs_gtp2_bearer_qos_t target;
int16_t size = 0;
ogs_assert(bearer_qos);
ogs_assert(octet);
ogs_assert(data);
ogs_assert(data_len >= GTP_BEARER_QOS_LEN);
ogs_assert(data_len >= GTP2_BEARER_QOS_LEN);
octet->data = data;
memcpy(&target, bearer_qos, sizeof(ogs_gtp_bearer_qos_t));
memcpy(&target, bearer_qos, sizeof(ogs_gtp2_bearer_qos_t));
memcpy((unsigned char *)octet->data + size, &target, 2);
size += 2;
@ -108,7 +108,7 @@ int16_t ogs_gtp_build_bearer_qos(ogs_tlv_octet_t *octet,
}
/* 8.16 Flow Quality of Service (Flow QoS) */
uint64_t ogs_gtp_qos_to_kbps(uint8_t br, uint8_t extended, uint8_t extended2)
uint64_t ogs_gtp2_qos_to_kbps(uint8_t br, uint8_t extended, uint8_t extended2)
{
/*
* Octet 12 : 00000000
@ -198,17 +198,17 @@ uint64_t ogs_gtp_qos_to_kbps(uint8_t br, uint8_t extended, uint8_t extended2)
return 0;
}
int16_t ogs_gtp_parse_flow_qos(
ogs_gtp_flow_qos_t *flow_qos, ogs_tlv_octet_t *octet)
int16_t ogs_gtp2_parse_flow_qos(
ogs_gtp2_flow_qos_t *flow_qos, ogs_tlv_octet_t *octet)
{
ogs_gtp_flow_qos_t *source = (ogs_gtp_flow_qos_t *)octet->data;
ogs_gtp2_flow_qos_t *source = (ogs_gtp2_flow_qos_t *)octet->data;
int16_t size = 0;
ogs_assert(flow_qos);
ogs_assert(octet);
ogs_assert(octet->len == GTP_FLOW_QOS_LEN);
ogs_assert(octet->len == GTP2_FLOW_QOS_LEN);
memset(flow_qos, 0, sizeof(ogs_gtp_flow_qos_t));
memset(flow_qos, 0, sizeof(ogs_gtp2_flow_qos_t));
flow_qos->qci = source->qci;
size++;
@ -236,19 +236,19 @@ int16_t ogs_gtp_parse_flow_qos(
return size;
}
int16_t ogs_gtp_build_flow_qos(ogs_tlv_octet_t *octet,
ogs_gtp_flow_qos_t *flow_qos, void *data, int data_len)
int16_t ogs_gtp2_build_flow_qos(ogs_tlv_octet_t *octet,
ogs_gtp2_flow_qos_t *flow_qos, void *data, int data_len)
{
ogs_gtp_flow_qos_t target;
ogs_gtp2_flow_qos_t target;
int16_t size = 0;
ogs_assert(flow_qos);
ogs_assert(octet);
ogs_assert(data);
ogs_assert(data_len >= GTP_FLOW_QOS_LEN);
ogs_assert(data_len >= GTP2_FLOW_QOS_LEN);
octet->data = data;
memcpy(&target, flow_qos, sizeof(ogs_gtp_flow_qos_t));
memcpy(&target, flow_qos, sizeof(ogs_gtp2_flow_qos_t));
memcpy((unsigned char *)octet->data + size, &target, 2);
size += 1;
@ -279,7 +279,7 @@ int16_t ogs_gtp_build_flow_qos(ogs_tlv_octet_t *octet,
/* 8.19 EPS Bearer Level Traffic Flow Template (Bearer TFT)
* See subclause 10.5.6.12 in 3GPP TS 24.008 [13]. */
int16_t ogs_gtp_parse_tft(ogs_gtp_tft_t *tft, ogs_tlv_octet_t *octet)
int16_t ogs_gtp2_parse_tft(ogs_gtp2_tft_t *tft, ogs_tlv_octet_t *octet)
{
int16_t size = 0;
int i, j, len = 0;
@ -287,19 +287,19 @@ int16_t ogs_gtp_parse_tft(ogs_gtp_tft_t *tft, ogs_tlv_octet_t *octet)
ogs_assert(tft);
ogs_assert(octet);
memset(tft, 0, sizeof(ogs_gtp_tft_t));
memset(tft, 0, sizeof(ogs_gtp2_tft_t));
ogs_assert(size+sizeof(tft->flags) <= octet->len);
memcpy(&tft->flags, (unsigned char *)octet->data+size, sizeof(tft->flags));
size++;
if (tft->code == OGS_GTP_TFT_CODE_IGNORE_THIS_IE) {
if (tft->code == OGS_GTP2_TFT_CODE_IGNORE_THIS_IE) {
ogs_error("Invalid TFT Code(Spare)");
return size;
}
if (tft->code == OGS_GTP_TFT_CODE_NO_TFT_OPERATION ||
tft->code == OGS_GTP_TFT_CODE_DELETE_EXISTING_TFT)
if (tft->code == OGS_GTP2_TFT_CODE_NO_TFT_OPERATION ||
tft->code == OGS_GTP2_TFT_CODE_DELETE_EXISTING_TFT)
return size;
for (i = 0; i < tft->num_of_packet_filter &&
@ -309,7 +309,7 @@ int16_t ogs_gtp_parse_tft(ogs_gtp_tft_t *tft, ogs_tlv_octet_t *octet)
sizeof(tft->pf[i].flags));
size += sizeof(tft->pf[i].flags);
if (tft->code == OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING)
if (tft->code == OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING)
continue;
ogs_assert(size+sizeof(tft->pf[i].precedence) <= octet->len);
@ -443,30 +443,30 @@ int16_t ogs_gtp_parse_tft(ogs_gtp_tft_t *tft, ogs_tlv_octet_t *octet)
return size;
}
int16_t ogs_gtp_build_tft(
ogs_tlv_octet_t *octet, ogs_gtp_tft_t *tft, void *data, int data_len)
int16_t ogs_gtp2_build_tft(
ogs_tlv_octet_t *octet, ogs_gtp2_tft_t *tft, void *data, int data_len)
{
ogs_gtp_tft_t target;
ogs_gtp2_tft_t target;
uint16_t size = 0;
int i, j;
ogs_assert(tft);
ogs_assert(octet);
ogs_assert(data);
ogs_assert(data_len >= OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE);
ogs_assert(data_len >= OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE);
ogs_assert(tft->code != OGS_GTP_TFT_CODE_IGNORE_THIS_IE);
ogs_assert(tft->code != OGS_GTP2_TFT_CODE_IGNORE_THIS_IE);
octet->data = data;
memcpy(&target, tft, sizeof(ogs_gtp_tft_t));
memcpy(&target, tft, sizeof(ogs_gtp2_tft_t));
ogs_assert(size + sizeof(target.flags) <= data_len);
memcpy((unsigned char *)octet->data + size, &target.flags,
sizeof(target.flags));
size += sizeof(target.flags);
if (tft->code == OGS_GTP_TFT_CODE_NO_TFT_OPERATION ||
tft->code == OGS_GTP_TFT_CODE_DELETE_EXISTING_TFT)
if (tft->code == OGS_GTP2_TFT_CODE_NO_TFT_OPERATION ||
tft->code == OGS_GTP2_TFT_CODE_DELETE_EXISTING_TFT)
return size;
for (i = 0; i < target.num_of_packet_filter &&
@ -476,7 +476,7 @@ int16_t ogs_gtp_build_tft(
sizeof(target.pf[i].flags));
size += sizeof(target.pf[i].flags);
if (tft->code == OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING)
if (tft->code == OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING)
continue;
ogs_assert(size + sizeof(target.pf[i].precedence) <= data_len);
@ -615,15 +615,15 @@ int16_t ogs_gtp_build_tft(
/* 8.21 User Location Information (ULI) */
int16_t ogs_gtp_parse_uli(ogs_gtp_uli_t *uli, ogs_tlv_octet_t *octet)
int16_t ogs_gtp2_parse_uli(ogs_gtp2_uli_t *uli, ogs_tlv_octet_t *octet)
{
ogs_gtp_uli_t *source = (ogs_gtp_uli_t *)octet->data;
ogs_gtp2_uli_t *source = (ogs_gtp2_uli_t *)octet->data;
int16_t size = 0;
ogs_assert(uli);
ogs_assert(octet);
memset(uli, 0, sizeof(ogs_gtp_uli_t));
memset(uli, 0, sizeof(ogs_gtp2_uli_t));
uli->flags = source->flags;
size++;
@ -678,10 +678,10 @@ int16_t ogs_gtp_parse_uli(ogs_gtp_uli_t *uli, ogs_tlv_octet_t *octet)
return size;
}
int16_t ogs_gtp_build_uli(
ogs_tlv_octet_t *octet, ogs_gtp_uli_t *uli, void *data, int data_len)
int16_t ogs_gtp2_build_uli(
ogs_tlv_octet_t *octet, ogs_gtp2_uli_t *uli, void *data, int data_len)
{
ogs_gtp_uli_t target;
ogs_gtp2_uli_t target;
int16_t size = 0;
ogs_assert(uli);
@ -690,7 +690,7 @@ int16_t ogs_gtp_build_uli(
ogs_assert(data_len);
octet->data = data;
memcpy(&target, uli, sizeof(ogs_gtp_uli_t));
memcpy(&target, uli, sizeof(ogs_gtp2_uli_t));
ogs_assert(size + sizeof(target.flags) <= data_len);
memcpy((unsigned char *)octet->data + size,

View File

@ -21,14 +21,14 @@
#error "This header cannot be included directly."
#endif
#ifndef OGS_GTP_TYPES_H
#define OGS_GTP_TYPES_H
#ifndef OGS_GTP2_TYPES_H
#define OGS_GTP2_TYPES_H
#ifdef __cplusplus
extern "C" {
#endif
#define OGS_GTP_MAX_INDIRECT_TUNNEL 8
#define OGS_GTP2_MAX_INDIRECT_TUNNEL 8
#define OGS_GTPV1U_5GC_HEADER_LEN 16
/*
@ -50,120 +50,120 @@ extern "C" {
*/
#define OGS_GTPV1U_EXTENSION_HEADER_LEN 4
typedef struct ogs_gtp_extension_header_s {
#define OGS_GTP_EXTENSION_HEADER_TYPE_UDP_PORT 0x40
#define OGS_GTP_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER 0x85
#define OGS_GTP_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS 0x0
typedef struct ogs_gtp2_extension_header_s {
#define OGS_GTP2_EXTENSION_HEADER_TYPE_UDP_PORT 0x40
#define OGS_GTP2_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER 0x85
#define OGS_GTP2_EXTENSION_HEADER_TYPE_NO_MORE_EXTENSION_HEADERS 0x0
uint16_t sequence_number;
uint8_t n_pdu_number;
uint8_t type;
uint8_t len;
#define OGS_GTP_EXTENSION_HEADER_PDU_TYPE_DL_PDU_SESSION_INFORMATION 0
#define OGS_GTP_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION 1
#define OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_DL_PDU_SESSION_INFORMATION 0
#define OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION 1
ED2(uint8_t pdu_type:4;,
uint8_t spare1:4;);
ED3(uint8_t paging_policy_presence:1;,
uint8_t reflective_qos_indicator:1;,
uint8_t qos_flow_identifier:6;);
uint8_t next_type;
} __attribute__ ((packed)) ogs_gtp_extension_header_t;
} __attribute__ ((packed)) ogs_gtp2_extension_header_t;
/* 8.4 Cause */
#define OGS_GTP_CAUSE_UNDEFINED_VALUE 0
#define OGS_GTP_CAUSE_LOCAL_DETACH 2
#define OGS_GTP_CAUSE_COMPLETE_DETACH_3
#define OGS_GTP_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP 4
#define OGS_GTP_CAUSE_ISR_DEACTIVATION 5
#define OGS_GTP_CAUSE_ERROR_INDICATION_RECEIVED 6
#define OGS_GTP_CAUSE_IMSI_DETACH_ONLY 7
#define OGS_GTP_CAUSE_REACTIVATION_REQUESTED 8
#define OGS_GTP_CAUSE_PDN_RECONNECTION_TO_THIS_APN_DISALLOWED 9
#define OGS_GTP_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP 10
#define OGS_GTP_CAUSE_PDN_CONNECTION_INACTIVITY_TIMER_EXPIRES 11
#define OGS_GTP_CAUSE_PGW_NOT_RESPONDING 12
#define OGS_GTP_CAUSE_NETWORK_FAILURE 13
#define OGS_GTP_CAUSE_QOS_PARAMETER_MISMATCH 14
#define OGS_GTP_CAUSE_REQUEST_ACCEPTED 16
#define OGS_GTP_CAUSE_REQUEST_ACCEPTED_PARTIALLY 17
#define OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE 18
#define OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY 19
#define OGS_GTP_CAUSE_CONTEXT_NOT_FOUND 64
#define OGS_GTP_CAUSE_INVALID_MESSAGE_FORMAT 65
#define OGS_GTP_CAUSE_VERSION_NOT_SUPPORTED_BY_NEXT_PEER 66
#define OGS_GTP_CAUSE_INVALID_LENGTH 67
#define OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED 68
#define OGS_GTP_CAUSE_MANDATORY_IE_INCORRECT 69
#define OGS_GTP_CAUSE_MANDATORY_IE_MISSING 70
#define OGS_GTP_CAUSE_SYSTEM_FAILURE 72
#define OGS_GTP_CAUSE_NO_RESOURCES_AVAILABLE 73
#define OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 74
#define OGS_GTP_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION 75
#define OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER 76
#define OGS_GTP_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER 77
#define OGS_GTP_CAUSE_MISSING_OR_UNKNOWN_APN 78
#define OGS_GTP_CAUSE_GRE_KEY_NOT_FOUND 80
#define OGS_GTP_CAUSE_RELOCATION_FAILURE 81
#define OGS_GTP_CAUSE_DENIED_IN_RAT 82
#define OGS_GTP_CAUSE_PREFERRED_PDN_TYPE_NOT_SUPPORTED 83
#define OGS_GTP_CAUSE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED 84
#define OGS_GTP_CAUSE_UE_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED 85
#define OGS_GTP_CAUSE_PROTOCOL_TYPE_NOT_SUPPORTED 86
#define OGS_GTP_CAUSE_UE_NOT_RESPONDING 87
#define OGS_GTP_CAUSE_UE_REFUSES 88
#define OGS_GTP_CAUSE_SERVICE_DENIED 89
#define OGS_GTP_CAUSE_UNABLE_TO_PAGE_UE 90
#define OGS_GTP_CAUSE_NO_MEMORY_AVAILABLE 91
#define OGS_GTP_CAUSE_USER_AUTHENTICATION_FAILED 92
#define OGS_GTP_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION 93
#define OGS_GTP_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED 94
#define OGS_GTP_CAUSE_P_TMSI_SIGNATURE_MISMATCH 95
#define OGS_GTP_CAUSE_IMSI_IMEI_NOT_KNOWN 96
#define OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TAD_OPERATION 97
#define OGS_GTP_CAUSE_SYNTACTIC_ERROR_IN_THE_TAD_OPERATION 98
#define OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING 100
#define OGS_GTP_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 101
#define OGS_GTP_CAUSE_UNABLE_TO_PAGE_UE_DUE_TO_SUSPENSION 102
#define OGS_GTP_CAUSE_CONDITIONAL_IE_MISSING 103
#define OGS_GTP_CAUSE_APN_RESTRICTION_TYPE_INCOMPATIBLE 104
#define OGS_GTP_CAUSE_INVALID_OVERALL_LENGTH 105
#define OGS_GTP_CAUSE_DATA_FORWARDING_NOT_SUPPORTED 106
#define OGS_GTP_CAUSE_INVALID_REPLY_FROM_REMOTE_PEER 107
#define OGS_GTP_CAUSE_FALLBACK_TO_GTPV1 108
#define OGS_GTP_CAUSE_INVALID_PEER 109
#define OGS_GTP_CAUSE_TEMPORARILY_REJECTED_DUE_TO_HANDOVER_IN_PROGRESS 110
#define OGS_GTP_CAUSE_MODIFICATIONS_NOT_LIMITED_TO_S1_U_BEARERS 111
#define OGS_GTP_CAUSE_REQUEST_REJECTED_FOR_A_PMIPV6_REASON 112
#define OGS_GTP_CAUSE_APN_CONGESTION 113
#define OGS_GTP_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 114
#define OGS_GTP_CAUSE_UE_ALREADY_RE_ATTACHED 115
#define OGS_GTP_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 116
#define OGS_GTP_CAUSE_TARGET_ACCESS_RESTRICTED_FOR_THE_SUBSCRIBER 117
#define OGS_GTP_CAUSE_MME_SGSN_REFUSES_DUE_TO_VPLMN_POLICY 119
#define OGS_GTP_CAUSE_GTP_C_ENTITY_CONGESTION 120
#define OGS_GTP_CAUSE_LATE_OVERLAPPING_REQUEST 121
#define OGS_GTP_CAUSE_TIMED_OUT_REQUEST 122
#define OGS_GTP_CAUSE_UE_IS_TEMPORARILY_NOT_REACHABLE_DUE_TO_POWER_SAVING 123
#define OGS_GTP_CAUSE_RELOCATION_FAILURE_DUE_TO_NAS_MESSAGE_REDIRECTION 124
#define OGS_GTP_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER 125
#define OGS_GTP_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 126
#define OGS_GTP_CAUSE_REQUEST_REJECTED_DUE_TO_UE_CAPABILITY 127
#define OGS_GTP2_CAUSE_UNDEFINED_VALUE 0
#define OGS_GTP2_CAUSE_LOCAL_DETACH 2
#define OGS_GTP2_CAUSE_COMPLETE_DETACH_3
#define OGS_GTP2_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP 4
#define OGS_GTP2_CAUSE_ISR_DEACTIVATION 5
#define OGS_GTP2_CAUSE_ERROR_INDICATION_RECEIVED 6
#define OGS_GTP2_CAUSE_IMSI_DETACH_ONLY 7
#define OGS_GTP2_CAUSE_REACTIVATION_REQUESTED 8
#define OGS_GTP2_CAUSE_PDN_RECONNECTION_TO_THIS_APN_DISALLOWED 9
#define OGS_GTP2_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP 10
#define OGS_GTP2_CAUSE_PDN_CONNECTION_INACTIVITY_TIMER_EXPIRES 11
#define OGS_GTP2_CAUSE_PGW_NOT_RESPONDING 12
#define OGS_GTP2_CAUSE_NETWORK_FAILURE 13
#define OGS_GTP2_CAUSE_QOS_PARAMETER_MISMATCH 14
#define OGS_GTP2_CAUSE_REQUEST_ACCEPTED 16
#define OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY 17
#define OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE 18
#define OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY 19
#define OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND 64
#define OGS_GTP2_CAUSE_INVALID_MESSAGE_FORMAT 65
#define OGS_GTP2_CAUSE_VERSION_NOT_SUPPORTED_BY_NEXT_PEER 66
#define OGS_GTP2_CAUSE_INVALID_LENGTH 67
#define OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED 68
#define OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT 69
#define OGS_GTP2_CAUSE_MANDATORY_IE_MISSING 70
#define OGS_GTP2_CAUSE_SYSTEM_FAILURE 72
#define OGS_GTP2_CAUSE_NO_RESOURCES_AVAILABLE 73
#define OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION 74
#define OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION 75
#define OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER 76
#define OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER 77
#define OGS_GTP2_CAUSE_MISSING_OR_UNKNOWN_APN 78
#define OGS_GTP2_CAUSE_GRE_KEY_NOT_FOUND 80
#define OGS_GTP2_CAUSE_RELOCATION_FAILURE 81
#define OGS_GTP2_CAUSE_DENIED_IN_RAT 82
#define OGS_GTP2_CAUSE_PREFERRED_PDN_TYPE_NOT_SUPPORTED 83
#define OGS_GTP2_CAUSE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED 84
#define OGS_GTP2_CAUSE_UE_CONTEXT_WITHOUT_TFT_ALREADY_ACTIVATED 85
#define OGS_GTP2_CAUSE_PROTOCOL_TYPE_NOT_SUPPORTED 86
#define OGS_GTP2_CAUSE_UE_NOT_RESPONDING 87
#define OGS_GTP2_CAUSE_UE_REFUSES 88
#define OGS_GTP2_CAUSE_SERVICE_DENIED 89
#define OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE 90
#define OGS_GTP2_CAUSE_NO_MEMORY_AVAILABLE 91
#define OGS_GTP2_CAUSE_USER_AUTHENTICATION_FAILED 92
#define OGS_GTP2_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION 93
#define OGS_GTP2_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED 94
#define OGS_GTP2_CAUSE_P_TMSI_SIGNATURE_MISMATCH 95
#define OGS_GTP2_CAUSE_IMSI_IMEI_NOT_KNOWN 96
#define OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TAD_OPERATION 97
#define OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TAD_OPERATION 98
#define OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING 100
#define OGS_GTP2_CAUSE_COLLISION_WITH_NETWORK_INITIATED_REQUEST 101
#define OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE_DUE_TO_SUSPENSION 102
#define OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING 103
#define OGS_GTP2_CAUSE_APN_RESTRICTION_TYPE_INCOMPATIBLE 104
#define OGS_GTP2_CAUSE_INVALID_OVERALL_LENGTH 105
#define OGS_GTP2_CAUSE_DATA_FORWARDING_NOT_SUPPORTED 106
#define OGS_GTP2_CAUSE_INVALID_REPLY_FROM_REMOTE_PEER 107
#define OGS_GTP2_CAUSE_FALLBACK_TO_GTPV1 108
#define OGS_GTP2_CAUSE_INVALID_PEER 109
#define OGS_GTP2_CAUSE_TEMPORARILY_REJECTED_DUE_TO_HANDOVER_IN_PROGRESS 110
#define OGS_GTP2_CAUSE_MODIFICATIONS_NOT_LIMITED_TO_S1_U_BEARERS 111
#define OGS_GTP2_CAUSE_REQUEST_REJECTED_FOR_A_PMIPV6_REASON 112
#define OGS_GTP2_CAUSE_APN_CONGESTION 113
#define OGS_GTP2_CAUSE_BEARER_HANDLING_NOT_SUPPORTED 114
#define OGS_GTP2_CAUSE_UE_ALREADY_RE_ATTACHED 115
#define OGS_GTP2_CAUSE_MULTIPLE_PDN_CONNECTIONS_FOR_A_GIVEN_APN_NOT_ALLOWED 116
#define OGS_GTP2_CAUSE_TARGET_ACCESS_RESTRICTED_FOR_THE_SUBSCRIBER 117
#define OGS_GTP2_CAUSE_MME_SGSN_REFUSES_DUE_TO_VPLMN_POLICY 119
#define OGS_GTP2_CAUSE_GTP_C_ENTITY_CONGESTION 120
#define OGS_GTP2_CAUSE_LATE_OVERLAPPING_REQUEST 121
#define OGS_GTP2_CAUSE_TIMED_OUT_REQUEST 122
#define OGS_GTP2_CAUSE_UE_IS_TEMPORARILY_NOT_REACHABLE_DUE_TO_POWER_SAVING 123
#define OGS_GTP2_CAUSE_RELOCATION_FAILURE_DUE_TO_NAS_MESSAGE_REDIRECTION 124
#define OGS_GTP2_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER 125
#define OGS_GTP2_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED 126
#define OGS_GTP2_CAUSE_REQUEST_REJECTED_DUE_TO_UE_CAPABILITY 127
typedef struct ogs_gtp_cause_s {
typedef struct ogs_gtp2_cause_s {
uint8_t value;
ED4(uint8_t spare:5;,
uint8_t pce:1;,
uint8_t bce:1;,
uint8_t cs:1;)
} __attribute__ ((packed)) ogs_gtp_cause_t;
} __attribute__ ((packed)) ogs_gtp2_cause_t;
/* 8.7 Aggregate Maximum Bit Rate (AMBR) */
typedef struct ogs_gtp_ambr_s {
typedef struct ogs_gtp2_ambr_s {
uint32_t uplink;
uint32_t downlink;
} __attribute__ ((packed)) ogs_gtp_ambr_t;
} __attribute__ ((packed)) ogs_gtp2_ambr_t;
/* 8.12 Indication */
typedef struct ogs_gtp_indication_s {
typedef struct ogs_gtp2_indication_s {
ED8(uint8_t dual_address_bearer_flag:1;,
uint8_t direct_tunnel_flag:1;,
uint8_t handover_indication:1;,
@ -244,7 +244,7 @@ ED8(uint8_t spare1:1;,
uint8_t notify_source_enodeb_indication:1;,
uint8_t indirect_data_forwarding_with_upf_indication:1;,
uint8_t emergency_pdu_session_indication:1;)
} __attribute__ ((packed)) ogs_gtp_indication_t;
} __attribute__ ((packed)) ogs_gtp2_indication_t;
/* 8.13 Protocol Configuration Options (PCO)
* 10.5.6.3 Protocol configuration options in 3GPP TS 24.008
@ -252,8 +252,8 @@ ED8(uint8_t spare1:1;,
* RFC 1661 [102] */
/* 8.15 Bearer Quality of Service (Bearer QoS) */
#define GTP_BEARER_QOS_LEN 22
typedef struct ogs_gtp_bearer_qos_s {
#define GTP2_BEARER_QOS_LEN 22
typedef struct ogs_gtp2_bearer_qos_s {
ED5(uint8_t spare1:1;,
/* See 3GPP TS 29.212[29], clause 5.3.46 Pre-emption-Capability AVP. */
uint8_t pre_emption_capability:1;,
@ -274,16 +274,16 @@ ED5(uint8_t spare1:1;,
/* NOTE : The encoding in 3GPP TS 24.301 [23] and 3GPP TS 36.413 [10]
* is different from the encoding within this specification. */
} __attribute__ ((packed)) ogs_gtp_bearer_qos_t;
} __attribute__ ((packed)) ogs_gtp2_bearer_qos_t;
int16_t ogs_gtp_parse_bearer_qos(
ogs_gtp_bearer_qos_t *bearer_qos, ogs_tlv_octet_t *octet);
int16_t ogs_gtp_build_bearer_qos(ogs_tlv_octet_t *octet,
ogs_gtp_bearer_qos_t *bearer_qos, void *data, int data_len);
int16_t ogs_gtp2_parse_bearer_qos(
ogs_gtp2_bearer_qos_t *bearer_qos, ogs_tlv_octet_t *octet);
int16_t ogs_gtp2_build_bearer_qos(ogs_tlv_octet_t *octet,
ogs_gtp2_bearer_qos_t *bearer_qos, void *data, int data_len);
/* 8.16 Flow Quality of Service (Flow QoS) */
#define GTP_FLOW_QOS_LEN 21
typedef struct ogs_gtp_flow_qos_s {
#define GTP2_FLOW_QOS_LEN 21
typedef struct ogs_gtp2_flow_qos_s {
uint8_t qci; /* specified in 3GPP TS 23.203 [48]. */
/* specified in 3GPP TS 36.413 [10]. */
@ -294,42 +294,42 @@ typedef struct ogs_gtp_flow_qos_s {
/* NOTE : The encoding in 3GPP TS 24.301 [23] and 3GPP TS 36.413 [10]
* is different from the encoding within this specification. */
} __attribute__ ((packed)) ogs_gtp_flow_qos_t;
} __attribute__ ((packed)) ogs_gtp2_flow_qos_t;
#define ogs_gtp_qos_to_bps(br, extended, extended2) \
ogs_gtp_qos_to_kbps(br, extended, extended2) * 1024;
#define ogs_gtp2_qos_to_bps(br, extended, extended2) \
ogs_gtp2_qos_to_kbps(br, extended, extended2) * 1024;
uint64_t ogs_gtp_qos_to_kbps(uint8_t br, uint8_t extended, uint8_t extended2);
uint64_t ogs_gtp2_qos_to_kbps(uint8_t br, uint8_t extended, uint8_t extended2);
int16_t ogs_gtp_parse_flow_qos(
ogs_gtp_flow_qos_t *flow_qos, ogs_tlv_octet_t *octet);
int16_t ogs_gtp_build_flow_qos(ogs_tlv_octet_t *octet,
ogs_gtp_flow_qos_t *flow_qos, void *data, int data_len);
int16_t ogs_gtp2_parse_flow_qos(
ogs_gtp2_flow_qos_t *flow_qos, ogs_tlv_octet_t *octet);
int16_t ogs_gtp2_build_flow_qos(ogs_tlv_octet_t *octet,
ogs_gtp2_flow_qos_t *flow_qos, void *data, int data_len);
/* 8.17 RAT Type */
#define OGS_GTP_RAT_TYPE_UTRAN 1
#define OGS_GTP_RAT_TYPE_GERAN 2
#define OGS_GTP_RAT_TYPE_WLAN 3
#define OGS_GTP_RAT_TYPE_GAN 4
#define OGS_GTP_RAT_TYPE_HSPA_EVOLUTION 5
#define OGS_GTP_RAT_TYPE_EUTRAN 6
#define OGS_GTP_RAT_TYPE_VIRTUAL 7
#define OGS_GTP_RAT_TYPE_EUTRAN_NB_IOT 8
#define OGS_GTP2_RAT_TYPE_UTRAN 1
#define OGS_GTP2_RAT_TYPE_GERAN 2
#define OGS_GTP2_RAT_TYPE_WLAN 3
#define OGS_GTP2_RAT_TYPE_GAN 4
#define OGS_GTP2_RAT_TYPE_HSPA_EVOLUTION 5
#define OGS_GTP2_RAT_TYPE_EUTRAN 6
#define OGS_GTP2_RAT_TYPE_VIRTUAL 7
#define OGS_GTP2_RAT_TYPE_EUTRAN_NB_IOT 8
/* 8.19 EPS Bearer Level Traffic Flow Template (Bearer TFT)
* See subclause 10.5.6.12 in 3GPP TS 24.008 [13]. */
#define OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE 255
#define OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE 255
typedef struct ogs_gtp_tft_s {
typedef struct ogs_gtp2_tft_s {
union {
struct {
#define OGS_GTP_TFT_CODE_IGNORE_THIS_IE 0
#define OGS_GTP_TFT_CODE_CREATE_NEW_TFT 1
#define OGS_GTP_TFT_CODE_DELETE_EXISTING_TFT 2
#define OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT 3
#define OGS_GTP_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING 4
#define OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING 5
#define OGS_GTP_TFT_CODE_NO_TFT_OPERATION 6
#define OGS_GTP2_TFT_CODE_IGNORE_THIS_IE 0
#define OGS_GTP2_TFT_CODE_CREATE_NEW_TFT 1
#define OGS_GTP2_TFT_CODE_DELETE_EXISTING_TFT 2
#define OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT 3
#define OGS_GTP2_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING 4
#define OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING 5
#define OGS_GTP2_TFT_CODE_NO_TFT_OPERATION 6
ED3(uint8_t code:3;,
uint8_t e_bit:1;,
uint8_t num_of_packet_filter:4;)
@ -348,48 +348,48 @@ ED3(uint8_t code:3;,
uint8_t precedence;
ogs_pf_content_t content;
} pf[OGS_MAX_NUM_OF_FLOW_IN_GTP];
} ogs_gtp_tft_t;
} ogs_gtp2_tft_t;
int16_t ogs_gtp_parse_tft(ogs_gtp_tft_t *tft, ogs_tlv_octet_t *octet);
int16_t ogs_gtp_build_tft(
ogs_tlv_octet_t *octet, ogs_gtp_tft_t *tft, void *data, int data_len);
int16_t ogs_gtp2_parse_tft(ogs_gtp2_tft_t *tft, ogs_tlv_octet_t *octet);
int16_t ogs_gtp2_build_tft(
ogs_tlv_octet_t *octet, ogs_gtp2_tft_t *tft, void *data, int data_len);
/* 8.21 User Location Information (ULI) */
#define OGS_GTP_MAX_ULI_LEN sizeof(ogs_gtp_uli_t)
typedef struct ogs_gtp_uli_cgi_s {
#define OGS_GTP2_MAX_ULI_LEN sizeof(ogs_gtp2_uli_t)
typedef struct ogs_gtp2_uli_cgi_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint16_t lac;
uint16_t ci;
} __attribute__ ((packed)) ogs_gtp_uli_cgi_t;
} __attribute__ ((packed)) ogs_gtp2_uli_cgi_t;
typedef struct ogs_gtp_uli_sai_s {
typedef struct ogs_gtp2_uli_sai_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint16_t lac;
uint16_t sac;
} __attribute__ ((packed)) ogs_gtp_uli_sai_t;
} __attribute__ ((packed)) ogs_gtp2_uli_sai_t;
typedef struct ogs_gtp_uli_rai_s {
typedef struct ogs_gtp2_uli_rai_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint16_t lac;
uint16_t rac;
} __attribute__ ((packed)) ogs_gtp_uli_rai_t;
} __attribute__ ((packed)) ogs_gtp2_uli_rai_t;
typedef struct ogs_gtp_uli_lai_s {
typedef struct ogs_gtp2_uli_lai_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint16_t lac;
} __attribute__ ((packed)) ogs_gtp_uli_lai_t;
} __attribute__ ((packed)) ogs_gtp2_uli_lai_t;
typedef struct ogs_gtp_uli_tai_s {
typedef struct ogs_gtp2_uli_tai_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint16_t tac;
} __attribute__ ((packed)) ogs_gtp_uli_tai_t;
} __attribute__ ((packed)) ogs_gtp2_uli_tai_t;
typedef struct ogs_gtp_uli_e_cgi_s {
typedef struct ogs_gtp2_uli_e_cgi_s {
ogs_nas_plmn_id_t nas_plmn_id;
uint32_t cell_id;
} __attribute__ ((packed)) ogs_gtp_uli_e_cgi_t;
} __attribute__ ((packed)) ogs_gtp2_uli_e_cgi_t;
typedef struct ogs_gtp_uli_s {
typedef struct ogs_gtp2_uli_s {
struct {
ED7(uint8_t spare:2;,
uint8_t lai:1;,
@ -399,94 +399,94 @@ typedef struct ogs_gtp_uli_s {
uint8_t sai:1;,
uint8_t cgi:1;)
} flags;
ogs_gtp_uli_cgi_t cgi;
ogs_gtp_uli_sai_t sai;
ogs_gtp_uli_rai_t rai;
ogs_gtp_uli_tai_t tai;
ogs_gtp_uli_e_cgi_t e_cgi;
ogs_gtp_uli_lai_t lai;
} ogs_gtp_uli_t;
ogs_gtp2_uli_cgi_t cgi;
ogs_gtp2_uli_sai_t sai;
ogs_gtp2_uli_rai_t rai;
ogs_gtp2_uli_tai_t tai;
ogs_gtp2_uli_e_cgi_t e_cgi;
ogs_gtp2_uli_lai_t lai;
} ogs_gtp2_uli_t;
int16_t ogs_gtp_parse_uli(ogs_gtp_uli_t *uli, ogs_tlv_octet_t *octet);
int16_t ogs_gtp_build_uli(ogs_tlv_octet_t *octet,
ogs_gtp_uli_t *uli, void *data, int data_len);
int16_t ogs_gtp2_parse_uli(ogs_gtp2_uli_t *uli, ogs_tlv_octet_t *octet);
int16_t ogs_gtp2_build_uli(ogs_tlv_octet_t *octet,
ogs_gtp2_uli_t *uli, void *data, int data_len);
/* 8.22 Fully Qualified TEID (F-TEID) */
#define OGS_GTP_F_TEID_S1_U_ENODEB_GTP_U 0
#define OGS_GTP_F_TEID_S1_U_SGW_GTP_U 1
#define OGS_GTP_F_TEID_S12_RNC_GTP_U 2
#define OGS_GTP_F_TEID_S12_SGW_GTP_U 3
#define OGS_GTP_F_TEID_S5_S8_SGW_GTP_U 4
#define OGS_GTP_F_TEID_S5_S8_PGW_GTP_U 5
#define OGS_GTP_F_TEID_S5_S8_SGW_GTP_C 6
#define OGS_GTP_F_TEID_S5_S8_PGW_GTP_C 7
#define OGS_GTP_F_TEID_S5_S8_SGW_PMIPV6 8
#define OGS_GTP_F_TEID_S5_S8_PGW_PMIPV6 9
#define OGS_GTP_F_TEID_S11_MME_GTP_C 10
#define OGS_GTP_F_TEID_S11_S4_SGW_GTP_C 11
#define OGS_GTP_F_TEID_S10_MME_GTP_C 12
#define OGS_GTP_F_TEID_S3_MME_GTP_C 13
#define OGS_GTP_F_TEID_S3_SGSN_GTP_C 14
#define OGS_GTP_F_TEID_S4_SGSN_GTP_U 15
#define OGS_GTP_F_TEID_S4_SGW_GTP_U 16
#define OGS_GTP_F_TEID_S4_SGSN_GTP_C 17
#define OGS_GTP_F_TEID_S16_SGSN_GTP_C 18
#define OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING 19
#define OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING 20
#define OGS_GTP_F_TEID_RNC_GTP_U_FOR_DATA_FORWARDING 21
#define OGS_GTP_F_TEID_SGSN_GTP_U_FOR_DATA_FORWARDING 22
#define OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING 23
#define OGS_GTP_F_TEID_SM_MBMS_GW_GTP_C 24
#define OGS_GTP_F_TEID_SN_MBMS_GW_GTP_C 25
#define OGS_GTP_F_TEID_SM_MME_GTP_C 26
#define OGS_GTP_F_TEID_SN_SGSN_GTP_C 27
#define OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING 28
#define OGS_GTP_F_TEID_SN_SGSN_GTP_U 29
#define OGS_GTP_F_TEID_S2B_EPDG_GTP_C 30
#define OGS_GTP_F_TEID_S2B_U_EPDG_GTP_U 31
#define OGS_GTP_F_TEID_S2B_PGW_GTP_C 32
#define OGS_GTP_F_TEID_S2B_U_PGW_GTP_U 33
#define OGS_GTP_F_TEID_S2A_TWAN_GTP_U 34
#define OGS_GTP_F_TEID_S2A_TWAN_GTP_C 35
#define OGS_GTP_F_TEID_S2A_PGW_GTP_C 36
#define OGS_GTP_F_TEID_S2A_PGW_GTP_U 37
#define OGS_GTP_F_TEID_S11_MME_GTP_U 38
#define OGS_GTP_F_TEID_S11_SGW_GTP_U 39
#define OGS_GTP2_F_TEID_S1_U_ENODEB_GTP_U 0
#define OGS_GTP2_F_TEID_S1_U_SGW_GTP_U 1
#define OGS_GTP2_F_TEID_S12_RNC_GTP_U 2
#define OGS_GTP2_F_TEID_S12_SGW_GTP_U 3
#define OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U 4
#define OGS_GTP2_F_TEID_S5_S8_PGW_GTP_U 5
#define OGS_GTP2_F_TEID_S5_S8_SGW_GTP_C 6
#define OGS_GTP2_F_TEID_S5_S8_PGW_GTP_C 7
#define OGS_GTP2_F_TEID_S5_S8_SGW_PMIPV6 8
#define OGS_GTP2_F_TEID_S5_S8_PGW_PMIPV6 9
#define OGS_GTP2_F_TEID_S11_MME_GTP_C 10
#define OGS_GTP2_F_TEID_S11_S4_SGW_GTP_C 11
#define OGS_GTP2_F_TEID_S10_MME_GTP_C 12
#define OGS_GTP2_F_TEID_S3_MME_GTP_C 13
#define OGS_GTP2_F_TEID_S3_SGSN_GTP_C 14
#define OGS_GTP2_F_TEID_S4_SGSN_GTP_U 15
#define OGS_GTP2_F_TEID_S4_SGW_GTP_U 16
#define OGS_GTP2_F_TEID_S4_SGSN_GTP_C 17
#define OGS_GTP2_F_TEID_S16_SGSN_GTP_C 18
#define OGS_GTP2_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING 19
#define OGS_GTP2_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING 20
#define OGS_GTP2_F_TEID_RNC_GTP_U_FOR_DATA_FORWARDING 21
#define OGS_GTP2_F_TEID_SGSN_GTP_U_FOR_DATA_FORWARDING 22
#define OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING 23
#define OGS_GTP2_F_TEID_SM_MBMS_GW_GTP_C 24
#define OGS_GTP2_F_TEID_SN_MBMS_GW_GTP_C 25
#define OGS_GTP2_F_TEID_SM_MME_GTP_C 26
#define OGS_GTP2_F_TEID_SN_SGSN_GTP_C 27
#define OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING 28
#define OGS_GTP2_F_TEID_SN_SGSN_GTP_U 29
#define OGS_GTP2_F_TEID_S2B_EPDG_GTP_C 30
#define OGS_GTP2_F_TEID_S2B_U_EPDG_GTP_U 31
#define OGS_GTP2_F_TEID_S2B_PGW_GTP_C 32
#define OGS_GTP2_F_TEID_S2B_U_PGW_GTP_U 33
#define OGS_GTP2_F_TEID_S2A_TWAN_GTP_U 34
#define OGS_GTP2_F_TEID_S2A_TWAN_GTP_C 35
#define OGS_GTP2_F_TEID_S2A_PGW_GTP_C 36
#define OGS_GTP2_F_TEID_S2A_PGW_GTP_U 37
#define OGS_GTP2_F_TEID_S11_MME_GTP_U 38
#define OGS_GTP2_F_TEID_S11_SGW_GTP_U 39
#define OGS_GTP_F_TEID_HDR_LEN 5
#define OGS_GTP_F_TEID_IPV4_LEN OGS_IPV4_LEN+OGS_GTP_F_TEID_HDR_LEN
#define OGS_GTP_F_TEID_IPV6_LEN OGS_IPV6_LEN+OGS_GTP_F_TEID_HDR_LEN
#define OGS_GTP_F_TEID_IPV4V6_LEN OGS_IPV4V6_LEN+OGS_GTP_F_TEID_HDR_LEN
typedef struct ogs_gtp_f_teid_s {
#define OGS_GTP2_F_TEID_HDR_LEN 5
#define OGS_GTP2_F_TEID_IPV4_LEN OGS_IPV4_LEN+OGS_GTP2_F_TEID_HDR_LEN
#define OGS_GTP2_F_TEID_IPV6_LEN OGS_IPV6_LEN+OGS_GTP2_F_TEID_HDR_LEN
#define OGS_GTP2_F_TEID_IPV4V6_LEN OGS_IPV4V6_LEN+OGS_GTP2_F_TEID_HDR_LEN
typedef struct ogs_gtp2_f_teid_s {
ED3(uint8_t ipv4:1;,
uint8_t ipv6:1;,
uint8_t interface_type:6;)
uint32_t teid;
union {
/* OGS_GTP_F_TEID_IPV4 */
/* OGS_GTP2_F_TEID_IPV4 */
uint32_t addr;
/* OGS_GTP_F_TEID_IPV6 */
/* OGS_GTP2_F_TEID_IPV6 */
uint8_t addr6[OGS_IPV6_LEN];
/* OGS_GTP_F_TEID_BOTH */
/* OGS_GTP2_F_TEID_BOTH */
struct {
uint32_t addr;
uint8_t addr6[OGS_IPV6_LEN];
} both;
};
} __attribute__ ((packed)) ogs_gtp_f_teid_t;
} __attribute__ ((packed)) ogs_gtp2_f_teid_t;
/* 8.44 UE Time Zone */
#define OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME 0
#define OGS_GTP_UE_TIME_ZONE_1_HOUR_FOR_DAYLIGHT_SAVING_TIME 1
#define OGS_GTP_UE_TIME_ZONE_2_HOUR_FOR_DAYLIGHT_SAVING_TIME 2
#define OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME 0
#define OGS_GTP2_UE_TIME_ZONE_1_HOUR_FOR_DAYLIGHT_SAVING_TIME 1
#define OGS_GTP2_UE_TIME_ZONE_2_HOUR_FOR_DAYLIGHT_SAVING_TIME 2
/* Time Zone" IE in 3GPP TS 24.008 [5].
* This field uses the same format as the Timezone field used in the
* TP-Service-Centre-Time-Stamp, which is defined in 3GPP TS 23.040 [90],
* and its value shall be set as defined in 3GPP TS 22.042 */
typedef struct ogs_gtp_ue_timezone_s {
#define OGS_GTP_TIME_TO_BCD(x) OGS_TIME_TO_BCD(x)
typedef struct ogs_gtp2_ue_timezone_s {
#define OGS_GTP2_TIME_TO_BCD(x) OGS_TIME_TO_BCD(x)
/* The Time Zone indicates the difference, expressed in quarters of an hour,
* between the local time and GMT. In the first of the two semi-octets,
* the first bit (bit 3 of the seventh octet of
@ -495,36 +495,36 @@ typedef struct ogs_gtp_ue_timezone_s {
uint8_t timezone;
ED2(uint8_t spare:6;,
uint8_t daylight_saving_time:2;)
} __attribute__ ((packed)) ogs_gtp_ue_timezone_t;
} __attribute__ ((packed)) ogs_gtp2_ue_timezone_t;
/* 8.57 APN Restriction */
#define OGS_GTP_APN_NO_RESTRICTION 0
#define OGS_GTP_APN_RESTRICTION_PUBLIC_1 1
#define OGS_GTP_APN_RESTRICTION_PUBLIC_2 2
#define OGS_GTP_APN_RESTRICTION_PRIVATE_1 3
#define OGS_GTP_APN_RESTRICTION_PRIVATE_2 4
#define OGS_GTP2_APN_NO_RESTRICTION 0
#define OGS_GTP2_APN_RESTRICTION_PUBLIC_1 1
#define OGS_GTP2_APN_RESTRICTION_PUBLIC_2 2
#define OGS_GTP2_APN_RESTRICTION_PRIVATE_1 3
#define OGS_GTP2_APN_RESTRICTION_PRIVATE_2 4
/* 8.58 Selection Mode */
#define OGS_GTP_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN 0
#define OGS_GTP_SELECTION_MODE_MS_PROVIDED_APN 1
#define OGS_GTP_SELECTION_MODE_NETWORK_PROVIDED_APN 2
#define OGS_GTP2_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN 0
#define OGS_GTP2_SELECTION_MODE_MS_PROVIDED_APN 1
#define OGS_GTP2_SELECTION_MODE_NETWORK_PROVIDED_APN 2
/* 8.65 Node Type */
#define OGS_GTP_NODE_TYPE_MME 0
#define OGS_GTP_NODE_TYPE_SGSN 1
#define OGS_GTP2_NODE_TYPE_MME 0
#define OGS_GTP2_NODE_TYPE_SGSN 1
/* 8.86 Allocation/Retention Priority (ARP) */
typedef struct ogs_gtp_arp_s {
#define OGS_GTP_TIME_TO_BCD(x) OGS_TIME_TO_BCD(x)
typedef struct ogs_gtp2_arp_s {
#define OGS_GTP2_TIME_TO_BCD(x) OGS_TIME_TO_BCD(x)
ED5(uint8_t spare1:1;,
uint8_t pre_emption_vulnerability:1;,
uint8_t priority_level:4;,
uint8_t spare2:1;,
uint8_t pre_emption_capability:1;)
} __attribute__ ((packed)) ogs_gtp_arp_t;
} __attribute__ ((packed)) ogs_gtp2_arp_t;
#ifdef __cplusplus
}
#endif
#endif /* OGS_GTP_TYPES_H */
#endif /* OGS_GTP2_TYPES_H */

View File

@ -120,7 +120,7 @@ ogs_gtp_xact_t *ogs_gtp1_xact_local_create(ogs_gtp_node_t *gnode,
}
ogs_gtp_xact_t *ogs_gtp_xact_local_create(ogs_gtp_node_t *gnode,
ogs_gtp_header_t *hdesc, ogs_pkbuf_t *pkbuf,
ogs_gtp2_header_t *hdesc, ogs_pkbuf_t *pkbuf,
void (*cb)(ogs_gtp_xact_t *xact, void *data), void *data)
{
int rv;
@ -139,9 +139,9 @@ ogs_gtp_xact_t *ogs_gtp_xact_local_create(ogs_gtp_node_t *gnode,
xact->org = OGS_GTP_LOCAL_ORIGINATOR;
xact->xid = OGS_NEXT_ID(g_xact_id,
OGS_GTP_MIN_XACT_ID, OGS_GTP_CMD_XACT_ID);
if (hdesc->type == OGS_GTP_MODIFY_BEARER_COMMAND_TYPE ||
hdesc->type == OGS_GTP_DELETE_BEARER_COMMAND_TYPE ||
hdesc->type == OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE) {
if (hdesc->type == OGS_GTP2_MODIFY_BEARER_COMMAND_TYPE ||
hdesc->type == OGS_GTP2_DELETE_BEARER_COMMAND_TYPE ||
hdesc->type == OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE) {
xact->xid |= OGS_GTP_CMD_XACT_ID;
}
xact->gnode = gnode;
@ -191,7 +191,7 @@ static ogs_gtp_xact_t *ogs_gtp_xact_remote_create(ogs_gtp_node_t *gnode, uint8_t
xact->gtp_version = gtp_version;
xact->org = OGS_GTP_REMOTE_ORIGINATOR;
xact->xid = (gtp_version == 1) ? OGS_GTP1_SQN_TO_XID(sqn) : OGS_GTP_SQN_TO_XID(sqn);
xact->xid = (gtp_version == 1) ? OGS_GTP1_SQN_TO_XID(sqn) : OGS_GTP2_SQN_TO_XID(sqn);
xact->gnode = gnode;
xact->tm_response = ogs_timer_add(
@ -333,11 +333,11 @@ int ogs_gtp1_xact_update_tx(ogs_gtp_xact_t *xact,
}
int ogs_gtp_xact_update_tx(ogs_gtp_xact_t *xact,
ogs_gtp_header_t *hdesc, ogs_pkbuf_t *pkbuf)
ogs_gtp2_header_t *hdesc, ogs_pkbuf_t *pkbuf)
{
char buf[OGS_ADDRSTRLEN];
ogs_gtp_xact_stage_t stage;
ogs_gtp_header_t *h = NULL;
ogs_gtp2_header_t *h = NULL;
int gtp_hlen = 0;
ogs_assert(xact);
@ -407,26 +407,26 @@ int ogs_gtp_xact_update_tx(ogs_gtp_xact_t *xact,
return OGS_ERROR;
}
if (hdesc->type > OGS_GTP_VERSION_NOT_SUPPORTED_INDICATION_TYPE) {
if (hdesc->type > OGS_GTP2_VERSION_NOT_SUPPORTED_INDICATION_TYPE) {
gtp_hlen = OGS_GTPV2C_HEADER_LEN;
} else {
gtp_hlen = OGS_GTPV2C_HEADER_LEN - OGS_GTP_TEID_LEN;
gtp_hlen = OGS_GTPV2C_HEADER_LEN - OGS_GTP2_TEID_LEN;
}
ogs_pkbuf_push(pkbuf, gtp_hlen);
h = (ogs_gtp_header_t *)pkbuf->data;
h = (ogs_gtp2_header_t *)pkbuf->data;
memset(h, 0, gtp_hlen);
h->version = 2;
h->type = hdesc->type;
if (hdesc->type > OGS_GTP_VERSION_NOT_SUPPORTED_INDICATION_TYPE) {
if (hdesc->type > OGS_GTP2_VERSION_NOT_SUPPORTED_INDICATION_TYPE) {
h->teid_presence = 1;
h->teid = htobe32(hdesc->teid);
h->sqn = OGS_GTP_XID_TO_SQN(xact->xid);
h->sqn = OGS_GTP2_XID_TO_SQN(xact->xid);
} else {
h->teid_presence = 0;
h->sqn_only = OGS_GTP_XID_TO_SQN(xact->xid);
h->sqn_only = OGS_GTP2_XID_TO_SQN(xact->xid);
}
h->length = htobe16(pkbuf->len - 4);
@ -857,7 +857,7 @@ int ogs_gtp1_xact_receive(
}
int ogs_gtp_xact_receive(
ogs_gtp_node_t *gnode, ogs_gtp_header_t *h, ogs_gtp_xact_t **xact)
ogs_gtp_node_t *gnode, ogs_gtp2_header_t *h, ogs_gtp_xact_t **xact)
{
char buf[OGS_ADDRSTRLEN];
int rv;
@ -870,7 +870,7 @@ int ogs_gtp_xact_receive(
if (h->teid_presence) sqn = h->sqn;
else sqn = h->sqn_only;
new = ogs_gtp_xact_find_by_xid(gnode, h->type, 2, OGS_GTP_SQN_TO_XID(sqn));
new = ogs_gtp_xact_find_by_xid(gnode, h->type, 2, OGS_GTP2_SQN_TO_XID(sqn));
if (!new)
new = ogs_gtp_xact_remote_create(gnode, 2, sqn);
ogs_assert(new);
@ -951,41 +951,41 @@ static ogs_gtp_xact_stage_t ogs_gtp_xact_get_stage(uint8_t type, uint32_t xid)
ogs_gtp_xact_stage_t stage = GTP_XACT_UNKNOWN_STAGE;
switch (type) {
case OGS_GTP_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP_MODIFY_BEARER_COMMAND_TYPE:
case OGS_GTP_DELETE_BEARER_COMMAND_TYPE:
case OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
case OGS_GTP_ECHO_REQUEST_TYPE:
case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_MODIFY_BEARER_COMMAND_TYPE:
case OGS_GTP2_DELETE_BEARER_COMMAND_TYPE:
case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
case OGS_GTP2_ECHO_REQUEST_TYPE:
stage = GTP_XACT_INITIAL_STAGE;
break;
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
if (xid & OGS_GTP_CMD_XACT_ID)
stage = GTP_XACT_INTERMEDIATE_STAGE;
else
stage = GTP_XACT_INITIAL_STAGE;
break;
case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE:
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP_MODIFY_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP_DELETE_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE:
case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE:
case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
case OGS_GTP_ECHO_RESPONSE_TYPE:
case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_MODIFY_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP2_DELETE_BEARER_FAILURE_INDICATION_TYPE:
case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
case OGS_GTP2_ECHO_RESPONSE_TYPE:
stage = GTP_XACT_FINAL_STAGE;
break;
@ -1028,9 +1028,9 @@ static ogs_gtp_xact_t *ogs_gtp_xact_find_by_xid(
case 2:
default:
if (xid & OGS_GTP_CMD_XACT_ID) {
if (type == OGS_GTP_MODIFY_BEARER_FAILURE_INDICATION_TYPE ||
type == OGS_GTP_DELETE_BEARER_FAILURE_INDICATION_TYPE ||
type == OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE) {
if (type == OGS_GTP2_MODIFY_BEARER_FAILURE_INDICATION_TYPE ||
type == OGS_GTP2_DELETE_BEARER_FAILURE_INDICATION_TYPE ||
type == OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE) {
list = &gnode->local_list;
} else {
list = &gnode->remote_list;

View File

@ -121,7 +121,7 @@ ogs_gtp_xact_t *ogs_gtp1_xact_local_create(ogs_gtp_node_t *gnode,
ogs_gtp1_header_t *hdesc, ogs_pkbuf_t *pkbuf,
void (*cb)(ogs_gtp_xact_t *xact, void *data), void *data);
ogs_gtp_xact_t *ogs_gtp_xact_local_create(ogs_gtp_node_t *gnode,
ogs_gtp_header_t *hdesc, ogs_pkbuf_t *pkbuf,
ogs_gtp2_header_t *hdesc, ogs_pkbuf_t *pkbuf,
void (*cb)(ogs_gtp_xact_t *xact, void *data), void *data);
ogs_gtp_xact_t *ogs_gtp_xact_cycle(ogs_gtp_xact_t *xact);
@ -130,14 +130,14 @@ void ogs_gtp_xact_delete_all(ogs_gtp_node_t *gnode);
int ogs_gtp1_xact_update_tx(ogs_gtp_xact_t *xact,
ogs_gtp1_header_t *hdesc, ogs_pkbuf_t *pkbuf);
int ogs_gtp_xact_update_tx(ogs_gtp_xact_t *xact,
ogs_gtp_header_t *hdesc, ogs_pkbuf_t *pkbuf);
ogs_gtp2_header_t *hdesc, ogs_pkbuf_t *pkbuf);
int ogs_gtp_xact_commit(ogs_gtp_xact_t *xact);
int ogs_gtp1_xact_receive(ogs_gtp_node_t *gnode,
ogs_gtp1_header_t *h, ogs_gtp_xact_t **xact);
int ogs_gtp_xact_receive(ogs_gtp_node_t *gnode,
ogs_gtp_header_t *h, ogs_gtp_xact_t **xact);
ogs_gtp2_header_t *h, ogs_gtp_xact_t **xact);
void ogs_gtp_xact_associate(ogs_gtp_xact_t *xact1, ogs_gtp_xact_t *xact2);
void ogs_gtp_xact_deassociate(ogs_gtp_xact_t *xact1, ogs_gtp_xact_t *xact2);

View File

@ -279,8 +279,8 @@ void ogs_pfcp_send_g_pdu(ogs_pfcp_pdr_t *pdr, ogs_pkbuf_t *sendbuf)
ogs_gtp_node_t *gnode = NULL;
ogs_pfcp_far_t *far = NULL;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_assert(pdr);
ogs_assert(sendbuf);
@ -310,7 +310,7 @@ void ogs_pfcp_send_g_pdu(ogs_pfcp_pdr_t *pdr, ogs_pkbuf_t *sendbuf)
if (pdr->qer && pdr->qer->qfi)
ext_hdesc.qos_flow_identifier = pdr->qer->qfi;
ogs_gtp_send_user_plane(gnode, &gtp_hdesc, &ext_hdesc, sendbuf);
ogs_gtp2_send_user_plane(gnode, &gtp_hdesc, &ext_hdesc, sendbuf);
}
int ogs_pfcp_send_end_marker(ogs_pfcp_pdr_t *pdr)
@ -320,8 +320,8 @@ int ogs_pfcp_send_end_marker(ogs_pfcp_pdr_t *pdr)
ogs_pkbuf_t *sendbuf = NULL;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_assert(pdr);
far = pdr->far;
@ -349,7 +349,7 @@ int ogs_pfcp_send_end_marker(ogs_pfcp_pdr_t *pdr)
if (pdr->qer && pdr->qer->qfi)
ext_hdesc.qos_flow_identifier = pdr->qer->qfi;
ogs_gtp_send_user_plane(gnode, &gtp_hdesc, &ext_hdesc, sendbuf);
ogs_gtp2_send_user_plane(gnode, &gtp_hdesc, &ext_hdesc, sendbuf);
return OGS_OK;
}

View File

@ -587,7 +587,7 @@ static void common_register_state(ogs_fsm_t *s, mme_event_t *e)
mme_ue->imsi_bcd);
CLEAR_MME_UE_TIMER(mme_ue->t3413);
mme_send_after_paging(mme_ue, OGS_GTP_CAUSE_UNABLE_TO_PAGE_UE);
mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_UNABLE_TO_PAGE_UE);
if (CS_CALL_SERVICE_INDICATOR(mme_ue) ||
SMS_SERVICE_INDICATOR(mme_ue)) {

View File

@ -36,18 +36,18 @@ static uint8_t gtp_cause_from_esm(uint8_t esm_cause)
{
switch (esm_cause) {
case ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
return OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION:
return OGS_GTP_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION;
return OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION;
case ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS:
return OGS_GTP_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER;
return OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER;
case ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS:
return OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER;
return OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER;
default:
break;
}
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
}
void esm_state_initial(ogs_fsm_t *s, mme_event_t *e)
@ -195,7 +195,7 @@ void esm_state_inactive(ogs_fsm_t *s, mme_event_t *e)
if (MME_HAVE_ENB_S1U_PATH(bearer)) {
ogs_assert(OGS_OK ==
mme_gtp_send_create_bearer_response(
bearer, OGS_GTP_CAUSE_REQUEST_ACCEPTED));
bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
}
OGS_FSM_TRAN(s, esm_state_active);
@ -318,7 +318,7 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
ogs_assert(OGS_OK ==
mme_gtp_send_update_bearer_response(
bearer, OGS_GTP_CAUSE_REQUEST_ACCEPTED));
bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
break;
case OGS_NAS_EPS_DEACTIVATE_EPS_BEARER_CONTEXT_ACCEPT:
ogs_debug("Deactivate EPS bearer "
@ -327,7 +327,7 @@ void esm_state_active(ogs_fsm_t *s, mme_event_t *e)
mme_ue->imsi_bcd, sess->pti, bearer->ebi);
ogs_assert(OGS_OK ==
mme_gtp_send_delete_bearer_response(
bearer, OGS_GTP_CAUSE_REQUEST_ACCEPTED));
bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
OGS_FSM_TRAN(s, esm_state_bearer_deactivated);
break;
case OGS_NAS_EPS_BEARER_RESOURCE_ALLOCATION_REQUEST:

View File

@ -86,21 +86,21 @@ static void timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
mme_ue = data;
ogs_assert(mme_ue);
break;
case OGS_GTP_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
sess = data;
ogs_assert(sess);
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
break;
case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
bearer = data;
ogs_assert(bearer);
sess = bearer->sess;
@ -117,7 +117,7 @@ static void timeout(ogs_gtp_xact_t *xact, void *data)
ogs_assert(mme_ue);
switch (type) {
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
/*
* If SESSION_CONTEXT_WILL_DELETED(MME_UE) is not cleared,
* The MME cannot send Delete-Session-Request to the SGW-C.
@ -139,7 +139,7 @@ static void timeout(ogs_gtp_xact_t *xact, void *data)
ogs_warn("No S1 Context");
}
break;
case OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
/* Nothing to do */
break;
default:
@ -202,7 +202,7 @@ void mme_gtp_close(void)
int mme_gtp_send_create_session_request(mme_sess_t *sess, bool esm_piggybacked)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
@ -210,8 +210,8 @@ int mme_gtp_send_create_session_request(mme_sess_t *sess, bool esm_piggybacked)
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_SESSION_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_create_session_request(h.type, sess);
@ -234,15 +234,15 @@ int mme_gtp_send_modify_bearer_request(mme_bearer_t *bearer, int uli_presence)
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(bearer);
mme_ue = bearer->mme_ue;
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_MODIFY_BEARER_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_modify_bearer_request(h.type, bearer, uli_presence);
@ -261,7 +261,7 @@ int mme_gtp_send_delete_session_request(mme_sess_t *sess, int action)
{
int rv;
ogs_pkbuf_t *s11buf = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
@ -270,8 +270,8 @@ int mme_gtp_send_delete_session_request(mme_sess_t *sess, int action)
mme_ue = sess->mme_ue;
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_SESSION_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_SESSION_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
s11buf = mme_s11_build_delete_session_request(h.type, sess);
@ -332,7 +332,7 @@ int mme_gtp_send_create_bearer_response(
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(bearer);
@ -341,8 +341,8 @@ int mme_gtp_send_create_bearer_response(
xact = ogs_gtp_xact_cycle(bearer->create.xact);
ogs_assert(xact);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_create_bearer_response(h.type, bearer, cause_value);
@ -365,7 +365,7 @@ int mme_gtp_send_update_bearer_response(
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(bearer);
@ -374,8 +374,8 @@ int mme_gtp_send_update_bearer_response(
xact = ogs_gtp_xact_cycle(bearer->update.xact);
ogs_assert(xact);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_update_bearer_response(h.type, bearer, cause_value);
@ -398,7 +398,7 @@ int mme_gtp_send_delete_bearer_response(
ogs_gtp_xact_t *xact = NULL;
mme_ue_t *mme_ue = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(bearer);
@ -407,8 +407,8 @@ int mme_gtp_send_delete_bearer_response(
xact = ogs_gtp_xact_cycle(bearer->delete.xact);
ogs_assert(xact);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_delete_bearer_response(h.type, bearer, cause_value);
@ -426,15 +426,15 @@ int mme_gtp_send_delete_bearer_response(
int mme_gtp_send_release_access_bearers_request(mme_ue_t *mme_ue, int action)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(action);
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_RELEASE_ACCESS_BEARERS_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_release_access_bearers_request(h.type);
@ -485,7 +485,7 @@ int mme_gtp_send_downlink_data_notification_ack(
mme_ue_t *mme_ue = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *s11buf = NULL;
ogs_assert(bearer);
@ -495,8 +495,8 @@ int mme_gtp_send_downlink_data_notification_ack(
ogs_assert(mme_ue);
/* Build Downlink data notification ack */
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE;
h.teid = mme_ue->sgw_s11_teid;
s11buf = mme_s11_build_downlink_data_notification_ack(h.type, cause_value);
@ -515,14 +515,14 @@ int mme_gtp_send_create_indirect_data_forwarding_tunnel_request(
mme_ue_t *mme_ue)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_create_indirect_data_forwarding_tunnel_request(
@ -542,15 +542,15 @@ int mme_gtp_send_delete_indirect_data_forwarding_tunnel_request(
mme_ue_t *mme_ue, int action)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(action);
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = ogs_pkbuf_alloc(NULL, OGS_TLV_MAX_HEADROOM);
@ -571,7 +571,7 @@ int mme_gtp_send_bearer_resource_command(
mme_bearer_t *bearer, ogs_nas_eps_message_t *nas_message)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
@ -581,8 +581,8 @@ int mme_gtp_send_bearer_resource_command(
mme_ue = bearer->mme_ue;
ogs_assert(mme_ue);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE;
h.teid = mme_ue->sgw_s11_teid;
pkbuf = mme_s11_build_bearer_resource_command(h.type, bearer, nas_message);

View File

@ -97,13 +97,13 @@ void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value)
type = xact->seq[xact->step-1].type;
switch (type) {
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
ogs_assert(OGS_OK ==
mme_gtp_send_downlink_data_notification_ack(
bearer, cause_value));
break;
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_assert(OGS_OK ==
nas_eps_send_activate_dedicated_bearer_context_request(
bearer));
@ -113,8 +113,8 @@ void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value)
bearer, cause_value));
}
break;
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_assert(OGS_OK ==
nas_eps_send_modify_bearer_context_request(bearer,
(xact->update_flags &
@ -127,8 +127,8 @@ void mme_send_after_paging(mme_ue_t *mme_ue, uint8_t cause_value)
bearer, cause_value));
}
break;
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_assert(OGS_OK ==
nas_eps_send_deactivate_bearer_context_request(bearer));
} else {

View File

@ -28,22 +28,22 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
ogs_session_t *session = NULL;
mme_ue_t *mme_ue = NULL;
mme_bearer_t *bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_session_request_t *req = &gtp_message.create_session_request;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_session_request_t *req = &gtp_message.create_session_request;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_f_teid_t mme_s11_teid, pgw_s5c_teid;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_f_teid_t mme_s11_teid, pgw_s5c_teid;
int len;
ogs_gtp_ambr_t ambr;
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
ogs_gtp_ue_timezone_t ue_timezone;
ogs_gtp2_ambr_t ambr;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
ogs_gtp2_ue_timezone_t ue_timezone;
struct timeval now;
struct tm time_exp;
char apn[OGS_MAX_APN_LEN+1];
ogs_gtp_indication_t indication;
ogs_gtp2_indication_t indication;
ogs_assert(sess);
session = sess->session;
@ -57,7 +57,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
ogs_debug("Create Session Request");
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
ogs_assert(mme_ue->imsi_len);
req->imsi.presence = 1;
@ -76,7 +76,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->msisdn.len = mme_ue->msisdn_len;
}
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -84,20 +84,20 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
ogs_gtp_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
req->serving_network.presence = 1;
req->serving_network.data = &uli.tai.nas_plmn_id;
req->serving_network.len = sizeof(uli.tai.nas_plmn_id);
req->rat_type.presence = 1;
req->rat_type.u8 = OGS_GTP_RAT_TYPE_EUTRAN;
req->rat_type.u8 = OGS_GTP2_RAT_TYPE_EUTRAN;
memset(&mme_s11_teid, 0, sizeof(ogs_gtp_f_teid_t));
mme_s11_teid.interface_type = OGS_GTP_F_TEID_S11_MME_GTP_C;
memset(&mme_s11_teid, 0, sizeof(ogs_gtp2_f_teid_t));
mme_s11_teid.interface_type = OGS_GTP2_F_TEID_S11_MME_GTP_C;
mme_s11_teid.teid = htobe32(mme_ue->mme_s11_teid);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6,
&mme_s11_teid, &len);
ogs_assert(rv == OGS_OK);
@ -105,8 +105,8 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->sender_f_teid_for_control_plane.data = &mme_s11_teid;
req->sender_f_teid_for_control_plane.len = len;
memset(&pgw_s5c_teid, 0, sizeof(ogs_gtp_f_teid_t));
pgw_s5c_teid.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_C;
memset(&pgw_s5c_teid, 0, sizeof(ogs_gtp2_f_teid_t));
pgw_s5c_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_C;
if (session->smf_ip.ipv4 || session->smf_ip.ipv6) {
pgw_s5c_teid.ipv4 = session->smf_ip.ipv4;
pgw_s5c_teid.ipv6 = session->smf_ip.ipv6;
@ -115,16 +115,16 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
memcpy(pgw_s5c_teid.both.addr6, session->smf_ip.addr6,
sizeof session->smf_ip.addr6);
req->pgw_s5_s8_address_for_control_plane_or_pmip.len =
OGS_GTP_F_TEID_IPV4V6_LEN;
OGS_GTP2_F_TEID_IPV4V6_LEN;
} else if (pgw_s5c_teid.ipv4) {
pgw_s5c_teid.addr = session->smf_ip.addr;
req->pgw_s5_s8_address_for_control_plane_or_pmip.len =
OGS_GTP_F_TEID_IPV4_LEN;
OGS_GTP2_F_TEID_IPV4_LEN;
} else if (pgw_s5c_teid.ipv6) {
memcpy(pgw_s5c_teid.addr6, session->smf_ip.addr6,
sizeof session->smf_ip.addr6);
req->pgw_s5_s8_address_for_control_plane_or_pmip.len =
OGS_GTP_F_TEID_IPV6_LEN;
OGS_GTP2_F_TEID_IPV6_LEN;
}
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 1;
req->pgw_s5_s8_address_for_control_plane_or_pmip.data =
@ -142,7 +142,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
pgw_addr6 = mme_self()->pgw_addr6;
}
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
pgw_addr, pgw_addr6, &pgw_s5c_teid, &len);
ogs_assert(rv == OGS_OK);
req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 1;
@ -157,7 +157,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->selection_mode.presence = 1;
req->selection_mode.u8 =
OGS_GTP_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN;
OGS_GTP2_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN;
ogs_assert(sess->request_type.type == OGS_NAS_EPS_PDN_TYPE_IPV4 ||
sess->request_type.type == OGS_NAS_EPS_PDN_TYPE_IPV6 ||
@ -193,10 +193,10 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
memcpy(session->paa.addr6, &addr, OGS_IPV6_LEN);
}
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
memset(&indication, 0, sizeof(ogs_gtp2_indication_t));
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
req->indication_flags.len = sizeof(ogs_gtp2_indication_t);
indication.change_reporting_support_indication = 1;
indication.enb_change_reporting_support_indication = 1;
@ -223,7 +223,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->pdn_address_allocation.presence = 1;
req->maximum_apn_restriction.presence = 1;
req->maximum_apn_restriction.u8 = OGS_GTP_APN_NO_RESTRICTION;
req->maximum_apn_restriction.u8 = OGS_GTP2_APN_NO_RESTRICTION;
if (session->ambr.uplink || session->ambr.downlink) {
/*
@ -233,7 +233,7 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
* but it shall be encoded as shown in Figure 8.7-1 as
* Unsigned32 binary integer values in kbps (1000 bits per second).
*/
memset(&ambr, 0, sizeof(ogs_gtp_ambr_t));
memset(&ambr, 0, sizeof(ogs_gtp2_ambr_t));
ambr.uplink = htobe32(session->ambr.uplink / 1000);
ambr.downlink = htobe32(session->ambr.downlink / 1000);
req->aggregate_maximum_bit_rate.presence = 1;
@ -258,23 +258,23 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
bearer_qos.pre_emption_vulnerability =
session->qos.arp.pre_emption_vulnerability;
req->bearer_contexts_to_be_created.bearer_level_qos.presence = 1;
ogs_gtp_build_bearer_qos(
ogs_gtp2_build_bearer_qos(
&req->bearer_contexts_to_be_created.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
/* UE Time Zone */
memset(&ue_timezone, 0, sizeof(ue_timezone));
ogs_gettimeofday(&now);
ogs_localtime(now.tv_sec, &time_exp);
if (time_exp.tm_gmtoff >= 0) {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
} else {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone |= 0x08;
}
/* quarters of an hour */
ue_timezone.daylight_saving_time =
OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
req->ue_time_zone.presence = 1;
req->ue_time_zone.data = &ue_timezone;
req->ue_time_zone.len = sizeof(ue_timezone);
@ -284,22 +284,22 @@ ogs_pkbuf_t *mme_s11_build_create_session_request(
req->charging_characteristics.len = 2;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
uint8_t type, mme_bearer_t *bearer, int uli_presence)
{
int rv;
ogs_gtp_message_t gtp_message;
ogs_gtp_modify_bearer_request_t *req = &gtp_message.modify_bearer_request;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_modify_bearer_request_t *req = &gtp_message.modify_bearer_request;
ogs_gtp_f_teid_t enb_s1u_teid;
ogs_gtp2_f_teid_t enb_s1u_teid;
int len;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp_indication_t indication;
ogs_gtp2_indication_t indication;
mme_ue_t *mme_ue = NULL;
mme_sess_t *sess = NULL;
@ -316,14 +316,14 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
ogs_debug(" ENB_S1U_TEID[%d] SGW_S1U_TEID[%d]",
bearer->enb_s1u_teid, bearer->sgw_s1u_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
if (sess->request_type.value == OGS_NAS_EPS_REQUEST_TYPE_HANDOVER) {
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
memset(&indication, 0, sizeof(ogs_gtp2_indication_t));
indication.handover_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
req->indication_flags.len = sizeof(ogs_gtp2_indication_t);
}
/* Bearer Context : EBI */
@ -332,10 +332,10 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
req->bearer_contexts_to_be_modified.eps_bearer_id.u8 = bearer->ebi;
/* Data Plane(DL) : ENB-S1U */
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_ENODEB_GTP_U;
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP2_F_TEID_S1_U_ENODEB_GTP_U;
enb_s1u_teid.teid = htobe32(bearer->enb_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
rv = ogs_gtp2_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.presence = 1;
req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.data = &enb_s1u_teid;
@ -343,7 +343,7 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
if (uli_presence) {
/* User Location Information(ULI) */
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -351,8 +351,8 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
ogs_gtp_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
}
/*
@ -375,18 +375,18 @@ ogs_pkbuf_t *mme_s11_build_modify_bearer_request(
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_delete_session_request(
uint8_t type, mme_sess_t *sess)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_session_request_t *req = &gtp_message.delete_session_request;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_session_request_t *req = &gtp_message.delete_session_request;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_indication_t indication;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_indication_t indication;
mme_bearer_t *bearer = NULL;
mme_ue_t *mme_ue = NULL;
@ -401,13 +401,13 @@ ogs_pkbuf_t *mme_s11_build_delete_session_request(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
req->linked_eps_bearer_id.presence = 1;
req->linked_eps_bearer_id.u8 = bearer->ebi;
/* User Location Information(ULI) */
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -415,32 +415,32 @@ ogs_pkbuf_t *mme_s11_build_delete_session_request(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
ogs_gtp_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
memset(&indication, 0, sizeof(ogs_gtp2_indication_t));
indication.operation_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
req->indication_flags.len = sizeof(ogs_gtp2_indication_t);
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_create_bearer_response(
uint8_t type, mme_bearer_t *bearer, uint8_t cause_value)
{
int rv;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_bearer_response_t *rsp = &gtp_message.create_bearer_response;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_bearer_response_t *rsp = &gtp_message.create_bearer_response;
ogs_gtp_cause_t cause;
ogs_gtp_f_teid_t enb_s1u_teid, sgw_s1u_teid;
ogs_gtp2_cause_t cause;
ogs_gtp2_f_teid_t enb_s1u_teid, sgw_s1u_teid;
int len;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_ue_timezone_t ue_timezone;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_ue_timezone_t ue_timezone;
struct timeval now;
struct tm time_exp;
@ -454,7 +454,7 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Set Cause */
memset(&cause, 0, sizeof(cause));
@ -463,31 +463,31 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
rsp->cause.len = sizeof(cause);
rsp->cause.data = &cause;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
/* Bearer Context : EBI */
rsp->bearer_contexts.presence = 1;
rsp->bearer_contexts.eps_bearer_id.presence = 1;
rsp->bearer_contexts.eps_bearer_id.u8 = bearer->ebi;
/* Data Plane(DL) : ENB-S1U */
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_ENODEB_GTP_U;
memset(&enb_s1u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
enb_s1u_teid.interface_type = OGS_GTP2_F_TEID_S1_U_ENODEB_GTP_U;
enb_s1u_teid.teid = htobe32(bearer->enb_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
rv = ogs_gtp2_ip_to_f_teid(&bearer->enb_s1u_ip, &enb_s1u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
rsp->bearer_contexts.s1_u_enodeb_f_teid.presence = 1;
rsp->bearer_contexts.s1_u_enodeb_f_teid.data = &enb_s1u_teid;
rsp->bearer_contexts.s1_u_enodeb_f_teid.len = len;
/* Data Plane(UL) : SGW-S1U */
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
sgw_s1u_teid.interface_type = OGS_GTP_F_TEID_S1_U_SGW_GTP_U;
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s1u_teid.interface_type = OGS_GTP2_F_TEID_S1_U_SGW_GTP_U;
sgw_s1u_teid.teid = htobe32(bearer->sgw_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->sgw_s1u_ip, &sgw_s1u_teid, &len);
rv = ogs_gtp2_ip_to_f_teid(&bearer->sgw_s1u_ip, &sgw_s1u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
rsp->bearer_contexts.s4_u_sgsn_f_teid.presence = 1;
rsp->bearer_contexts.s4_u_sgsn_f_teid.data = &sgw_s1u_teid;
rsp->bearer_contexts.s4_u_sgsn_f_teid.len = OGS_GTP_F_TEID_IPV4_LEN;
rsp->bearer_contexts.s4_u_sgsn_f_teid.len = OGS_GTP2_F_TEID_IPV4_LEN;
/* Bearer Context : Cause */
rsp->bearer_contexts.cause.presence = 1;
@ -496,7 +496,7 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
}
/* User Location Information(ULI) */
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -504,39 +504,39 @@ ogs_pkbuf_t *mme_s11_build_create_bearer_response(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
rsp->user_location_information.presence = 1;
ogs_gtp_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
/* UE Time Zone */
memset(&ue_timezone, 0, sizeof(ue_timezone));
ogs_gettimeofday(&now);
ogs_localtime(now.tv_sec, &time_exp);
if (time_exp.tm_gmtoff >= 0) {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
} else {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone |= 0x08;
}
ue_timezone.daylight_saving_time =
OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
rsp->ue_time_zone.presence = 1;
rsp->ue_time_zone.data = &ue_timezone;
rsp->ue_time_zone.len = sizeof(ue_timezone);
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_update_bearer_response(
uint8_t type, mme_bearer_t *bearer, uint8_t cause_value)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_update_bearer_response_t *rsp = &gtp_message.update_bearer_response;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_update_bearer_response_t *rsp = &gtp_message.update_bearer_response;
ogs_gtp_cause_t cause;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_ue_timezone_t ue_timezone;
ogs_gtp2_cause_t cause;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_ue_timezone_t ue_timezone;
struct timeval now;
struct tm time_exp;
@ -550,7 +550,7 @@ ogs_pkbuf_t *mme_s11_build_update_bearer_response(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Set Cause */
memset(&cause, 0, sizeof(cause));
@ -559,7 +559,7 @@ ogs_pkbuf_t *mme_s11_build_update_bearer_response(
rsp->cause.len = sizeof(cause);
rsp->cause.data = &cause;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
/* Bearer Context : EBI */
rsp->bearer_contexts.presence = 1;
rsp->bearer_contexts.eps_bearer_id.presence = 1;
@ -572,7 +572,7 @@ ogs_pkbuf_t *mme_s11_build_update_bearer_response(
}
/* User Location Information(ULI) */
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -580,39 +580,39 @@ ogs_pkbuf_t *mme_s11_build_update_bearer_response(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
rsp->user_location_information.presence = 1;
ogs_gtp_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
/* UE Time Zone */
memset(&ue_timezone, 0, sizeof(ue_timezone));
ogs_gettimeofday(&now);
ogs_localtime(now.tv_sec, &time_exp);
if (time_exp.tm_gmtoff >= 0) {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
} else {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone |= 0x08;
}
ue_timezone.daylight_saving_time =
OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
rsp->ue_time_zone.presence = 1;
rsp->ue_time_zone.data = &ue_timezone;
rsp->ue_time_zone.len = sizeof(ue_timezone);
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_delete_bearer_response(
uint8_t type, mme_bearer_t *bearer, uint8_t cause_value)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_bearer_response_t *rsp = &gtp_message.delete_bearer_response;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_bearer_response_t *rsp = &gtp_message.delete_bearer_response;
ogs_gtp_cause_t cause;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_ue_timezone_t ue_timezone;
ogs_gtp2_cause_t cause;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_ue_timezone_t ue_timezone;
struct timeval now;
struct tm time_exp;
@ -626,7 +626,7 @@ ogs_pkbuf_t *mme_s11_build_delete_bearer_response(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Set Cause */
memset(&cause, 0, sizeof(cause));
@ -635,7 +635,7 @@ ogs_pkbuf_t *mme_s11_build_delete_bearer_response(
rsp->cause.len = sizeof(cause);
rsp->cause.data = &cause;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
mme_bearer_t *linked_bearer = mme_linked_bearer(bearer);
ogs_assert(linked_bearer);
@ -680,7 +680,7 @@ ogs_pkbuf_t *mme_s11_build_delete_bearer_response(
}
/* User Location Information(ULI) */
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &mme_ue->tai.plmn_id);
@ -688,57 +688,57 @@ ogs_pkbuf_t *mme_s11_build_delete_bearer_response(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &mme_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = mme_ue->e_cgi.cell_id;
rsp->user_location_information.presence = 1;
ogs_gtp_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&rsp->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
/* UE Time Zone */
memset(&ue_timezone, 0, sizeof(ue_timezone));
ogs_gettimeofday(&now);
ogs_localtime(now.tv_sec, &time_exp);
if (time_exp.tm_gmtoff >= 0) {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD(time_exp.tm_gmtoff / 900);
} else {
ue_timezone.timezone = OGS_GTP_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone = OGS_GTP2_TIME_TO_BCD((-time_exp.tm_gmtoff) / 900);
ue_timezone.timezone |= 0x08;
}
ue_timezone.daylight_saving_time =
OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
rsp->ue_time_zone.presence = 1;
rsp->ue_time_zone.data = &ue_timezone;
rsp->ue_time_zone.len = sizeof(ue_timezone);
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_release_access_bearers_request(uint8_t type)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_release_access_bearers_request_t *req =
ogs_gtp2_message_t gtp_message;
ogs_gtp2_release_access_bearers_request_t *req =
&gtp_message.release_access_bearers_request;
ogs_debug("Release Access Bearers Request");
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
req->originating_node.presence = 1;
req->originating_node.u8 = OGS_GTP_NODE_TYPE_MME;
req->originating_node.u8 = OGS_GTP2_NODE_TYPE_MME;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_downlink_data_notification_ack(
uint8_t type, uint8_t cause_value)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_downlink_data_notification_acknowledge_t *ack =
ogs_gtp2_message_t gtp_message;
ogs_gtp2_downlink_data_notification_acknowledge_t *ack =
&gtp_message.downlink_data_notification_acknowledge;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_debug("Downlink Data Notification Ackknowledge");
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = cause_value;
@ -751,7 +751,7 @@ ogs_pkbuf_t *mme_s11_build_downlink_data_notification_ack(
ack->data_notification_delay.u8 = 0;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
@ -763,12 +763,12 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
mme_sess_t *sess = NULL;
mme_bearer_t *bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_indirect_data_forwarding_tunnel_request_t *req =
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_indirect_data_forwarding_tunnel_request_t *req =
&gtp_message.create_indirect_data_forwarding_tunnel_request;
ogs_gtp_f_teid_t dl_teid[OGS_GTP_MAX_INDIRECT_TUNNEL];
ogs_gtp_f_teid_t ul_teid[OGS_GTP_MAX_INDIRECT_TUNNEL];
ogs_gtp2_f_teid_t dl_teid[OGS_GTP2_MAX_INDIRECT_TUNNEL];
ogs_gtp2_f_teid_t ul_teid[OGS_GTP2_MAX_INDIRECT_TUNNEL];
int len;
ogs_assert(mme_ue);
@ -777,7 +777,7 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
i = 0;
sess = mme_sess_first(mme_ue);
@ -785,11 +785,11 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
bearer = mme_bearer_first(sess);
while (bearer != NULL) {
if (MME_HAVE_ENB_DL_INDIRECT_TUNNEL(bearer)) {
memset(&dl_teid[i], 0, sizeof(ogs_gtp_f_teid_t));
memset(&dl_teid[i], 0, sizeof(ogs_gtp2_f_teid_t));
dl_teid[i].interface_type =
OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING;
OGS_GTP2_F_TEID_ENODEB_GTP_U_FOR_DL_DATA_FORWARDING;
dl_teid[i].teid = htobe32(bearer->enb_dl_teid);
rv = ogs_gtp_ip_to_f_teid(
rv = ogs_gtp2_ip_to_f_teid(
&bearer->enb_dl_ip, &dl_teid[i], &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
req->bearer_contexts[i].s1_u_enodeb_f_teid.presence = 1;
@ -798,11 +798,11 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
}
if (MME_HAVE_ENB_UL_INDIRECT_TUNNEL(bearer)) {
memset(&ul_teid[i], 0, sizeof(ogs_gtp_f_teid_t));
memset(&ul_teid[i], 0, sizeof(ogs_gtp2_f_teid_t));
ul_teid[i].interface_type =
OGS_GTP_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING;
OGS_GTP2_F_TEID_ENODEB_GTP_U_FOR_UL_DATA_FORWARDING;
ul_teid[i].teid = htobe32(bearer->enb_ul_teid);
rv = ogs_gtp_ip_to_f_teid(
rv = ogs_gtp2_ip_to_f_teid(
&bearer->enb_ul_ip, &ul_teid[i], &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
req->bearer_contexts[i].s12_rnc_f_teid.presence = 1;
@ -824,14 +824,14 @@ ogs_pkbuf_t *mme_s11_build_create_indirect_data_forwarding_tunnel_request(
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
uint8_t type, mme_bearer_t *bearer, ogs_nas_eps_message_t *nas_message)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_bearer_resource_command_t *cmd =
ogs_gtp2_message_t gtp_message;
ogs_gtp2_bearer_resource_command_t *cmd =
&gtp_message.bearer_resource_command;
ogs_nas_eps_bearer_resource_allocation_request_t *allocation = NULL;
ogs_nas_eps_bearer_resource_modification_request_t *modification = NULL;
@ -839,8 +839,8 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
ogs_nas_eps_quality_of_service_t *qos = NULL;
ogs_nas_traffic_flow_aggregate_description_t *tad = NULL;
ogs_gtp_flow_qos_t flow_qos;
char flow_qos_buf[GTP_FLOW_QOS_LEN];
ogs_gtp2_flow_qos_t flow_qos;
char flow_qos_buf[GTP2_FLOW_QOS_LEN];
mme_ue_t *mme_ue = NULL;
mme_sess_t *sess = NULL;
@ -879,7 +879,7 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
linked_bearer = mme_linked_bearer(bearer);
ogs_assert(linked_bearer);
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Linked Bearer Context : EBI */
cmd->linked_eps_bearer_id.presence = 1;
@ -903,21 +903,21 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
* 00000000 Reserved
*/
flow_qos.ul_mbr = qos->ul_mbr == 0 ? bearer->qos.mbr.uplink :
ogs_gtp_qos_to_bps(
ogs_gtp2_qos_to_bps(
qos->ul_mbr, qos->ul_mbr_extended, qos->ul_mbr_extended2);
flow_qos.dl_mbr = qos->dl_mbr == 0 ? bearer->qos.mbr.downlink :
ogs_gtp_qos_to_bps(
ogs_gtp2_qos_to_bps(
qos->dl_mbr, qos->dl_mbr_extended, qos->dl_mbr_extended2);
flow_qos.ul_gbr = qos->ul_gbr == 0 ? bearer->qos.gbr.uplink :
ogs_gtp_qos_to_bps(
ogs_gtp2_qos_to_bps(
qos->ul_gbr, qos->ul_gbr_extended, qos->ul_gbr_extended2);
flow_qos.dl_gbr = qos->dl_gbr == 0 ? bearer->qos.gbr.downlink :
ogs_gtp_qos_to_bps(
ogs_gtp2_qos_to_bps(
qos->dl_gbr, qos->dl_gbr_extended, qos->dl_gbr_extended2);
ogs_gtp_build_flow_qos(
ogs_gtp2_build_flow_qos(
&cmd->flow_quality_of_service,
&flow_qos, flow_qos_buf, GTP_FLOW_QOS_LEN);
&flow_qos, flow_qos_buf, GTP2_FLOW_QOS_LEN);
cmd->flow_quality_of_service.presence = 1;
}
@ -940,5 +940,5 @@ ogs_pkbuf_t *mme_s11_build_bearer_resource_command(
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}

View File

@ -34,32 +34,32 @@
static uint8_t esm_cause_from_gtp(uint8_t gtp_cause)
{
switch (gtp_cause) {
case OGS_GTP_CAUSE_CONTEXT_NOT_FOUND:
case OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND:
return ESM_CAUSE_INVALID_EPS_BEARER_IDENTITY;
case OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED:
case OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED:
return ESM_CAUSE_SERVICE_OPTION_NOT_SUPPORTED;
case OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
case OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
return ESM_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case OGS_GTP_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION:
case OGS_GTP2_CAUSE_SYNTACTIC_ERROR_IN_THE_TFT_OPERATION:
return ESM_CAUSE_SYNTACTICAL_ERROR_IN_THE_TFT_OPERATION;
case OGS_GTP_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER:
case OGS_GTP2_CAUSE_SYNTACTIC_ERRORS_IN_PACKET_FILTER:
return ESM_CAUSE_SYNTACTICAL_ERROR_IN_PACKET_FILTERS;
case OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER:
case OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER:
return ESM_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTERS;
default:
break;
}
/*
* OGS_GTP_CAUSE_SYSTEM_FAILURE
* OGS_GTP_CAUSE_MANDATORY_IE_MISSING
* OGS_GTP2_CAUSE_SYSTEM_FAILURE
* OGS_GTP2_CAUSE_MANDATORY_IE_MISSING
* ...
*/
return ESM_CAUSE_NETWORK_FAILURE;
}
void mme_s11_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req)
ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req)
{
ogs_assert(xact);
ogs_assert(req);
@ -67,30 +67,30 @@ void mme_s11_handle_echo_request(
ogs_debug("Receiving Echo Request");
/* FIXME : Before implementing recovery counter correctly,
* I'll re-use the recovery value in request message */
ogs_gtp_send_echo_response(xact, req->recovery.u8, 0);
ogs_gtp2_send_echo_response(xact, req->recovery.u8, 0);
}
void mme_s11_handle_echo_response(
ogs_gtp_xact_t *xact, ogs_gtp_echo_response_t *rsp)
ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *rsp)
{
/* Not Implemented */
}
void mme_s11_handle_create_session_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_create_session_response_t *rsp)
ogs_gtp2_create_session_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
ogs_gtp_f_teid_t *sgw_s11_teid = NULL;
ogs_gtp_f_teid_t *sgw_s1u_teid = NULL;
ogs_gtp2_f_teid_t *sgw_s11_teid = NULL;
ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL;
mme_bearer_t *bearer = NULL;
mme_sess_t *sess = NULL;
mme_ue_t *mme_ue = mme_ue_from_teid;
ogs_session_t *session = NULL;
ogs_gtp_bearer_qos_t bearer_qos;
ogs_gtp_ambr_t *ambr = NULL;
ogs_gtp2_bearer_qos_t bearer_qos;
ogs_gtp2_ambr_t *ambr = NULL;
uint16_t decoded = 0;
bool esm_piggybacked = false;
@ -100,28 +100,28 @@ void mme_s11_handle_create_session_response(
ogs_debug("Create Session Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (rsp->pdn_address_allocation.presence == 0) {
ogs_error("No PDN Address Allocation");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->sender_f_teid_for_control_plane.presence == 0) {
ogs_error("No S11 TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.s1_u_enodeb_f_teid.presence == 0) {
ogs_error("No S1U TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!mme_ue) {
@ -136,16 +136,16 @@ void mme_s11_handle_create_session_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED ||
cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED_PARTIALLY ||
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED ||
cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY ||
cause_value ==
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE ||
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE ||
cause_value ==
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
if (rsp->bearer_contexts_created.cause.presence) {
cause = rsp->bearer_contexts_created.cause.data;
ogs_assert(cause);
@ -153,14 +153,14 @@ void mme_s11_handle_create_session_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->pdn_address_allocation.presence) {
@ -171,27 +171,27 @@ void mme_s11_handle_create_session_response(
if (!OGS_PDU_SESSION_TYPE_IS_VALID(paa.session_type)) {
ogs_error("Unknown PDN Type[%u]", paa.session_type);
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_INCORRECT;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
}
}
if (mme_ue_from_teid && mme_ue &&
cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
bearer = mme_bearer_find_by_ue_ebi(mme_ue,
rsp->bearer_contexts_created.eps_bearer_id.u8);
}
if (!bearer) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED &&
cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
cause_value !=
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
cause_value !=
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
if (mme_ue_from_teid && mme_ue) {
if (esm_piggybacked == true) {
ogs_error("[%s] Attach reject", mme_ue->imsi_bcd);
@ -225,7 +225,7 @@ void mme_s11_handle_create_session_response(
/* Bearer QoS */
if (rsp->bearer_contexts_created.bearer_level_qos.presence) {
decoded = ogs_gtp_parse_bearer_qos(&bearer_qos,
decoded = ogs_gtp2_parse_bearer_qos(&bearer_qos,
&rsp->bearer_contexts_created.bearer_level_qos);
ogs_assert(rsp->bearer_contexts_created.bearer_level_qos.len ==
decoded);
@ -253,7 +253,7 @@ void mme_s11_handle_create_session_response(
ogs_debug(" ENB_S1U_TEID[%d] SGW_S1U_TEID[%d]",
bearer->enb_s1u_teid, bearer->sgw_s1u_teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s1u_teid, &bearer->sgw_s1u_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s1u_teid, &bearer->sgw_s1u_ip);
ogs_assert(rv == OGS_OK);
if (esm_piggybacked == true) {
@ -281,7 +281,7 @@ void mme_s11_handle_create_session_response(
void mme_s11_handle_modify_bearer_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_modify_bearer_response_t *rsp)
ogs_gtp2_modify_bearer_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
@ -295,7 +295,7 @@ void mme_s11_handle_modify_bearer_response(
ogs_debug("Modify Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!mme_ue) {
ogs_warn("No Context in TEID");
@ -311,18 +311,18 @@ void mme_s11_handle_modify_bearer_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (mme_ue_from_teid && mme_ue)
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return;
@ -344,7 +344,7 @@ void mme_s11_handle_modify_bearer_response(
void mme_s11_handle_delete_session_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_delete_session_response_t *rsp)
ogs_gtp2_delete_session_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
@ -368,11 +368,11 @@ void mme_s11_handle_delete_session_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d] - Ignored", cause_value);
}
@ -452,61 +452,61 @@ void mme_s11_handle_delete_session_response(
void mme_s11_handle_create_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_create_bearer_request_t *req)
ogs_gtp2_create_bearer_request_t *req)
{
int rv;
uint8_t cause_value = 0;
mme_bearer_t *bearer = NULL, *default_bearer = NULL;
mme_sess_t *sess = NULL;
ogs_gtp_f_teid_t *sgw_s1u_teid = NULL;
ogs_gtp_bearer_qos_t bearer_qos;
ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL;
ogs_gtp2_bearer_qos_t bearer_qos;
ogs_assert(xact);
ogs_assert(req);
ogs_debug("Create Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->linked_eps_bearer_id.presence == 0) {
ogs_error("No Linked EBI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.s1_u_enodeb_f_teid.presence == 0) {
ogs_error("No GTP TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.bearer_level_qos.presence == 0) {
ogs_error("No QoS");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.tft.presence == 0) {
ogs_error("No TFT");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (mme_ue && cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (mme_ue && cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
sess = mme_sess_find_by_ebi(mme_ue, req->linked_eps_bearer_id.u8);
if (sess) bearer = mme_bearer_add(sess);
}
if (!bearer) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -526,11 +526,11 @@ void mme_s11_handle_create_bearer_request(
/* Data Plane(UL) : SGW-S1U */
sgw_s1u_teid = req->bearer_contexts.s1_u_enodeb_f_teid.data;
bearer->sgw_s1u_teid = be32toh(sgw_s1u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s1u_teid, &bearer->sgw_s1u_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s1u_teid, &bearer->sgw_s1u_ip);
ogs_assert(rv == OGS_OK);
/* Bearer QoS */
ogs_expect_or_return(ogs_gtp_parse_bearer_qos(&bearer_qos,
ogs_expect_or_return(ogs_gtp2_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts.bearer_level_qos) ==
req->bearer_contexts.bearer_level_qos.len);
bearer->qos.index = bearer_qos.qci;
@ -590,42 +590,42 @@ void mme_s11_handle_create_bearer_request(
void mme_s11_handle_update_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_update_bearer_request_t *req)
ogs_gtp2_update_bearer_request_t *req)
{
uint8_t cause_value = 0;
mme_bearer_t *bearer = NULL;
mme_sess_t *sess = NULL;
ogs_gtp_bearer_qos_t bearer_qos;
ogs_gtp2_bearer_qos_t bearer_qos;
ogs_assert(xact);
ogs_assert(req);
ogs_debug("Update Bearer Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (mme_ue && cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (mme_ue && cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
bearer = mme_bearer_find_by_ue_ebi(mme_ue,
req->bearer_contexts.eps_bearer_id.u8);
}
if (!bearer) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -655,7 +655,7 @@ void mme_s11_handle_update_bearer_request(
if (req->bearer_contexts.bearer_level_qos.presence == 1) {
/* Bearer QoS */
ogs_expect_or_return(ogs_gtp_parse_bearer_qos(&bearer_qos,
ogs_expect_or_return(ogs_gtp2_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts.bearer_level_qos) ==
req->bearer_contexts.bearer_level_qos.len);
bearer->qos.index = bearer_qos.qci;
@ -702,13 +702,13 @@ void mme_s11_handle_update_bearer_request(
ogs_assert(OGS_OK ==
mme_gtp_send_update_bearer_response(
bearer, OGS_GTP_CAUSE_REQUEST_ACCEPTED));
bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
}
}
void mme_s11_handle_delete_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_delete_bearer_request_t *req)
ogs_gtp2_delete_bearer_request_t *req)
{
mme_bearer_t *bearer = NULL;
mme_sess_t *sess = NULL;
@ -757,9 +757,9 @@ void mme_s11_handle_delete_bearer_request(
if (!bearer) {
ogs_error("No Context");
ogs_gtp_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP_DELETE_BEARER_RESPONSE_TYPE,
OGS_GTP_CAUSE_CONTEXT_NOT_FOUND);
ogs_gtp2_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE,
OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
return;
}
@ -799,7 +799,7 @@ void mme_s11_handle_delete_bearer_request(
void mme_s11_handle_release_access_bearers_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_release_access_bearers_response_t *rsp)
ogs_gtp2_release_access_bearers_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
@ -827,11 +827,11 @@ void mme_s11_handle_release_access_bearers_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
@ -939,7 +939,7 @@ void mme_s11_handle_release_access_bearers_response(
void mme_s11_handle_downlink_data_notification(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_downlink_data_notification_t *noti)
ogs_gtp2_downlink_data_notification_t *noti)
{
uint8_t cause_value = 0;
@ -950,19 +950,19 @@ void mme_s11_handle_downlink_data_notification(
ogs_debug("Downlink Data Notification");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (noti->eps_bearer_id.presence == 0) {
ogs_error("No Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!mme_ue) {
ogs_error("No UE Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
bearer = mme_bearer_find_by_ue_ebi(mme_ue, noti->eps_bearer_id.u8);
if (!bearer)
ogs_error("No Context for EPS Bearer ID[%d]",
@ -971,13 +971,13 @@ void mme_s11_handle_downlink_data_notification(
if (!bearer) {
ogs_error("No Bearer Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE,
OGS_GTP_CAUSE_CONTEXT_NOT_FOUND);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, mme_ue ? mme_ue->sgw_s11_teid : 0,
OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE,
OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND);
return;
}
@ -997,7 +997,7 @@ void mme_s11_handle_downlink_data_notification(
bearer->notify.xact = xact;
if (noti->cause.presence) {
ogs_gtp_cause_t *cause = noti->cause.data;
ogs_gtp2_cause_t *cause = noti->cause.data;
ogs_assert(cause);
cause_value = cause->value;
@ -1020,7 +1020,7 @@ void mme_s11_handle_downlink_data_notification(
ogs_assert(OGS_OK == s1ap_send_paging(mme_ue, S1AP_CNDomain_ps));
} else if (ECM_CONNECTED(mme_ue)) {
if (cause_value == OGS_GTP_CAUSE_ERROR_INDICATION_RECEIVED) {
if (cause_value == OGS_GTP2_CAUSE_ERROR_INDICATION_RECEIVED) {
/*
* TS23.007 22. Downlink Data Notification Handling at MME/S4 SGSN
@ -1060,14 +1060,14 @@ void mme_s11_handle_downlink_data_notification(
} else {
ogs_assert(OGS_OK ==
mme_gtp_send_downlink_data_notification_ack(
bearer, OGS_GTP_CAUSE_UE_ALREADY_RE_ATTACHED));
bearer, OGS_GTP2_CAUSE_UE_ALREADY_RE_ATTACHED));
}
}
}
void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_create_indirect_data_forwarding_tunnel_response_t *rsp)
ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
@ -1076,7 +1076,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
enb_ue_t *source_ue = NULL;
int i;
ogs_gtp_f_teid_t *teid = NULL;
ogs_gtp2_f_teid_t *teid = NULL;
ogs_assert(xact);
ogs_assert(rsp);
@ -1093,11 +1093,11 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
@ -1105,7 +1105,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
mme_ue->mme_s11_teid, mme_ue->sgw_s11_teid);
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (mme_ue_from_teid && mme_ue)
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return;
@ -1126,7 +1126,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_assert(teid);
bearer->sgw_dl_teid = be32toh(teid->teid);
rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_dl_ip);
rv = ogs_gtp2_f_teid_to_ip(teid, &bearer->sgw_dl_ip);
ogs_assert(rv == OGS_OK);
}
if (rsp->bearer_contexts[i].s2b_u_epdg_f_teid_5.presence) {
@ -1134,7 +1134,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_assert(teid);
bearer->sgw_ul_teid = be32toh(teid->teid);
rv = ogs_gtp_f_teid_to_ip(teid, &bearer->sgw_ul_ip);
rv = ogs_gtp2_f_teid_to_ip(teid, &bearer->sgw_ul_ip);
ogs_assert(rv == OGS_OK);
}
}
@ -1148,7 +1148,7 @@ void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_delete_indirect_data_forwarding_tunnel_response_t *rsp)
ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp)
{
int rv;
uint8_t cause_value = 0;
@ -1172,15 +1172,15 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
ogs_expect_or_return(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (mme_ue_from_teid && mme_ue)
mme_send_delete_session_or_mme_ue_context_release(mme_ue);
return;
@ -1204,7 +1204,7 @@ void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
void mme_s11_handle_bearer_resource_failure_indication(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue_from_teid,
ogs_gtp_bearer_resource_failure_indication_t *ind)
ogs_gtp2_bearer_resource_failure_indication_t *ind)
{
int rv;
uint8_t cause_value = 0;
@ -1230,7 +1230,7 @@ void mme_s11_handle_bearer_resource_failure_indication(
ogs_expect_or_return(rv == OGS_OK);
if (ind->cause.presence) {
ogs_gtp_cause_t *cause = ind->cause.data;
ogs_gtp2_cause_t *cause = ind->cause.data;
ogs_assert(cause);
cause_value = cause->value;
@ -1247,7 +1247,7 @@ void mme_s11_handle_bearer_resource_failure_indication(
nas_eps_send_bearer_resource_modification_reject(
mme_ue, sess->pti, esm_cause_from_gtp(cause_value)));
if (cause_value == OGS_GTP_CAUSE_CONTEXT_NOT_FOUND) {
if (cause_value == OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND) {
ogs_warn("No Bearer");
mme_bearer_remove(bearer);
}

View File

@ -27,44 +27,44 @@ extern "C" {
#endif
void mme_s11_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req);
ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req);
void mme_s11_handle_echo_response(
ogs_gtp_xact_t *xact, ogs_gtp_echo_response_t *rsp);
ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *rsp);
void mme_s11_handle_create_session_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_create_session_response_t *rsp);
ogs_gtp2_create_session_response_t *rsp);
void mme_s11_handle_modify_bearer_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_modify_bearer_response_t *rsp);
ogs_gtp2_modify_bearer_response_t *rsp);
void mme_s11_handle_delete_session_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_delete_session_response_t *rsp);
ogs_gtp2_delete_session_response_t *rsp);
void mme_s11_handle_create_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_create_bearer_request_t *rsp);
ogs_gtp2_create_bearer_request_t *rsp);
void mme_s11_handle_update_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_update_bearer_request_t *rsp);
ogs_gtp2_update_bearer_request_t *rsp);
void mme_s11_handle_delete_bearer_request(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_delete_bearer_request_t *rsp);
ogs_gtp2_delete_bearer_request_t *rsp);
void mme_s11_handle_release_access_bearers_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_release_access_bearers_response_t *rsp);
ogs_gtp2_release_access_bearers_response_t *rsp);
void mme_s11_handle_downlink_data_notification(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_downlink_data_notification_t *noti);
ogs_gtp2_downlink_data_notification_t *noti);
void mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_create_indirect_data_forwarding_tunnel_response_t *rsp);
ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t *rsp);
void mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_delete_indirect_data_forwarding_tunnel_response_t *rsp);
ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t *rsp);
void mme_s11_handle_bearer_resource_failure_indication(
ogs_gtp_xact_t *xact, mme_ue_t *mme_ue,
ogs_gtp_bearer_resource_failure_indication_t *ind);
ogs_gtp2_bearer_resource_failure_indication_t *ind);
#ifdef __cplusplus
}

View File

@ -123,7 +123,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
ogs_gtp_node_t *gnode = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp2_message_t gtp_message;
mme_vlr_t *vlr = NULL;
@ -243,7 +243,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
ogs_warn("Cannot decode S1AP message");
ogs_assert(OGS_OK ==
s1ap_send_error_indication(
enb, NULL, NULL, S1AP_Cause_PR_protocol,
enb, NULL, NULL, S1AP_Cause_PR_protocol,
S1AP_CauseProtocol_abstract_syntax_error_falsely_constructed_message));
}
@ -299,7 +299,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
} else {
/* Here, if the MME_UE Context is found,
* the integrity check is not performed
* For example, ATTACH_REQUEST,
* For example, ATTACH_REQUEST,
* TRACKING_AREA_UPDATE_REQUEST message
*
* Now, We will check the MAC in the NAS message*/
@ -307,7 +307,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
h.type = e->nas_type;
if (h.integrity_protected) {
/* Decryption was performed in S1AP handler.
* So, we disabled 'ciphered'
* So, we disabled 'ciphered'
* not to decrypt NAS message */
h.ciphered = 0;
if (nas_eps_security_decode(mme_ue, h, pkbuf) != OGS_OK) {
@ -407,7 +407,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
} else if (OGS_FSM_CHECK(&bearer->sm, esm_state_exception)) {
/*
/*
* The UE requested the wrong APN.
*
* From the Issues #568, MME need to accept further service request.
@ -514,8 +514,8 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
pkbuf = e->pkbuf;
ogs_assert(pkbuf);
if (ogs_gtp_parse_msg(&gtp_message, pkbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
if (ogs_gtp2_parse_msg(&gtp_message, pkbuf) != OGS_OK) {
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(pkbuf);
break;
}
@ -570,41 +570,41 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
}
switch (gtp_message.h.type) {
case OGS_GTP_ECHO_REQUEST_TYPE:
case OGS_GTP2_ECHO_REQUEST_TYPE:
mme_s11_handle_echo_request(xact, &gtp_message.echo_request);
break;
case OGS_GTP_ECHO_RESPONSE_TYPE:
case OGS_GTP2_ECHO_RESPONSE_TYPE:
mme_s11_handle_echo_response(xact, &gtp_message.echo_response);
break;
case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
mme_s11_handle_create_session_response(
xact, mme_ue, &gtp_message.create_session_response);
break;
case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE:
case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE:
mme_s11_handle_modify_bearer_response(
xact, mme_ue, &gtp_message.modify_bearer_response);
break;
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
mme_s11_handle_delete_session_response(
xact, mme_ue, &gtp_message.delete_session_response);
break;
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
mme_s11_handle_create_bearer_request(
xact, mme_ue, &gtp_message.create_bearer_request);
break;
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
mme_s11_handle_update_bearer_request(
xact, mme_ue, &gtp_message.update_bearer_request);
break;
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
mme_s11_handle_delete_bearer_request(
xact, mme_ue, &gtp_message.delete_bearer_request);
break;
case OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE:
mme_s11_handle_release_access_bearers_response(
xact, mme_ue, &gtp_message.release_access_bearers_response);
break;
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
if (!mme_ue) {
if (gtp_message.h.teid_presence)
ogs_warn("No Context : TEID[%d]", gtp_message.h.teid);
@ -616,17 +616,17 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
mme_s11_handle_downlink_data_notification(
xact, mme_ue, &gtp_message.downlink_data_notification);
break;
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
mme_s11_handle_create_indirect_data_forwarding_tunnel_response(
xact, mme_ue,
&gtp_message.create_indirect_data_forwarding_tunnel_response);
break;
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE:
mme_s11_handle_delete_indirect_data_forwarding_tunnel_response(
xact, mme_ue,
&gtp_message.delete_indirect_data_forwarding_tunnel_response);
break;
case OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
mme_s11_handle_bearer_resource_failure_indication(
xact, mme_ue,
&gtp_message.bearer_resource_failure_indication);
@ -658,7 +658,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
vlr->max_num_of_ostreams =
ogs_min(max_num_of_ostreams, vlr->max_num_of_ostreams);
ogs_debug("VLR-SGs SCTP_COMM_UP[%s] Max Num of Outbound Streams[%d]",
ogs_debug("VLR-SGs SCTP_COMM_UP[%s] Max Num of Outbound Streams[%d]",
OGS_ADDR(vlr->addr, buf), vlr->max_num_of_ostreams);
e->vlr = vlr;
@ -684,7 +684,7 @@ void mme_state_operational(ogs_fsm_t *s, mme_event_t *e)
e->vlr = vlr;
ogs_fsm_dispatch(&vlr->sm, e);
ogs_info("VLR-SGs[%s] connection refused!!!",
ogs_info("VLR-SGs[%s] connection refused!!!",
OGS_ADDR(vlr->addr, buf));
} else {

View File

@ -757,7 +757,7 @@ void s1ap_handle_initial_context_setup_response(
}
if (mme_ue->nas_eps.type != MME_EPS_TYPE_ATTACH_REQUEST)
mme_send_after_paging(mme_ue, OGS_GTP_CAUSE_REQUEST_ACCEPTED);
mme_send_after_paging(mme_ue, OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
if (SMS_SERVICE_INDICATOR(mme_ue)) {
ogs_assert(OGS_OK ==
@ -1218,7 +1218,7 @@ void s1ap_handle_e_rab_setup_response(
} else {
ogs_assert(OGS_OK ==
mme_gtp_send_create_bearer_response(
bearer, OGS_GTP_CAUSE_REQUEST_ACCEPTED));
bearer, OGS_GTP2_CAUSE_REQUEST_ACCEPTED));
}
}
}

View File

@ -136,10 +136,10 @@ int sgwc_context_parse_config(void)
return OGS_OK;
}
sgwc_ue_t *sgwc_ue_add_by_message(ogs_gtp_message_t *message)
sgwc_ue_t *sgwc_ue_add_by_message(ogs_gtp2_message_t *message)
{
sgwc_ue_t *sgwc_ue = NULL;
ogs_gtp_create_session_request_t *req = &message->create_session_request;
ogs_gtp2_create_session_request_t *req = &message->create_session_request;
ogs_assert(message);
@ -152,7 +152,7 @@ sgwc_ue_t *sgwc_ue_add_by_message(ogs_gtp_message_t *message)
ogs_trace("sgwc_ue_add_by_message() - IMSI ");
ogs_log_hexdump(OGS_LOG_TRACE, req->imsi.data, req->imsi.len);
/*
/*
* 7.2.1 in 3GPP TS 29.274 Release 15
*
* If the new Create Session Request received by the SGW collides with
@ -418,7 +418,7 @@ int sgwc_sess_remove(sgwc_sess_t *sess)
void sgwc_sess_remove_all(sgwc_ue_t *sgwc_ue)
{
sgwc_sess_t *sess = NULL, *next_sess = NULL;
ogs_assert(sgwc_ue);
ogs_list_for_each_safe(&sgwc_ue->sess_list, next_sess, sess)
sgwc_sess_remove(sess);
@ -489,15 +489,15 @@ sgwc_bearer_t *sgwc_bearer_add(sgwc_sess_t *sess)
bearer->sess = sess;
/* Downlink */
tunnel = sgwc_tunnel_add(bearer, OGS_GTP_F_TEID_S5_S8_SGW_GTP_U);
tunnel = sgwc_tunnel_add(bearer, OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U);
ogs_assert(tunnel);
/* Uplink */
tunnel = sgwc_tunnel_add(bearer, OGS_GTP_F_TEID_S1_U_SGW_GTP_U);
tunnel = sgwc_tunnel_add(bearer, OGS_GTP2_F_TEID_S1_U_SGW_GTP_U);
ogs_assert(tunnel);
ogs_list_add(&sess->bearer_list, bearer);
return bearer;
}
@ -539,7 +539,7 @@ sgwc_bearer_t *sgwc_bearer_find_by_ue_ebi(sgwc_ue_t *sgwc_ue, uint8_t ebi)
{
sgwc_sess_t *sess = NULL;
sgwc_bearer_t *bearer = NULL;
ogs_assert(sgwc_ue);
ogs_list_for_each(&sgwc_ue->sess_list, sess) {
ogs_list_for_each(&sess->bearer_list, bearer) {
@ -643,20 +643,20 @@ sgwc_tunnel_t *sgwc_tunnel_add(
switch (interface_type) {
/* Downlink */
case OGS_GTP_F_TEID_S5_S8_SGW_GTP_U:
case OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U:
src_if = OGS_PFCP_INTERFACE_CORE;
dst_if = OGS_PFCP_INTERFACE_ACCESS;
break;
/* Uplink */
case OGS_GTP_F_TEID_S1_U_SGW_GTP_U:
case OGS_GTP2_F_TEID_S1_U_SGW_GTP_U:
src_if = OGS_PFCP_INTERFACE_ACCESS;
dst_if = OGS_PFCP_INTERFACE_CORE;
break;
/* Indirect */
case OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING:
case OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING:
case OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING:
case OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING:
src_if = OGS_PFCP_INTERFACE_ACCESS;
dst_if = OGS_PFCP_INTERFACE_ACCESS;
break;
@ -848,13 +848,13 @@ sgwc_tunnel_t *sgwc_dl_tunnel_in_bearer(sgwc_bearer_t *bearer)
{
ogs_assert(bearer);
return sgwc_tunnel_find_by_interface_type(bearer,
OGS_GTP_F_TEID_S5_S8_SGW_GTP_U);
OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U);
}
sgwc_tunnel_t *sgwc_ul_tunnel_in_bearer(sgwc_bearer_t *bearer)
{
ogs_assert(bearer);
return sgwc_tunnel_find_by_interface_type(bearer,
OGS_GTP_F_TEID_S1_U_SGW_GTP_U);
OGS_GTP2_F_TEID_S1_U_SGW_GTP_U);
}
static void stats_add_sgwc_session(void)

View File

@ -142,7 +142,7 @@ sgwc_context_t *sgwc_self(void);
int sgwc_context_parse_config(void);
sgwc_ue_t *sgwc_ue_add_by_message(ogs_gtp_message_t *message);
sgwc_ue_t *sgwc_ue_add_by_message(ogs_gtp2_message_t *message);
sgwc_ue_t *sgwc_ue_find_by_imsi(uint8_t *imsi, int imsi_len);
sgwc_ue_t *sgwc_ue_find_by_imsi_bcd(char *imsi_bcd);
sgwc_ue_t *sgwc_ue_find_by_teid(uint32_t teid);

View File

@ -27,7 +27,7 @@ extern "C" {
#endif
typedef struct ogs_gtp_node_s ogs_gtp_node_t;
typedef struct ogs_gtp_message_s ogs_gtp_message_t;
typedef struct ogs_gtp2_message_s ogs_gtp2_message_t;
typedef struct ogs_pfcp_node_s ogs_pfcp_node_t;
typedef struct ogs_pfcp_xact_s ogs_pfcp_xact_t;
typedef struct ogs_pfcp_message_s ogs_pfcp_message_t;
@ -53,7 +53,7 @@ typedef struct sgwc_event_s {
int timer_id;
ogs_gtp_node_t *gnode;
ogs_gtp_message_t *gtp_message;
ogs_gtp2_message_t *gtp_message;
ogs_pfcp_node_t *pfcp_node;
ogs_pfcp_xact_t *pfcp_xact;

View File

@ -150,7 +150,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE:
ogs_warn("[%s] No Downlink Data Notification ACK", sgwc_ue->imsi_bcd);
break;
default:
@ -170,7 +170,7 @@ int sgwc_gtp_send_downlink_data_notification(
ogs_gtp_xact_t *gtp_xact = NULL;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_assert(bearer);
@ -184,8 +184,8 @@ int sgwc_gtp_send_downlink_data_notification(
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
sgwc_ue->mme_s11_teid, sgwc_ue->sgw_s11_teid);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE;
h.teid = sgwc_ue->mme_s11_teid;
pkbuf = sgwc_s11_build_downlink_data_notification(cause_value, bearer);

View File

@ -22,10 +22,10 @@
ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(
uint8_t cause_value, sgwc_bearer_t *bearer)
{
ogs_gtp_message_t message;
ogs_gtp_downlink_data_notification_t *noti = NULL;
ogs_gtp_cause_t cause;
ogs_gtp_arp_t arp;
ogs_gtp2_message_t message;
ogs_gtp2_downlink_data_notification_t *noti = NULL;
ogs_gtp2_cause_t cause;
ogs_gtp2_arp_t arp;
sgwc_sess_t *sess = NULL;
ogs_assert(bearer);
@ -34,7 +34,7 @@ ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(
/* Build downlink notification message */
noti = &message.downlink_data_notification;
memset(&message, 0, sizeof(ogs_gtp_message_t));
memset(&message, 0, sizeof(ogs_gtp2_message_t));
/*
* TS29.274 8.4 Cause Value
@ -42,7 +42,7 @@ ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(
* 0 : Reserved. Shall not be sent and
* if received the Cause shall be treated as an invalid IE
*/
if (cause_value != OGS_GTP_CAUSE_UNDEFINED_VALUE) {
if (cause_value != OGS_GTP2_CAUSE_UNDEFINED_VALUE) {
memset(&cause, 0, sizeof(cause));
cause.value = cause_value;
noti->cause.presence = 1;
@ -63,6 +63,6 @@ ogs_pkbuf_t *sgwc_s11_build_downlink_data_notification(
noti->allocation_retention_priority.data = &arp;
noti->allocation_retention_priority.len = sizeof(arp);
message.h.type = OGS_GTP_DOWNLINK_DATA_NOTIFICATION_TYPE;
return ogs_gtp_build_msg(&message);
message.h.type = OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_TYPE;
return ogs_gtp2_build_msg(&message);
}

View File

@ -36,7 +36,7 @@ static void sess_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
ogs_error("[%s] No Delete Session Response", sgwc_ue->imsi_bcd);
if (!sgwc_sess_cycle(sess)) {
ogs_warn("[%s] Session has already been removed",
@ -77,33 +77,33 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
static uint8_t pfcp_cause_from_gtp(uint8_t gtp_cause)
{
switch (gtp_cause) {
case OGS_GTP_CAUSE_REQUEST_ACCEPTED:
case OGS_GTP2_CAUSE_REQUEST_ACCEPTED:
return OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
case OGS_GTP_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED:
case OGS_GTP2_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED:
return OGS_PFCP_CAUSE_REQUEST_REJECTED;
case OGS_GTP_CAUSE_CONTEXT_NOT_FOUND:
case OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND:
return OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND;
case OGS_GTP_CAUSE_MANDATORY_IE_MISSING:
case OGS_GTP2_CAUSE_MANDATORY_IE_MISSING:
return OGS_PFCP_CAUSE_MANDATORY_IE_MISSING;
case OGS_GTP_CAUSE_CONDITIONAL_IE_MISSING:
case OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING:
return OGS_PFCP_CAUSE_CONDITIONAL_IE_MISSING;
case OGS_GTP_CAUSE_INVALID_LENGTH:
case OGS_GTP2_CAUSE_INVALID_LENGTH:
return OGS_PFCP_CAUSE_INVALID_LENGTH;
case OGS_GTP_CAUSE_MANDATORY_IE_INCORRECT:
case OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT:
return OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT;
case OGS_GTP_CAUSE_INVALID_MESSAGE_FORMAT:
case OGS_GTP2_CAUSE_INVALID_MESSAGE_FORMAT:
return OGS_PFCP_CAUSE_INVALID_FORWARDING_POLICY;
case OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING:
case OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING:
return OGS_PFCP_CAUSE_NO_ESTABLISHED_PFCP_ASSOCIATION;
case OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
case OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION:
return OGS_PFCP_CAUSE_RULE_CREATION_MODIFICATION_FAILURE;
case OGS_GTP_CAUSE_GTP_C_ENTITY_CONGESTION:
case OGS_GTP2_CAUSE_GTP_C_ENTITY_CONGESTION:
return OGS_PFCP_CAUSE_PFCP_ENTITY_IN_CONGESTION;
case OGS_GTP_CAUSE_NO_RESOURCES_AVAILABLE:
case OGS_GTP2_CAUSE_NO_RESOURCES_AVAILABLE:
return OGS_PFCP_CAUSE_NO_RESOURCES_AVAILABLE;
case OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED:
case OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED:
return OGS_PFCP_CAUSE_SERVICE_NOT_SUPPORTED;
case OGS_GTP_CAUSE_SYSTEM_FAILURE:
case OGS_GTP2_CAUSE_SYSTEM_FAILURE:
return OGS_PFCP_CAUSE_SYSTEM_FAILURE;
default:
return OGS_PFCP_CAUSE_SYSTEM_FAILURE;
@ -114,19 +114,19 @@ static uint8_t pfcp_cause_from_gtp(uint8_t gtp_cause)
void sgwc_s11_handle_create_session_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
uint8_t cause_value = 0;
sgwc_sess_t *sess = NULL;
sgwc_bearer_t *bearer = NULL;
ogs_gtp_create_session_request_t *req = NULL;
ogs_gtp2_create_session_request_t *req = NULL;
uint16_t decoded;
ogs_gtp_f_teid_t *mme_s11_teid = NULL;
ogs_gtp_uli_t uli;
ogs_gtp_bearer_qos_t bearer_qos;
ogs_gtp2_f_teid_t *mme_s11_teid = NULL;
ogs_gtp2_uli_t uli;
ogs_gtp2_bearer_qos_t bearer_qos;
char apn[OGS_MAX_APN_LEN+1];
ogs_assert(s11_xact);
@ -137,54 +137,54 @@ void sgwc_s11_handle_create_session_request(
ogs_debug("Create Session Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->imsi.presence == 0) {
ogs_error("No IMSI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.bearer_level_qos.presence == 0) {
ogs_error("No Bearer QoS");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->access_point_name.presence == 0) {
ogs_error("No APN");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->sender_f_teid_for_control_plane.presence == 0) {
ogs_error("No Sender F-TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->pgw_s5_s8_address_for_control_plane_or_pmip.presence == 0) {
ogs_error("No PGW IP");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->user_location_information.presence == 0) {
ogs_error("No User Location Inforamtion");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->pdn_type.presence == 0) {
ogs_error("No PDN Type");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sgwc_ue) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -203,7 +203,7 @@ void sgwc_s11_handle_create_session_request(
ogs_assert(sess);
/* Set User Location Information */
decoded = ogs_gtp_parse_uli(&uli, &req->user_location_information);
decoded = ogs_gtp2_parse_uli(&uli, &req->user_location_information);
ogs_assert(req->user_location_information.len == decoded);
ogs_nas_to_plmn_id(&sgwc_ue->e_tai.plmn_id, &uli.tai.nas_plmn_id);
sgwc_ue->e_tai.tac = uli.tai.tac;
@ -225,13 +225,13 @@ void sgwc_s11_handle_create_session_request(
if (!OGS_FSM_CHECK(&sess->pfcp_node->sm, sgwc_pfcp_state_associated)) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING);
return;
}
/* Set Bearer QoS */
decoded = ogs_gtp_parse_bearer_qos(&bearer_qos,
decoded = ogs_gtp2_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts_to_be_created.bearer_level_qos);
ogs_assert(req->bearer_contexts_to_be_created.bearer_level_qos.len ==
decoded);
@ -270,7 +270,7 @@ void sgwc_s11_handle_create_session_request(
void sgwc_s11_handle_modify_bearer_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint16_t decoded;
@ -283,11 +283,11 @@ void sgwc_s11_handle_modify_bearer_request(
ogs_ip_t remote_ip;
ogs_ip_t zero_ip;
ogs_gtp_modify_bearer_request_t *req = NULL;
ogs_gtp_cause_t cause;
ogs_gtp_uli_t uli;
ogs_gtp_f_teid_t *enb_s1u_teid = NULL;
ogs_gtp2_modify_bearer_request_t *req = NULL;
ogs_gtp2_cause_t cause;
ogs_gtp2_uli_t uli;
ogs_gtp2_f_teid_t *enb_s1u_teid = NULL;
ogs_assert(s11_xact);
ogs_assert(message);
@ -297,43 +297,43 @@ void sgwc_s11_handle_modify_bearer_request(
ogs_debug("Modify Bearer Request");
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->bearer_contexts_to_be_modified.presence == 0) {
ogs_error("No Bearer");
cause.value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause.value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_modified.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause.value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause.value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.presence == 0) {
ogs_error("No eNB TEID");
cause.value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause.value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sgwc_ue) {
ogs_error("No Context");
cause.value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause.value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause.value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause.value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
bearer = sgwc_bearer_find_by_ue_ebi(sgwc_ue,
req->bearer_contexts_to_be_modified.eps_bearer_id.u8);
if (!bearer)
ogs_error("Unknown EPS Bearer ID[%d]",
req->bearer_contexts_to_be_modified.eps_bearer_id.u8);
}
}
if (!bearer) {
ogs_warn("No Context");
cause.value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause.value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause.value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause.value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE, cause.value);
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause.value);
return;
}
@ -348,17 +348,17 @@ void sgwc_s11_handle_modify_bearer_request(
enb_s1u_teid = req->bearer_contexts_to_be_modified.s1_u_enodeb_f_teid.data;
dl_tunnel->remote_teid = be32toh(enb_s1u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(enb_s1u_teid, &remote_ip);
rv = ogs_gtp2_f_teid_to_ip(enb_s1u_teid, &remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
if (req->user_location_information.presence == 1) {
decoded = ogs_gtp_parse_uli(
decoded = ogs_gtp2_parse_uli(
&uli, &req->user_location_information);
ogs_assert(req->user_location_information.len == decoded);
ogs_nas_to_plmn_id(&sgwc_ue->e_tai.plmn_id, &uli.tai.nas_plmn_id);
@ -414,13 +414,13 @@ void sgwc_s11_handle_modify_bearer_request(
void sgwc_s11_handle_delete_session_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value = 0;
sgwc_sess_t *sess = NULL;
ogs_gtp_xact_t *s5c_xact = NULL;
ogs_gtp_delete_session_request_t *req = NULL;
ogs_gtp2_delete_session_request_t *req = NULL;
ogs_assert(s11_xact);
ogs_assert(gtpbuf);
@ -430,19 +430,19 @@ void sgwc_s11_handle_delete_session_request(
ogs_debug("Delete Session Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->linked_eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sgwc_ue) {
ogs_error("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
sess = sgwc_sess_find_by_ebi(sgwc_ue, req->linked_eps_bearer_id.u8);
if (!sess)
ogs_error("Unknown EPS Bearer [IMSI:%s, EBI:%d]",
@ -451,18 +451,18 @@ void sgwc_s11_handle_delete_session_request(
if (!sess) {
ogs_error("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (!sess->gnode) {
ogs_error("No GTP Node");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_DELETE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -474,10 +474,10 @@ void sgwc_s11_handle_delete_session_request(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_DELETE_SESSION_REQUEST_TYPE;
message->h.type = OGS_GTP2_DELETE_SESSION_REQUEST_TYPE;
message->h.teid = sess->pgw_s5c_teid;
gtpbuf = ogs_gtp_build_msg(message);
gtpbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(gtpbuf);
s5c_xact = ogs_gtp_xact_local_create(
@ -492,7 +492,7 @@ void sgwc_s11_handle_delete_session_request(
void sgwc_s11_handle_create_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -505,9 +505,9 @@ void sgwc_s11_handle_create_bearer_response(
ogs_gtp_xact_t *s5c_xact = NULL;
ogs_gtp_create_bearer_response_t *rsp = NULL;
ogs_gtp_f_teid_t *sgw_s1u_teid = NULL, *enb_s1u_teid = NULL;
ogs_gtp_uli_t uli;
ogs_gtp2_create_bearer_response_t *rsp = NULL;
ogs_gtp2_f_teid_t *sgw_s1u_teid = NULL, *enb_s1u_teid = NULL;
ogs_gtp2_uli_t uli;
ogs_assert(s11_xact);
s5c_xact = s11_xact->assoc_xact;
@ -518,30 +518,30 @@ void sgwc_s11_handle_create_bearer_response(
ogs_debug("Create Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(s11_xact);
ogs_expect(rv == OGS_OK);
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.s1_u_enodeb_f_teid.presence == 0) {
ogs_error("No eNB TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.s4_u_sgsn_f_teid.presence == 0) {
ogs_error("No SGW TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->user_location_information.presence == 0) {
ogs_error("No User Location Inforamtion");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (s11_xact->xid & OGS_GTP_CMD_XACT_ID)
@ -560,15 +560,15 @@ void sgwc_s11_handle_create_bearer_response(
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -576,23 +576,23 @@ void sgwc_s11_handle_create_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_assert(OGS_OK ==
sgwc_pfcp_send_bearer_modification_request(
bearer, NULL, NULL,
OGS_PFCP_MODIFY_UL_ONLY|OGS_PFCP_MODIFY_REMOVE));
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -616,11 +616,11 @@ void sgwc_s11_handle_create_bearer_response(
ogs_debug(" ENB_S1U_TEID[%d] SGW_S1U_TEID[%d]",
dl_tunnel->remote_teid, dl_tunnel->local_teid);
rv = ogs_gtp_f_teid_to_ip(enb_s1u_teid, &dl_tunnel->remote_ip);
rv = ogs_gtp2_f_teid_to_ip(enb_s1u_teid, &dl_tunnel->remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
@ -634,7 +634,7 @@ void sgwc_s11_handle_create_bearer_response(
&far->outer_header_creation, &far->outer_header_creation_len));
far->outer_header_creation.teid = dl_tunnel->remote_teid;
decoded = ogs_gtp_parse_uli(&uli, &rsp->user_location_information);
decoded = ogs_gtp2_parse_uli(&uli, &rsp->user_location_information);
ogs_assert(rsp->user_location_information.len == decoded);
ogs_nas_to_plmn_id(&sgwc_ue->e_tai.plmn_id, &uli.tai.nas_plmn_id);
sgwc_ue->e_tai.tac = uli.tai.tac;
@ -656,7 +656,7 @@ void sgwc_s11_handle_create_bearer_response(
void sgwc_s11_handle_update_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -664,7 +664,7 @@ void sgwc_s11_handle_update_bearer_response(
ogs_gtp_xact_t *s5c_xact = NULL;
sgwc_sess_t *sess = NULL;
sgwc_bearer_t *bearer = NULL;
ogs_gtp_update_bearer_response_t *rsp = NULL;
ogs_gtp2_update_bearer_response_t *rsp = NULL;
ogs_assert(s11_xact);
s5c_xact = s11_xact->assoc_xact;
@ -675,18 +675,18 @@ void sgwc_s11_handle_update_bearer_response(
ogs_debug("Update Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(s11_xact);
ogs_expect(rv == OGS_OK);
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (s11_xact->xid & OGS_GTP_CMD_XACT_ID)
@ -705,15 +705,15 @@ void sgwc_s11_handle_update_bearer_response(
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -721,19 +721,19 @@ void sgwc_s11_handle_update_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -742,10 +742,10 @@ void sgwc_s11_handle_update_bearer_response(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE;
message->h.type = OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE;
message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(message);
pkbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s5c_xact, &message->h, pkbuf);
@ -757,7 +757,7 @@ void sgwc_s11_handle_update_bearer_response(
void sgwc_s11_handle_delete_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -765,7 +765,7 @@ void sgwc_s11_handle_delete_bearer_response(
sgwc_sess_t *sess = NULL;
sgwc_bearer_t *bearer = NULL;
ogs_gtp_delete_bearer_response_t *rsp = NULL;
ogs_gtp2_delete_bearer_response_t *rsp = NULL;
ogs_assert(s11_xact);
s5c_xact = s11_xact->assoc_xact;
@ -776,7 +776,7 @@ void sgwc_s11_handle_delete_bearer_response(
ogs_debug("Delete Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (s11_xact->xid & OGS_GTP_CMD_XACT_ID)
/* MME received Bearer Resource Modification Request */
@ -797,7 +797,7 @@ void sgwc_s11_handle_delete_bearer_response(
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->linked_eps_bearer_id.presence) {
@ -813,17 +813,17 @@ void sgwc_s11_handle_delete_bearer_response(
* 2. ePDG sends Delete Bearer Response(DEFAULT BEARER) to SMF.
*/
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
} else {
ogs_error("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_assert(OGS_OK ==
@ -843,19 +843,19 @@ void sgwc_s11_handle_delete_bearer_response(
*/
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -863,14 +863,14 @@ void sgwc_s11_handle_delete_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_debug(" MME_S11_TEID[%d] SGW_S11_TEID[%d]",
@ -886,12 +886,12 @@ void sgwc_s11_handle_delete_bearer_response(
void sgwc_s11_handle_release_access_bearers_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
sgwc_sess_t *sess = NULL;
ogs_gtp_release_access_bearers_request_t *req = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_release_access_bearers_request_t *req = NULL;
ogs_gtp2_cause_t cause;
ogs_assert(s11_xact);
ogs_assert(message);
@ -901,17 +901,17 @@ void sgwc_s11_handle_release_access_bearers_request(
ogs_debug("Release Access Bearers Request");
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sgwc_ue) {
ogs_warn("No Context");
cause.value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause.value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause.value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause.value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause.value);
OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause.value);
return;
}
@ -932,7 +932,7 @@ void sgwc_s11_handle_release_access_bearers_request(
void sgwc_s11_handle_downlink_data_notification_ack(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -940,7 +940,7 @@ void sgwc_s11_handle_downlink_data_notification_ack(
sgwc_bearer_t *bearer = NULL;
sgwc_sess_t *sess = NULL;
ogs_gtp_downlink_data_notification_acknowledge_t *ack = NULL;
ogs_gtp2_downlink_data_notification_acknowledge_t *ack = NULL;
ogs_assert(s11_xact);
ogs_assert(message);
@ -954,17 +954,17 @@ void sgwc_s11_handle_downlink_data_notification_ack(
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(s11_xact);
ogs_expect(rv == OGS_OK);
if (ack->cause.presence) {
ogs_gtp_cause_t *cause = ack->cause.data;
ogs_gtp2_cause_t *cause = ack->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)
ogs_warn("GTP Failed [CAUSE:%d] - PFCP_CAUSE[%d]",
cause_value, pfcp_cause_from_gtp(cause_value));
} else {
@ -978,7 +978,7 @@ void sgwc_s11_handle_downlink_data_notification_ack(
void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv, i;
@ -986,10 +986,10 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
sgwc_bearer_t *bearer = NULL;
sgwc_tunnel_t *tunnel = NULL;
ogs_pfcp_far_t *far = NULL;
ogs_gtp_create_indirect_data_forwarding_tunnel_request_t *req = NULL;
ogs_gtp_cause_t cause;
ogs_gtp_f_teid_t *req_teid = NULL;
ogs_gtp2_create_indirect_data_forwarding_tunnel_request_t *req = NULL;
ogs_gtp2_cause_t cause;
ogs_gtp2_f_teid_t *req_teid = NULL;
ogs_assert(s11_xact);
ogs_assert(message);
@ -999,17 +999,17 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
ogs_debug("Create Indirect Data Forwarding Tunnel Request");
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sgwc_ue) {
ogs_warn("No Context");
cause.value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause.value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause.value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause.value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
cause.value);
return;
}
@ -1022,12 +1022,12 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
ogs_error("No EBI");
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
bearer = sgwc_bearer_find_by_ue_ebi(sgwc_ue,
bearer = sgwc_bearer_find_by_ue_ebi(sgwc_ue,
req->bearer_contexts[i].eps_bearer_id.u8);
ogs_assert(bearer);
@ -1036,17 +1036,17 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
ogs_assert(req_teid);
tunnel = sgwc_tunnel_add(bearer,
OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING);
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING);
ogs_assert(tunnel);
tunnel->remote_teid = be32toh(req_teid->teid);
rv = ogs_gtp_f_teid_to_ip(req_teid, &tunnel->remote_ip);
rv = ogs_gtp2_f_teid_to_ip(req_teid, &tunnel->remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(s11_xact,
sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
@ -1071,17 +1071,17 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
ogs_assert(req_teid);
tunnel = sgwc_tunnel_add(bearer,
OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING);
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING);
ogs_assert(tunnel);
tunnel->remote_teid = be32toh(req_teid->teid);
rv = ogs_gtp_f_teid_to_ip(req_teid, &tunnel->remote_ip);
rv = ogs_gtp2_f_teid_to_ip(req_teid, &tunnel->remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(s11_xact,
sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
@ -1114,28 +1114,28 @@ void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
void sgwc_s11_handle_delete_indirect_data_forwarding_tunnel_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *recv_message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *recv_message)
{
sgwc_sess_t *sess = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_assert(s11_xact);
ogs_debug("Delete Indirect Data Forwarding Tunnel Request");
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sgwc_ue) {
ogs_warn("No Context");
cause.value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause.value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause.value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause.value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE,
cause.value);
return;
}
@ -1157,11 +1157,11 @@ void sgwc_s11_handle_delete_indirect_data_forwarding_tunnel_request(
void sgwc_s11_handle_bearer_resource_command(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_bearer_resource_command_t *cmd = NULL;
ogs_gtp2_bearer_resource_command_t *cmd = NULL;
uint8_t cause_value = 0;
ogs_gtp_xact_t *s5c_xact = NULL;
@ -1175,27 +1175,27 @@ void sgwc_s11_handle_bearer_resource_command(
ogs_debug("Bearer Resource Command");
cmd = &message->bearer_resource_command;
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (cmd->procedure_transaction_id.presence == 0) {
ogs_error("No PTI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cmd->traffic_aggregate_description.presence == 0) {
ogs_error("No Traffic aggregate description(TAD)");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cmd->linked_eps_bearer_id.presence == 0) {
ogs_error("No Linked EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sgwc_ue) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
uint8_t ebi = cmd->linked_eps_bearer_id.u8;
if (cmd->eps_bearer_id.presence)
@ -1209,13 +1209,13 @@ void sgwc_s11_handle_bearer_resource_command(
if (!bearer) {
ogs_error("No context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
return;
}
@ -1228,10 +1228,10 @@ void sgwc_s11_handle_bearer_resource_command(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE;
message->h.type = OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE;
message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(message);
pkbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(pkbuf);
s5c_xact = ogs_gtp_xact_local_create(

View File

@ -28,40 +28,40 @@ extern "C" {
void sgwc_s11_handle_create_session_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_modify_bearer_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_delete_session_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_create_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_update_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_delete_bearer_response(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_release_access_bearers_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_downlink_data_notification_ack(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_delete_indirect_data_forwarding_tunnel_request(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s11_handle_bearer_resource_command(
sgwc_ue_t *sgwc_ue, ogs_gtp_xact_t *s11_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
#ifdef __cplusplus
}

View File

@ -39,10 +39,10 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Update Bearer Response", sgwc_ue->imsi_bcd);
break;
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Delete Bearer Response", sgwc_ue->imsi_bcd);
if (!sgwc_bearer_cycle(bearer)) {
ogs_warn("[%s] Bearer has already been removed", sgwc_ue->imsi_bcd);
@ -60,11 +60,11 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
void sgwc_s5c_handle_create_session_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
ogs_gtp_cause_t *cause = NULL;
ogs_gtp_cause_t *bearer_cause = NULL;
ogs_gtp2_cause_t *cause = NULL;
ogs_gtp2_cause_t *bearer_cause = NULL;
uint8_t cause_value;
sgwc_ue_t *sgwc_ue = NULL;
@ -72,10 +72,10 @@ void sgwc_s5c_handle_create_session_response(
sgwc_tunnel_t *ul_tunnel = NULL;
ogs_pfcp_far_t *far = NULL;
ogs_gtp_f_teid_t *pgw_s5c_teid = NULL;
ogs_gtp_f_teid_t *pgw_s5u_teid = NULL;
ogs_gtp2_f_teid_t *pgw_s5c_teid = NULL;
ogs_gtp2_f_teid_t *pgw_s5u_teid = NULL;
ogs_gtp_create_session_response_t *rsp = NULL;
ogs_gtp2_create_session_response_t *rsp = NULL;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_assert(s5c_xact);
@ -91,28 +91,28 @@ void sgwc_s5c_handle_create_session_response(
/***************************
* Check Session Context
***************************/
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context in TEID");
sess = s5c_xact->data;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
} else {
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
if (rsp->bearer_contexts_created.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
} else {
bearer = sgwc_bearer_find_by_sess_ebi(sess,
rsp->bearer_contexts_created.eps_bearer_id.u8);
if (!bearer) {
ogs_error("No Context for EPS Bearer ID[%d]",
rsp->bearer_contexts_created.eps_bearer_id.u8);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
}
}
@ -120,25 +120,25 @@ void sgwc_s5c_handle_create_session_response(
rv = ogs_gtp_xact_commit(s5c_xact);
ogs_expect(rv == OGS_OK);
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
/***************************
* Check Manatory IE Missing
***************************/
ogs_assert(cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED);
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
if (rsp->bearer_contexts_created.cause.presence == 0) {
ogs_error("No EPS Bearer Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
@ -147,21 +147,21 @@ void sgwc_s5c_handle_create_session_response(
if (rsp->pgw_s5_s8__s2a_s2b_f_teid_for_pmip_based_interface_or_for_gtp_based_control_plane_interface.presence == 0) {
ogs_error("No GTP TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.presence == 0) {
ogs_error("No GTP TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->cause.presence == 0) {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts_created.cause.presence == 0) {
ogs_error("No Bearer Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->pdn_address_allocation.presence) {
@ -177,50 +177,50 @@ void sgwc_s5c_handle_create_session_response(
/* Nothing */
} else {
ogs_error("Unknown PDN Type %u", paa.session_type);
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_error("No PDN Address Allocation");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
/***************************
* Check Cause Value
***************************/
ogs_assert(cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED);
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
bearer_cause = rsp->bearer_contexts_created.cause.data;
ogs_assert(bearer_cause);
cause_value = bearer_cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_error("GTP Failed [Bearer-CAUSE:%d]", cause_value);
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED &&
cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED &&
cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED_PARTIALLY &&
cause_value !=
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE &&
cause_value !=
OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_SINGLE_ADDRESS_BEARER_ONLY) {
ogs_error("GTP Failed [CAUSE:%d]", cause_value);
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -233,12 +233,12 @@ void sgwc_s5c_handle_create_session_response(
ogs_assert(pgw_s5u_teid);
ul_tunnel->remote_teid = be32toh(pgw_s5u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(pgw_s5u_teid, &ul_tunnel->remote_ip);
rv = ogs_gtp2_f_teid_to_ip(pgw_s5u_teid, &ul_tunnel->remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
@ -272,7 +272,7 @@ void sgwc_s5c_handle_create_session_response(
void sgwc_s5c_handle_delete_session_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -280,7 +280,7 @@ void sgwc_s5c_handle_delete_session_response(
sgwc_ue_t *sgwc_ue = NULL;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_delete_session_response_t *rsp = NULL;
ogs_gtp2_delete_session_response_t *rsp = NULL;
ogs_assert(s5c_xact);
s11_xact = s5c_xact->assoc_xact;
@ -291,7 +291,7 @@ void sgwc_s5c_handle_delete_session_response(
ogs_debug("Delete Session Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context in TEID");
@ -306,16 +306,16 @@ void sgwc_s5c_handle_delete_session_response(
ogs_assert(sgwc_ue);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
@ -335,7 +335,7 @@ void sgwc_s5c_handle_delete_session_response(
void sgwc_s5c_handle_modify_bearer_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value;
@ -344,7 +344,7 @@ void sgwc_s5c_handle_modify_bearer_response(
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_modify_bearer_response_t *rsp = NULL;
ogs_gtp2_modify_bearer_response_t *rsp = NULL;
ogs_assert(s5c_xact);
s11_xact = s5c_xact->assoc_xact;
@ -355,7 +355,7 @@ void sgwc_s5c_handle_modify_bearer_response(
ogs_debug("Modify Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context in TEID");
@ -370,19 +370,19 @@ void sgwc_s5c_handle_modify_bearer_response(
ogs_assert(sgwc_ue);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -391,10 +391,10 @@ void sgwc_s5c_handle_modify_bearer_response(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE;
message->h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE;
message->h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(message);
pkbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &message->h, pkbuf);
@ -406,7 +406,7 @@ void sgwc_s5c_handle_modify_bearer_response(
void sgwc_s5c_handle_create_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value = 0;
@ -416,8 +416,8 @@ void sgwc_s5c_handle_create_bearer_request(
sgwc_tunnel_t *ul_tunnel = NULL;
ogs_pfcp_far_t *far = NULL;
ogs_gtp_create_bearer_request_t *req = NULL;
ogs_gtp_f_teid_t *pgw_s5u_teid = NULL;
ogs_gtp2_create_bearer_request_t *req = NULL;
ogs_gtp2_f_teid_t *pgw_s5u_teid = NULL;
ogs_assert(s5c_xact);
ogs_assert(message);
@ -426,33 +426,33 @@ void sgwc_s5c_handle_create_bearer_request(
ogs_debug("Create Bearer Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->linked_eps_bearer_id.presence == 0) {
ogs_error("No Linked EBI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.s4_u_sgsn_f_teid.presence == 0) {
ogs_error("No GTP TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -476,11 +476,11 @@ void sgwc_s5c_handle_create_bearer_request(
ogs_debug(" SGW_S5U_TEID[%d] PGW_S5U_TEID[%d]",
ul_tunnel->local_teid, ul_tunnel->remote_teid);
rv = ogs_gtp_f_teid_to_ip(pgw_s5u_teid, &ul_tunnel->remote_ip);
rv = ogs_gtp2_f_teid_to_ip(pgw_s5u_teid, &ul_tunnel->remote_ip);
if (rv != OGS_OK) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE,
OGS_GTP_CAUSE_MANDATORY_IE_MISSING);
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING);
return;
}
@ -502,12 +502,12 @@ void sgwc_s5c_handle_create_bearer_request(
void sgwc_s5c_handle_update_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value = 0;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_update_bearer_request_t *req = NULL;
ogs_gtp2_update_bearer_request_t *req = NULL;
ogs_pkbuf_t *pkbuf = NULL;
sgwc_ue_t *sgwc_ue = NULL;
sgwc_bearer_t *bearer = NULL;
@ -519,23 +519,23 @@ void sgwc_s5c_handle_update_bearer_request(
ogs_debug("Update Bearer Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
bearer = sgwc_bearer_find_by_sess_ebi(
sess, req->bearer_contexts.eps_bearer_id.u8);
if (!bearer)
@ -544,12 +544,12 @@ void sgwc_s5c_handle_update_bearer_request(
}
if (!bearer) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -565,10 +565,10 @@ void sgwc_s5c_handle_update_bearer_request(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_UPDATE_BEARER_REQUEST_TYPE;
message->h.type = OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE;
message->h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(message);
pkbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(pkbuf);
s11_xact = s5c_xact->assoc_xact;
@ -591,12 +591,12 @@ void sgwc_s5c_handle_update_bearer_request(
void sgwc_s5c_handle_delete_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
int rv;
uint8_t cause_value = 0;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_delete_bearer_request_t *req = NULL;
ogs_gtp2_delete_bearer_request_t *req = NULL;
ogs_pkbuf_t *pkbuf = NULL;
sgwc_ue_t *sgwc_ue = NULL;
sgwc_bearer_t *bearer = NULL;
@ -608,20 +608,20 @@ void sgwc_s5c_handle_delete_bearer_request(
ogs_debug("Delete Bearer Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->linked_eps_bearer_id.presence == 0 &&
req->eps_bearer_ids.presence == 0) {
ogs_error("No Linked EBI or EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
uint8_t ebi;
if (req->linked_eps_bearer_id.presence) {
@ -660,12 +660,12 @@ void sgwc_s5c_handle_delete_bearer_request(
}
if (!bearer) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_DELETE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -681,10 +681,10 @@ void sgwc_s5c_handle_delete_bearer_request(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->pgw_s5c_teid);
message->h.type = OGS_GTP_DELETE_BEARER_REQUEST_TYPE;
message->h.type = OGS_GTP2_DELETE_BEARER_REQUEST_TYPE;
message->h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(message);
pkbuf = ogs_gtp2_build_msg(message);
ogs_expect_or_return(pkbuf);
s11_xact = s5c_xact->assoc_xact;
@ -724,11 +724,11 @@ void sgwc_s5c_handle_delete_bearer_request(
void sgwc_s5c_handle_bearer_resource_failure_indication(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message)
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message)
{
uint8_t cause_value = 0;
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_bearer_resource_failure_indication_t *ind = NULL;
ogs_gtp2_bearer_resource_failure_indication_t *ind = NULL;
sgwc_ue_t *sgwc_ue = NULL;
@ -743,22 +743,22 @@ void sgwc_s5c_handle_bearer_resource_failure_indication(
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
} else {
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
}
if (ind->cause.presence) {
ogs_gtp_cause_t *cause = ind->cause.data;
ogs_gtp2_cause_t *cause = ind->cause.data;
ogs_assert(cause);
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_gtp_send_error_message(s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
}

View File

@ -28,25 +28,25 @@ extern "C" {
void sgwc_s5c_handle_create_session_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_delete_session_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_modify_bearer_response(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_create_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_update_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_delete_bearer_request(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
void sgwc_s5c_handle_bearer_resource_failure_indication(
sgwc_sess_t *sess, ogs_gtp_xact_t *s5c_xact,
ogs_pkbuf_t *gtpbuf, ogs_gtp_message_t *message);
ogs_pkbuf_t *gtpbuf, ogs_gtp2_message_t *message);
#ifdef __cplusplus
}

View File

@ -24,7 +24,7 @@
#include "pfcp-path.h"
static void sgwc_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req)
ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req)
{
ogs_assert(xact);
ogs_assert(req);
@ -32,11 +32,11 @@ static void sgwc_handle_echo_request(
ogs_debug("[SGW] Receiving Echo Request");
/* FIXME : Before implementing recovery counter correctly,
* I'll re-use the recovery value in request message */
ogs_gtp_send_echo_response(xact, req->recovery.u8, 0);
ogs_gtp2_send_echo_response(xact, req->recovery.u8, 0);
}
static void sgwc_handle_echo_response(
ogs_gtp_xact_t *s11_xact, ogs_gtp_echo_response_t *rsp)
ogs_gtp_xact_t *s11_xact, ogs_gtp2_echo_response_t *rsp)
{
/* Not Implemented */
}
@ -67,7 +67,7 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
sgwc_sess_t *sess = NULL;
ogs_gtp_xact_t *gtp_xact = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp2_message_t gtp_message;
ogs_gtp_node_t *gnode = NULL;
ogs_pfcp_node_t *pfcp_node = NULL;
@ -110,7 +110,7 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
e->gtp_message = NULL;
if (pfcp_xact->gtpbuf) {
rv = ogs_gtp_parse_msg(&gtp_message, pfcp_xact->gtpbuf);
rv = ogs_gtp2_parse_msg(&gtp_message, pfcp_xact->gtpbuf);
e->gtp_message = &gtp_message;
}
@ -139,8 +139,8 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
recvbuf = e->pkbuf;
ogs_assert(recvbuf);
if (ogs_gtp_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
if (ogs_gtp2_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(recvbuf);
break;
}
@ -165,13 +165,13 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
}
switch(gtp_message.h.type) {
case OGS_GTP_ECHO_REQUEST_TYPE:
case OGS_GTP2_ECHO_REQUEST_TYPE:
sgwc_handle_echo_request(gtp_xact, &gtp_message.echo_request);
break;
case OGS_GTP_ECHO_RESPONSE_TYPE:
case OGS_GTP2_ECHO_RESPONSE_TYPE:
sgwc_handle_echo_response(gtp_xact, &gtp_message.echo_response);
break;
case OGS_GTP_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
if (gtp_message.h.teid == 0) {
ogs_expect(!sgwc_ue);
sgwc_ue = sgwc_ue_add_by_message(&gtp_message);
@ -181,43 +181,43 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
sgwc_s11_handle_create_session_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE:
sgwc_s11_handle_modify_bearer_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
sgwc_s11_handle_delete_session_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE:
sgwc_s11_handle_create_bearer_response(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE:
sgwc_s11_handle_update_bearer_response(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
sgwc_s11_handle_delete_bearer_response(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
case OGS_GTP2_RELEASE_ACCESS_BEARERS_REQUEST_TYPE:
sgwc_s11_handle_release_access_bearers_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
case OGS_GTP2_DOWNLINK_DATA_NOTIFICATION_ACKNOWLEDGE_TYPE:
sgwc_s11_handle_downlink_data_notification_ack(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
sgwc_s11_handle_create_indirect_data_forwarding_tunnel_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
case OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_REQUEST_TYPE:
sgwc_s11_handle_delete_indirect_data_forwarding_tunnel_request(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
sgwc_s11_handle_bearer_resource_command(
sgwc_ue, gtp_xact, recvbuf, &gtp_message);
break;
@ -233,8 +233,8 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
recvbuf = e->pkbuf;
ogs_assert(recvbuf);
if (ogs_gtp_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
if (ogs_gtp2_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(recvbuf);
break;
}
@ -258,37 +258,37 @@ void sgwc_state_operational(ogs_fsm_t *s, sgwc_event_t *e)
}
switch(gtp_message.h.type) {
case OGS_GTP_ECHO_REQUEST_TYPE:
case OGS_GTP2_ECHO_REQUEST_TYPE:
sgwc_handle_echo_request(gtp_xact, &gtp_message.echo_request);
break;
case OGS_GTP_ECHO_RESPONSE_TYPE:
case OGS_GTP2_ECHO_RESPONSE_TYPE:
sgwc_handle_echo_response(gtp_xact, &gtp_message.echo_response);
break;
case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
sgwc_s5c_handle_create_session_response(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
sgwc_s5c_handle_delete_session_response(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE:
case OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE:
sgwc_s5c_handle_modify_bearer_response(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
sgwc_s5c_handle_create_bearer_request(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
sgwc_s5c_handle_update_bearer_request(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
sgwc_s5c_handle_delete_bearer_request(
sess, gtp_xact, recvbuf, &gtp_message);
break;
case OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
case OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE:
sgwc_s5c_handle_bearer_resource_failure_indication(
sess, gtp_xact, recvbuf, &gtp_message);
break;

View File

@ -141,16 +141,16 @@ ogs_pkbuf_t *sgwc_sxa_build_sess_modification_request(
OGS_PFCP_MODIFY_INDIRECT)) == 0) ||
((modify_flags & OGS_PFCP_MODIFY_DL_ONLY) &&
(tunnel->interface_type == OGS_GTP_F_TEID_S5_S8_SGW_GTP_U)) ||
(tunnel->interface_type == OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U)) ||
((modify_flags & OGS_PFCP_MODIFY_UL_ONLY) &&
(tunnel->interface_type == OGS_GTP_F_TEID_S1_U_SGW_GTP_U)) ||
(tunnel->interface_type == OGS_GTP2_F_TEID_S1_U_SGW_GTP_U)) ||
(((modify_flags & OGS_PFCP_MODIFY_INDIRECT) &&
((tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) ||
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) ||
(tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING))))) {
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING))))) {
if (modify_flags & OGS_PFCP_MODIFY_REMOVE) {
pdr = tunnel->pdr;
@ -261,16 +261,16 @@ ogs_pkbuf_t *sgwc_sxa_build_bearer_modification_request(
OGS_PFCP_MODIFY_INDIRECT)) == 0) ||
((modify_flags & OGS_PFCP_MODIFY_DL_ONLY) &&
(tunnel->interface_type == OGS_GTP_F_TEID_S5_S8_SGW_GTP_U)) ||
(tunnel->interface_type == OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U)) ||
((modify_flags & OGS_PFCP_MODIFY_UL_ONLY) &&
(tunnel->interface_type == OGS_GTP_F_TEID_S1_U_SGW_GTP_U)) ||
(tunnel->interface_type == OGS_GTP2_F_TEID_S1_U_SGW_GTP_U)) ||
(((modify_flags & OGS_PFCP_MODIFY_INDIRECT) &&
((tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) ||
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) ||
(tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING))))) {
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING))))) {
if (modify_flags & OGS_PFCP_MODIFY_REMOVE) {
pdr = tunnel->pdr;

View File

@ -25,39 +25,39 @@ static uint8_t gtp_cause_from_pfcp(uint8_t pfcp_cause)
{
switch (pfcp_cause) {
case OGS_PFCP_CAUSE_REQUEST_ACCEPTED:
return OGS_GTP_CAUSE_REQUEST_ACCEPTED;
return OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
case OGS_PFCP_CAUSE_REQUEST_REJECTED:
return OGS_GTP_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED;
return OGS_GTP2_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED;
case OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND:
return OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
return OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
case OGS_PFCP_CAUSE_MANDATORY_IE_MISSING:
return OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
return OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
case OGS_PFCP_CAUSE_CONDITIONAL_IE_MISSING:
return OGS_GTP_CAUSE_CONDITIONAL_IE_MISSING;
return OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
case OGS_PFCP_CAUSE_INVALID_LENGTH:
return OGS_GTP_CAUSE_INVALID_LENGTH;
return OGS_GTP2_CAUSE_INVALID_LENGTH;
case OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT:
return OGS_GTP_CAUSE_MANDATORY_IE_INCORRECT;
return OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
case OGS_PFCP_CAUSE_INVALID_FORWARDING_POLICY:
case OGS_PFCP_CAUSE_INVALID_F_TEID_ALLOCATION_OPTION:
return OGS_GTP_CAUSE_INVALID_MESSAGE_FORMAT;
return OGS_GTP2_CAUSE_INVALID_MESSAGE_FORMAT;
case OGS_PFCP_CAUSE_NO_ESTABLISHED_PFCP_ASSOCIATION:
return OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
return OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
case OGS_PFCP_CAUSE_RULE_CREATION_MODIFICATION_FAILURE:
return OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case OGS_PFCP_CAUSE_PFCP_ENTITY_IN_CONGESTION:
return OGS_GTP_CAUSE_GTP_C_ENTITY_CONGESTION;
return OGS_GTP2_CAUSE_GTP_C_ENTITY_CONGESTION;
case OGS_PFCP_CAUSE_NO_RESOURCES_AVAILABLE:
return OGS_GTP_CAUSE_NO_RESOURCES_AVAILABLE;
return OGS_GTP2_CAUSE_NO_RESOURCES_AVAILABLE;
case OGS_PFCP_CAUSE_SERVICE_NOT_SUPPORTED:
return OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED;
return OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED;
case OGS_PFCP_CAUSE_SYSTEM_FAILURE:
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
default:
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
}
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
}
static void sess_timeout(ogs_gtp_xact_t *xact, void *data)
@ -74,7 +74,7 @@ static void sess_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
ogs_error("[%s] No Create Session Response", sgwc_ue->imsi_bcd);
if (!sgwc_sess_cycle(sess)) {
ogs_warn("[%s] Session has already been removed",
@ -107,7 +107,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Create Bearer Response", sgwc_ue->imsi_bcd);
if (!sgwc_bearer_cycle(bearer)) {
ogs_warn("[%s] Bearer has already been removed", sgwc_ue->imsi_bcd);
@ -126,7 +126,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
void sgwc_sxa_handle_session_establishment_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *gtp_message,
ogs_gtp2_message_t *gtp_message,
ogs_pfcp_session_establishment_response_t *pfcp_rsp)
{
int rv, len = 0;
@ -134,8 +134,8 @@ void sgwc_sxa_handle_session_establishment_response(
ogs_pfcp_f_seid_t *up_f_seid = NULL;
ogs_gtp_f_teid_t sgw_s5c_teid, sgw_s5u_teid;
ogs_gtp_f_teid_t *pgw_s5c_teid = NULL;
ogs_gtp2_f_teid_t sgw_s5c_teid, sgw_s5u_teid;
ogs_gtp2_f_teid_t *pgw_s5c_teid = NULL;
ogs_gtp_xact_t *s11_xact = NULL, *s5c_xact = NULL;
ogs_gtp_node_t *pgw = NULL;
@ -144,7 +144,7 @@ void sgwc_sxa_handle_session_establishment_response(
sgwc_bearer_t *bearer = NULL;
sgwc_tunnel_t *dl_tunnel = NULL;
ogs_gtp_create_session_request_t *gtp_req = NULL;
ogs_gtp2_create_session_request_t *gtp_req = NULL;
ogs_pkbuf_t *pkbuf = NULL;
ogs_debug("Session Establishment Response");
@ -161,21 +161,21 @@ void sgwc_sxa_handle_session_establishment_response(
ogs_pfcp_xact_commit(pfcp_xact);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (pfcp_rsp->up_f_seid.presence == 0) {
ogs_error("No UP F-SEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (pfcp_rsp->created_pdr[0].presence == 0) {
ogs_error("No Created PDR");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (pfcp_rsp->cause.presence) {
@ -185,10 +185,10 @@ void sgwc_sxa_handle_session_establishment_response(
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
int i;
uint8_t pfcp_cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
@ -238,11 +238,11 @@ void sgwc_sxa_handle_session_establishment_response(
cause_value = gtp_cause_from_pfcp(pfcp_cause_value);
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (sess) sgwc_ue = sess->sgwc_ue;
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -257,8 +257,8 @@ void sgwc_sxa_handle_session_establishment_response(
ogs_error("No UP F-TEID");
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_GRE_KEY_NOT_FOUND);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_GRE_KEY_NOT_FOUND);
return;
}
@ -268,10 +268,10 @@ void sgwc_sxa_handle_session_establishment_response(
sess->sgwu_sxa_seid = be64toh(up_f_seid->seid);
/* Send Control Plane(DL) : SGW-S5C */
memset(&sgw_s5c_teid, 0, sizeof(ogs_gtp_f_teid_t));
sgw_s5c_teid.interface_type = OGS_GTP_F_TEID_S5_S8_SGW_GTP_C;
memset(&sgw_s5c_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s5c_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_SGW_GTP_C;
sgw_s5c_teid.teid = htobe32(sess->sgw_s5c_teid);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6,
&sgw_s5c_teid, &len);
ogs_assert(rv == OGS_OK);
@ -305,11 +305,11 @@ void sgwc_sxa_handle_session_establishment_response(
gtp_req->pgw_s5_s8_address_for_control_plane_or_pmip.presence = 0;
/* Data Plane(DL) : SGW-S5U */
memset(&sgw_s5u_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&sgw_s5u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s5u_teid.teid = htobe32(dl_tunnel->local_teid);
sgw_s5u_teid.interface_type = dl_tunnel->interface_type;
ogs_assert(dl_tunnel->local_addr || dl_tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
dl_tunnel->local_addr, dl_tunnel->local_addr6, &sgw_s5u_teid, &len);
ogs_assert(rv == OGS_OK);
gtp_req->bearer_contexts_to_be_created.s5_s8_u_sgw_f_teid.presence = 1;
@ -317,10 +317,10 @@ void sgwc_sxa_handle_session_establishment_response(
&sgw_s5u_teid;
gtp_req->bearer_contexts_to_be_created.s5_s8_u_sgw_f_teid.len = len;
gtp_message->h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE;
gtp_message->h.type = OGS_GTP2_CREATE_SESSION_REQUEST_TYPE;
gtp_message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(gtp_message);
pkbuf = ogs_gtp2_build_msg(gtp_message);
ogs_expect_or_return(pkbuf);
ogs_assert(sess->gnode);
@ -336,7 +336,7 @@ void sgwc_sxa_handle_session_establishment_response(
void sgwc_sxa_handle_session_modification_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *recv_message,
ogs_gtp2_message_t *recv_message,
ogs_pfcp_session_modification_response_t *pfcp_rsp)
{
int i, rv, len = 0;
@ -346,7 +346,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_gtp_xact_t *s11_xact = NULL;
ogs_gtp_xact_t *s5c_xact = NULL;
ogs_gtp_message_t send_message;
ogs_gtp2_message_t send_message;
sgwc_bearer_t *bearer = NULL;
sgwc_tunnel_t *dl_tunnel = NULL, *ul_tunnel = NULL;
@ -354,7 +354,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_debug("Session Modification Response");
@ -364,7 +364,7 @@ void sgwc_sxa_handle_session_modification_response(
flags = pfcp_xact->modify_flags;
ogs_assert(flags);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (flags & OGS_PFCP_MODIFY_SESSION) {
if (!sess) {
@ -373,7 +373,7 @@ void sgwc_sxa_handle_session_modification_response(
sess = pfcp_xact->data;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
sgwc_ue = sess->sgwc_ue;
ogs_assert(sgwc_ue);
@ -388,7 +388,7 @@ void sgwc_sxa_handle_session_modification_response(
sess = bearer->sess;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
sgwc_ue = bearer->sgwc_ue;
@ -402,10 +402,10 @@ void sgwc_sxa_handle_session_modification_response(
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
uint8_t pfcp_cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
uint8_t offending_ie_value = 0;
@ -453,7 +453,7 @@ void sgwc_sxa_handle_session_modification_response(
cause_value = gtp_cause_from_pfcp(pfcp_cause_value);
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
/*
* You should not change the following order to support
* OGS_PFCP_MODIFY_REMOVE|OGS_PFCP_MODIFY_CREATE.
@ -468,7 +468,7 @@ void sgwc_sxa_handle_session_modification_response(
if (s5c_xact) {
ogs_gtp_send_error_message(
s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_DELETE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE, cause_value);
}
sgwc_bearer_remove(bearer);
@ -478,7 +478,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_gtp_send_error_message(
s5c_xact, sess ? sess->pgw_s5c_teid : 0,
OGS_GTP_CREATE_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE, cause_value);
} else if (flags & OGS_PFCP_MODIFY_ACTIVATE) {
@ -488,7 +488,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
} else if (flags & OGS_PFCP_MODIFY_DL_ONLY) {
s11_xact = pfcp_xact->assoc_xact;
@ -496,7 +496,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
} else {
ogs_fatal("Invalid modify_flags[0x%llx]", (long long)flags);
ogs_assert_if_reached();
@ -507,7 +507,7 @@ void sgwc_sxa_handle_session_modification_response(
ogs_gtp_send_error_message(
s11_xact, sgwc_ue ? sgwc_ue->mme_s11_teid : 0,
OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause_value);
OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE, cause_value);
}
ogs_pfcp_xact_commit(pfcp_xact);
@ -552,7 +552,7 @@ void sgwc_sxa_handle_session_modification_response(
if (delete_indirect_tunnel_is_done == true) {
sgwc_tunnel_t *tunnel = NULL, *next_tunnel = NULL;
ogs_gtp_delete_indirect_data_forwarding_tunnel_response_t
ogs_gtp2_delete_indirect_data_forwarding_tunnel_response_t
*gtp_rsp = NULL;
ogs_list_for_each(&sgwc_ue->sess_list, sess) {
@ -560,9 +560,9 @@ void sgwc_sxa_handle_session_modification_response(
ogs_list_for_each_safe(&bearer->tunnel_list,
next_tunnel, tunnel) {
if (tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING ||
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING ||
tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING) {
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING) {
sgwc_tunnel_remove(tunnel);
}
}
@ -573,20 +573,20 @@ void sgwc_sxa_handle_session_modification_response(
delete_indirect_data_forwarding_tunnel_response;
ogs_assert(gtp_rsp);
memset(&send_message, 0, sizeof(ogs_gtp_message_t));
memset(&send_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
gtp_rsp->cause.presence = 1;
gtp_rsp->cause.data = &cause;
gtp_rsp->cause.len = sizeof(cause);
send_message.h.type =
OGS_GTP_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE;
OGS_GTP2_DELETE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE;
send_message.h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(&send_message);
pkbuf = ogs_gtp2_build_msg(&send_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf);
@ -601,10 +601,10 @@ void sgwc_sxa_handle_session_modification_response(
if (s5c_xact) {
ogs_assert(recv_message);
recv_message->h.type = OGS_GTP_DELETE_BEARER_RESPONSE_TYPE;
recv_message->h.type = OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE;
recv_message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(recv_message);
pkbuf = ogs_gtp2_build_msg(recv_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s5c_xact, &recv_message->h, pkbuf);
@ -619,8 +619,8 @@ void sgwc_sxa_handle_session_modification_response(
} else if (flags & OGS_PFCP_MODIFY_CREATE) {
if (flags & OGS_PFCP_MODIFY_UL_ONLY) {
ogs_gtp_create_bearer_request_t *gtp_req = NULL;
ogs_gtp_f_teid_t sgw_s1u_teid;
ogs_gtp2_create_bearer_request_t *gtp_req = NULL;
ogs_gtp2_f_teid_t sgw_s1u_teid;
s5c_xact = pfcp_xact->assoc_xact;
ogs_assert(s5c_xact);
@ -633,11 +633,11 @@ void sgwc_sxa_handle_session_modification_response(
gtp_req->bearer_contexts.s4_u_sgsn_f_teid.presence = 0;
/* Send Data Plane(UL) : SGW-S1U */
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s1u_teid.interface_type = ul_tunnel->interface_type;
sgw_s1u_teid.teid = htobe32(ul_tunnel->local_teid);
ogs_assert(ul_tunnel->local_addr || ul_tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ul_tunnel->local_addr, ul_tunnel->local_addr6,
&sgw_s1u_teid, &len);
ogs_assert(rv == OGS_OK);
@ -645,10 +645,10 @@ void sgwc_sxa_handle_session_modification_response(
gtp_req->bearer_contexts.s1_u_enodeb_f_teid.data = &sgw_s1u_teid;
gtp_req->bearer_contexts.s1_u_enodeb_f_teid.len = len;
recv_message->h.type = OGS_GTP_CREATE_BEARER_REQUEST_TYPE;
recv_message->h.type = OGS_GTP2_CREATE_BEARER_REQUEST_TYPE;
recv_message->h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(recv_message);
pkbuf = ogs_gtp2_build_msg(recv_message);
ogs_expect_or_return(pkbuf);
ogs_assert(sgwc_ue->gnode);
@ -663,8 +663,8 @@ void sgwc_sxa_handle_session_modification_response(
ogs_expect(rv == OGS_OK);
} else if (flags & OGS_PFCP_MODIFY_DL_ONLY) {
ogs_gtp_create_bearer_response_t *gtp_rsp = NULL;
ogs_gtp_f_teid_t sgw_s5u_teid, pgw_s5u_teid;
ogs_gtp2_create_bearer_response_t *gtp_rsp = NULL;
ogs_gtp2_f_teid_t sgw_s5u_teid, pgw_s5u_teid;
s5c_xact = pfcp_xact->assoc_xact;
ogs_assert(s5c_xact);
@ -681,11 +681,11 @@ void sgwc_sxa_handle_session_modification_response(
/* Data Plane(DL) : SGW-S5U */
ogs_assert(dl_tunnel);
memset(&sgw_s5u_teid, 0, sizeof(ogs_gtp_f_teid_t));
sgw_s5u_teid.interface_type = OGS_GTP_F_TEID_S5_S8_SGW_GTP_U;
memset(&sgw_s5u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s5u_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_SGW_GTP_U;
sgw_s5u_teid.teid = htobe32(dl_tunnel->local_teid);
ogs_assert(dl_tunnel->local_addr || dl_tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
dl_tunnel->local_addr, dl_tunnel->local_addr6,
&sgw_s5u_teid, &len);
ogs_assert(rv == OGS_OK);
@ -695,18 +695,18 @@ void sgwc_sxa_handle_session_modification_response(
/* Data Plane(UL) : PGW-S5U */
ogs_assert(ul_tunnel);
pgw_s5u_teid.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_U;
pgw_s5u_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_U;
pgw_s5u_teid.teid = htobe32(ul_tunnel->remote_teid);
rv = ogs_gtp_ip_to_f_teid(
rv = ogs_gtp2_ip_to_f_teid(
&ul_tunnel->remote_ip, &pgw_s5u_teid, &len);
gtp_rsp->bearer_contexts.s5_s8_u_pgw_f_teid.presence = 1;
gtp_rsp->bearer_contexts.s5_s8_u_pgw_f_teid.data = &pgw_s5u_teid;
gtp_rsp->bearer_contexts.s5_s8_u_pgw_f_teid.len = len;
recv_message->h.type = OGS_GTP_CREATE_BEARER_RESPONSE_TYPE;
recv_message->h.type = OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE;
recv_message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(recv_message);
pkbuf = ogs_gtp2_build_msg(recv_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s5c_xact, &recv_message->h, pkbuf);
@ -732,13 +732,13 @@ void sgwc_sxa_handle_session_modification_response(
if (create_indirect_tunnel_is_done == true) {
sgwc_tunnel_t *tunnel = NULL;
ogs_gtp_create_indirect_data_forwarding_tunnel_request_t
ogs_gtp2_create_indirect_data_forwarding_tunnel_request_t
*gtp_req = NULL;
ogs_gtp_create_indirect_data_forwarding_tunnel_response_t
ogs_gtp2_create_indirect_data_forwarding_tunnel_response_t
*gtp_rsp = NULL;
ogs_gtp_f_teid_t rsp_dl_teid[OGS_GTP_MAX_INDIRECT_TUNNEL];
ogs_gtp_f_teid_t rsp_ul_teid[OGS_GTP_MAX_INDIRECT_TUNNEL];
ogs_gtp2_f_teid_t rsp_dl_teid[OGS_GTP2_MAX_INDIRECT_TUNNEL];
ogs_gtp2_f_teid_t rsp_ul_teid[OGS_GTP2_MAX_INDIRECT_TUNNEL];
ogs_assert(recv_message);
gtp_req = &recv_message->
@ -748,10 +748,10 @@ void sgwc_sxa_handle_session_modification_response(
create_indirect_data_forwarding_tunnel_response;
ogs_assert(gtp_rsp);
memset(&send_message, 0, sizeof(ogs_gtp_message_t));
memset(&send_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
gtp_rsp->cause.presence = 1;
gtp_rsp->cause.data = &cause;
@ -766,16 +766,16 @@ void sgwc_sxa_handle_session_modification_response(
ogs_list_for_each(&bearer->tunnel_list, tunnel) {
if (tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) {
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_DL_DATA_FORWARDING) {
memset(&rsp_dl_teid[i],
0, sizeof(ogs_gtp_f_teid_t));
0, sizeof(ogs_gtp2_f_teid_t));
rsp_dl_teid[i].interface_type =
tunnel->interface_type;
rsp_dl_teid[i].teid = htobe32(tunnel->local_teid);
ogs_assert(
tunnel->local_addr || tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
tunnel->local_addr, tunnel->local_addr6,
&rsp_dl_teid[i], &len);
ogs_assert(rv == OGS_OK);
@ -787,16 +787,16 @@ void sgwc_sxa_handle_session_modification_response(
s4_u_sgsn_f_teid.len = len;
} else if (tunnel->interface_type ==
OGS_GTP_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING) {
OGS_GTP2_F_TEID_SGW_GTP_U_FOR_UL_DATA_FORWARDING) {
memset(&rsp_ul_teid[i],
0, sizeof(ogs_gtp_f_teid_t));
0, sizeof(ogs_gtp2_f_teid_t));
rsp_ul_teid[i].teid = htobe32(tunnel->local_teid);
rsp_ul_teid[i].interface_type =
tunnel->interface_type;
ogs_assert(
tunnel->local_addr || tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
tunnel->local_addr, tunnel->local_addr6,
&rsp_ul_teid[i], &len);
ogs_assert(rv == OGS_OK);
@ -828,10 +828,10 @@ void sgwc_sxa_handle_session_modification_response(
}
send_message.h.type =
OGS_GTP_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE;
OGS_GTP2_CREATE_INDIRECT_DATA_FORWARDING_TUNNEL_RESPONSE_TYPE;
send_message.h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(&send_message);
pkbuf = ogs_gtp2_build_msg(&send_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf);
@ -850,19 +850,19 @@ void sgwc_sxa_handle_session_modification_response(
ogs_assert(s11_xact);
if (flags & OGS_PFCP_MODIFY_UL_ONLY) {
ogs_gtp_create_session_response_t *gtp_rsp = NULL;
ogs_gtp_f_teid_t sgw_s11_teid;
ogs_gtp_f_teid_t sgw_s1u_teid;
ogs_gtp2_create_session_response_t *gtp_rsp = NULL;
ogs_gtp2_f_teid_t sgw_s11_teid;
ogs_gtp2_f_teid_t sgw_s1u_teid;
ogs_assert(recv_message);
gtp_rsp = &recv_message->create_session_response;
ogs_assert(gtp_rsp);
/* Send Control Plane(UL) : SGW-S11 */
memset(&sgw_s11_teid, 0, sizeof(ogs_gtp_f_teid_t));
sgw_s11_teid.interface_type = OGS_GTP_F_TEID_S11_S4_SGW_GTP_C;
memset(&sgw_s11_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s11_teid.interface_type = OGS_GTP2_F_TEID_S11_S4_SGW_GTP_C;
sgw_s11_teid.teid = htobe32(sgwc_ue->sgw_s11_teid);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6,
&sgw_s11_teid, &len);
ogs_assert(rv == OGS_OK);
@ -872,11 +872,11 @@ void sgwc_sxa_handle_session_modification_response(
/* Send Data Plane(UL) : SGW-S1U */
ogs_assert(ul_tunnel);
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&sgw_s1u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
sgw_s1u_teid.interface_type = ul_tunnel->interface_type;
sgw_s1u_teid.teid = htobe32(ul_tunnel->local_teid);
ogs_assert(ul_tunnel->local_addr || ul_tunnel->local_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ul_tunnel->local_addr, ul_tunnel->local_addr6,
&sgw_s1u_teid, &len);
ogs_assert(rv == OGS_OK);
@ -885,10 +885,10 @@ void sgwc_sxa_handle_session_modification_response(
&sgw_s1u_teid;
gtp_rsp->bearer_contexts_created.s1_u_enodeb_f_teid.len = len;
recv_message->h.type = OGS_GTP_CREATE_SESSION_RESPONSE_TYPE;
recv_message->h.type = OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE;
recv_message->h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(recv_message);
pkbuf = ogs_gtp2_build_msg(recv_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &recv_message->h, pkbuf);
@ -898,10 +898,10 @@ void sgwc_sxa_handle_session_modification_response(
ogs_expect(rv == OGS_OK);
} else if (flags & OGS_PFCP_MODIFY_DL_ONLY) {
ogs_gtp_modify_bearer_request_t *gtp_req = NULL;
ogs_gtp_modify_bearer_response_t *gtp_rsp = NULL;
ogs_gtp2_modify_bearer_request_t *gtp_req = NULL;
ogs_gtp2_modify_bearer_response_t *gtp_rsp = NULL;
ogs_gtp_indication_t *indication = NULL;
ogs_gtp2_indication_t *indication = NULL;
ogs_assert(recv_message);
gtp_req = &recv_message->modify_bearer_request;
@ -914,10 +914,10 @@ void sgwc_sxa_handle_session_modification_response(
}
if (indication && indication->handover_indication) {
recv_message->h.type = OGS_GTP_MODIFY_BEARER_REQUEST_TYPE;
recv_message->h.type = OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE;
recv_message->h.teid = sess->pgw_s5c_teid;
pkbuf = ogs_gtp_build_msg(recv_message);
pkbuf = ogs_gtp2_build_msg(recv_message);
ogs_expect_or_return(pkbuf);
ogs_assert(sess->gnode);
@ -935,10 +935,10 @@ void sgwc_sxa_handle_session_modification_response(
gtp_rsp = &send_message.modify_bearer_response;
ogs_assert(gtp_rsp);
memset(&send_message, 0, sizeof(ogs_gtp_message_t));
memset(&send_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
gtp_rsp->cause.presence = 1;
gtp_rsp->cause.data = &cause;
@ -974,10 +974,10 @@ void sgwc_sxa_handle_session_modification_response(
gtp_rsp->bearer_contexts_modified.cause.len = sizeof(cause);
gtp_rsp->bearer_contexts_modified.cause.data = &cause;
send_message.h.type = OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE;
send_message.h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE;
send_message.h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(&send_message);
pkbuf = ogs_gtp2_build_msg(&send_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf);
@ -1010,10 +1010,10 @@ void sgwc_sxa_handle_session_modification_response(
ogs_assert(OGS_OK ==
sgwc_gtp_send_downlink_data_notification(
OGS_GTP_CAUSE_ERROR_INDICATION_RECEIVED, bearer));
OGS_GTP2_CAUSE_ERROR_INDICATION_RECEIVED, bearer));
} else {
ogs_gtp_release_access_bearers_response_t *gtp_rsp = NULL;
ogs_gtp2_release_access_bearers_response_t *gtp_rsp = NULL;
s11_xact = pfcp_xact->assoc_xact;
ogs_assert(s11_xact);
@ -1021,20 +1021,20 @@ void sgwc_sxa_handle_session_modification_response(
gtp_rsp = &send_message.release_access_bearers_response;
ogs_assert(gtp_rsp);
memset(&send_message, 0, sizeof(ogs_gtp_message_t));
memset(&send_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
gtp_rsp->cause.presence = 1;
gtp_rsp->cause.data = &cause;
gtp_rsp->cause.len = sizeof(cause);
send_message.h.type =
OGS_GTP_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE;
OGS_GTP2_RELEASE_ACCESS_BEARERS_RESPONSE_TYPE;
send_message.h.teid = sgwc_ue->mme_s11_teid;
pkbuf = ogs_gtp_build_msg(&send_message);
pkbuf = ogs_gtp2_build_msg(&send_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(s11_xact, &send_message.h, pkbuf);
@ -1054,7 +1054,7 @@ void sgwc_sxa_handle_session_modification_response(
void sgwc_sxa_handle_session_deletion_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *gtp_message,
ogs_gtp2_message_t *gtp_message,
ogs_pfcp_session_deletion_response_t *pfcp_rsp)
{
int rv;
@ -1071,11 +1071,11 @@ void sgwc_sxa_handle_session_deletion_response(
ogs_assert(pfcp_xact);
ogs_assert(pfcp_rsp);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (pfcp_rsp->cause.presence) {
@ -1085,7 +1085,7 @@ void sgwc_sxa_handle_session_deletion_response(
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
gtp_xact = pfcp_xact->assoc_xact;
@ -1098,7 +1098,7 @@ void sgwc_sxa_handle_session_deletion_response(
}
switch (gtp_message->h.type) {
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
/*
* 1. MME sends Delete Session Request to SGW/SMF.
* 2. SMF sends Delete Session Response to SGW/MME.
@ -1106,7 +1106,7 @@ void sgwc_sxa_handle_session_deletion_response(
if (sess) sgwc_ue = sess->sgwc_ue;
teid = sgwc_ue ? sgwc_ue->mme_s11_teid : 0;
break;
case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
/*
* 1. SMF sends Delete Bearer Request(DEFAULT BEARER) to SGW/MME.
* 2. MME sends Delete Bearer Response to SGW/SMF.
@ -1127,7 +1127,7 @@ void sgwc_sxa_handle_session_deletion_response(
ogs_assert_if_reached();
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (gtp_xact) {
ogs_gtp_send_error_message(
gtp_xact, teid, gtp_message->h.type, cause_value);
@ -1141,15 +1141,15 @@ void sgwc_sxa_handle_session_deletion_response(
if (gtp_xact) {
/*
* If gtp_message->h.type == OGS_GTP_DELETE_SESSION_RESPONSE_TYPE
* If gtp_message->h.type == OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE
* Then gtp_xact is S11-XACT
*
* If gtp_message->h.type == OGS_GTP_DELETE_BEARER_RESPONSE_TYPE
* If gtp_message->h.type == OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE
* Then gtp_xact is S5C-XACT
*/
gtp_message->h.teid = teid;
pkbuf = ogs_gtp_build_msg(gtp_message);
pkbuf = ogs_gtp2_build_msg(gtp_message);
ogs_expect_or_return(pkbuf);
rv = ogs_gtp_xact_update_tx(gtp_xact, &gtp_message->h, pkbuf);
@ -1180,7 +1180,7 @@ void sgwc_sxa_handle_session_report_request(
ogs_assert(pfcp_xact);
ogs_assert(pfcp_req);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
@ -1189,10 +1189,10 @@ void sgwc_sxa_handle_session_report_request(
if (pfcp_req->report_type.presence == 0) {
ogs_error("No Report Type");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_pfcp_send_error_message(pfcp_xact, 0,
OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
cause_value, 0);
@ -1236,7 +1236,7 @@ void sgwc_sxa_handle_session_report_request(
if (tunnel->pdr->id == pdr_id) {
ogs_assert(OGS_OK ==
sgwc_gtp_send_downlink_data_notification(
OGS_GTP_CAUSE_UNDEFINED_VALUE, bearer));
OGS_GTP2_CAUSE_UNDEFINED_VALUE, bearer));
return;
}
}

View File

@ -28,15 +28,15 @@ extern "C" {
void sgwc_sxa_handle_session_establishment_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *gtp_message,
ogs_gtp2_message_t *gtp_message,
ogs_pfcp_session_establishment_response_t *pfcp_rsp);
void sgwc_sxa_handle_session_modification_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *gtp_message,
ogs_gtp2_message_t *gtp_message,
ogs_pfcp_session_modification_response_t *pfcp_rsp);
void sgwc_sxa_handle_session_deletion_response(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,
ogs_gtp_message_t *gtp_message,
ogs_gtp2_message_t *gtp_message,
ogs_pfcp_session_deletion_response_t *pfcp_rsp);
void sgwc_sxa_handle_session_report_request(
sgwc_sess_t *sess, ogs_pfcp_xact_t *pfcp_xact,

View File

@ -35,7 +35,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *pkbuf = NULL;
ogs_sockaddr_t from;
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
ogs_pfcp_user_plane_report_t report;
uint32_t teid;
@ -59,8 +59,8 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_assert(pkbuf);
ogs_assert(pkbuf->len);
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP_VERSION_1) {
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP2_VERSION_1) {
ogs_error("[DROP] Invalid GTPU version [%d]", gtp_h->version);
ogs_log_hexdump(OGS_LOG_ERROR, pkbuf->data, pkbuf->len);
goto cleanup;
@ -70,7 +70,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *echo_rsp;
ogs_debug("[RECV] Echo Request from [%s]", OGS_ADDR(&from, buf));
echo_rsp = ogs_gtp_handle_echo_req(pkbuf);
echo_rsp = ogs_gtp2_handle_echo_req(pkbuf);
ogs_expect(echo_rsp);
if (echo_rsp) {
ssize_t sent;
@ -103,13 +103,13 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
* Note 4 : For a GTP-PDU with several Extension Headers, the PDU
* Session Container should be the first Extension Header
*/
ogs_gtp_extension_header_t *extension_header =
(ogs_gtp_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_gtp2_extension_header_t *extension_header =
(ogs_gtp2_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_assert(extension_header);
if (extension_header->type ==
OGS_GTP_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
OGS_GTP2_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
if (extension_header->pdu_type ==
OGS_GTP_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
ogs_debug(" QFI [0x%x]",
extension_header->qos_flow_identifier);
qfi = extension_header->qos_flow_identifier;

View File

@ -40,7 +40,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Create Bearer Response", smf_ue->imsi_bcd);
if (!smf_bearer_cycle(bearer)) {
ogs_warn("[%s] Bearer has already been removed", smf_ue->imsi_bcd);
@ -50,9 +50,9 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_REMOVE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
break;
case OGS_GTP_UPDATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Update Bearer Response", smf_ue->imsi_bcd);
break;
default:
@ -74,7 +74,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
* TFT : Local <UE_IP> <UE_PORT> REMOTE <P-CSCF_RTP_IP> <P-CSCF_RTP_PORT>
*/
static void encode_traffic_flow_template(
ogs_gtp_tft_t *tft, smf_bearer_t *bearer, uint8_t tft_operation_code)
ogs_gtp2_tft_t *tft, smf_bearer_t *bearer, uint8_t tft_operation_code)
{
int i;
smf_pf_t *pf = NULL;
@ -86,8 +86,8 @@ static void encode_traffic_flow_template(
tft->code = tft_operation_code;
i = 0;
if (tft_operation_code != OGS_GTP_TFT_CODE_DELETE_EXISTING_TFT &&
tft_operation_code != OGS_GTP_TFT_CODE_NO_TFT_OPERATION) {
if (tft_operation_code != OGS_GTP2_TFT_CODE_DELETE_EXISTING_TFT &&
tft_operation_code != OGS_GTP2_TFT_CODE_NO_TFT_OPERATION) {
ogs_list_for_each_entry(&bearer->pf_to_add_list, pf, to_add_node) {
ogs_assert(i < OGS_MAX_NUM_OF_FLOW_IN_GTP);
tft->pf[i].identifier = pf->identifier - 1;
@ -95,7 +95,7 @@ static void encode_traffic_flow_template(
/* Deletion of packet filters
* from existing requires only the identifier */
if (tft_operation_code !=
OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
tft->pf[i].direction = pf->direction;
tft->pf[i].precedence = pf->precedence - 1;
@ -121,7 +121,7 @@ void smf_bearer_binding(smf_sess_t *sess)
for (i = 0; i < sess->policy.num_of_pcc_rule; i++) {
ogs_gtp_xact_t *xact = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
smf_bearer_t *bearer = NULL;
ogs_pcc_rule_t *pcc_rule = &sess->policy.pcc_rule[i];
@ -245,7 +245,7 @@ void smf_bearer_binding(smf_sess_t *sess)
/*
* We only use the method of adding a flow to an existing tft.
*
* EPC: OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT
* EPC: OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT
* 5GC: OGS_NAS_QOS_CODE_MODIFY_EXISTING_QOS_RULE_AND_ADD_PACKET_FILTERS
*/
ogs_list_init(&bearer->pf_to_add_list);
@ -336,19 +336,19 @@ void smf_bearer_binding(smf_sess_t *sess)
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_CREATE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
} else {
ogs_gtp_tft_t tft;
ogs_gtp2_tft_t tft;
memset(&tft, 0, sizeof tft);
if (ogs_list_count(&bearer->pf_to_add_list) > 0) {
encode_traffic_flow_template(
&tft, bearer,
OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT);
OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT);
}
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_UPDATE_BEARER_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE;
h.teid = sess->sgw_s5c_teid;
pkbuf = smf_s5c_build_update_bearer_request(
@ -395,7 +395,7 @@ void smf_bearer_binding(smf_sess_t *sess)
bearer, NULL,
OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
} else {
ogs_error("Invalid Type[%d]", pcc_rule->type);
}
@ -409,19 +409,19 @@ int smf_gtp_send_create_bearer_request(smf_bearer_t *bearer)
smf_sess_t *sess = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_tft_t tft;
ogs_gtp2_tft_t tft;
ogs_assert(bearer);
sess = bearer->sess;
ogs_assert(sess);
h.type = OGS_GTP_CREATE_BEARER_REQUEST_TYPE;
h.type = OGS_GTP2_CREATE_BEARER_REQUEST_TYPE;
h.teid = sess->sgw_s5c_teid;
memset(&tft, 0, sizeof tft);
encode_traffic_flow_template(&tft, bearer, OGS_GTP_TFT_CODE_CREATE_NEW_TFT);
encode_traffic_flow_template(&tft, bearer, OGS_GTP2_TFT_CODE_CREATE_NEW_TFT);
pkbuf = smf_s5c_build_create_bearer_request(h.type, bearer, &tft);
ogs_expect_or_return_val(pkbuf, OGS_ERROR);
@ -540,7 +540,7 @@ void smf_qos_flow_binding(smf_sess_t *sess)
/*
* We only use the method of adding a flow to an existing tft.
*
* EPC: OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT
* EPC: OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT
* 5GC: OGS_NAS_QOS_CODE_MODIFY_EXISTING_QOS_RULE_AND_ADD_PACKET_FILTERS
*/
ogs_list_init(&qos_flow->pf_to_add_list);

View File

@ -934,14 +934,14 @@ static bool compare_ue_info(ogs_pfcp_node_t *node, smf_sess_t *sess)
if (ogs_strcasecmp(node->dnn[i], sess->session.name) == 0) return true;
for (i = 0; i < node->num_of_e_cell_id; i++)
if (sess->gtp_rat_type == OGS_GTP_RAT_TYPE_EUTRAN &&
if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_EUTRAN &&
node->e_cell_id[i] == sess->e_cgi.cell_id) return true;
for (i = 0; i < node->num_of_nr_cell_id; i++)
if (node->nr_cell_id[i] == sess->nr_cgi.cell_id) return true;
for (i = 0; i < node->num_of_tac; i++)
if ((sess->gtp_rat_type == OGS_GTP_RAT_TYPE_EUTRAN &&
if ((sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_EUTRAN &&
node->tac[i] == sess->e_tai.tac) ||
(node->tac[i] == sess->nr_tai.tac.v)) return true;
@ -1144,13 +1144,13 @@ smf_sess_t *smf_sess_add_by_gtp1_message(ogs_gtp1_message_t *message)
return sess;
}
smf_sess_t *smf_sess_add_by_gtp_message(ogs_gtp_message_t *message)
smf_sess_t *smf_sess_add_by_gtp_message(ogs_gtp2_message_t *message)
{
smf_ue_t *smf_ue = NULL;
smf_sess_t *sess = NULL;
char apn[OGS_MAX_APN_LEN+1];
ogs_gtp_create_session_request_t *req = &message->create_session_request;
ogs_gtp2_create_session_request_t *req = &message->create_session_request;
if (req->imsi.presence == 0) {
ogs_error("No IMSI");

View File

@ -395,7 +395,7 @@ smf_ue_t *smf_ue_find_by_supi(char *supi);
smf_ue_t *smf_ue_find_by_imsi(uint8_t *imsi, int imsi_len);
smf_sess_t *smf_sess_add_by_gtp1_message(ogs_gtp1_message_t *message);
smf_sess_t *smf_sess_add_by_gtp_message(ogs_gtp_message_t *message);
smf_sess_t *smf_sess_add_by_gtp_message(ogs_gtp2_message_t *message);
smf_sess_t *smf_sess_add_by_apn(smf_ue_t *smf_ue, char *apn, uint8_t rat_type);
smf_sess_t *smf_sess_add_by_sbi_message(ogs_sbi_message_t *message);

View File

@ -164,7 +164,7 @@ ogs_pkbuf_t *smf_gn_build_create_pdp_context_response(
rsp->charging_id.u32 = sess->charging.id;
/* End User Address */
rv = ogs_gtp_paa_to_ip(&sess->session.paa, &ip_eua);
rv = ogs_gtp2_paa_to_ip(&sess->session.paa, &ip_eua);
rv = ogs_gtp1_ip_to_eua(sess->session.paa.session_type, &ip_eua, &eua,
&eua_len);
rsp->end_user_address.presence = 1;

View File

@ -392,7 +392,7 @@ void smf_gn_handle_update_pdp_context_request(
* https://github.com/open5gs/open5gs/issues/1367
*/
memset(&h, 0, sizeof(ogs_gtp_header_t));
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP1_UPDATE_PDP_CONTEXT_RESPONSE_TYPE;
h.teid = sess->sgw_s5c_teid;

View File

@ -72,7 +72,7 @@ static void _gtpv1v2_c_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_trim(pkbuf, size);
gtp_ver = ((ogs_gtp_header_t *)pkbuf->data)->version;
gtp_ver = ((ogs_gtp2_header_t *)pkbuf->data)->version;
switch (gtp_ver) {
case 1:
e = smf_event_new(SMF_EVT_GN_MESSAGE);
@ -113,7 +113,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *pkbuf = NULL;
ogs_sockaddr_t from;
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
uint32_t teid;
uint8_t qfi;
@ -136,8 +136,8 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_assert(pkbuf);
ogs_assert(pkbuf->len);
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP_VERSION_1) {
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP2_VERSION_1) {
ogs_error("[DROP] Invalid GTPU version [%d]", gtp_h->version);
ogs_log_hexdump(OGS_LOG_ERROR, pkbuf->data, pkbuf->len);
goto cleanup;
@ -147,7 +147,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *echo_rsp;
ogs_debug("[RECV] Echo Request from [%s]", OGS_ADDR(&from, buf));
echo_rsp = ogs_gtp_handle_echo_req(pkbuf);
echo_rsp = ogs_gtp2_handle_echo_req(pkbuf);
ogs_expect(echo_rsp);
if (echo_rsp) {
ssize_t sent;
@ -180,13 +180,13 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
* Note 4 : For a GTP-PDU with several Extension Headers, the PDU
* Session Container should be the first Extension Header
*/
ogs_gtp_extension_header_t *extension_header =
(ogs_gtp_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_gtp2_extension_header_t *extension_header =
(ogs_gtp2_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_assert(extension_header);
if (extension_header->type ==
OGS_GTP_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
OGS_GTP2_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
if (extension_header->pdu_type ==
OGS_GTP_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
ogs_debug(" QFI [0x%x]",
extension_header->qos_flow_identifier);
qfi = extension_header->qos_flow_identifier;
@ -431,14 +431,14 @@ int smf_gtp_send_create_session_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(sess);
ogs_assert(xact);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_SESSION_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE;
h.teid = sess->sgw_s5c_teid;
pkbuf = smf_s5c_build_create_session_response(h.type, sess);
@ -457,14 +457,14 @@ int smf_gtp_send_delete_session_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_assert(xact);
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_SESSION_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE;
h.teid = sess->sgw_s5c_teid;
pkbuf = smf_s5c_build_delete_session_response(h.type, sess);
@ -485,7 +485,7 @@ int smf_gtp_send_delete_bearer_request(
int rv;
ogs_gtp_xact_t *xact = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
smf_sess_t *sess = NULL;
@ -494,8 +494,8 @@ int smf_gtp_send_delete_bearer_request(
sess = bearer->sess;
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_BEARER_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_BEARER_REQUEST_TYPE;
h.teid = sess->sgw_s5c_teid;
pkbuf = smf_s5c_build_delete_bearer_request(
@ -629,8 +629,8 @@ static void send_router_advertisement(smf_sess_t *sess, uint8_t *ip6_dst)
ogs_list_for_each(&sess->pfcp.pdr_list, pdr) {
if (pdr->src_if == OGS_PFCP_INTERFACE_CP_FUNCTION && pdr->gnode) {
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_pkbuf_t *newbuf = NULL;
memset(&gtp_hdesc, 0, sizeof(gtp_hdesc));
@ -642,7 +642,7 @@ static void send_router_advertisement(smf_sess_t *sess, uint8_t *ip6_dst)
newbuf = ogs_pkbuf_copy(pkbuf);
ogs_assert(newbuf);
ogs_gtp_send_user_plane(pdr->gnode, &gtp_hdesc, &ext_hdesc, newbuf);
ogs_gtp2_send_user_plane(pdr->gnode, &gtp_hdesc, &ext_hdesc, newbuf);
ogs_debug(" Send Router Advertisement");
break;
@ -668,7 +668,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
type = xact->seq[0].type;
switch (type) {
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
ogs_error("[%s] No Delete Bearer Response", smf_ue->imsi_bcd);
if (!smf_bearer_cycle(bearer)) {
ogs_warn("[%s] Bearer has already been removed", smf_ue->imsi_bcd);
@ -679,7 +679,7 @@ static void bearer_timeout(ogs_gtp_xact_t *xact, void *data)
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_REMOVE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
break;
default:
ogs_error("GTP Timeout : IMSI[%s] Message-Type[%d]",

View File

@ -33,14 +33,14 @@ static uint8_t gtp_cause_from_diameter(
if (dia_err) {
switch (*dia_err) {
case OGS_DIAM_UNKNOWN_SESSION_ID:
return OGS_GTP_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION;
return OGS_GTP2_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION;
}
}
ogs_error("Unexpected Diameter Result Code %d/%d, defaulting to severe "
"network failure",
dia_err ? *dia_err : -1, dia_exp_err ? *dia_exp_err : -1);
return OGS_GTP_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER;
return OGS_GTP2_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER;
}
void smf_gx_handle_cca_initial_request(
@ -76,8 +76,8 @@ void smf_gx_handle_cca_initial_request(
ogs_gtp1_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE, cause_value);
else
ogs_gtp_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
ogs_gtp2_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -292,8 +292,8 @@ void smf_gx_handle_cca_initial_request(
OGS_GTP1_CAUSE_NO_RESOURCES_AVAILABLE);
else
ogs_gtp2_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER);
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER);
return;
}
}

View File

@ -361,13 +361,13 @@ void smf_gx_send_ccr(smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_assert(ret == 0);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_UTRAN:
case OGS_GTP_RAT_TYPE_GERAN:
case OGS_GTP_RAT_TYPE_HSPA_EVOLUTION:
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_UTRAN:
case OGS_GTP2_RAT_TYPE_GERAN:
case OGS_GTP2_RAT_TYPE_HSPA_EVOLUTION:
case OGS_GTP2_RAT_TYPE_EUTRAN:
val.i32 = OGS_DIAM_GX_IP_CAN_TYPE_3GPP_EPS;
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
val.i32 = OGS_DIAM_GX_IP_CAN_TYPE_NON_3GPP_EPS;
break;
default:
@ -385,19 +385,19 @@ void smf_gx_send_ccr(smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_assert(ret == 0);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_UTRAN:
case OGS_GTP2_RAT_TYPE_UTRAN:
val.i32 = OGS_DIAM_RAT_TYPE_UTRAN;
break;
case OGS_GTP_RAT_TYPE_GERAN:
case OGS_GTP2_RAT_TYPE_GERAN:
val.i32 = OGS_DIAM_RAT_TYPE_GERAN;
break;
case OGS_GTP_RAT_TYPE_HSPA_EVOLUTION:
case OGS_GTP2_RAT_TYPE_HSPA_EVOLUTION:
val.i32 = OGS_DIAM_RAT_TYPE_HSPA_EVOLUTION;
break;
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
val.i32 = OGS_DIAM_RAT_TYPE_EUTRAN;
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
val.i32 = OGS_DIAM_RAT_TYPE_WLAN;
break;
default:
@ -489,12 +489,12 @@ void smf_gx_send_ccr(smf_sess_t *sess, ogs_gtp_xact_t *xact,
/* Set 3GPP-User-Location-Info */
if (sess->gtp.user_location_information.presence) {
ogs_gtp_uli_t uli;
ogs_gtp2_uli_t uli;
int16_t uli_len;
uint8_t uli_buf[OGS_GTP_MAX_ULI_LEN];
uint8_t uli_buf[OGS_GTP2_MAX_ULI_LEN];
uli_len = ogs_gtp_parse_uli(
uli_len = ogs_gtp2_parse_uli(
&uli, &sess->gtp.user_location_information);
ogs_assert(sess->gtp.user_location_information.len == uli_len);

View File

@ -32,14 +32,14 @@ static uint8_t gtp_cause_from_diameter(
if (dia_err) {
switch (*dia_err) {
case OGS_DIAM_UNKNOWN_SESSION_ID:
return OGS_GTP_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION;
return OGS_GTP2_CAUSE_APN_ACCESS_DENIED_NO_SUBSCRIPTION;
}
}
ogs_error("Unexpected Diameter Result Code %d/%d, defaulting to severe "
"network failure",
dia_err ? *dia_err : -1, dia_exp_err ? *dia_exp_err : -1);
return OGS_GTP_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER;
return OGS_GTP2_CAUSE_UE_NOT_AUTHORISED_BY_OCS_OR_EXTERNAL_AAA_SERVER;
}
static void urr_enable_total_volume_threshold(smf_sess_t *sess, ogs_pfcp_urr_t *urr,
@ -118,8 +118,8 @@ void smf_gy_handle_cca_initial_request(
ogs_gtp1_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE, cause_value);
else
ogs_gtp_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
ogs_gtp2_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}

View File

@ -526,12 +526,12 @@ void smf_gy_send_ccr(smf_sess_t *sess, void *xact,
/* 3GPP-User-Location-Info */
if (sess->gtp.user_location_information.presence) {
ogs_gtp_uli_t uli;
ogs_gtp2_uli_t uli;
int16_t uli_len;
uint8_t uli_buf[OGS_GTP_MAX_ULI_LEN];
uint8_t uli_buf[OGS_GTP2_MAX_ULI_LEN];
uli_len = ogs_gtp_parse_uli(
uli_len = ogs_gtp2_parse_uli(
&uli, &sess->gtp.user_location_information);
ogs_assert(sess->gtp.user_location_information.len == uli_len);

View File

@ -70,43 +70,43 @@ uint8_t gtp_cause_from_pfcp(uint8_t pfcp_cause, uint8_t gtp_version)
case 2:
switch (pfcp_cause) {
case OGS_PFCP_CAUSE_REQUEST_ACCEPTED:
return OGS_GTP_CAUSE_REQUEST_ACCEPTED;
return OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
case OGS_PFCP_CAUSE_REQUEST_REJECTED:
return OGS_GTP_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED;
return OGS_GTP2_CAUSE_REQUEST_REJECTED_REASON_NOT_SPECIFIED;
case OGS_PFCP_CAUSE_SESSION_CONTEXT_NOT_FOUND:
return OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
return OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
case OGS_PFCP_CAUSE_MANDATORY_IE_MISSING:
return OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
return OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
case OGS_PFCP_CAUSE_CONDITIONAL_IE_MISSING:
return OGS_GTP_CAUSE_CONDITIONAL_IE_MISSING;
return OGS_GTP2_CAUSE_CONDITIONAL_IE_MISSING;
case OGS_PFCP_CAUSE_INVALID_LENGTH:
return OGS_GTP_CAUSE_INVALID_LENGTH;
return OGS_GTP2_CAUSE_INVALID_LENGTH;
case OGS_PFCP_CAUSE_MANDATORY_IE_INCORRECT:
return OGS_GTP_CAUSE_MANDATORY_IE_INCORRECT;
return OGS_GTP2_CAUSE_MANDATORY_IE_INCORRECT;
case OGS_PFCP_CAUSE_INVALID_FORWARDING_POLICY:
case OGS_PFCP_CAUSE_INVALID_F_TEID_ALLOCATION_OPTION:
return OGS_GTP_CAUSE_INVALID_MESSAGE_FORMAT;
return OGS_GTP2_CAUSE_INVALID_MESSAGE_FORMAT;
case OGS_PFCP_CAUSE_NO_ESTABLISHED_PFCP_ASSOCIATION:
return OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
return OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
case OGS_PFCP_CAUSE_RULE_CREATION_MODIFICATION_FAILURE:
return OGS_GTP_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
return OGS_GTP2_CAUSE_SEMANTIC_ERROR_IN_THE_TFT_OPERATION;
case OGS_PFCP_CAUSE_PFCP_ENTITY_IN_CONGESTION:
return OGS_GTP_CAUSE_GTP_C_ENTITY_CONGESTION;
return OGS_GTP2_CAUSE_GTP_C_ENTITY_CONGESTION;
case OGS_PFCP_CAUSE_NO_RESOURCES_AVAILABLE:
return OGS_GTP_CAUSE_NO_RESOURCES_AVAILABLE;
return OGS_GTP2_CAUSE_NO_RESOURCES_AVAILABLE;
case OGS_PFCP_CAUSE_SERVICE_NOT_SUPPORTED:
return OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED;
return OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED;
case OGS_PFCP_CAUSE_SYSTEM_FAILURE:
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
case OGS_PFCP_CAUSE_ALL_DYNAMIC_ADDRESS_ARE_OCCUPIED:
return OGS_GTP_CAUSE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED;
return OGS_GTP2_CAUSE_ALL_DYNAMIC_ADDRESSES_ARE_OCCUPIED;
default:
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
}
break;
}
return OGS_GTP_CAUSE_SYSTEM_FAILURE;
return OGS_GTP2_CAUSE_SYSTEM_FAILURE;
}
static int sbi_status_from_pfcp(uint8_t pfcp_cause)
@ -749,29 +749,29 @@ void smf_epc_n4_handle_session_establishment_response(
cause_value = OGS_GTP1_CAUSE_REQUEST_ACCEPTED;
resp_type = OGS_GTP1_CREATE_PDP_CONTEXT_RESPONSE_TYPE;
} else {
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
resp_type = OGS_GTP_CREATE_SESSION_RESPONSE_TYPE;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
resp_type = OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE;
}
if (!sess) {
ogs_warn("No Context");
cause_value = (gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND :
OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->up_f_seid.presence == 0) {
ogs_error("No UP F-SEID");
cause_value = (gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_MANDATORY_IE_MISSING :
OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->created_pdr[0].presence == 0) {
ogs_error("No Created PDR");
cause_value = (gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_MANDATORY_IE_MISSING :
OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->cause.presence) {
@ -783,11 +783,11 @@ void smf_epc_n4_handle_session_establishment_response(
ogs_error("No Cause");
cause_value = (gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_MANDATORY_IE_MISSING :
OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if ((gtp_xact->gtp_version == 1 && cause_value == OGS_GTP1_CAUSE_REQUEST_ACCEPTED) ||
(gtp_xact->gtp_version == 2 && cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED)) {
(gtp_xact->gtp_version == 2 && cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED)) {
int i;
uint8_t pfcp_cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
@ -842,7 +842,7 @@ void smf_epc_n4_handle_session_establishment_response(
if ((gtp_xact->gtp_version == 1 && cause_value != OGS_GTP1_CAUSE_REQUEST_ACCEPTED) ||
(gtp_xact->gtp_version == 2 && cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED)) {
(gtp_xact->gtp_version == 2 && cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED)) {
ogs_gtp_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
resp_type, cause_value);
return;
@ -857,7 +857,7 @@ void smf_epc_n4_handle_session_establishment_response(
ogs_gtp_send_error_message(gtp_xact, sess ? sess->sgw_s5c_teid : 0,
resp_type,
(gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND : OGS_GTP_CAUSE_GRE_KEY_NOT_FOUND);
OGS_GTP1_CAUSE_CONTEXT_NOT_FOUND : OGS_GTP2_CAUSE_GRE_KEY_NOT_FOUND);
return;
}
@ -875,7 +875,7 @@ void smf_epc_n4_handle_session_establishment_response(
break;
}
if (sess->gtp_rat_type == OGS_GTP_RAT_TYPE_WLAN) {
if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_WLAN) {
/*
* TS23.214
* 6.3.1.7 Procedures with modification of bearer
@ -892,14 +892,14 @@ void smf_epc_n4_handle_session_establishment_response(
ogs_assert(smf_ue);
eutran_sess = smf_sess_find_by_apn(
smf_ue, sess->session.name, OGS_GTP_RAT_TYPE_EUTRAN);
smf_ue, sess->session.name, OGS_GTP2_RAT_TYPE_EUTRAN);
if (eutran_sess) {
ogs_assert(OGS_OK ==
smf_epc_pfcp_send_session_modification_request(
eutran_sess, NULL,
OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP));
OGS_GTP2_CAUSE_RAT_CHANGED_FROM_3GPP_TO_NON_3GPP));
}
}
@ -915,7 +915,7 @@ void smf_epc_n4_handle_session_modification_response(
smf_bearer_t *bearer = NULL;
ogs_gtp_xact_t *gtp_xact = NULL;
uint8_t gtp_pti = OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED;
uint8_t gtp_cause = OGS_GTP_CAUSE_UNDEFINED_VALUE;
uint8_t gtp_cause = OGS_GTP2_CAUSE_UNDEFINED_VALUE;
uint64_t flags = 0;
uint8_t pfcp_cause_value = OGS_PFCP_CAUSE_REQUEST_ACCEPTED;
@ -1037,15 +1037,15 @@ void smf_epc_n4_handle_session_modification_response(
* 2. SMF sends Delete Bearer Request(DEDICATED BEARER) to SGW/MME
* 3. MME sends Delete Bearer Response(DEDICATED BEARER) to SGW/SMF
*/
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
int rv;
ogs_assert(bearer);
memset(&h, 0, sizeof(ogs_gtp_header_t));
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.teid = sess->sgw_s5c_teid;
h.type = OGS_GTP_DELETE_BEARER_REQUEST_TYPE;
h.type = OGS_GTP2_DELETE_BEARER_REQUEST_TYPE;
pkbuf = smf_s5c_build_delete_bearer_request(
h.type, bearer, gtp_pti, gtp_cause);
@ -1150,15 +1150,15 @@ void smf_epc_n4_handle_session_deletion_response(
resp_type = OGS_GTP1_DELETE_PDP_CONTEXT_RESPONSE_TYPE;
cause_value = OGS_GTP1_CAUSE_REQUEST_ACCEPTED;
} else {
resp_type = OGS_GTP_DELETE_SESSION_RESPONSE_TYPE;
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
resp_type = OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
}
if (!sess) {
ogs_warn("No Context");
cause_value = (gtp_version == 1) ?
OGS_GTP1_CAUSE_NON_EXISTENT :
OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->cause.presence) {
@ -1170,12 +1170,12 @@ void smf_epc_n4_handle_session_deletion_response(
ogs_error("No Cause");
cause_value = (gtp_xact->gtp_version == 1) ?
OGS_GTP1_CAUSE_MANDATORY_IE_MISSING :
OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (gtp_xact &&
((gtp_version == 1 && cause_value != OGS_GTP1_CAUSE_REQUEST_ACCEPTED) ||
(gtp_version == 2 && cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED))) {
(gtp_version == 2 && cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED))) {
ogs_gtp_send_error_message(gtp_xact, sess->sgw_s5c_teid, resp_type,
cause_value);
return;
@ -1265,7 +1265,7 @@ void smf_n4_handle_session_report_request(
ogs_debug("Session Report Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
@ -1274,10 +1274,10 @@ void smf_n4_handle_session_report_request(
if (pfcp_req->report_type.presence == 0) {
ogs_error("No Report Type");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_pfcp_send_error_message(pfcp_xact, 0,
OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
cause_value, 0);
@ -1316,7 +1316,7 @@ void smf_n4_handle_session_report_request(
"Paging Policy Indication Value");
ogs_pfcp_send_error_message(pfcp_xact, 0,
OGS_PFCP_SESSION_REPORT_RESPONSE_TYPE,
OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED, 0);
OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED, 0);
return;
}

View File

@ -28,15 +28,15 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
int rv;
smf_bearer_t *bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_session_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_session_response_t *rsp = NULL;
ogs_gtp_cause_t cause;
ogs_gtp_cause_t bearer_cause;
ogs_gtp_f_teid_t smf_s5c_teid, pgw_s5u_teid;
ogs_gtp_ambr_t ambr;
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
ogs_gtp2_cause_t cause;
ogs_gtp2_cause_t bearer_cause;
ogs_gtp2_f_teid_t smf_s5c_teid, pgw_s5u_teid;
ogs_gtp2_ambr_t ambr;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
int len;
uint8_t pco_buf[OGS_MAX_PCO_LEN];
int16_t pco_len;
@ -53,7 +53,7 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
bearer->sgw_s5u_teid, bearer->pgw_s5u_teid);
rsp = &gtp_message.create_session_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Set Cause */
memset(&cause, 0, sizeof(cause));
@ -61,25 +61,25 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
rsp->cause.len = sizeof(cause);
rsp->cause.data = &cause;
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (sess->ue_session_type != sess->session.session_type)
cause.value = OGS_GTP_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE;
cause.value = OGS_GTP2_CAUSE_NEW_PDN_TYPE_DUE_TO_NETWORK_PREFERENCE;
/* Control Plane(UL) : SMF-S5C */
memset(&smf_s5c_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&smf_s5c_teid, 0, sizeof(ogs_gtp2_f_teid_t));
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
smf_s5c_teid.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_C;
case OGS_GTP2_RAT_TYPE_EUTRAN:
smf_s5c_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_C;
break;
case OGS_GTP_RAT_TYPE_WLAN:
smf_s5c_teid.interface_type = OGS_GTP_F_TEID_S2B_PGW_GTP_C;
case OGS_GTP2_RAT_TYPE_WLAN:
smf_s5c_teid.interface_type = OGS_GTP2_F_TEID_S2B_PGW_GTP_C;
break;
default:
ogs_error("Unknown RAT Type [%d]", sess->gtp_rat_type);
ogs_assert_if_reached();
}
smf_s5c_teid.teid = htobe32(sess->smf_n4_teid);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
ogs_gtp_self()->gtpc_addr, ogs_gtp_self()->gtpc_addr6,
&smf_s5c_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
@ -104,11 +104,11 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
/* APN Restriction */
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
rsp->apn_restriction.presence = 1;
rsp->apn_restriction.u8 = OGS_GTP_APN_NO_RESTRICTION;
rsp->apn_restriction.u8 = OGS_GTP2_APN_NO_RESTRICTION;
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
break;
default:
ogs_error("Unknown RAT Type [%d]", sess->gtp_rat_type);
@ -118,7 +118,7 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
/* APN-AMBR
* if PCRF changes APN-AMBR, this should be included. */
if (sess->gtp.create_session_response_apn_ambr == true) {
memset(&ambr, 0, sizeof(ogs_gtp_ambr_t));
memset(&ambr, 0, sizeof(ogs_gtp2_ambr_t));
ambr.uplink = htobe32(sess->session.ambr.uplink / 1000);
ambr.downlink = htobe32(sess->session.ambr.downlink / 1000);
rsp->aggregate_maximum_bit_rate.presence = 1;
@ -147,7 +147,7 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
rsp->bearer_contexts_created.cause.presence = 1;
rsp->bearer_contexts_created.cause.len = sizeof(bearer_cause);
rsp->bearer_contexts_created.cause.data = &bearer_cause;
bearer_cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
bearer_cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
/* Bearer QoS
* if PCRF changes Bearer QoS, this should be included. */
@ -161,8 +161,8 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
sess->session.qos.arp.pre_emption_vulnerability;
rsp->bearer_contexts_created.bearer_level_qos.presence = 1;
ogs_gtp_build_bearer_qos(&rsp->bearer_contexts_created.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
ogs_gtp2_build_bearer_qos(&rsp->bearer_contexts_created.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
}
/* Bearer Charging ID */
@ -170,22 +170,22 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
rsp->bearer_contexts_created.charging_id.u32 = sess->charging.id;
/* Data Plane(UL) : SMF-S5U */
memset(&pgw_s5u_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&pgw_s5u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
pgw_s5u_teid.teid = htobe32(bearer->pgw_s5u_teid);
ogs_assert(bearer->pgw_s5u_addr || bearer->pgw_s5u_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_s5u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
pgw_s5u_teid.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_U;
case OGS_GTP2_RAT_TYPE_EUTRAN:
pgw_s5u_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_U;
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.presence = 1;
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.data = &pgw_s5u_teid;
rsp->bearer_contexts_created.s5_s8_u_sgw_f_teid.len = len;
break;
case OGS_GTP_RAT_TYPE_WLAN:
pgw_s5u_teid.interface_type = OGS_GTP_F_TEID_S2B_U_PGW_GTP_U;
case OGS_GTP2_RAT_TYPE_WLAN:
pgw_s5u_teid.interface_type = OGS_GTP2_F_TEID_S2B_U_PGW_GTP_U;
rsp->bearer_contexts_created.s12_rnc_f_teid.presence = 1;
rsp->bearer_contexts_created.s12_rnc_f_teid.data = &pgw_s5u_teid;
rsp->bearer_contexts_created.s12_rnc_f_teid.len = len;
@ -196,25 +196,25 @@ ogs_pkbuf_t *smf_s5c_build_create_session_response(
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *smf_s5c_build_delete_session_response(
uint8_t type, smf_sess_t *sess)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_session_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_session_response_t *rsp = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
uint8_t pco_buf[OGS_MAX_PCO_LEN];
int16_t pco_len;
/* prepare cause */
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rsp = &gtp_message.delete_session_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Cause */
rsp->cause.presence = 1;
@ -238,26 +238,26 @@ ogs_pkbuf_t *smf_s5c_build_delete_session_response(
/* build */
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *smf_s5c_build_modify_bearer_response(
uint8_t type, smf_sess_t *sess,
ogs_gtp_modify_bearer_request_t *req)
ogs_gtp2_modify_bearer_request_t *req)
{
ogs_gtp_message_t gtp_message;
ogs_gtp_modify_bearer_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_modify_bearer_response_t *rsp = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_assert(sess);
ogs_assert(req);
rsp = &gtp_message.modify_bearer_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rsp->cause.presence = 1;
rsp->cause.data = &cause;
@ -279,24 +279,24 @@ ogs_pkbuf_t *smf_s5c_build_modify_bearer_response(
/* build */
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *smf_s5c_build_create_bearer_request(
uint8_t type, smf_bearer_t *bearer, ogs_gtp_tft_t *tft)
uint8_t type, smf_bearer_t *bearer, ogs_gtp2_tft_t *tft)
{
int rv;
smf_sess_t *sess = NULL;
smf_bearer_t *linked_bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_bearer_request_t *req = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_bearer_request_t *req = NULL;
ogs_gtp_f_teid_t pgw_s5u_teid;
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
ogs_gtp2_f_teid_t pgw_s5u_teid;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
int len;
char tft_buf[OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE];
char tft_buf[OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE];
ogs_assert(bearer);
sess = bearer->sess;
@ -309,7 +309,7 @@ ogs_pkbuf_t *smf_s5c_build_create_bearer_request(
sess->sgw_s5c_teid, sess->smf_n4_teid);
req = &gtp_message.create_bearer_request;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Linked EBI */
req->linked_eps_bearer_id.presence = 1;
@ -321,11 +321,11 @@ ogs_pkbuf_t *smf_s5c_build_create_bearer_request(
req->bearer_contexts.eps_bearer_id.u8 = bearer->ebi;
/* Data Plane(UL) : PGW-S5U */
memset(&pgw_s5u_teid, 0, sizeof(ogs_gtp_f_teid_t));
pgw_s5u_teid.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_U;
memset(&pgw_s5u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
pgw_s5u_teid.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_U;
pgw_s5u_teid.teid = htobe32(bearer->pgw_s5u_teid);
ogs_assert(bearer->pgw_s5u_addr || bearer->pgw_s5u_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->pgw_s5u_addr, bearer->pgw_s5u_addr6, &pgw_s5u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
req->bearer_contexts.s4_u_sgsn_f_teid.presence = 1;
@ -346,33 +346,33 @@ ogs_pkbuf_t *smf_s5c_build_create_bearer_request(
bearer_qos.ul_gbr = bearer->qos.gbr.uplink;
req->bearer_contexts.bearer_level_qos.presence = 1;
ogs_gtp_build_bearer_qos(&req->bearer_contexts.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
ogs_gtp2_build_bearer_qos(&req->bearer_contexts.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
/* Bearer TFT */
if (tft && tft->num_of_packet_filter) {
req->bearer_contexts.tft.presence = 1;
ogs_gtp_build_tft(&req->bearer_contexts.tft,
tft, tft_buf, OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE);
ogs_gtp2_build_tft(&req->bearer_contexts.tft,
tft, tft_buf, OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE);
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *smf_s5c_build_update_bearer_request(
uint8_t type, smf_bearer_t *bearer, uint8_t pti,
ogs_gtp_tft_t *tft, bool qos_presence)
ogs_gtp2_tft_t *tft, bool qos_presence)
{
smf_sess_t *sess = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_update_bearer_request_t *req = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_update_bearer_request_t *req = NULL;
ogs_gtp_ambr_t ambr;
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
char tft_buf[OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE];
ogs_gtp2_ambr_t ambr;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
char tft_buf[OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE];
ogs_assert(bearer);
sess = bearer->sess;
@ -382,7 +382,7 @@ ogs_pkbuf_t *smf_s5c_build_update_bearer_request(
ogs_debug(" SGW_S5C_TEID[0x%x] SMF_N4_TEID[0x%x]",
sess->sgw_s5c_teid, sess->smf_n4_teid);
req = &gtp_message.update_bearer_request;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
/* Bearer EBI */
req->bearer_contexts.presence = 1;
@ -397,7 +397,7 @@ ogs_pkbuf_t *smf_s5c_build_update_bearer_request(
* but it shall be encoded as shown in Figure 8.7-1 as
* Unsigned32 binary integer values in kbps (1000 bits per second).
*/
memset(&ambr, 0, sizeof(ogs_gtp_ambr_t));
memset(&ambr, 0, sizeof(ogs_gtp2_ambr_t));
ambr.uplink = htobe32(sess->session.ambr.uplink / 1000);
ambr.downlink = htobe32(sess->session.ambr.downlink / 1000);
req->aggregate_maximum_bit_rate.presence = 1;
@ -426,19 +426,19 @@ ogs_pkbuf_t *smf_s5c_build_update_bearer_request(
bearer_qos.ul_gbr = bearer->qos.gbr.uplink;
req->bearer_contexts.bearer_level_qos.presence = 1;
ogs_gtp_build_bearer_qos(&req->bearer_contexts.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
ogs_gtp2_build_bearer_qos(&req->bearer_contexts.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
}
/* Bearer TFT */
if (tft && tft->num_of_packet_filter) {
req->bearer_contexts.tft.presence = 1;
ogs_gtp_build_tft(&req->bearer_contexts.tft,
tft, tft_buf, OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE);
ogs_gtp2_build_tft(&req->bearer_contexts.tft,
tft, tft_buf, OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE);
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
@ -447,10 +447,10 @@ ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
smf_sess_t *sess = NULL;
smf_bearer_t *linked_bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_bearer_request_t *req = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_bearer_request_t *req = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_assert(bearer);
sess = bearer->sess;
@ -462,7 +462,7 @@ ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
ogs_debug(" SGW_S5C_TEID[0x%x] SMF_N4_TEID[0x%x]",
sess->sgw_s5c_teid, sess->smf_n4_teid);
req = &gtp_message.delete_bearer_request;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
if (bearer->ebi == linked_bearer->ebi) {
/*
@ -500,7 +500,7 @@ ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
req->procedure_transaction_id.u8 = pti;
}
if (cause_value != OGS_GTP_CAUSE_UNDEFINED_VALUE) {
if (cause_value != OGS_GTP2_CAUSE_UNDEFINED_VALUE) {
memset(&cause, 0, sizeof(cause));
cause.value = cause_value;
req->cause.presence = 1;
@ -509,5 +509,5 @@ ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
}
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}

View File

@ -33,13 +33,13 @@ ogs_pkbuf_t *smf_s5c_build_delete_session_response(
ogs_pkbuf_t *smf_s5c_build_modify_bearer_response(
uint8_t type, smf_sess_t *sess,
ogs_gtp_modify_bearer_request_t *req);
ogs_gtp2_modify_bearer_request_t *req);
ogs_pkbuf_t *smf_s5c_build_create_bearer_request(
uint8_t type, smf_bearer_t *bearer, ogs_gtp_tft_t *tft);
uint8_t type, smf_bearer_t *bearer, ogs_gtp2_tft_t *tft);
ogs_pkbuf_t *smf_s5c_build_update_bearer_request(
uint8_t type, smf_bearer_t *bearer, uint8_t pti,
ogs_gtp_tft_t *tft, bool qos_presence);
ogs_gtp2_tft_t *tft, bool qos_presence);
ogs_pkbuf_t *smf_s5c_build_delete_bearer_request(
uint8_t type, smf_bearer_t *bearer, uint8_t pti, uint8_t cause_value);
#ifdef __cplusplus

View File

@ -28,7 +28,7 @@
#include "ipfw/ipfw2.h"
void smf_s5c_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req)
ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req)
{
ogs_assert(xact);
ogs_assert(req);
@ -36,18 +36,18 @@ void smf_s5c_handle_echo_request(
ogs_debug("[PGW] Receiving Echo Request");
/* FIXME : Before implementing recovery counter correctly,
* I'll re-use the recovery value in request message */
ogs_gtp_send_echo_response(xact, req->recovery.u8, 0);
ogs_gtp2_send_echo_response(xact, req->recovery.u8, 0);
}
void smf_s5c_handle_echo_response(
ogs_gtp_xact_t *xact, ogs_gtp_echo_response_t *req)
ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *req)
{
/* Not Implemented */
}
void smf_s5c_handle_create_session_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_create_session_request_t *req)
ogs_gtp2_create_session_request_t *req)
{
char buf1[OGS_ADDRSTRLEN];
char buf2[OGS_ADDRSTRLEN];
@ -55,15 +55,15 @@ void smf_s5c_handle_create_session_request(
int rv;
uint8_t cause_value = 0;
ogs_gtp_uli_t uli;
ogs_gtp2_uli_t uli;
smf_ue_t *smf_ue = NULL;
ogs_gtp_f_teid_t *sgw_s5c_teid, *sgw_s5u_teid;
ogs_gtp2_f_teid_t *sgw_s5c_teid, *sgw_s5u_teid;
ogs_paa_t *paa = NULL;
smf_bearer_t *bearer = NULL;
ogs_gtp_bearer_qos_t bearer_qos;
ogs_gtp_ambr_t *ambr = NULL;
ogs_gtp2_bearer_qos_t bearer_qos;
ogs_gtp2_ambr_t *ambr = NULL;
uint16_t decoded = 0;
ogs_assert(xact);
@ -71,86 +71,86 @@ void smf_s5c_handle_create_session_request(
ogs_debug("Create Session Request");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (req->imsi.presence == 0) {
ogs_error("No IMSI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->sender_f_teid_for_control_plane.presence == 0) {
ogs_error("No TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->bearer_contexts_to_be_created.bearer_level_qos.presence == 0) {
ogs_error("No EPS Bearer QoS");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->pdn_address_allocation.presence == 0) {
ogs_error("No PAA");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->serving_network.presence == 0) {
ogs_error("No Serving Network");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->serving_network.data == NULL) {
ogs_error("No Data in Serving Network");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->serving_network.len != OGS_PLMN_ID_LEN) {
ogs_error("Invalid Len[%d] in Serving Network",
req->serving_network.len);
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
ogs_error("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
} else {
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
ogs_error("No Gx Diameter Peer");
cause_value = OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
}
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
if (req->bearer_contexts_to_be_created.
s5_s8_u_sgw_f_teid.presence == 0) {
ogs_error("No S5/S8 SGW GTP-U TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (req->user_location_information.presence == 0) {
ogs_error("No UE Location Information");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
if (!ogs_diam_app_connected(OGS_DIAM_S6B_APPLICATION_ID)) {
ogs_error("No S6b Diameter Peer");
cause_value = OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
}
if (req->bearer_contexts_to_be_created.
s2b_u_epdg_f_teid_5.presence == 0) {
ogs_error("No S2b ePDG GTP-U TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
break;
default:
ogs_error("Unknown RAT Type [%d]", req->rat_type.u8);
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -158,23 +158,23 @@ void smf_s5c_handle_create_session_request(
smf_ue = sess->smf_ue;
ogs_assert(smf_ue);
if (sess->gtp_rat_type == OGS_GTP_RAT_TYPE_EUTRAN) {
if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_EUTRAN) {
/* User Location Inforation is mandatory only for E-UTRAN */
ogs_assert(req->user_location_information.presence);
ogs_gtp_parse_uli(&uli, &req->user_location_information);
ogs_gtp2_parse_uli(&uli, &req->user_location_information);
memcpy(&sess->e_tai, &uli.tai, sizeof(sess->e_tai));
memcpy(&sess->e_cgi, &uli.e_cgi, sizeof(sess->e_cgi));
} else if (sess->gtp_rat_type == OGS_GTP_RAT_TYPE_WLAN) {
} else if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_WLAN) {
/* Even after handover to WLAN,
* there must be at least one EUTRAN session */
smf_sess_t *eutran_sess = smf_sess_find_by_apn(
smf_ue, sess->session.name, OGS_GTP_RAT_TYPE_EUTRAN);
smf_ue, sess->session.name, OGS_GTP2_RAT_TYPE_EUTRAN);
if (eutran_sess) {
/* Need to check handover is possible */
int eutran_session_count = 0;
ogs_list_for_each(&smf_ue->sess_list, eutran_sess) {
if (eutran_sess->gtp_rat_type != OGS_GTP_RAT_TYPE_EUTRAN)
if (eutran_sess->gtp_rat_type != OGS_GTP2_RAT_TYPE_EUTRAN)
continue;
if (strcmp(eutran_sess->session.name, sess->session.name) == 0)
continue;
@ -184,9 +184,9 @@ void smf_s5c_handle_create_session_request(
if (eutran_session_count < 1) {
ogs_error("Cannot handover to WLAN");
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED);
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_MULTIPLE_ACCESSES_TO_A_PDN_CONNECTION_NOT_ALLOWED);
return;
}
}
@ -201,9 +201,9 @@ void smf_s5c_handle_create_session_request(
/* Check if selected PGW is associated with SMF */
ogs_assert(sess->pfcp_node);
if (!OGS_FSM_CHECK(&sess->pfcp_node->sm, smf_pfcp_state_associated)) {
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING);
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE,
OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING);
return;
}
@ -216,7 +216,7 @@ void smf_s5c_handle_create_session_request(
/* Initially Set Session Type from UE */
sess->session.session_type = sess->ue_session_type;
rv = ogs_gtp_paa_to_ip(paa, &sess->session.ue_ip);
rv = ogs_gtp2_paa_to_ip(paa, &sess->session.ue_ip);
ogs_assert(rv == OGS_OK);
ogs_assert(OGS_PFCP_CAUSE_REQUEST_ACCEPTED == smf_sess_set_ue_ip(sess));
@ -241,28 +241,28 @@ void smf_s5c_handle_create_session_request(
sgw_s5c_teid = req->sender_f_teid_for_control_plane.data;
ogs_assert(sgw_s5c_teid);
sess->sgw_s5c_teid = be32toh(sgw_s5c_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s5c_teid, &sess->sgw_s5c_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s5c_teid, &sess->sgw_s5c_ip);
ogs_assert(rv == OGS_OK);
ogs_debug(" SGW_S5C_TEID[0x%x] SMF_N4_TEID[0x%x]",
sess->sgw_s5c_teid, sess->smf_n4_teid);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
sgw_s5u_teid = req->bearer_contexts_to_be_created.
s5_s8_u_sgw_f_teid.data;
ogs_assert(sgw_s5u_teid);
bearer->sgw_s5u_teid = be32toh(sgw_s5u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
ogs_assert(rv == OGS_OK);
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
sgw_s5u_teid = req->bearer_contexts_to_be_created.
s2b_u_epdg_f_teid_5.data;
ogs_assert(sgw_s5u_teid);
bearer->sgw_s5u_teid = be32toh(sgw_s5u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
ogs_assert(rv == OGS_OK);
break;
default:
@ -274,7 +274,7 @@ void smf_s5c_handle_create_session_request(
bearer->sgw_s5u_teid, bearer->pgw_s5u_teid);
/* Set Bearer QoS */
decoded = ogs_gtp_parse_bearer_qos(&bearer_qos,
decoded = ogs_gtp2_parse_bearer_qos(&bearer_qos,
&req->bearer_contexts_to_be_created.bearer_level_qos);
ogs_assert(req->bearer_contexts_to_be_created.bearer_level_qos.len ==
decoded);
@ -317,11 +317,11 @@ void smf_s5c_handle_create_session_request(
}
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
smf_gx_send_ccr(sess, xact,
OGS_DIAM_GX_CC_REQUEST_TYPE_INITIAL_REQUEST);
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
smf_s6b_send_aar(sess, xact);
break;
default:
@ -332,7 +332,7 @@ void smf_s5c_handle_create_session_request(
void smf_s5c_handle_delete_session_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_delete_session_request_t *req)
ogs_gtp2_delete_session_request_t *req)
{
uint8_t cause_value = 0;
@ -341,28 +341,28 @@ void smf_s5c_handle_delete_session_request(
ogs_assert(xact);
ogs_assert(req);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
} else {
if (!ogs_diam_app_connected(OGS_DIAM_GX_APPLICATION_ID)) {
ogs_error("No Gx Diameter Peer");
cause_value = OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
}
if (sess->gtp_rat_type == OGS_GTP_RAT_TYPE_WLAN) {
if (sess->gtp_rat_type == OGS_GTP2_RAT_TYPE_WLAN) {
if (!ogs_diam_app_connected(OGS_DIAM_S6B_APPLICATION_ID)) {
ogs_error("No S6b Diameter Peer");
cause_value = OGS_GTP_CAUSE_REMOTE_PEER_NOT_RESPONDING;
cause_value = OGS_GTP2_CAUSE_REMOTE_PEER_NOT_RESPONDING;
}
}
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_DELETE_SESSION_RESPONSE_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE, cause_value);
return;
}
@ -370,11 +370,11 @@ void smf_s5c_handle_delete_session_request(
sess->sgw_s5c_teid, sess->smf_n4_teid);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
smf_gx_send_ccr(sess, xact,
OGS_DIAM_GX_CC_REQUEST_TYPE_TERMINATION_REQUEST);
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
smf_s6b_send_str(sess, xact,
OGS_DIAM_TERMINATION_CAUSE_DIAMETER_LOGOUT);
break;
@ -386,13 +386,13 @@ void smf_s5c_handle_delete_session_request(
void smf_s5c_handle_modify_bearer_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_modify_bearer_request_t *req)
ogs_gtp2_modify_bearer_request_t *req)
{
int rv;
uint8_t cause_value = 0;
ogs_gtp_indication_t *indication = NULL;
ogs_gtp2_indication_t *indication = NULL;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
smf_ue_t *smf_ue = NULL;
@ -403,16 +403,16 @@ void smf_s5c_handle_modify_bearer_request(
ogs_assert(xact);
ogs_assert(req);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE, cause_value);
return;
}
@ -427,8 +427,8 @@ void smf_s5c_handle_modify_bearer_request(
* to what is done in smf_gn_handle_update_pdp_context_request()
*/
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_MODIFY_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_MODIFY_BEARER_RESPONSE_TYPE;
h.teid = sess->sgw_s5c_teid;
pkbuf = smf_s5c_build_modify_bearer_response(h.type, sess, req);
@ -448,7 +448,7 @@ void smf_s5c_handle_modify_bearer_request(
if (indication && indication->handover_indication) {
ogs_assert(sess->session.name);
wlan_sess = smf_sess_find_by_apn(
smf_ue, sess->session.name, OGS_GTP_RAT_TYPE_WLAN);
smf_ue, sess->session.name, OGS_GTP2_RAT_TYPE_WLAN);
ogs_expect_or_return(wlan_sess);
ogs_expect_or_return(ogs_list_first(&wlan_sess->bearer_list));
@ -457,17 +457,17 @@ void smf_s5c_handle_modify_bearer_request(
wlan_sess, NULL,
OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP));
OGS_GTP2_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP));
}
}
void smf_s5c_handle_create_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_create_bearer_response_t *rsp)
ogs_gtp2_create_bearer_response_t *rsp)
{
int rv;
uint8_t cause_value;
ogs_gtp_f_teid_t *sgw_s5u_teid, *pgw_s5u_teid;
ogs_gtp2_f_teid_t *sgw_s5u_teid, *pgw_s5u_teid;
smf_bearer_t *bearer = NULL;
ogs_pfcp_far_t *dl_far = NULL;
@ -479,18 +479,18 @@ void smf_s5c_handle_create_bearer_response(
ogs_debug("Create Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(xact);
ogs_expect(rv == OGS_OK);
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.s5_s8_u_pgw_f_teid.presence &&
@ -511,11 +511,11 @@ void smf_s5c_handle_create_bearer_response(
if (!pgw_s5u_teid) {
ogs_error("No PGW TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sgw_s5u_teid) {
ogs_error("No SGW TEID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
@ -524,15 +524,15 @@ void smf_s5c_handle_create_bearer_response(
sess = bearer->sess;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -540,22 +540,22 @@ void smf_s5c_handle_create_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_assert(OGS_OK ==
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_REMOVE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
return;
}
@ -570,7 +570,7 @@ void smf_s5c_handle_create_bearer_response(
/* Data Plane(DL) : SGW-S5U */
ogs_assert(sgw_s5u_teid);
bearer->sgw_s5u_teid = be32toh(sgw_s5u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
rv = ogs_gtp2_f_teid_to_ip(sgw_s5u_teid, &bearer->sgw_s5u_ip);
ogs_assert(rv == OGS_OK);
ogs_debug("Create Bearer Response : SGW[0x%x] --> SMF[0x%x]",
@ -593,12 +593,12 @@ void smf_s5c_handle_create_bearer_response(
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_ACTIVATE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
}
void smf_s5c_handle_update_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_update_bearer_response_t *rsp)
ogs_gtp2_update_bearer_response_t *rsp)
{
int rv;
uint8_t cause_value;
@ -616,18 +616,18 @@ void smf_s5c_handle_update_bearer_response(
ogs_debug("Update Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(xact);
ogs_expect(rv == OGS_OK);
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
@ -636,15 +636,15 @@ void smf_s5c_handle_update_bearer_response(
sess = bearer->sess;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -652,20 +652,20 @@ void smf_s5c_handle_update_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_debug(" SGW_S5C_TEID[0x%x] SMF_N4_TEID[0x%x]",
sess->sgw_s5c_teid, sess->smf_n4_teid);
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
return;
}
@ -687,12 +687,12 @@ void smf_s5c_handle_update_bearer_response(
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, pfcp_flags,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
}
void smf_s5c_handle_delete_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_delete_bearer_response_t *rsp)
ogs_gtp2_delete_bearer_response_t *rsp)
{
int rv;
uint8_t cause_value;
@ -703,7 +703,7 @@ void smf_s5c_handle_delete_bearer_response(
ogs_debug("Delete Bearer Response");
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
bearer = xact->data;
ogs_assert(bearer);
@ -717,7 +717,7 @@ void smf_s5c_handle_delete_bearer_response(
sess = bearer->sess;
ogs_assert(sess);
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (rsp->linked_eps_bearer_id.presence) {
@ -731,17 +731,17 @@ void smf_s5c_handle_delete_bearer_response(
* 2. ePDG sends Delete Bearer Response(DEFAULT BEARER) to SMF.
*/
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause->value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause->value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
} else {
ogs_error("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_assert(OGS_OK ==
@ -761,19 +761,19 @@ void smf_s5c_handle_delete_bearer_response(
*/
if (rsp->bearer_contexts.presence == 0) {
ogs_error("No Bearer");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->bearer_contexts.eps_bearer_id.presence == 0) {
ogs_error("No EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
if (rsp->bearer_contexts.cause.presence) {
cause = rsp->bearer_contexts.cause.data;
ogs_assert(cause);
@ -781,14 +781,14 @@ void smf_s5c_handle_delete_bearer_response(
cause_value = cause->value;
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
} else {
ogs_warn("GTP Failed [CAUSE:%d]", cause_value);
}
} else {
ogs_error("No Cause");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
ogs_debug(" SGW_S5C_TEID[0x%x] SMF_N4_TEID[0x%x]",
@ -801,11 +801,11 @@ void smf_s5c_handle_delete_bearer_response(
smf_epc_pfcp_send_bearer_modification_request(
bearer, NULL, OGS_PFCP_MODIFY_REMOVE,
OGS_NAS_PROCEDURE_TRANSACTION_IDENTITY_UNASSIGNED,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
}
}
static int reconfigure_packet_filter(smf_pf_t *pf, ogs_gtp_tft_t *tft, int i)
static int reconfigure_packet_filter(smf_pf_t *pf, ogs_gtp2_tft_t *tft, int i)
{
int j;
@ -899,20 +899,20 @@ static int reconfigure_packet_filter(smf_pf_t *pf, ogs_gtp_tft_t *tft, int i)
void smf_s5c_handle_bearer_resource_command(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_bearer_resource_command_t *cmd)
ogs_gtp2_bearer_resource_command_t *cmd)
{
int rv;
uint8_t cause_value = 0;
int i;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
smf_bearer_t *bearer = NULL;
smf_pf_t *pf = NULL;
int16_t decoded;
ogs_gtp_tft_t tft;
ogs_gtp2_tft_t tft;
int tft_update = 0;
int qos_update = 0;
@ -926,28 +926,28 @@ void smf_s5c_handle_bearer_resource_command(
ogs_debug(" SGW_S5C_TEID[0x%x] PGW_S5C_TEID[0x%x]",
sess->sgw_s5c_teid, sess->smf_n4_teid);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
if (cmd->procedure_transaction_id.presence == 0) {
ogs_error("No PTI");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cmd->traffic_aggregate_description.presence == 0) {
ogs_error("No Traffic aggregate description(TAD)");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (cmd->linked_eps_bearer_id.presence == 0) {
ogs_error("No Linked EPS Bearer ID");
cause_value = OGS_GTP_CAUSE_MANDATORY_IE_MISSING;
cause_value = OGS_GTP2_CAUSE_MANDATORY_IE_MISSING;
}
if (!sess) {
ogs_warn("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
uint8_t ebi = cmd->linked_eps_bearer_id.u8;
if (cmd->eps_bearer_id.presence)
@ -961,36 +961,36 @@ void smf_s5c_handle_bearer_resource_command(
if (!bearer) {
ogs_error("No Context");
cause_value = OGS_GTP_CAUSE_CONTEXT_NOT_FOUND;
cause_value = OGS_GTP2_CAUSE_CONTEXT_NOT_FOUND;
}
if (cause_value != OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
if (cause_value != OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE, cause_value);
return;
}
ogs_assert(bearer);
decoded = ogs_gtp_parse_tft(&tft, &cmd->traffic_aggregate_description);
decoded = ogs_gtp2_parse_tft(&tft, &cmd->traffic_aggregate_description);
ogs_assert(cmd->traffic_aggregate_description.len == decoded);
if (tft.code == OGS_GTP_TFT_CODE_NO_TFT_OPERATION) {
if (tft.code == OGS_GTP2_TFT_CODE_NO_TFT_OPERATION) {
/* No operation */
} else if (tft.code == OGS_GTP_TFT_CODE_DELETE_EXISTING_TFT) {
} else if (tft.code == OGS_GTP2_TFT_CODE_DELETE_EXISTING_TFT) {
smf_pf_remove_all(bearer);
tft_delete = 1;
} else if (tft.code ==
OGS_GTP_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING) {
OGS_GTP2_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING) {
for (i = 0; i < tft.num_of_packet_filter &&
i < OGS_MAX_NUM_OF_FLOW_IN_GTP; i++) {
pf = smf_pf_find_by_id(bearer, tft.pf[i].identifier+1);
if (pf) {
if (reconfigure_packet_filter(pf, &tft, i) < 0) {
ogs_gtp_send_error_message(
ogs_gtp2_send_error_message(
xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER);
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER);
return;
}
/*
@ -1043,9 +1043,9 @@ void smf_s5c_handle_bearer_resource_command(
}
}
} else if (tft.code ==
OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT ||
tft.code == OGS_GTP_TFT_CODE_CREATE_NEW_TFT) {
if (tft.code == OGS_GTP_TFT_CODE_CREATE_NEW_TFT)
OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT ||
tft.code == OGS_GTP2_TFT_CODE_CREATE_NEW_TFT) {
if (tft.code == OGS_GTP2_TFT_CODE_CREATE_NEW_TFT)
smf_pf_remove_all(bearer);
for (i = 0; i < tft.num_of_packet_filter &&
@ -1056,10 +1056,10 @@ void smf_s5c_handle_bearer_resource_command(
ogs_assert(pf);
if (reconfigure_packet_filter(pf, &tft, i) < 0) {
ogs_gtp_send_error_message(
ogs_gtp2_send_error_message(
xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER);
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP2_CAUSE_SEMANTIC_ERRORS_IN_PACKET_FILTER);
return;
}
/*
@ -1112,7 +1112,7 @@ void smf_s5c_handle_bearer_resource_command(
tft_update = 1;
}
} else if (tft.code ==
OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
for (i = 0; i < tft.num_of_packet_filter &&
i <= OGS_MAX_NUM_OF_FLOW_IN_GTP; i++) {
pf = smf_pf_find_by_id(bearer, tft.pf[i].identifier+1);
@ -1127,9 +1127,9 @@ void smf_s5c_handle_bearer_resource_command(
}
if (cmd->flow_quality_of_service.presence) {
ogs_gtp_flow_qos_t flow_qos;
ogs_gtp2_flow_qos_t flow_qos;
decoded = ogs_gtp_parse_flow_qos(
decoded = ogs_gtp2_parse_flow_qos(
&flow_qos, &cmd->flow_quality_of_service);
ogs_assert(cmd->flow_quality_of_service.len == decoded);
@ -1143,9 +1143,9 @@ void smf_s5c_handle_bearer_resource_command(
if (tft_update == 0 && tft_delete == 0 && qos_update == 0) {
/* No modification */
ogs_gtp_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP_CAUSE_SERVICE_NOT_SUPPORTED);
ogs_gtp2_send_error_message(xact, sess ? sess->sgw_s5c_teid : 0,
OGS_GTP2_BEARER_RESOURCE_FAILURE_INDICATION_TYPE,
OGS_GTP2_CAUSE_SERVICE_NOT_SUPPORTED);
return;
}
@ -1164,12 +1164,12 @@ void smf_s5c_handle_bearer_resource_command(
bearer, xact,
OGS_PFCP_MODIFY_DL_ONLY|OGS_PFCP_MODIFY_DEACTIVATE,
cmd->procedure_transaction_id.u8,
OGS_GTP_CAUSE_UNDEFINED_VALUE));
OGS_GTP2_CAUSE_UNDEFINED_VALUE));
} else {
memset(&h, 0, sizeof(ogs_gtp_header_t));
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.teid = sess->sgw_s5c_teid;
h.type = OGS_GTP_UPDATE_BEARER_REQUEST_TYPE;
h.type = OGS_GTP2_UPDATE_BEARER_REQUEST_TYPE;
pkbuf = smf_s5c_build_update_bearer_request(
h.type, bearer, cmd->procedure_transaction_id.u8,

View File

@ -27,31 +27,31 @@ extern "C" {
#endif
void smf_s5c_handle_echo_request(
ogs_gtp_xact_t *xact, ogs_gtp_echo_request_t *req);
ogs_gtp_xact_t *xact, ogs_gtp2_echo_request_t *req);
void smf_s5c_handle_echo_response(
ogs_gtp_xact_t *xact, ogs_gtp_echo_response_t *req);
ogs_gtp_xact_t *xact, ogs_gtp2_echo_response_t *req);
void smf_s5c_handle_create_session_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_create_session_request_t *req);
ogs_gtp2_create_session_request_t *req);
void smf_s5c_handle_delete_session_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_delete_session_request_t *req);
ogs_gtp2_delete_session_request_t *req);
void smf_s5c_handle_modify_bearer_request(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_modify_bearer_request_t *req);
ogs_gtp2_modify_bearer_request_t *req);
void smf_s5c_handle_create_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_create_bearer_response_t *req);
ogs_gtp2_create_bearer_response_t *req);
void smf_s5c_handle_update_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_update_bearer_response_t *req);
ogs_gtp2_update_bearer_response_t *req);
void smf_s5c_handle_delete_bearer_response(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_delete_bearer_response_t *req);
ogs_gtp2_delete_bearer_response_t *req);
void smf_s5c_handle_bearer_resource_command(
smf_sess_t *sess, ogs_gtp_xact_t *xact,
ogs_gtp_bearer_resource_command_t *cmd);
ogs_gtp2_bearer_resource_command_t *cmd);
#ifdef __cplusplus
}

View File

@ -194,10 +194,10 @@ void smf_s6b_send_aar(smf_sess_t *sess, ogs_gtp_xact_t *xact)
ogs_assert(ret == 0);
switch (sess->gtp_rat_type) {
case OGS_GTP_RAT_TYPE_EUTRAN:
case OGS_GTP2_RAT_TYPE_EUTRAN:
val.i32 = OGS_DIAM_RAT_TYPE_EUTRAN;
break;
case OGS_GTP_RAT_TYPE_WLAN:
case OGS_GTP2_RAT_TYPE_WLAN:
val.i32 = OGS_DIAM_RAT_TYPE_WLAN;
break;
default:

View File

@ -57,7 +57,7 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
ogs_gtp_node_t *gnode = NULL;
ogs_gtp_xact_t *gtp_xact = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp2_message_t gtp_message;
ogs_gtp1_message_t gtp1_message;
ogs_diam_gx_message_t *gx_message = NULL;
@ -95,8 +95,8 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
recvbuf = e->pkbuf;
ogs_assert(recvbuf);
if (ogs_gtp_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
if (ogs_gtp2_parse_msg(&gtp_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(recvbuf);
break;
}
@ -120,13 +120,13 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
}
switch(gtp_message.h.type) {
case OGS_GTP_ECHO_REQUEST_TYPE:
case OGS_GTP2_ECHO_REQUEST_TYPE:
smf_s5c_handle_echo_request(gtp_xact, &gtp_message.echo_request);
break;
case OGS_GTP_ECHO_RESPONSE_TYPE:
case OGS_GTP2_ECHO_RESPONSE_TYPE:
smf_s5c_handle_echo_response(gtp_xact, &gtp_message.echo_response);
break;
case OGS_GTP_CREATE_SESSION_REQUEST_TYPE:
case OGS_GTP2_CREATE_SESSION_REQUEST_TYPE:
if (gtp_message.h.teid == 0) {
ogs_expect(!sess);
sess = smf_sess_add_by_gtp_message(&gtp_message);
@ -136,27 +136,27 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
smf_s5c_handle_create_session_request(
sess, gtp_xact, &gtp_message.create_session_request);
break;
case OGS_GTP_DELETE_SESSION_REQUEST_TYPE:
case OGS_GTP2_DELETE_SESSION_REQUEST_TYPE:
smf_s5c_handle_delete_session_request(
sess, gtp_xact, &gtp_message.delete_session_request);
break;
case OGS_GTP_MODIFY_BEARER_REQUEST_TYPE:
case OGS_GTP2_MODIFY_BEARER_REQUEST_TYPE:
smf_s5c_handle_modify_bearer_request(
sess, gtp_xact, &gtp_message.modify_bearer_request);
break;
case OGS_GTP_CREATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE:
smf_s5c_handle_create_bearer_response(
sess, gtp_xact, &gtp_message.create_bearer_response);
break;
case OGS_GTP_UPDATE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_UPDATE_BEARER_RESPONSE_TYPE:
smf_s5c_handle_update_bearer_response(
sess, gtp_xact, &gtp_message.update_bearer_response);
break;
case OGS_GTP_DELETE_BEARER_RESPONSE_TYPE:
case OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE:
smf_s5c_handle_delete_bearer_response(
sess, gtp_xact, &gtp_message.delete_bearer_response);
break;
case OGS_GTP_BEARER_RESOURCE_COMMAND_TYPE:
case OGS_GTP2_BEARER_RESOURCE_COMMAND_TYPE:
smf_s5c_handle_bearer_resource_command(
sess, gtp_xact, &gtp_message.bearer_resource_command);
break;
@ -173,7 +173,7 @@ void smf_state_operational(ogs_fsm_t *s, smf_event_t *e)
ogs_assert(recvbuf);
if (ogs_gtp1_parse_msg(&gtp1_message, recvbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(recvbuf);
break;
}

View File

@ -219,7 +219,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *pkbuf = NULL;
ogs_sockaddr_t from;
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
ogs_pfcp_user_plane_report_t report;
uint32_t teid;
@ -244,8 +244,8 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_assert(pkbuf);
ogs_assert(pkbuf->len);
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP_VERSION_1) {
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
if (gtp_h->version != OGS_GTP2_VERSION_1) {
ogs_error("[DROP] Invalid GTPU version [%d]", gtp_h->version);
ogs_log_hexdump(OGS_LOG_ERROR, pkbuf->data, pkbuf->len);
goto cleanup;
@ -255,7 +255,7 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
ogs_pkbuf_t *echo_rsp;
ogs_debug("[RECV] Echo Request from [%s]", OGS_ADDR(&from, buf));
echo_rsp = ogs_gtp_handle_echo_req(pkbuf);
echo_rsp = ogs_gtp2_handle_echo_req(pkbuf);
ogs_expect(echo_rsp);
if (echo_rsp) {
ssize_t sent;
@ -288,13 +288,13 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
* Note 4 : For a GTP-PDU with several Extension Headers, the PDU
* Session Container should be the first Extension Header
*/
ogs_gtp_extension_header_t *extension_header =
(ogs_gtp_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_gtp2_extension_header_t *extension_header =
(ogs_gtp2_extension_header_t *)(pkbuf->data + OGS_GTPV1U_HEADER_LEN);
ogs_assert(extension_header);
if (extension_header->type ==
OGS_GTP_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
OGS_GTP2_EXTENSION_HEADER_TYPE_PDU_SESSION_CONTAINER) {
if (extension_header->pdu_type ==
OGS_GTP_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION) {
ogs_debug(" QFI [0x%x]",
extension_header->qos_flow_identifier);
qfi = extension_header->qos_flow_identifier;

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "INTERNET", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "INTERNET", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -67,7 +67,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -67,7 +67,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -494,7 +494,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -913,7 +913,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -1249,7 +1249,7 @@ static void test4_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -67,7 +67,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -401,7 +401,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -691,7 +691,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -69,7 +69,7 @@ static void issues_1431_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -210,7 +210,7 @@ static void issues_1431_func(abts_case *tc, void *data)
ogs_msleep(100);
/* Send PDN Connectivity Request */
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 2;
@ -240,7 +240,7 @@ static void issues_1431_func(abts_case *tc, void *data)
ogs_msleep(100);
/* Send Attach Request - Integrity */
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 3;

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -347,7 +347,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue[i]->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(
test_ue[i], "internet", OGS_GTP_RAT_TYPE_EUTRAN);
test_ue[i], "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/********** Insert Subscriber in Database */
@ -358,7 +358,7 @@ static void test2_func(abts_case *tc, void *data)
for (i = 0; i < NUM_OF_TEST_UE; i++) {
sess = test_sess_find_by_apn(
test_ue[i], "internet", OGS_GTP_RAT_TYPE_EUTRAN);
test_ue[i], "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Send Attach Request */
@ -574,7 +574,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue[i]->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(
test_ue[i], "internet", OGS_GTP_RAT_TYPE_EUTRAN);
test_ue[i], "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/********** Insert Subscriber in Database */
@ -585,7 +585,7 @@ static void test3_func(abts_case *tc, void *data)
for (i = 0; i < NUM_OF_TEST_UE; i++) {
sess = test_sess_find_by_apn(
test_ue[i], "internet", OGS_GTP_RAT_TYPE_EUTRAN);
test_ue[i], "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Send Attach Request */

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -232,7 +232,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -517,7 +517,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -1175,7 +1175,7 @@ test_bearer_t *test_bearer_find_by_ue_ebi(test_ue_t *test_ue, uint8_t ebi)
ogs_assert(test_ue);
ogs_list_for_each(&test_ue->sess_list, sess) {
if (sess->gtp_rat_type != OGS_GTP_RAT_TYPE_EUTRAN)
if (sess->gtp_rat_type != OGS_GTP2_RAT_TYPE_EUTRAN)
continue;
bearer = test_bearer_find_by_sess_ebi(sess, ebi);

View File

@ -422,7 +422,7 @@ ogs_pkbuf_t *testesm_build_bearer_resource_modification_request(
&req->traffic_flow_aggregate;
ogs_nas_eps_quality_of_service_t *qos = &req->required_traffic_flow_qos;
ogs_gtp_tft_t tft;
ogs_gtp2_tft_t tft;
ogs_tlv_octet_t octet;
ogs_ipsubnet_t ipsubnet;
@ -451,7 +451,7 @@ ogs_pkbuf_t *testesm_build_bearer_resource_modification_request(
memset(&tft, 0, sizeof tft);
tft.code = tft_code;
if (tft.code == OGS_GTP_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING) {
if (tft.code == OGS_GTP2_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING) {
tft.num_of_packet_filter = 1;
tft.pf[0].direction = 1;
tft.pf[0].identifier = 0;
@ -465,7 +465,7 @@ ogs_pkbuf_t *testesm_build_bearer_resource_modification_request(
tft.pf[0].content.component[0].ipv4.mask = ipsubnet.mask[0];
tft.pf[0].content.num_of_component = 1;
} else if (tft.code ==
OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT) {
OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT) {
tft.num_of_packet_filter = 1;
tft.pf[0].direction = 2;
tft.pf[0].identifier = 4;
@ -491,7 +491,7 @@ ogs_pkbuf_t *testesm_build_bearer_resource_modification_request(
#endif
tft.pf[0].content.num_of_component = 1;
} else if (tft.code == OGS_GTP_TFT_CODE_CREATE_NEW_TFT) {
} else if (tft.code == OGS_GTP2_TFT_CODE_CREATE_NEW_TFT) {
tft.num_of_packet_filter = 4;
tft.pf[0].direction = 1;
@ -590,15 +590,15 @@ ogs_pkbuf_t *testesm_build_bearer_resource_modification_request(
tft.pf[3].content.component[3].port.low = 20361;
tft.pf[3].content.num_of_component = 4;
} else if (tft.code ==
OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING) {
tft.num_of_packet_filter = 4;
tft.pf[0].identifier = 0;
tft.pf[1].identifier = 1;
tft.pf[2].identifier = 2;
tft.pf[3].identifier = 3;
}
tad->length = ogs_gtp_build_tft(&octet,
&tft, tad->buffer, OGS_GTP_MAX_TRAFFIC_FLOW_TEMPLATE);
tad->length = ogs_gtp2_build_tft(&octet,
&tft, tad->buffer, OGS_GTP2_MAX_TRAFFIC_FLOW_TEMPLATE);
if (qci) {
req->presencemask |=

View File

@ -41,7 +41,7 @@ void testesm_handle_activate_default_eps_bearer_context_request(
&activate_default_eps_bearer_context_request->access_point_name;
sess = test_sess_find_by_apn(
test_ue, access_point_name->apn, OGS_GTP_RAT_TYPE_EUTRAN);
test_ue, access_point_name->apn, OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
bearer = test_bearer_find_by_sess_ebi(
sess, message->esm.h.eps_bearer_identity);

View File

@ -108,7 +108,7 @@ void testgtpu_recv(test_ue_t *test_ue, ogs_pkbuf_t *pkbuf)
test_sess_t *sess = NULL;
test_bearer_t *bearer = NULL;
ogs_gtp_header_t *gtp_h = NULL;
ogs_gtp2_header_t *gtp_h = NULL;
struct ip6_hdr *ip6_h = NULL;
struct nd_router_advert *advert_h = NULL;
struct nd_opt_prefix_info *prefix = NULL;
@ -119,10 +119,10 @@ void testgtpu_recv(test_ue_t *test_ue, ogs_pkbuf_t *pkbuf)
ogs_assert(test_ue);
ogs_assert(pkbuf);
gtp_h = (ogs_gtp_header_t *)pkbuf->data;
gtp_h = (ogs_gtp2_header_t *)pkbuf->data;
ogs_assert(gtp_h);
ogs_assert(gtp_h->version == OGS_GTP_VERSION_1);
ogs_assert(gtp_h->version == OGS_GTP1_VERSION_1);
ogs_assert(gtp_h->type == OGS_GTPU_MSGTYPE_GPDU);
teid = be32toh(gtp_h->teid);
@ -172,7 +172,7 @@ found:
int test_gtpu_send(
ogs_socknode_t *node, test_bearer_t *bearer,
ogs_gtp_header_t *gtp_hdesc, ogs_gtp_extension_header_t *ext_hdesc,
ogs_gtp2_header_t *gtp_hdesc, ogs_gtp2_extension_header_t *ext_hdesc,
ogs_pkbuf_t *pkbuf)
{
ogs_gtp_node_t gnode;
@ -214,9 +214,9 @@ int test_gtpu_send(
}
ext_hdesc->pdu_type =
OGS_GTP_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION;
OGS_GTP2_EXTENSION_HEADER_PDU_TYPE_UL_PDU_SESSION_INFORMATION;
return ogs_gtp_send_user_plane(&gnode, gtp_hdesc, ext_hdesc, pkbuf);
return ogs_gtp2_send_user_plane(&gnode, gtp_hdesc, ext_hdesc, pkbuf);
}
int test_gtpu_send_ping(
@ -225,8 +225,8 @@ int test_gtpu_send_ping(
int rv;
test_sess_t *sess = NULL;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_pkbuf_t *pkbuf = NULL;
ogs_ipsubnet_t dst_ipsub;
@ -338,8 +338,8 @@ int test_gtpu_send_slacc_rs(ogs_socknode_t *node, test_bearer_t *bearer)
{
test_sess_t *sess = NULL;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_pkbuf_t *pkbuf = NULL;
struct ip6_hdr *ip6_h = NULL;
@ -406,8 +406,8 @@ int test_gtpu_send_error_indication(
test_sess_t *sess = NULL;
uint32_t teid = 0;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_pkbuf_t *pkbuf = NULL;
@ -428,7 +428,7 @@ int test_gtpu_send_error_indication(
ogs_assert_if_reached();
}
pkbuf = ogs_gtp_build_error_indication(teid, node->addr);
pkbuf = ogs_gtp2_build_error_indication(teid, node->addr);
ogs_assert(pkbuf);
memset(&gtp_hdesc, 0, sizeof(gtp_hdesc));
@ -436,7 +436,7 @@ int test_gtpu_send_error_indication(
gtp_hdesc.type = OGS_GTPU_MSGTYPE_ERR_IND;
gtp_hdesc.flags = OGS_GTPU_FLAGS_S|OGS_GTPU_FLAGS_E;
ext_hdesc.type = OGS_GTP_EXTENSION_HEADER_TYPE_UDP_PORT;
ext_hdesc.type = OGS_GTP2_EXTENSION_HEADER_TYPE_UDP_PORT;
return test_gtpu_send(node, bearer, &gtp_hdesc, &ext_hdesc, pkbuf);
}
@ -446,8 +446,8 @@ int test_gtpu_send_indirect_data_forwarding(
{
test_sess_t *sess = NULL;
ogs_gtp_header_t gtp_hdesc;
ogs_gtp_extension_header_t ext_hdesc;
ogs_gtp2_header_t gtp_hdesc;
ogs_gtp2_extension_header_t ext_hdesc;
ogs_assert(bearer);
sess = bearer->sess;

View File

@ -35,7 +35,7 @@ void testgtpu_recv(test_ue_t *test_ue, ogs_pkbuf_t *pkbuf);
int test_gtpu_send(
ogs_socknode_t *node, test_bearer_t *bearer,
ogs_gtp_header_t *gtp_hdesc, ogs_gtp_extension_header_t *ext_hdesc,
ogs_gtp2_header_t *gtp_hdesc, ogs_gtp2_extension_header_t *ext_hdesc,
ogs_pkbuf_t *pkbuf);
int test_gtpu_send_ping(
ogs_socknode_t *node, test_bearer_t *bearer, const char *dst_ip);

View File

@ -2303,7 +2303,7 @@ static ogs_pkbuf_t *testngap_build_pdu_session_resource_setup_response_trasfer(
int rv;
test_bearer_t *qos_flow = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -2332,11 +2332,11 @@ static ogs_pkbuf_t *testngap_build_pdu_session_resource_setup_response_trasfer(
uPTransportLayerInformation->choice.gTPTunnel = gTPTunnel;
ogs_assert(sess->gnb_n3_addr || sess->gnb_n3_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
sess->gnb_n3_addr, sess->gnb_n3_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
ogs_asn_ip_to_BIT_STRING(&ip, &gTPTunnel->transportLayerAddress);
@ -2422,7 +2422,7 @@ static ogs_pkbuf_t *testngap_build_path_switch_request_trasfer(
test_bearer_t *qos_flow = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -2446,11 +2446,11 @@ static ogs_pkbuf_t *testngap_build_path_switch_request_trasfer(
dL_NGU_UP_TNLInformation->choice.gTPTunnel = gTPTunnel;
ogs_assert(sess->gnb_n3_addr || sess->gnb_n3_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
sess->gnb_n3_addr, sess->gnb_n3_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
ogs_asn_ip_to_BIT_STRING(&ip, &gTPTunnel->transportLayerAddress);
@ -2476,7 +2476,7 @@ static ogs_pkbuf_t *testngap_build_handover_required_transfer(
test_bearer_t *qos_flow = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -2507,7 +2507,7 @@ static ogs_pkbuf_t *testngap_build_handover_request_ack_transfer(
int rv;
test_bearer_t *qos_flow = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -2532,11 +2532,11 @@ static ogs_pkbuf_t *testngap_build_handover_request_ack_transfer(
ogs_assert(gTPTunnel);
ogs_assert(sess->gnb_n3_addr || sess->gnb_n3_addr6);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
sess->gnb_n3_addr, sess->gnb_n3_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
ogs_asn_ip_to_BIT_STRING(&ip, &gTPTunnel->transportLayerAddress);

View File

@ -472,7 +472,7 @@ ogs_pkbuf_t *test_s1ap_build_initial_context_setup_response(test_ue_t *test_ue)
test_sess_t *sess = NULL;
test_bearer_t *bearer = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -553,11 +553,11 @@ ogs_pkbuf_t *test_s1ap_build_initial_context_setup_response(test_ue_t *test_ue)
e_rab->e_RAB_ID = bearer->ebi;
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->enb_s1u_addr, bearer->enb_s1u_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
rv = ogs_asn_ip_to_BIT_STRING(&ip, &e_rab->transportLayerAddress);
@ -827,7 +827,7 @@ ogs_pkbuf_t *test_s1ap_build_e_rab_setup_response(test_bearer_t *bearer)
S1AP_E_RABSetupItemBearerSUResIEs_t *item = NULL;
S1AP_E_RABSetupItemBearerSURes_t *e_rab = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -893,11 +893,11 @@ ogs_pkbuf_t *test_s1ap_build_e_rab_setup_response(test_bearer_t *bearer)
e_rab->e_RAB_ID = bearer->ebi;
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->enb_s1u_addr, bearer->enb_s1u_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
rv = ogs_asn_ip_to_BIT_STRING(&ip, &e_rab->transportLayerAddress);
@ -1229,7 +1229,7 @@ ogs_pkbuf_t *test_s1ap_build_e_rab_modification_indication(test_ue_t *test_ue)
S1AP_E_RABToBeModifiedItemBearerModIndIEs_t *item = NULL;
S1AP_E_RABToBeModifiedItemBearerModInd_t *e_rab = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -1245,11 +1245,11 @@ ogs_pkbuf_t *test_s1ap_build_e_rab_modification_indication(test_ue_t *test_ue)
e_rab->e_RAB_ID = bearer->ebi;
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->enb_s1u_addr, bearer->enb_s1u_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
rv = ogs_asn_ip_to_BIT_STRING(&ip, &e_rab->transportLayerAddress);
@ -1357,7 +1357,7 @@ ogs_pkbuf_t *test_s1ap_build_path_switch_request(test_ue_t *test_ue)
S1AP_E_RABToBeSwitchedDLItemIEs_t *item = NULL;
S1AP_E_RABToBeSwitchedDLItem_t *e_rab = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -1372,11 +1372,11 @@ ogs_pkbuf_t *test_s1ap_build_path_switch_request(test_ue_t *test_ue)
e_rab->e_RAB_ID = bearer->ebi;
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->enb_s1u_addr, bearer->enb_s1u_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
rv = ogs_asn_ip_to_BIT_STRING(&ip, &e_rab->transportLayerAddress);
@ -1635,7 +1635,7 @@ ogs_pkbuf_t *test_s1ap_build_handover_request_ack(test_ue_t *test_ue)
S1AP_E_RABAdmittedItemIEs_t *item = NULL;
S1AP_E_RABAdmittedItem_t *e_rab = NULL;
ogs_gtp_f_teid_t f_teid;
ogs_gtp2_f_teid_t f_teid;
ogs_ip_t ip;
int len;
@ -1651,11 +1651,11 @@ ogs_pkbuf_t *test_s1ap_build_handover_request_ack(test_ue_t *test_ue)
e_rab->e_RAB_ID = bearer->ebi;
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
bearer->enb_s1u_addr, bearer->enb_s1u_addr6, &f_teid, &len);
ogs_assert(rv == OGS_OK);
rv = ogs_gtp_f_teid_to_ip(&f_teid, &ip);
rv = ogs_gtp2_f_teid_to_ip(&f_teid, &ip);
ogs_assert(rv == OGS_OK);
rv = ogs_asn_ip_to_BIT_STRING(&ip, &e_rab->transportLayerAddress);

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -355,7 +355,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -555,7 +555,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -841,7 +841,7 @@ static void test4_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -66,7 +66,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -67,7 +67,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Two eNB connects to MME */
@ -637,7 +637,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Two eNB connects to MME */
@ -964,7 +964,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Two eNB connects to MME */

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Two eNB connects to MME */

View File

@ -115,7 +115,7 @@ static void test1_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Setup WLAN Session */
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
OGS_SETUP_GTP_NODE(sess, ogs_list_first(&test_self()->gtpc_list));
@ -261,7 +261,7 @@ static void test2_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Setup WLAN Session */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
OGS_SETUP_GTP_NODE(sess, ogs_list_first(&test_self()->gtpc_list));
@ -412,7 +412,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, test_db_insert_ue(test_ue, doc));
/* Setup WLAN Session */
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
OGS_SETUP_GTP_NODE(sess, ogs_list_first(&test_self()->gtpc_list));
@ -438,7 +438,7 @@ static void test3_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Setup EUTRAN Session */
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* Send Attach Request */
@ -556,7 +556,7 @@ static void test3_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Receive S2b Delete Session Response */
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
recvbuf = test_epdg_read(epdg_c);
@ -564,7 +564,7 @@ static void test3_func(abts_case *tc, void *data)
test_s2b_recv(sess, recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -606,7 +606,7 @@ static void test3_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Setup WLAN Session */
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
OGS_SETUP_GTP_NODE(sess, ogs_list_first(&test_self()->gtpc_list));
@ -641,7 +641,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->s1ap_procedure_code);
/* Send E-RABReleaseResponse */
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
bearer = test_bearer_find_by_sess_ebi(sess, 5);
@ -665,7 +665,7 @@ static void test3_func(abts_case *tc, void *data)
ogs_msleep(300);
/* Setup EUTRAN Session */
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pdn_connectivity_param.apn = 1;
@ -715,7 +715,7 @@ static void test3_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Receive S2b Delete Session Response */
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP_RAT_TYPE_WLAN);
sess = test_sess_find_by_apn(test_ue, "wlan", OGS_GTP2_RAT_TYPE_WLAN);
ogs_assert(sess);
recvbuf = test_epdg_read(epdg_c);

View File

@ -79,15 +79,15 @@ ogs_pkbuf_t *test_epdg_read(ogs_socknode_t *node)
void test_s2b_recv(test_sess_t *sess, ogs_pkbuf_t *pkbuf)
{
int rv;
ogs_gtp_message_t gtp_message;
ogs_gtp2_message_t gtp_message;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(sess);
ogs_assert(sess->gnode);
ogs_assert(pkbuf);
if (ogs_gtp_parse_msg(&gtp_message, pkbuf) != OGS_OK) {
ogs_error("ogs_gtp_parse_msg() failed");
if (ogs_gtp2_parse_msg(&gtp_message, pkbuf) != OGS_OK) {
ogs_error("ogs_gtp2_parse_msg() failed");
ogs_pkbuf_free(pkbuf);
return;
}
@ -100,19 +100,19 @@ void test_s2b_recv(test_sess_t *sess, ogs_pkbuf_t *pkbuf)
}
switch (gtp_message.h.type) {
case OGS_GTP_CREATE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_CREATE_SESSION_RESPONSE_TYPE:
test_s2b_handle_create_session_response(
xact, sess, &gtp_message.create_session_response);
break;
case OGS_GTP_DELETE_SESSION_RESPONSE_TYPE:
case OGS_GTP2_DELETE_SESSION_RESPONSE_TYPE:
test_s2b_handle_delete_session_response(
xact, sess, &gtp_message.delete_session_response);
break;
case OGS_GTP_CREATE_BEARER_REQUEST_TYPE:
case OGS_GTP2_CREATE_BEARER_REQUEST_TYPE:
test_s2b_handle_create_bearer_request(
xact, sess, &gtp_message.create_bearer_request);
break;
case OGS_GTP_DELETE_BEARER_REQUEST_TYPE:
case OGS_GTP2_DELETE_BEARER_REQUEST_TYPE:
test_s2b_handle_delete_bearer_request(
xact, sess, &gtp_message.delete_bearer_request);
break;
@ -127,14 +127,14 @@ void test_s2b_recv(test_sess_t *sess, ogs_pkbuf_t *pkbuf)
int test_s2b_send_create_session_request(test_sess_t *sess, bool handover_ind)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_SESSION_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_SESSION_REQUEST_TYPE;
h.teid = sess->smf_s2b_c_teid;
pkbuf = test_s2b_build_create_session_request(h.type, sess, handover_ind);
@ -152,14 +152,14 @@ int test_s2b_send_create_session_request(test_sess_t *sess, bool handover_ind)
int test_s2b_send_delete_session_request(test_sess_t *sess)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
ogs_gtp_xact_t *xact = NULL;
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_SESSION_REQUEST_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_SESSION_REQUEST_TYPE;
h.teid = sess->smf_s2b_c_teid;
pkbuf = test_s2b_build_delete_session_request(h.type, sess);
@ -178,7 +178,7 @@ int test_s2b_send_create_bearer_response(
test_bearer_t *bearer, ogs_gtp_xact_t *xact)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
test_sess_t *sess = NULL;
@ -187,8 +187,8 @@ int test_s2b_send_create_bearer_response(
sess = bearer->sess;
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_CREATE_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_CREATE_BEARER_RESPONSE_TYPE;
h.teid = sess->smf_s2b_c_teid;
pkbuf = test_s2b_build_create_bearer_response(h.type, bearer);
@ -207,7 +207,7 @@ int test_s2b_send_delete_bearer_response(
test_bearer_t *bearer, ogs_gtp_xact_t *xact)
{
int rv;
ogs_gtp_header_t h;
ogs_gtp2_header_t h;
ogs_pkbuf_t *pkbuf = NULL;
test_sess_t *sess = NULL;
@ -216,8 +216,8 @@ int test_s2b_send_delete_bearer_response(
sess = bearer->sess;
ogs_assert(sess);
memset(&h, 0, sizeof(ogs_gtp_header_t));
h.type = OGS_GTP_DELETE_BEARER_RESPONSE_TYPE;
memset(&h, 0, sizeof(ogs_gtp2_header_t));
h.type = OGS_GTP2_DELETE_BEARER_RESPONSE_TYPE;
h.teid = sess->smf_s2b_c_teid;
pkbuf = test_s2b_build_delete_bearer_response(h.type, bearer);

View File

@ -26,24 +26,24 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
ogs_session_t *session = NULL;
test_ue_t *test_ue = NULL;
test_bearer_t *bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_session_request_t *req = &gtp_message.create_session_request;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_session_request_t *req = &gtp_message.create_session_request;
uint8_t msisdn_buf[OGS_MAX_MSISDN_LEN];
int msisdn_len;
ogs_gtp_uli_t uli;
char uli_buf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp_f_teid_t test_s2b_c_teid, test_s2b_u_teid;
ogs_gtp2_uli_t uli;
char uli_buf[OGS_GTP2_MAX_ULI_LEN];
ogs_gtp2_f_teid_t test_s2b_c_teid, test_s2b_u_teid;
int len;
ogs_paa_t paa;
ogs_gtp_ambr_t ambr;
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
ogs_gtp2_ambr_t ambr;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
char apn[OGS_MAX_APN_LEN+1];
ogs_gtp_indication_t indication;
ogs_gtp2_indication_t indication;
ogs_assert(sess);
test_ue = sess->test_ue;
@ -55,14 +55,14 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
ogs_assert(bearer);
ogs_debug("Create Session Request");
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
if (handover_ind == true) {
memset(&indication, 0, sizeof(ogs_gtp_indication_t));
memset(&indication, 0, sizeof(ogs_gtp2_indication_t));
indication.handover_indication = 1;
req->indication_flags.presence = 1;
req->indication_flags.data = &indication;
req->indication_flags.len = sizeof(ogs_gtp_indication_t);
req->indication_flags.len = sizeof(ogs_gtp2_indication_t);
}
ogs_assert(test_ue->imsi_len);
@ -76,7 +76,7 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
req->msisdn.data = msisdn_buf;
req->msisdn.len = msisdn_len;
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_nas_from_plmn_id(&uli.tai.nas_plmn_id, &test_ue->e_tai.plmn_id);
@ -84,21 +84,21 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
ogs_nas_from_plmn_id(&uli.e_cgi.nas_plmn_id, &test_ue->e_cgi.plmn_id);
uli.e_cgi.cell_id = test_ue->e_cgi.cell_id;
req->user_location_information.presence = 1;
ogs_gtp_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP_MAX_ULI_LEN);
ogs_gtp2_build_uli(&req->user_location_information, &uli,
uli_buf, OGS_GTP2_MAX_ULI_LEN);
req->serving_network.presence = 1;
req->serving_network.data = &uli.tai.nas_plmn_id;
req->serving_network.len = sizeof(uli.tai.nas_plmn_id);
req->rat_type.presence = 1;
req->rat_type.u8 = OGS_GTP_RAT_TYPE_WLAN;
req->rat_type.u8 = OGS_GTP2_RAT_TYPE_WLAN;
memset(&test_s2b_c_teid, 0, sizeof(ogs_gtp_f_teid_t));
test_s2b_c_teid.interface_type = OGS_GTP_F_TEID_S2B_EPDG_GTP_C;
memset(&test_s2b_c_teid, 0, sizeof(ogs_gtp2_f_teid_t));
test_s2b_c_teid.interface_type = OGS_GTP2_F_TEID_S2B_EPDG_GTP_C;
test_s2b_c_teid.teid = htobe32(sess->epdg_s2b_c_teid);
ogs_assert(sess->gnode->sock);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
&sess->gnode->sock->local_addr, NULL, &test_s2b_c_teid, &len);
ogs_assert(rv == OGS_OK);
req->sender_f_teid_for_control_plane.presence = 1;
@ -112,7 +112,7 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
req->selection_mode.presence = 1;
req->selection_mode.u8 =
OGS_GTP_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN;
OGS_GTP2_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN;
memset(&paa, 0, sizeof(paa));
paa.session_type = OGS_PDU_SESSION_TYPE_IPV4V6;
@ -121,7 +121,7 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
req->pdn_address_allocation.data = &paa;
req->pdn_address_allocation.len = OGS_PAA_IPV4V6_LEN;
memset(&ambr, 0, sizeof(ogs_gtp_ambr_t));
memset(&ambr, 0, sizeof(ogs_gtp2_ambr_t));
ambr.uplink = htobe32(50000);
ambr.downlink = htobe32(150000);
req->aggregate_maximum_bit_rate.presence = 1;
@ -132,11 +132,11 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
req->bearer_contexts_to_be_created.eps_bearer_id.presence = 1;
req->bearer_contexts_to_be_created.eps_bearer_id.u8 = bearer->ebi;
memset(&test_s2b_u_teid, 0, sizeof(ogs_gtp_f_teid_t));
memset(&test_s2b_u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
test_s2b_u_teid.teid = htobe32(bearer->enb_s1u_teid);
test_s2b_u_teid.interface_type = OGS_GTP_F_TEID_S2B_U_EPDG_GTP_U;
test_s2b_u_teid.interface_type = OGS_GTP2_F_TEID_S2B_U_EPDG_GTP_U;
ogs_assert(sess->gnode->sock);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
&sess->gnode->sock->local_addr, NULL, &test_s2b_u_teid, &len);
req->bearer_contexts_to_be_created.s2b_u_epdg_f_teid_5.presence = 1;
@ -150,9 +150,9 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
bearer_qos.pre_emption_capability = 0;
bearer_qos.pre_emption_vulnerability = 0;
req->bearer_contexts_to_be_created.bearer_level_qos.presence = 1;
ogs_gtp_build_bearer_qos(
ogs_gtp2_build_bearer_qos(
&req->bearer_contexts_to_be_created.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
req->recovery.presence = 1;
req->recovery.u8 = 66;
@ -163,7 +163,7 @@ ogs_pkbuf_t *test_s2b_build_create_session_request(
req->additional_protocol_configuration_options.len = 4;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *test_s2b_build_delete_session_request(
@ -172,21 +172,21 @@ ogs_pkbuf_t *test_s2b_build_delete_session_request(
int rv;
test_bearer_t *bearer = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_session_request_t *req = &gtp_message.delete_session_request;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_session_request_t *req = &gtp_message.delete_session_request;
ogs_assert(sess);
bearer = ogs_list_first(&sess->bearer_list);
ogs_assert(bearer);
ogs_debug("Delete Session Request");
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
req->linked_eps_bearer_id.presence = 1;
req->linked_eps_bearer_id.u8 = bearer->ebi;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *test_s2b_build_create_bearer_response(
@ -194,13 +194,13 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response(
{
int rv;
ogs_session_t *session = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_create_bearer_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_create_bearer_response_t *rsp = NULL;
test_sess_t *sess = NULL;
ogs_gtp_cause_t cause;
ogs_gtp_f_teid_t epdg_s2b_u_teid, smf_s2b_u_teid;
ogs_gtp2_cause_t cause;
ogs_gtp2_f_teid_t epdg_s2b_u_teid, smf_s2b_u_teid;
int len;
ogs_assert(bearer);
@ -209,10 +209,10 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response(
ogs_debug("Create Bearer Response");
rsp = &gtp_message.create_bearer_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rsp->cause.presence = 1;
rsp->cause.data = &cause;
@ -224,11 +224,11 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response(
rsp->bearer_contexts.eps_bearer_id.u8 = bearer->ebi;
/* Data Plane(DL) : ePDG-S2B-U */
memset(&epdg_s2b_u_teid, 0, sizeof(ogs_gtp_f_teid_t));
epdg_s2b_u_teid.interface_type = OGS_GTP_F_TEID_S2B_U_EPDG_GTP_U;
memset(&epdg_s2b_u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
epdg_s2b_u_teid.interface_type = OGS_GTP2_F_TEID_S2B_U_EPDG_GTP_U;
epdg_s2b_u_teid.teid = htobe32(bearer->enb_s1u_teid);
ogs_assert(sess->gnode->sock);
rv = ogs_gtp_sockaddr_to_f_teid(
rv = ogs_gtp2_sockaddr_to_f_teid(
&sess->gnode->sock->local_addr, NULL, &epdg_s2b_u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
rsp->bearer_contexts.s2b_u_epdg_f_teid_8.presence = 1;
@ -236,14 +236,14 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response(
rsp->bearer_contexts.s2b_u_epdg_f_teid_8.len = len;
/* Data Plane(UL) : SMF-S2B-U */
memset(&smf_s2b_u_teid, 0, sizeof(ogs_gtp_f_teid_t));
smf_s2b_u_teid.interface_type = OGS_GTP_F_TEID_S2B_U_PGW_GTP_U;
memset(&smf_s2b_u_teid, 0, sizeof(ogs_gtp2_f_teid_t));
smf_s2b_u_teid.interface_type = OGS_GTP2_F_TEID_S2B_U_PGW_GTP_U;
smf_s2b_u_teid.teid = htobe32(bearer->sgw_s1u_teid);
rv = ogs_gtp_ip_to_f_teid(&bearer->sgw_s1u_ip, &smf_s2b_u_teid, &len);
rv = ogs_gtp2_ip_to_f_teid(&bearer->sgw_s1u_ip, &smf_s2b_u_teid, &len);
ogs_expect_or_return_val(rv == OGS_OK, NULL);
rsp->bearer_contexts.s2b_u_pgw_f_teid.presence = 1;
rsp->bearer_contexts.s2b_u_pgw_f_teid.data = &smf_s2b_u_teid;
rsp->bearer_contexts.s2b_u_pgw_f_teid.len = OGS_GTP_F_TEID_IPV4_LEN;
rsp->bearer_contexts.s2b_u_pgw_f_teid.len = OGS_GTP2_F_TEID_IPV4_LEN;
/* Bearer Context : Cause */
rsp->bearer_contexts.cause.presence = 1;
@ -251,7 +251,7 @@ ogs_pkbuf_t *test_s2b_build_create_bearer_response(
rsp->bearer_contexts.cause.data = &cause;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}
ogs_pkbuf_t *test_s2b_build_delete_bearer_response(
@ -259,19 +259,19 @@ ogs_pkbuf_t *test_s2b_build_delete_bearer_response(
{
int rv;
ogs_session_t *session = NULL;
ogs_gtp_message_t gtp_message;
ogs_gtp_delete_bearer_response_t *rsp = NULL;
ogs_gtp2_message_t gtp_message;
ogs_gtp2_delete_bearer_response_t *rsp = NULL;
ogs_gtp_cause_t cause;
ogs_gtp2_cause_t cause;
ogs_assert(bearer);
ogs_debug("Delete Bearer Response");
rsp = &gtp_message.delete_bearer_response;
memset(&gtp_message, 0, sizeof(ogs_gtp_message_t));
memset(&gtp_message, 0, sizeof(ogs_gtp2_message_t));
memset(&cause, 0, sizeof(cause));
cause.value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause.value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rsp->cause.presence = 1;
rsp->cause.data = &cause;
@ -281,5 +281,5 @@ ogs_pkbuf_t *test_s2b_build_delete_bearer_response(
rsp->linked_eps_bearer_id.u8 = bearer->ebi;
gtp_message.h.type = type;
return ogs_gtp_build_msg(&gtp_message);
return ogs_gtp2_build_msg(&gtp_message);
}

View File

@ -22,14 +22,14 @@
void test_s2b_handle_create_session_response(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_create_session_response_t *rsp)
ogs_gtp2_create_session_response_t *rsp)
{
int rv;
uint8_t cause_value;
test_bearer_t *bearer = NULL;
ogs_gtp_f_teid_t *smf_s2b_c_teid = NULL;
ogs_gtp_f_teid_t *smf_s2b_u_teid = NULL;
ogs_gtp2_f_teid_t *smf_s2b_c_teid = NULL;
ogs_gtp2_f_teid_t *smf_s2b_u_teid = NULL;
ogs_paa_t paa;
ogs_assert(xact);
@ -40,11 +40,11 @@ void test_s2b_handle_create_session_response(
ogs_expect(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
if (cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED) {
if (cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED) {
} else {
ogs_error("GTP Failed [CAUSE:%d]", cause_value);
return;
@ -92,7 +92,7 @@ void test_s2b_handle_create_session_response(
bearer->sgw_s1u_teid = be32toh(smf_s2b_u_teid->teid);
ogs_assert(OGS_OK ==
ogs_gtp_f_teid_to_ip(smf_s2b_u_teid, &bearer->sgw_s1u_ip));
ogs_gtp2_f_teid_to_ip(smf_s2b_u_teid, &bearer->sgw_s1u_ip));
memcpy(&paa,
rsp->pdn_address_allocation.data, rsp->pdn_address_allocation.len);
@ -122,7 +122,7 @@ void test_s2b_handle_create_session_response(
void test_s2b_handle_delete_session_response(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_delete_session_response_t *rsp)
ogs_gtp2_delete_session_response_t *rsp)
{
int rv;
uint8_t cause_value;
@ -131,17 +131,17 @@ void test_s2b_handle_delete_session_response(
ogs_assert(sess);
ogs_assert(rsp);
cause_value = OGS_GTP_CAUSE_REQUEST_ACCEPTED;
cause_value = OGS_GTP2_CAUSE_REQUEST_ACCEPTED;
rv = ogs_gtp_xact_commit(xact);
ogs_expect(rv == OGS_OK);
if (rsp->cause.presence) {
ogs_gtp_cause_t *cause = rsp->cause.data;
ogs_gtp2_cause_t *cause = rsp->cause.data;
ogs_assert(cause);
cause_value = cause->value;
ogs_assert(cause_value == OGS_GTP_CAUSE_REQUEST_ACCEPTED);
ogs_assert(cause_value == OGS_GTP2_CAUSE_REQUEST_ACCEPTED);
}
test_sess_remove(sess);
@ -149,12 +149,12 @@ void test_s2b_handle_delete_session_response(
void test_s2b_handle_create_bearer_request(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_create_bearer_request_t *req)
ogs_gtp2_create_bearer_request_t *req)
{
int rv;
test_bearer_t *linked_bearer = NULL;
test_bearer_t *bearer = NULL;
ogs_gtp_f_teid_t *smf_s2b_u_teid = NULL;
ogs_gtp2_f_teid_t *smf_s2b_u_teid = NULL;
ogs_assert(xact);
ogs_assert(sess);
@ -198,7 +198,7 @@ void test_s2b_handle_create_bearer_request(
smf_s2b_u_teid = req->bearer_contexts.s4_u_sgsn_f_teid.data;
ogs_assert(smf_s2b_u_teid);
bearer->sgw_s1u_teid = be32toh(smf_s2b_u_teid->teid);
rv = ogs_gtp_f_teid_to_ip(smf_s2b_u_teid, &bearer->sgw_s1u_ip);
rv = ogs_gtp2_f_teid_to_ip(smf_s2b_u_teid, &bearer->sgw_s1u_ip);
ogs_assert(rv == OGS_OK);
ogs_assert(OGS_OK == test_s2b_send_create_bearer_response(bearer, xact));
@ -206,10 +206,10 @@ void test_s2b_handle_create_bearer_request(
void test_s2b_handle_delete_bearer_request(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_delete_bearer_request_t *req)
ogs_gtp2_delete_bearer_request_t *req)
{
test_bearer_t *bearer = NULL;
ogs_gtp_cause_t *cause = NULL;
ogs_gtp2_cause_t *cause = NULL;
ogs_assert(xact);
ogs_assert(sess);
@ -220,7 +220,7 @@ void test_s2b_handle_delete_bearer_request(
ogs_assert(cause);
ogs_assert(cause->value ==
OGS_GTP_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP);
OGS_GTP2_CAUSE_ACCESS_CHANGED_FROM_NON_3GPP_TO_3GPP);
ogs_assert(req->linked_eps_bearer_id.presence);
bearer = test_bearer_find_by_sess_ebi(sess, req->linked_eps_bearer_id.u8);

View File

@ -28,17 +28,17 @@ extern "C" {
void test_s2b_handle_create_session_response(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_create_session_response_t *rsp);
ogs_gtp2_create_session_response_t *rsp);
void test_s2b_handle_delete_session_response(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_delete_session_response_t *rsp);
ogs_gtp2_delete_session_response_t *rsp);
void test_s2b_handle_create_bearer_request(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_create_bearer_request_t *req);
ogs_gtp2_create_bearer_request_t *req);
void test_s2b_handle_delete_bearer_request(
ogs_gtp_xact_t *xact, test_sess_t *sess,
ogs_gtp_delete_bearer_request_t *req);
ogs_gtp2_delete_bearer_request_t *req);
#ifdef __cplusplus
}

View File

@ -24,7 +24,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
{
int rv;
/* Create Session Request */
const char *_payload =
const char *_payload =
"0100080055153011 340010f44c000600 9471527600414b00 0800536120009178"
"840056000d001855 f501102255f50100 019d015300030055 f501520001000657"
"0009008a80000084 0a32360a57000901 87000000000a3236 254700220005766f"
@ -36,25 +36,25 @@ static void gtp_message_test1(abts_case *tc, void *data)
char *_value = NULL;
char hexbuf[OGS_MAX_SDU_LEN];
ogs_gtp_create_session_request_t req;
ogs_gtp_uli_t uli;
char ulibuf[OGS_GTP_MAX_ULI_LEN];
ogs_gtp2_create_session_request_t req;
ogs_gtp2_uli_t uli;
char ulibuf[OGS_GTP2_MAX_ULI_LEN];
ogs_plmn_id_t serving_network;
char apnbuf[34];
ogs_gtp_f_teid_t s11, s5;
ogs_gtp2_f_teid_t s11, s5;
ogs_paa_t paa;
ogs_gtp_ambr_t ambr;
ogs_gtp2_ambr_t ambr;
ogs_pco_t pco;
unsigned char pcobuf[OGS_MAX_PCO_LEN];
ogs_gtp_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP_BEARER_QOS_LEN];
ogs_gtp_ue_timezone_t ue_timezone;
ogs_gtp2_bearer_qos_t bearer_qos;
char bearer_qos_buf[GTP2_BEARER_QOS_LEN];
ogs_gtp2_ue_timezone_t ue_timezone;
int size = 0;
ogs_pkbuf_t *pkbuf = NULL;
ogs_sockaddr_t sa;
memset(&req, 0, sizeof(ogs_gtp_create_session_request_t));
memset(&req, 0, sizeof(ogs_gtp2_create_session_request_t));
req.imsi.presence = 1;
req.imsi.data = (uint8_t *)"\x55\x15\x30\x11\x34\x00\x10\xf4";
@ -68,7 +68,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.me_identity.data = (uint8_t *)"\x53\x61\x20\x00\x91\x78\x84\x00";
req.me_identity.len = 8;
memset(&uli, 0, sizeof(ogs_gtp_uli_t));
memset(&uli, 0, sizeof(ogs_gtp2_uli_t));
uli.flags.e_cgi = 1;
uli.flags.tai = 1;
ogs_plmn_id_build(&uli.tai.nas_plmn_id, 555, 10, 2);
@ -76,8 +76,8 @@ static void gtp_message_test1(abts_case *tc, void *data)
ogs_plmn_id_build(&uli.e_cgi.nas_plmn_id, 555, 10, 2);
uli.e_cgi.cell_id = 105729;
req.user_location_information.presence = 1;
size = ogs_gtp_build_uli(&req.user_location_information, &uli,
ulibuf, OGS_GTP_MAX_ULI_LEN);
size = ogs_gtp2_build_uli(&req.user_location_information, &uli,
ulibuf, OGS_GTP2_MAX_ULI_LEN);
ABTS_INT_EQUAL(tc, 13, req.user_location_information.len);
req.serving_network.presence = 1;
@ -85,27 +85,27 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.serving_network.len = sizeof(serving_network);
req.rat_type.presence = 1;
req.rat_type.u8 = OGS_GTP_RAT_TYPE_EUTRAN;
req.rat_type.u8 = OGS_GTP2_RAT_TYPE_EUTRAN;
memset(&s11, 0, sizeof(ogs_gtp_f_teid_t));
memset(&s11, 0, sizeof(ogs_gtp2_f_teid_t));
s11.ipv4 = 1;
s11.interface_type = OGS_GTP_F_TEID_S11_MME_GTP_C;
s11.interface_type = OGS_GTP2_F_TEID_S11_MME_GTP_C;
s11.teid = htonl(0x80000084);
ogs_inet_pton(AF_INET, "10.50.54.10", &sa);
s11.addr = sa.sin.sin_addr.s_addr;
req.sender_f_teid_for_control_plane.presence = 1;
req.sender_f_teid_for_control_plane.data = &s11;
req.sender_f_teid_for_control_plane.len = OGS_GTP_F_TEID_IPV4_LEN;
req.sender_f_teid_for_control_plane.len = OGS_GTP2_F_TEID_IPV4_LEN;
memset(&s5, 0, sizeof(ogs_gtp_f_teid_t));
memset(&s5, 0, sizeof(ogs_gtp2_f_teid_t));
s5.ipv4 = 1;
s5.interface_type = OGS_GTP_F_TEID_S5_S8_PGW_GTP_C;
s5.interface_type = OGS_GTP2_F_TEID_S5_S8_PGW_GTP_C;
ogs_inet_pton(AF_INET, "10.50.54.37", &sa);
s5.addr = sa.sin.sin_addr.s_addr;
req.pgw_s5_s8_address_for_control_plane_or_pmip.presence = 1;
req.pgw_s5_s8_address_for_control_plane_or_pmip.data = &s5;
req.pgw_s5_s8_address_for_control_plane_or_pmip.len =
OGS_GTP_F_TEID_IPV4_LEN;
OGS_GTP2_F_TEID_IPV4_LEN;
_value = (char*)"05766f6c7465036e 6732046d6e657406 6d6e63303130066d 6363353535046770 7273";
req.access_point_name.presence = 1;
@ -113,8 +113,8 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.access_point_name.len = sizeof(apnbuf);
req.selection_mode.presence = 1;
req.selection_mode.u8 =
OGS_GTP_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN | 0xfc;
req.selection_mode.u8 =
OGS_GTP2_SELECTION_MODE_MS_OR_NETWORK_PROVIDED_APN | 0xfc;
req.pdn_type.presence = 1;
req.pdn_type.u8 = OGS_PDU_SESSION_TYPE_IPV4;
@ -126,9 +126,9 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.pdn_address_allocation.len = OGS_PAA_IPV4_LEN;
req.maximum_apn_restriction.presence = 1;
req.maximum_apn_restriction.u8 = OGS_GTP_APN_NO_RESTRICTION;
req.maximum_apn_restriction.u8 = OGS_GTP2_APN_NO_RESTRICTION;
memset(&ambr, 0, sizeof(ogs_gtp_ambr_t));
memset(&ambr, 0, sizeof(ogs_gtp2_ambr_t));
ambr.uplink = htonl(1000);
ambr.downlink = htonl(2000);
req.aggregate_maximum_bit_rate.presence = 1;
@ -137,7 +137,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
memset(&pco, 0, sizeof(ogs_pco_t));
pco.ext = 1;
pco.configuration_protocol =
pco.configuration_protocol =
OGS_PCO_PPP_FOR_USE_WITH_IP_PDP_TYPE_OR_IP_PDN_TYPE;
pco.num_of_id = 3;
pco.ids[0].id = OGS_PCO_ID_INTERNET_PROTOCOL_CONTROL_PROTOCOL;
@ -150,7 +150,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.protocol_configuration_options.presence = 1;
req.protocol_configuration_options.data = &pcobuf;
req.protocol_configuration_options.len =
req.protocol_configuration_options.len =
ogs_pco_build(pcobuf, OGS_MAX_PCO_LEN, &pco);
req.bearer_contexts_to_be_created.presence = 1;
@ -163,14 +163,14 @@ static void gtp_message_test1(abts_case *tc, void *data)
bearer_qos.pre_emption_capability = 1;
bearer_qos.qci = 5;
req.bearer_contexts_to_be_created.bearer_level_qos.presence = 1;
size = ogs_gtp_build_bearer_qos(
size = ogs_gtp2_build_bearer_qos(
&req.bearer_contexts_to_be_created.bearer_level_qos,
&bearer_qos, bearer_qos_buf, GTP_BEARER_QOS_LEN);
&bearer_qos, bearer_qos_buf, GTP2_BEARER_QOS_LEN);
memset(&ue_timezone, 0, sizeof(ue_timezone));
ue_timezone.timezone = 0x40;
ue_timezone.daylight_saving_time =
OGS_GTP_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
ue_timezone.daylight_saving_time =
OGS_GTP2_UE_TIME_ZONE_NO_ADJUSTMENT_FOR_DAYLIGHT_SAVING_TIME;
req.ue_time_zone.presence = 1;
req.ue_time_zone.data = &ue_timezone;
req.ue_time_zone.len = sizeof(ue_timezone);
@ -179,15 +179,15 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.charging_characteristics.data = (uint8_t *)"\x54\x00";
req.charging_characteristics.len = 2;
pkbuf = ogs_tlv_build_msg(&ogs_gtp_tlv_desc_create_session_request,
pkbuf = ogs_tlv_build_msg(&ogs_gtp2_tlv_desc_create_session_request,
&req, OGS_TLV_MODE_T1_L2_I1);
ABTS_PTR_NOTNULL(tc, pkbuf);
ABTS_TRUE(tc, memcmp(pkbuf->data,
ABTS_TRUE(tc, memcmp(pkbuf->data,
OGS_HEX(_payload, strlen(_payload), hexbuf), pkbuf->len) == 0);
memset(&req, 0, sizeof(req));
rv = ogs_tlv_parse_msg(&req, &ogs_gtp_tlv_desc_create_session_request,
rv = ogs_tlv_parse_msg(&req, &ogs_gtp2_tlv_desc_create_session_request,
pkbuf, OGS_TLV_MODE_T1_L2_I1);
ABTS_INT_EQUAL(tc, OGS_OK, rv);
@ -196,13 +196,13 @@ static void gtp_message_test1(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, 1, req.imsi.presence);
ABTS_INT_EQUAL(tc, 8, req.imsi.len);
_value = (char*)"55153011 340010f4";
ABTS_TRUE(tc, memcmp(OGS_HEX(_value, strlen(_value), hexbuf),
ABTS_TRUE(tc, memcmp(OGS_HEX(_value, strlen(_value), hexbuf),
req.imsi.data, req.imsi.len) == 0);
ABTS_INT_EQUAL(tc, 1, req.msisdn.presence);
ABTS_INT_EQUAL(tc, 6, req.msisdn.len);
_value = (char*)"94715276 0041";
ABTS_TRUE(tc, memcmp(OGS_HEX(_value, strlen(_value), hexbuf),
ABTS_TRUE(tc, memcmp(OGS_HEX(_value, strlen(_value), hexbuf),
req.msisdn.data, req.msisdn.len) == 0);
ABTS_INT_EQUAL(tc, 1, req.me_identity.presence);
@ -212,7 +212,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
req.me_identity.data, req.me_identity.len) == 0);
ABTS_INT_EQUAL(tc, 1, req.user_location_information.presence);
size = ogs_gtp_parse_uli(&uli, &req.user_location_information);
size = ogs_gtp2_parse_uli(&uli, &req.user_location_information);
ABTS_INT_EQUAL(tc, 13, size);
ABTS_INT_EQUAL(tc, 0, uli.flags.lai);
ABTS_INT_EQUAL(tc, 1, uli.flags.e_cgi);
@ -244,25 +244,25 @@ static void gtp_message_test1(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, 1, pco.ext);
ABTS_INT_EQUAL(tc, 0, pco.configuration_protocol);
ABTS_INT_EQUAL(tc, 3, pco.num_of_id);
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_INTERNET_PROTOCOL_CONTROL_PROTOCOL,
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_INTERNET_PROTOCOL_CONTROL_PROTOCOL,
pco.ids[0].id);
ABTS_INT_EQUAL(tc, 16, pco.ids[0].len);
ABTS_INT_EQUAL(tc, 16, pco.ids[0].len);
ABTS_TRUE(tc, memcmp(
"\x01\x00\x00\x10\x81\x06\x00\x00\x00\x00\x83\x06\x00\x00\x00\x00",
pco.ids[0].data, pco.ids[0].len) == 0);
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_DNS_SERVER_IPV4_ADDRESS_REQUEST,
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_DNS_SERVER_IPV4_ADDRESS_REQUEST,
pco.ids[1].id);
ABTS_INT_EQUAL(tc, 0, pco.ids[1].len);
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING,
ABTS_INT_EQUAL(tc, 0, pco.ids[1].len);
ABTS_INT_EQUAL(tc,
OGS_PCO_ID_IP_ADDRESS_ALLOCATION_VIA_NAS_SIGNALLING,
pco.ids[2].id);
ABTS_INT_EQUAL(tc, 0, pco.ids[2].len);
ABTS_INT_EQUAL(tc, 0, pco.ids[2].len);
ABTS_INT_EQUAL(tc, 1, req.bearer_contexts_to_be_created.presence);
ABTS_INT_EQUAL(tc, 1, req.
bearer_contexts_to_be_created.eps_bearer_id.presence);
ABTS_INT_EQUAL(tc, 0x05,
ABTS_INT_EQUAL(tc, 0x05,
req.bearer_contexts_to_be_created.eps_bearer_id.u8);
ABTS_INT_EQUAL(tc, 0, req.
bearer_contexts_to_be_created.tft.presence);
@ -276,7 +276,7 @@ static void gtp_message_test1(abts_case *tc, void *data)
bearer_contexts_to_be_created.bearer_level_qos.presence);
ABTS_INT_EQUAL(tc, 22,
req.bearer_contexts_to_be_created.bearer_level_qos.len);
size = ogs_gtp_parse_bearer_qos(&bearer_qos,
size = ogs_gtp2_parse_bearer_qos(&bearer_qos,
&req.bearer_contexts_to_be_created.bearer_level_qos);
ABTS_INT_EQUAL(tc, 22, size);
ABTS_INT_EQUAL(tc, 1, bearer_qos.pre_emption_vulnerability);

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */

View File

@ -75,7 +75,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
#endif
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -218,7 +218,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;

View File

@ -70,7 +70,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -213,7 +213,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -348,7 +348,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Bearer resource modification request */
sess->pti = 7;
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_NO_TFT_OPERATION, 0, 0);
bearer, OGS_GTP2_TFT_CODE_NO_TFT_OPERATION, 0, 0);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
@ -363,7 +363,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Bearer resource modification request */
sess->pti = 8;
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT, 1, 0);
bearer, OGS_GTP2_TFT_CODE_ADD_PACKET_FILTERS_TO_EXISTING_TFT, 1, 0);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
@ -396,7 +396,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Bearer resource modification request */
sess->pti = 9;
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING, 0, 0);
bearer, OGS_GTP2_TFT_CODE_REPLACE_PACKET_FILTERS_IN_EXISTING, 0, 0);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
ABTS_PTR_NOTNULL(tc, sendbuf);
@ -429,7 +429,7 @@ static void test1_func(abts_case *tc, void *data)
/* Send Bearer resource modification request */
sess->pti = 10;
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -585,7 +585,7 @@ static void test2_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -719,7 +719,7 @@ static void test2_func(abts_case *tc, void *data)
tests1ap_recv(test_ue, recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -936,7 +936,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -1079,7 +1079,7 @@ static void test3_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 37;
@ -1164,7 +1164,7 @@ static void test3_func(abts_case *tc, void *data)
test_ue->s1ap_procedure_code);
/* Send PDN connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 39;
@ -1286,7 +1286,7 @@ static void test4_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -1429,7 +1429,7 @@ static void test4_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 7;
@ -1474,7 +1474,7 @@ static void test4_func(abts_case *tc, void *data)
ogs_msleep(100);
/* Send PDN disconnectivity request */
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
sess->pti = 8;
esmbuf = testesm_build_pdn_disconnect_request(sess);
ABTS_PTR_NOTNULL(tc, esmbuf);
@ -1512,7 +1512,7 @@ static void test4_func(abts_case *tc, void *data)
test_sess_remove(sess);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 9;
@ -1557,7 +1557,7 @@ static void test4_func(abts_case *tc, void *data)
ogs_msleep(100);
/* Send AA-Request */
sess = test_sess_find_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
test_rx_send_aar_audio(&rx_sid, sess,
OGS_DIAM_RX_SUBSCRIPTION_ID_TYPE_END_USER_IMSI, 1, 1);
@ -1640,15 +1640,15 @@ static void test4_func(abts_case *tc, void *data)
ABTS_INT_EQUAL(tc, OGS_OK, rv);
/* Test Session Remove */
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
test_sess_remove(sess);
sess = test_sess_find_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_find_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
test_sess_remove(sess);
/* Send Attach Request */
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
memset(&sess->pdn_connectivity_param,
@ -1815,7 +1815,7 @@ static void test5_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -1958,7 +1958,7 @@ static void test5_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 7;
@ -2321,7 +2321,7 @@ static void test6_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -2464,7 +2464,7 @@ static void test6_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -2746,7 +2746,7 @@ static void test7_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -2889,7 +2889,7 @@ static void test7_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;

View File

@ -64,7 +64,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -198,7 +198,7 @@ static void test1_func(abts_case *tc, void *data)
tests1ap_recv(test_ue, recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -314,7 +314,7 @@ static void test1_func(abts_case *tc, void *data)
test_sess_remove(sess);
/* Send INVALID PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims2", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims2", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 9;

View File

@ -68,7 +68,7 @@ static void test1_func(abts_case *tc, void *data)
test_ue->k_string = "465b5ce8b199b49faa5f0a2ee238a6bc";
test_ue->opc_string = "e8ed289deba952e4283b54e88e6183ca";
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "internet", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
/* eNB connects to MME */
@ -211,7 +211,7 @@ static void test1_func(abts_case *tc, void *data)
ogs_pkbuf_free(recvbuf);
/* Send PDN Connectivity Request */
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP_RAT_TYPE_EUTRAN);
sess = test_sess_add_by_apn(test_ue, "ims", OGS_GTP2_RAT_TYPE_EUTRAN);
ogs_assert(sess);
sess->pti = 5;
@ -346,7 +346,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 7);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -508,7 +508,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 9);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -670,7 +670,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 11);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -832,7 +832,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 13);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -994,7 +994,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 15);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);
@ -1156,7 +1156,7 @@ static void test1_func(abts_case *tc, void *data)
bearer = test_bearer_find_by_ue_ebi(test_ue, 8);
ogs_assert(bearer);
esmbuf = testesm_build_bearer_resource_modification_request(
bearer, OGS_GTP_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
bearer, OGS_GTP2_TFT_CODE_DELETE_PACKET_FILTERS_FROM_EXISTING, 0,
ESM_CAUSE_REGULAR_DEACTIVATION);
ABTS_PTR_NOTNULL(tc, esmbuf);
sendbuf = test_s1ap_build_uplink_nas_transport(test_ue, esmbuf);