mirror of
https://github.com/open5gs/open5gs.git
synced 2025-10-29 11:03:43 +00:00
Compare commits
21 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
179df88c32 | ||
|
|
bc180c3ffc | ||
|
|
ab81e38487 | ||
|
|
2d7438313d | ||
|
|
bb67705a66 | ||
|
|
f097364d52 | ||
|
|
0992fbe7f3 | ||
|
|
9bef56806e | ||
|
|
2ef9718209 | ||
|
|
d744893fba | ||
|
|
0291d97dd5 | ||
|
|
a5f764544f | ||
|
|
39766bc379 | ||
|
|
bf1c6c00fe | ||
|
|
c8ed909f46 | ||
|
|
49adabdc70 | ||
|
|
e5523342d4 | ||
|
|
08efe857a0 | ||
|
|
aec51b399a | ||
|
|
ce2590d6fc | ||
|
|
157d5fd739 |
6
debian/changelog
vendored
6
debian/changelog
vendored
@@ -1,8 +1,8 @@
|
||||
nextepc (0.4.0-5~ubuntu) bionic; urgency=medium
|
||||
nextepc (0.4.1) unstable; urgency=medium
|
||||
|
||||
* Integration with OGSLIB
|
||||
* Bug Fixed
|
||||
|
||||
-- Sukchan Lee <acetcom@gmail.com> Mon, 29 Apr 2019 14:30:15 +0000
|
||||
-- Sukchan Lee <acetcom@gmail.com> Sat, 18 May 2019 08:18:59 +0000
|
||||
|
||||
nextepc (0.4.0) unstable; urgency=medium
|
||||
|
||||
|
||||
@@ -5,14 +5,14 @@ FROM ${dist}:${tag}
|
||||
MAINTAINER Sukchan Lee <acetcom@gmail.com>
|
||||
|
||||
ARG tag=stable
|
||||
RUN apt-get update && \
|
||||
apt-get install -y netselect-apt && \
|
||||
apt-get clean && \
|
||||
if [ "x$tag" = "xlatest" ]; then \
|
||||
netselect-apt -o /etc/apt/sources.list; \
|
||||
else \
|
||||
netselect-apt ${tag} -o /etc/apt/sources.list; \
|
||||
fi
|
||||
#RUN apt-get update && \
|
||||
# apt-get install -y netselect-apt && \
|
||||
# apt-get clean && \
|
||||
# if [ "x$tag" = "xlatest" ]; then \
|
||||
# netselect-apt -o /etc/apt/sources.list; \
|
||||
# else \
|
||||
# netselect-apt ${tag} -o /etc/apt/sources.list; \
|
||||
# fi
|
||||
|
||||
RUN apt-get update && \
|
||||
apt-get upgrade -y && \
|
||||
|
||||
@@ -1 +1 @@
|
||||
27
|
||||
29
|
||||
@@ -31,7 +31,7 @@ $ sudo apt-key add Release.key
|
||||
In Debian 9.0(stretch), you can install it as follows:
|
||||
|
||||
```bash
|
||||
$ sudo sh -c "echo 'deb https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Debian_9.0/ ./' > /etc/apt/sources.list.d/open5gs.list"
|
||||
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Debian_9.0/ ./' > /etc/apt/sources.list.d/open5gs.list"
|
||||
$ sudo apt update
|
||||
$ sudo apt install nextepc
|
||||
```
|
||||
@@ -39,12 +39,12 @@ $ sudo apt install nextepc
|
||||
Other Linux distributions can be installed by changing the path.
|
||||
|
||||
```
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Debian_9.0/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Raspbian_9.0/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_16.04/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_17.10/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.04/
|
||||
https://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.10/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Debian_9.0/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/Raspbian_9.0/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_16.04/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_17.10/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.04/
|
||||
http://download.opensuse.org/repositories/home:/acetcom:/open5gs:/latest/xUbuntu_18.10/
|
||||
```
|
||||
|
||||
[Martin Hauke](https://build.opensuse.org/user/show/mnhauke) packaged NextEPC for *openSUSE* on [OBS](https://build.opensuse.org/package/show/home:mnhauke:nextepc/nextepc).
|
||||
@@ -119,6 +119,7 @@ $ sudo systemctl restart nextepc-sgwd
|
||||
1. *Debian and Ubuntu* based Linux distributions can install [Node.js](https://nodejs.org/) as follows:
|
||||
|
||||
```bash
|
||||
$ sudo apt update
|
||||
$ sudo apt install curl
|
||||
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
|
||||
$ sudo apt install nodejs
|
||||
@@ -133,7 +134,7 @@ $ sudo systemctl restart nextepc-sgwd
|
||||
You can now install WebUI of NextEPC.
|
||||
|
||||
```bash
|
||||
$ curl -sL {{ site.url }}/static/webui/install | sudo -E bash -
|
||||
$ curl -sL {{ site.url }}{{ site.baseurl }}/assets/webui/install | sudo -E bash -
|
||||
```
|
||||
|
||||
### Register Subscriber Information
|
||||
|
||||
@@ -8,4 +8,4 @@ tags:
|
||||
- Release
|
||||
---
|
||||
|
||||
- Assets -- [v0.1.0.tar.gz](https://github.com/acetcom/nextepc/archive/v0.1.0.tar.gz)
|
||||
- Assets -- [v0.1.0.tar.gz](https://github.com/open5gs/nextepc/archive/v0.1.0.tar.gz)
|
||||
|
||||
@@ -8,5 +8,5 @@ tags:
|
||||
- Release
|
||||
---
|
||||
|
||||
- Fix the bug related to Mongo C Driver. [[More Info](https://github.com/acetcom/nextepc/commit/4245502ae287df9c457621b3f4cccb519c4d4878)]
|
||||
- Assets -- [v0.1.1.tar.gz](https://github.com/acetcom/nextepc/archive/v0.1.1.tar.gz)
|
||||
- Fix the bug related to Mongo C Driver. [[More Info](https://github.com/open5gs/nextepc/commit/4245502ae287df9c457621b3f4cccb519c4d4878)]
|
||||
- Assets -- [v0.1.1.tar.gz](https://github.com/open5gs/nextepc/archive/v0.1.1.tar.gz)
|
||||
|
||||
@@ -11,4 +11,4 @@ tags:
|
||||
- Publish Debian/Ubuntu Package
|
||||
- Support FreeBSD and Mac OS X"
|
||||
|
||||
- Assets -- [v0.2.0.tar.gz](https://github.com/acetcom/nextepc/archive/v0.2.0.tar.gz)
|
||||
- Assets -- [v0.2.0.tar.gz](https://github.com/open5gs/nextepc/archive/v0.2.0.tar.gz)
|
||||
|
||||
@@ -11,4 +11,4 @@ tags:
|
||||
- IPv6 Support (Linux Only)
|
||||
- Change Configuration File (JSON -> YAML)
|
||||
|
||||
- Assets -- [v0.3.0.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.0.tar.gz)
|
||||
- Assets -- [v0.3.0.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.0.tar.gz)
|
||||
|
||||
@@ -8,5 +8,5 @@ tags:
|
||||
- Release
|
||||
---
|
||||
|
||||
- Add Authentication Synch Failure ([#11](https://github.com/acetcom/nextepc/issues/11)) -- [eric80s](https://github.com/eric80s)
|
||||
- Assets -- [v0.3.1.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.1.tar.gz)
|
||||
- Add Authentication Synch Failure ([#11](https://github.com/open5gs/nextepc/issues/11)) -- [eric80s](https://github.com/eric80s)
|
||||
- Assets -- [v0.3.1.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.1.tar.gz)
|
||||
|
||||
@@ -10,11 +10,11 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
---
|
||||
|
||||
#### New
|
||||
- Docker support ([#16](https://github.com/acetcom/nextepc/issues/16)) -- [amilenovic](https://github.com/amilenovic)
|
||||
- Docker support ([#16](https://github.com/open5gs/nextepc/issues/16)) -- [amilenovic](https://github.com/amilenovic)
|
||||
|
||||
#### Bug fixes
|
||||
- Fix the BUG for MAC failure of authentication failure -- [#17](https://github.com/acetcom/nextepc/issues/17) from [razaborg](https://github.com/razaborg)
|
||||
- Fix the BUG for EPS attach type of Attach accept -- [#12](https://github.com/acetcom/nextepc/issues/12) from [pcminitech](https://github.com/pcminitech)
|
||||
- Fix the BUG for MAC failure of authentication failure -- [#17](https://github.com/open5gs/nextepc/issues/17) from [razaborg](https://github.com/razaborg)
|
||||
- Fix the BUG for EPS attach type of Attach accept -- [#12](https://github.com/open5gs/nextepc/issues/12) from [pcminitech](https://github.com/pcminitech)
|
||||
|
||||
Download -- [v0.3.3.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.3.tar.gz)
|
||||
Download -- [v0.3.3.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.3.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -10,11 +10,11 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
---
|
||||
|
||||
#### New
|
||||
- Support Network Name ([#22](https://github.com/acetcom/nextepc/pull/22)) -- [medeiros405](https://github.com/medeiros405)
|
||||
- Support Network Name ([#22](https://github.com/open5gs/nextepc/pull/22)) -- [medeiros405](https://github.com/medeiros405)
|
||||
|
||||
#### Bug fixes
|
||||
- Fix the BUG for security capabilities mismatch ([#27](https://github.com/acetcom/nextepc/issues/27)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Fix the BUG that SGW process is dead during paging process ([#18](https://github.com/acetcom/nextepc/issues/18)) -- [jackson040407](https://github.com/jackson040407)
|
||||
- Fix the BUG for security capabilities mismatch ([#27](https://github.com/open5gs/nextepc/issues/27)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Fix the BUG that SGW process is dead during paging process ([#18](https://github.com/open5gs/nextepc/issues/18)) -- [jackson040407](https://github.com/jackson040407)
|
||||
|
||||
Download -- [v0.3.5.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.5.tar.gz)
|
||||
Download -- [v0.3.5.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.5.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -8,8 +8,8 @@ tags:
|
||||
- Release
|
||||
---
|
||||
|
||||
- Support eNB/MME Configuration Transfer, Error Indication ([#29](https://github.com/acetcom/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Increase SCTP recv buffer : 2048->8192 ([#35](https://github.com/acetcom/nextepc/issues/35)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
- Support eNB/MME Configuration Transfer, Error Indication ([#29](https://github.com/open5gs/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Increase SCTP recv buffer : 2048->8192 ([#35](https://github.com/open5gs/nextepc/issues/35)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
|
||||
Download -- [v0.3.6.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.6.tar.gz)
|
||||
Download -- [v0.3.6.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.6.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -8,5 +8,5 @@ tags:
|
||||
- Release
|
||||
---
|
||||
|
||||
Download -- [v0.3.7.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.7.tar.gz)
|
||||
Download -- [v0.3.7.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.7.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -13,11 +13,11 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
- Support NAS encryption(EEA1/EEA2/EEA3)
|
||||
|
||||
#### Bug fixes
|
||||
- Confirm with 36.412 requirement of SCTP stream id ([#54](https://github.com/acetcom/nextepc/issues/54)) -- [brchiu](https://github.com/brchiu)
|
||||
- Fix to set correct timezone in UE ([#61](https://github.com/acetcom/nextepc/pull/61)) -- [medeiros405](https://github.com/medeiros405)
|
||||
- Fix to change MME's integrity order ([#64](https://github.com/acetcom/nextepc/issues/64)) -- [kewinrausch](https://github.com/kewinrausch)
|
||||
- Fix the bug for tracking area update ([#29](https://github.com/acetcom/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Fix the bug for indirect tunnel ([#29](https://github.com/acetcom/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Confirm with 36.412 requirement of SCTP stream id ([#54](https://github.com/open5gs/nextepc/issues/54)) -- [brchiu](https://github.com/brchiu)
|
||||
- Fix to set correct timezone in UE ([#61](https://github.com/open5gs/nextepc/pull/61)) -- [medeiros405](https://github.com/medeiros405)
|
||||
- Fix to change MME's integrity order ([#64](https://github.com/open5gs/nextepc/issues/64)) -- [kewinrausch](https://github.com/kewinrausch)
|
||||
- Fix the bug for tracking area update ([#29](https://github.com/open5gs/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
- Fix the bug for indirect tunnel ([#29](https://github.com/open5gs/nextepc/issues/29)) -- [wayne43290](https://github.com/wayne43290)
|
||||
|
||||
Download -- [v0.3.9.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.9.tar.gz)
|
||||
Download -- [v0.3.9.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.9.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -10,12 +10,12 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
---
|
||||
|
||||
#### Bug fixes
|
||||
- Renew freeDiameter Certificate ([#93](https://github.com/acetcom/nextepc/issues/93), [#94](https://github.com/acetcom/nextepc/issues/94)) -- [Ravi-t](https://github.com/Ravi-t), [hchenji](https://github.com/hchenji)
|
||||
- Fix TLV uint32 bug ([#73](https://github.com/acetcom/nextepc/pull/73)) -- [giuliol](https://github.com/giuliol)
|
||||
- Add TRACE for IP address of connected UEs ([#71](https://github.com/acetcom/nextepc/issues/71)) -- [pgupta408](https://github.com/Ravi-t)
|
||||
- Show reason string for YAML parser error ([#40](https://github.com/acetcom/nextepc/issues/40)) -- [Raw1mage](https://github.com/Raw1mage)
|
||||
- Renew freeDiameter Certificate ([#93](https://github.com/open5gs/nextepc/issues/93), [#94](https://github.com/open5gs/nextepc/issues/94)) -- [Ravi-t](https://github.com/Ravi-t), [hchenji](https://github.com/hchenji)
|
||||
- Fix TLV uint32 bug ([#73](https://github.com/open5gs/nextepc/pull/73)) -- [giuliol](https://github.com/giuliol)
|
||||
- Add TRACE for IP address of connected UEs ([#71](https://github.com/open5gs/nextepc/issues/71)) -- [pgupta408](https://github.com/Ravi-t)
|
||||
- Show reason string for YAML parser error ([#40](https://github.com/open5gs/nextepc/issues/40)) -- [Raw1mage](https://github.com/Raw1mage)
|
||||
- Fix compile error for GCC 8.1
|
||||
- Fix compile error for Mongo-C-Driver 1.11
|
||||
|
||||
Download -- [v0.3.10.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.10.tar.gz)
|
||||
Download -- [v0.3.10.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.10.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
@@ -10,19 +10,19 @@ head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
---
|
||||
|
||||
#### Enhancements
|
||||
- Support 4-bytes RES in NAS Auth ([#147](https://github.com/acetcom/nextepc/issues/147)) -- [Ranjjiitsingh](https://github.com/Ranjjiitsingh)
|
||||
- Add SGW selection mode ([#100](https://github.com/acetcom/nextepc/pull/100)) -- [TerryAlu](https://github.com/TerryAlu)
|
||||
- Support 4-bytes RES in NAS Auth ([#147](https://github.com/open5gs/nextepc/issues/147)) -- [Ranjjiitsingh](https://github.com/Ranjjiitsingh)
|
||||
- Add SGW selection mode ([#100](https://github.com/open5gs/nextepc/pull/100)) -- [TerryAlu](https://github.com/TerryAlu)
|
||||
|
||||
#### Bug fixes
|
||||
- Increase packet memory buffer ([#161](https://github.com/acetcom/nextepc/issues/161)) -- [mathieuxilan](https://github.com/mathieuxilan)
|
||||
- Fix setting END-ID to 0 ([#156](https://github.com/acetcom/nextepc/issues/156)) -- [hypercloud2017](https://github.com/hypercloud2017)
|
||||
- Fix incorrect timezone in NAS & GTP ([#140](https://github.com/acetcom/nextepc/issues/140)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
- Increase packet memory buffer ([#161](https://github.com/open5gs/nextepc/issues/161)) -- [mathieuxilan](https://github.com/mathieuxilan)
|
||||
- Fix setting END-ID to 0 ([#156](https://github.com/open5gs/nextepc/issues/156)) -- [hypercloud2017](https://github.com/hypercloud2017)
|
||||
- Fix incorrect timezone in NAS & GTP ([#140](https://github.com/open5gs/nextepc/issues/140)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
|
||||
#### Miscellaneous
|
||||
- nas_message.py: Fix copy+paste error([#159](https://github.com/acetcom/nextepc/issues/159)) -- [laf0rge](https://github.com/laf0rge)
|
||||
- Fix missing 'break' statement ([#129](https://github.com/acetcom/nextepc/pull/129)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
- Add missing C namespace ([#109](https://github.com/acetcom/nextepc/pull/109)) -- [brchiu](https://github.com/brchiu)
|
||||
- nas_message.py: Fix copy+paste error([#159](https://github.com/open5gs/nextepc/issues/159)) -- [laf0rge](https://github.com/laf0rge)
|
||||
- Fix missing 'break' statement ([#129](https://github.com/open5gs/nextepc/pull/129)) -- [EugeneBogush](https://github.com/EugeneBogush)
|
||||
- Add missing C namespace ([#109](https://github.com/open5gs/nextepc/pull/109)) -- [brchiu](https://github.com/brchiu)
|
||||
- Refine EXIT routine for daemon process
|
||||
|
||||
Download -- [v0.3.11.tar.gz](https://github.com/acetcom/nextepc/archive/v0.3.11.tar.gz)
|
||||
Download -- [v0.3.11.tar.gz](https://github.com/open5gs/nextepc/archive/v0.3.11.tar.gz)
|
||||
{: .notice--info}
|
||||
|
||||
20
docs/_posts/2019-04-29-release-v0.4.0.md
Normal file
20
docs/_posts/2019-04-29-release-v0.4.0.md
Normal file
@@ -0,0 +1,20 @@
|
||||
---
|
||||
title: "v0.4.0 - Integration with OGSLib"
|
||||
date: 2019-04-29 23:44:00 +0900
|
||||
categories:
|
||||
- Release
|
||||
tags:
|
||||
- News
|
||||
- Release
|
||||
head_inline: "<style> ul { padding-bottom: 1em; } </style>"
|
||||
---
|
||||
|
||||
#### Enhancements
|
||||
- Integration with OGSLib
|
||||
- High CPU usage on idle ([#87](https://github.com/open5gs/nextepc/issues/87)) -- [hchenji](https://github.com/hchenji)
|
||||
|
||||
#### Bug fixes
|
||||
- The problem related to MNC of LENGTH 3 ([#163](https://github.com/open5gs/nextepc/issues/163)) -- [Avi-Dekra](https://github.com/Avi-Dekra)
|
||||
|
||||
Download -- [v0.4.0.tar.gz](https://github.com/open5gs/nextepc/archive/v0.4.0.tar.gz)
|
||||
{: .notice--info}
|
||||
Submodule lib/ogslib updated: e34d0156ea...dd37f7714d
6
main.c
6
main.c
@@ -9,11 +9,7 @@
|
||||
#include "app/application.h"
|
||||
#include "app_init.h"
|
||||
|
||||
#pragma GCC diagnostic push
|
||||
#pragma GCC diagnostic ignored "-Wdate-time"
|
||||
static char *version = "NextEPC daemon v" \
|
||||
PACKAGE_VERSION " - "__DATE__ " " __TIME__;
|
||||
#pragma GCC diagnostic pop
|
||||
static char *version = "NextEPC daemon v" PACKAGE_VERSION;
|
||||
|
||||
static void show_version()
|
||||
{
|
||||
|
||||
@@ -114,16 +114,11 @@ int app_did_initialize(void)
|
||||
|
||||
void app_will_terminate(void)
|
||||
{
|
||||
if (context_self()->config.db_uri)
|
||||
{
|
||||
ogs_info("DB-Client try to terminate");
|
||||
context_db_final();
|
||||
ogs_info("DB-Client terminate...done");
|
||||
}
|
||||
}
|
||||
|
||||
void app_did_terminate(void)
|
||||
{
|
||||
context_db_final();
|
||||
context_final();
|
||||
}
|
||||
|
||||
|
||||
@@ -298,7 +298,10 @@ int context_db_init(const char *db_uri)
|
||||
|
||||
const mongoc_uri_t *uri;
|
||||
|
||||
memset(&self.db, 0, sizeof self.db);
|
||||
|
||||
mongoc_init();
|
||||
self.db.initialized = true;
|
||||
|
||||
self.db.client = mongoc_client_new(db_uri);
|
||||
if (!self.db.client)
|
||||
@@ -335,18 +338,19 @@ int context_db_init(const char *db_uri)
|
||||
|
||||
int context_db_final()
|
||||
{
|
||||
if (self.db.database)
|
||||
{
|
||||
if (self.db.database) {
|
||||
mongoc_database_destroy(self.db.database);
|
||||
self.db.database = NULL;
|
||||
}
|
||||
if (self.db.client)
|
||||
{
|
||||
if (self.db.client) {
|
||||
mongoc_client_destroy(self.db.client);
|
||||
self.db.client = NULL;
|
||||
}
|
||||
|
||||
mongoc_cleanup();
|
||||
if (self.db.initialized) {
|
||||
mongoc_cleanup();
|
||||
self.db.initialized = false;
|
||||
}
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
@@ -46,6 +46,7 @@ typedef struct _context_t {
|
||||
config_t config;
|
||||
|
||||
struct {
|
||||
bool initialized;
|
||||
const char *name;
|
||||
void *uri;
|
||||
void *client;
|
||||
|
||||
@@ -8,7 +8,7 @@ extern "C" {
|
||||
int app_initialize(app_param_t *param);
|
||||
#define app_terminate epc_terminate
|
||||
|
||||
int epc_initialize();
|
||||
int epc_initialize(app_param_t *param);
|
||||
void epc_terminate(void);
|
||||
|
||||
int mme_initialize();
|
||||
|
||||
12
src/epc.c
12
src/epc.c
@@ -61,8 +61,7 @@ int epc_initialize(app_param_t *param)
|
||||
if (pcrf_sem1) ogs_proc_mutex_delete(pcrf_sem1);
|
||||
if (pcrf_sem2) ogs_proc_mutex_delete(pcrf_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
@@ -108,8 +107,7 @@ int epc_initialize(app_param_t *param)
|
||||
if (pgw_sem1) ogs_proc_mutex_delete(pgw_sem1);
|
||||
if (pgw_sem2) ogs_proc_mutex_delete(pgw_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
@@ -157,8 +155,7 @@ int epc_initialize(app_param_t *param)
|
||||
if (sgw_sem1) ogs_proc_mutex_delete(sgw_sem1);
|
||||
if (sgw_sem2) ogs_proc_mutex_delete(sgw_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
@@ -207,8 +204,7 @@ int epc_initialize(app_param_t *param)
|
||||
if (hss_sem1) ogs_proc_mutex_delete(hss_sem1);
|
||||
if (hss_sem2) ogs_proc_mutex_delete(hss_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
|
||||
@@ -18,7 +18,7 @@ hss_context_t* hss_self()
|
||||
return &self;
|
||||
}
|
||||
|
||||
int hss_context_init(void)
|
||||
void hss_context_init(void)
|
||||
{
|
||||
ogs_assert(context_initialized == 0);
|
||||
|
||||
@@ -34,19 +34,15 @@ int hss_context_init(void)
|
||||
ogs_thread_mutex_init(&self.db_lock);
|
||||
|
||||
context_initialized = 1;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int hss_context_final(void)
|
||||
void hss_context_final(void)
|
||||
{
|
||||
ogs_assert(context_initialized == 1);
|
||||
|
||||
ogs_thread_mutex_destroy(&self.db_lock);
|
||||
|
||||
context_initialized = 0;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
static int hss_context_prepare()
|
||||
|
||||
@@ -36,8 +36,8 @@ typedef struct _hss_context_t {
|
||||
ogs_thread_mutex_t db_lock;
|
||||
} hss_context_t;
|
||||
|
||||
int hss_context_init(void);
|
||||
int hss_context_final(void);
|
||||
void hss_context_init(void);
|
||||
void hss_context_final(void);
|
||||
hss_context_t* hss_self(void);
|
||||
|
||||
int hss_context_parse_config(void);
|
||||
|
||||
@@ -9,8 +9,7 @@ int hss_initialize(void)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = hss_context_init();
|
||||
if (rv != OGS_OK) return rv;
|
||||
hss_context_init();
|
||||
|
||||
rv = hss_context_parse_config();
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
@@ -35,7 +35,7 @@ static OGS_POOL(mme_bearer_pool, mme_bearer_t);
|
||||
|
||||
static int context_initialized = 0;
|
||||
|
||||
int mme_context_init()
|
||||
void mme_context_init()
|
||||
{
|
||||
ogs_assert(context_initialized == 0);
|
||||
|
||||
@@ -82,11 +82,9 @@ int mme_context_init()
|
||||
self.t3413_value = ogs_time_from_sec(2); /* Paging retry timer: 2 secs */
|
||||
|
||||
context_initialized = 1;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int mme_context_final()
|
||||
void mme_context_final()
|
||||
{
|
||||
ogs_assert(context_initialized == 1);
|
||||
|
||||
@@ -129,8 +127,6 @@ int mme_context_final()
|
||||
ogs_sock_remove_all_nodes(&self.gtpc_list6);
|
||||
|
||||
context_initialized = 0;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
mme_context_t* mme_self()
|
||||
@@ -1653,7 +1649,8 @@ mme_enb_t *mme_enb_add(ogs_sock_t *sock, ogs_sockaddr_t *addr)
|
||||
|
||||
ogs_list_init(&enb->enb_ue_list);
|
||||
|
||||
ogs_hash_set(self.enb_sock_hash, enb->sock, sizeof(ogs_sock_t), enb);
|
||||
if (enb->sock_type == SOCK_STREAM)
|
||||
ogs_hash_set(self.enb_sock_hash, enb->sock, sizeof(ogs_sock_t), enb);
|
||||
ogs_hash_set(self.enb_addr_hash, enb->addr, sizeof(ogs_sockaddr_t), enb);
|
||||
|
||||
#if HAVE_USRSCTP != 1
|
||||
@@ -1680,7 +1677,8 @@ int mme_enb_remove(mme_enb_t *enb)
|
||||
ogs_fsm_fini(&enb->sm, &e);
|
||||
ogs_fsm_delete(&enb->sm);
|
||||
|
||||
ogs_hash_set(self.enb_sock_hash, enb->sock, sizeof(ogs_sock_t), NULL);
|
||||
if (enb->sock_type == SOCK_STREAM)
|
||||
ogs_hash_set(self.enb_sock_hash, enb->sock, sizeof(ogs_sock_t), NULL);
|
||||
ogs_hash_set(self.enb_addr_hash, enb->addr, sizeof(ogs_sockaddr_t), NULL);
|
||||
ogs_hash_set(self.enb_id_hash, &enb->enb_id, sizeof(enb->enb_id), NULL);
|
||||
|
||||
|
||||
@@ -499,8 +499,8 @@ typedef struct _mme_bearer_t {
|
||||
gtp_xact_t *xact;
|
||||
} mme_bearer_t;
|
||||
|
||||
int mme_context_init(void);
|
||||
int mme_context_final(void);
|
||||
void mme_context_init(void);
|
||||
void mme_context_final(void);
|
||||
mme_context_t *mme_self(void);
|
||||
|
||||
int mme_context_parse_config(void);
|
||||
|
||||
@@ -68,9 +68,6 @@ void mme_event_free(mme_event_t *e);
|
||||
|
||||
void mme_event_timeout(void *data);
|
||||
|
||||
#define mme_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(mme_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *mme_event_get_name(mme_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -383,12 +383,19 @@ static void mme_s6a_aia_cb(void *data, struct msg **msg)
|
||||
out:
|
||||
if (!error)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_S6A_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = s6abuf;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the message */
|
||||
@@ -1029,12 +1036,19 @@ static void mme_s6a_ula_cb(void *data, struct msg **msg)
|
||||
|
||||
if (!error)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_S6A_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = s6abuf;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
|
||||
/* Free the message */
|
||||
|
||||
@@ -25,7 +25,12 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
e = mme_event_new(MME_EVT_S11_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->pkbuf = pkbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static ogs_sockaddr_t *pgw_addr_find_by_family(ogs_list_t *list, int family)
|
||||
|
||||
@@ -18,7 +18,10 @@ int mme_initialize()
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = mme_context_init();
|
||||
mme_context_init();
|
||||
mme_event_init();
|
||||
|
||||
rv = gtp_xact_init(mme_self()->timer_mgr);
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
rv = mme_context_parse_config();
|
||||
@@ -71,9 +74,6 @@ static void mme_main(void *data)
|
||||
ogs_fsm_t mme_sm;
|
||||
int rv;
|
||||
|
||||
mme_event_init();
|
||||
gtp_xact_init(mme_self()->timer_mgr);
|
||||
|
||||
ogs_fsm_create(&mme_sm, mme_state_initial, mme_state_final);
|
||||
ogs_fsm_init(&mme_sm, 0);
|
||||
|
||||
|
||||
@@ -98,6 +98,7 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
||||
new = ogs_sock_accept(sock);
|
||||
if (new)
|
||||
{
|
||||
int rv;
|
||||
ogs_sockaddr_t *addr = NULL;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
@@ -112,7 +113,12 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
||||
ogs_assert(e);
|
||||
e->enb_sock = new;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
@@ -122,6 +128,7 @@ static void accept_handler(short when, ogs_socket_t fd, void *data)
|
||||
|
||||
void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
{
|
||||
int rv;
|
||||
ogs_pkbuf_t *pkbuf;
|
||||
int size;
|
||||
mme_event_t *e = NULL;
|
||||
@@ -190,7 +197,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
not->sn_assoc_change.sac_inbound_streams;
|
||||
e->outbound_streams =
|
||||
not->sn_assoc_change.sac_outbound_streams;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else if (not->sn_assoc_change.sac_state == SCTP_SHUTDOWN_COMP ||
|
||||
not->sn_assoc_change.sac_state == SCTP_COMM_LOST)
|
||||
@@ -209,7 +221,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -228,7 +245,12 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
ogs_assert(e);
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCTP_PEER_ADDR_CHANGE:
|
||||
@@ -276,7 +298,13 @@ void s1ap_recv_handler(short when, ogs_socket_t fd, void *data)
|
||||
e->enb_sock = sock;
|
||||
e->enb_addr = addr;
|
||||
e->pkbuf = pkbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -127,6 +127,7 @@ int s1ap_delayed_send_to_enb_ue(
|
||||
|
||||
int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf)
|
||||
{
|
||||
int rv;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
ogs_assert(mme_ue);
|
||||
@@ -136,7 +137,12 @@ int s1ap_send_to_esm(mme_ue_t *mme_ue, ogs_pkbuf_t *esmbuf)
|
||||
ogs_assert(e);
|
||||
e->mme_ue = mme_ue;
|
||||
e->pkbuf = esmbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
@@ -207,13 +213,19 @@ int s1ap_send_to_nas(enb_ue_t *enb_ue,
|
||||
ogs_assert(h);
|
||||
if (h->protocol_discriminator == NAS_PROTOCOL_DISCRIMINATOR_EMM)
|
||||
{
|
||||
int rv;
|
||||
e = mme_event_new(MME_EVT_EMM_MESSAGE);
|
||||
ogs_assert(e);
|
||||
e->enb_ue = enb_ue;
|
||||
e->s1ap_code = procedureCode;
|
||||
e->nas_type = security_header_type.type;
|
||||
e->pkbuf = nasbuf;
|
||||
mme_event_send(e);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
}
|
||||
}
|
||||
else if (h->protocol_discriminator == NAS_PROTOCOL_DISCRIMINATOR_ESM)
|
||||
{
|
||||
|
||||
@@ -384,6 +384,7 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
||||
{
|
||||
if (data)
|
||||
{
|
||||
int rv;
|
||||
mme_event_t *e = NULL;
|
||||
|
||||
#undef MSG_NOTIFICATION
|
||||
@@ -425,8 +426,14 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
else if (not->sn_assoc_change.sac_state == SCTP_COMM_UP)
|
||||
{
|
||||
@@ -444,8 +451,14 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
||||
not->sn_assoc_change.sac_inbound_streams;
|
||||
e->outbound_streams =
|
||||
not->sn_assoc_change.sac_outbound_streams;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -464,8 +477,14 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
||||
ogs_assert(e);
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
break;
|
||||
}
|
||||
case SCTP_PEER_ADDR_CHANGE:
|
||||
@@ -517,8 +536,15 @@ static int s1ap_usrsctp_recv_handler(struct socket *sock,
|
||||
e->enb_sock = (ogs_sock_t *)sock;
|
||||
e->enb_addr = addr;
|
||||
e->pkbuf = pkbuf;
|
||||
mme_event_send(e);
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
rv = ogs_queue_push(mme_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_warn("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_free(e->enb_addr);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
mme_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(mme_self()->pollset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
@@ -18,7 +18,7 @@ pcrf_context_t* pcrf_self()
|
||||
return &self;
|
||||
}
|
||||
|
||||
int pcrf_context_init(void)
|
||||
void pcrf_context_init(void)
|
||||
{
|
||||
ogs_assert(context_initialized == 0);
|
||||
|
||||
@@ -37,11 +37,9 @@ int pcrf_context_init(void)
|
||||
self.ip_hash = ogs_hash_make();
|
||||
|
||||
context_initialized = 1;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int pcrf_context_final(void)
|
||||
void pcrf_context_final(void)
|
||||
{
|
||||
ogs_assert(context_initialized == 1);
|
||||
ogs_assert(self.ip_hash);
|
||||
@@ -51,8 +49,6 @@ int pcrf_context_final(void)
|
||||
ogs_thread_mutex_destroy(&self.db_lock);
|
||||
|
||||
context_initialized = 0;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
static int pcrf_context_prepare()
|
||||
|
||||
@@ -26,8 +26,8 @@ typedef struct _pcrf_context_t {
|
||||
ogs_thread_mutex_t hash_lock;
|
||||
} pcrf_context_t;
|
||||
|
||||
int pcrf_context_init(void);
|
||||
int pcrf_context_final(void);
|
||||
void pcrf_context_init(void);
|
||||
void pcrf_context_final(void);
|
||||
pcrf_context_t *pcrf_self(void);
|
||||
|
||||
int pcrf_context_parse_config(void);
|
||||
|
||||
@@ -8,8 +8,7 @@ int pcrf_initialize(void)
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = pcrf_context_init();
|
||||
if (rv != OGS_OK) return rv;
|
||||
pcrf_context_init();
|
||||
|
||||
rv = pcrf_context_parse_config();
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
@@ -27,7 +27,7 @@ static OGS_POOL(pgw_pf_pool, pgw_pf_t);
|
||||
|
||||
static int context_initiaized = 0;
|
||||
|
||||
int pgw_context_init()
|
||||
void pgw_context_init()
|
||||
{
|
||||
ogs_assert(context_initiaized == 0);
|
||||
|
||||
@@ -62,11 +62,9 @@ int pgw_context_init()
|
||||
self.sess_hash = ogs_hash_make();
|
||||
|
||||
context_initiaized = 1;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int pgw_context_final()
|
||||
void pgw_context_final()
|
||||
{
|
||||
ogs_assert(context_initiaized == 1);
|
||||
|
||||
@@ -95,8 +93,6 @@ int pgw_context_final()
|
||||
ogs_sock_remove_all_nodes(&self.gtpu_list6);
|
||||
|
||||
context_initiaized = 0;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
pgw_context_t* pgw_self()
|
||||
@@ -915,7 +911,9 @@ pgw_sess_t *pgw_sess_add(
|
||||
else
|
||||
ogs_assert_if_reached();
|
||||
|
||||
ogs_info("UE IPv4:[%s] IPv6:[%s]",
|
||||
ogs_info("UE IMSI:[%s] APN:[%s] IPv4:[%s] IPv6:[%s]",
|
||||
sess->imsi_bcd,
|
||||
apn,
|
||||
sess->ipv4 ? INET_NTOP(&sess->ipv4->addr, buf1) : "",
|
||||
sess->ipv6 ? INET6_NTOP(&sess->ipv6->addr, buf2) : "");
|
||||
|
||||
|
||||
@@ -193,8 +193,8 @@ ED3(uint8_t spare:2;,
|
||||
pgw_bearer_t *bearer;
|
||||
} pgw_pf_t;
|
||||
|
||||
int pgw_context_init(void);
|
||||
int pgw_context_final(void);
|
||||
void pgw_context_init(void);
|
||||
void pgw_context_final(void);
|
||||
pgw_context_t *pgw_self(void);
|
||||
|
||||
int pgw_context_parse_config(void);
|
||||
|
||||
@@ -32,9 +32,6 @@ void pgw_event_final(void);
|
||||
pgw_event_t *pgw_event_new(pgw_event_e id);
|
||||
void pgw_event_free(pgw_event_t *e);
|
||||
|
||||
#define pgw_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(pgw_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *pgw_event_get_name(pgw_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -712,14 +712,21 @@ out:
|
||||
e->gxbuf = gxbuf;
|
||||
e->xact_index = xact->index;
|
||||
e->gtpbuf = gtpbuf;
|
||||
pgw_event_send(e);
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(e->gxbuf);
|
||||
ogs_pkbuf_free(e->gtpbuf);
|
||||
pgw_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(gxbuf);
|
||||
|
||||
ogs_pkbuf_free(gtpbuf);
|
||||
}
|
||||
|
||||
@@ -942,8 +949,15 @@ static int pgw_gx_rar_cb( struct msg **msg, struct avp *avp,
|
||||
|
||||
e->sess_index = sess->index;
|
||||
e->gxbuf = gxbuf;
|
||||
pgw_event_send(e);
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
gx_message_free(gx_message);
|
||||
ogs_pkbuf_free(e->gxbuf);
|
||||
pgw_event_free(e);
|
||||
} else {
|
||||
ogs_pollset_notify(pgw_self()->pollset);
|
||||
}
|
||||
|
||||
/* Set the Auth-Application-Id AVP */
|
||||
ret = fd_msg_avp_new(fd_auth_application_id, 0, &avp);
|
||||
|
||||
@@ -94,7 +94,12 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
ogs_assert(e);
|
||||
e->gtpbuf = pkbuf;
|
||||
|
||||
pgw_event_send(e);
|
||||
rv = ogs_queue_push(pgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->gtpbuf);
|
||||
pgw_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
|
||||
@@ -16,7 +16,10 @@ int pgw_initialize()
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = pgw_context_init();
|
||||
pgw_context_init();
|
||||
pgw_event_init();
|
||||
|
||||
rv = gtp_xact_init(pgw_self()->timer_mgr);
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
rv = pgw_context_parse_config();
|
||||
@@ -61,9 +64,6 @@ static void pgw_main(void *data)
|
||||
ogs_fsm_t pgw_sm;
|
||||
int rv;
|
||||
|
||||
pgw_event_init();
|
||||
gtp_xact_init(pgw_self()->timer_mgr);
|
||||
|
||||
ogs_fsm_create(&pgw_sm, pgw_state_initial, pgw_state_final);
|
||||
ogs_fsm_init(&pgw_sm, 0);
|
||||
|
||||
|
||||
@@ -1,3 +1,6 @@
|
||||
#define _DEFAULT_SOURCE 1
|
||||
#define _BSD_SOURCE 1
|
||||
|
||||
#include "base/base.h"
|
||||
|
||||
#if HAVE_NETINET_IP_H
|
||||
|
||||
@@ -21,7 +21,7 @@ static OGS_POOL(sgw_tunnel_pool, sgw_tunnel_t);
|
||||
|
||||
static int context_initialized = 0;
|
||||
|
||||
int sgw_context_init()
|
||||
void sgw_context_init()
|
||||
{
|
||||
ogs_assert(context_initialized == 0);
|
||||
|
||||
@@ -48,11 +48,9 @@ int sgw_context_init()
|
||||
self.imsi_ue_hash = ogs_hash_make();
|
||||
|
||||
context_initialized = 1;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
int sgw_context_final()
|
||||
void sgw_context_final()
|
||||
{
|
||||
ogs_assert(context_initialized == 1);
|
||||
|
||||
@@ -78,8 +76,6 @@ int sgw_context_final()
|
||||
ogs_sock_remove_all_nodes(&self.gtpu_list6);
|
||||
|
||||
context_initialized = 0;
|
||||
|
||||
return OGS_OK;
|
||||
}
|
||||
|
||||
sgw_context_t* sgw_self()
|
||||
|
||||
@@ -129,8 +129,8 @@ typedef struct _sgw_tunnel_t {
|
||||
gtp_node_t *gnode;
|
||||
} sgw_tunnel_t;
|
||||
|
||||
int sgw_context_init(void);
|
||||
int sgw_context_final(void);
|
||||
void sgw_context_init(void);
|
||||
void sgw_context_final(void);
|
||||
sgw_context_t* sgw_self(void);
|
||||
|
||||
int sgw_context_parse_config(void);
|
||||
|
||||
@@ -32,9 +32,6 @@ void sgw_event_final(void);
|
||||
sgw_event_t *sgw_event_new(sgw_event_e id);
|
||||
void sgw_event_free(sgw_event_t *e);
|
||||
|
||||
#define sgw_event_send(__ptr_e) \
|
||||
ogs_assert(ogs_queue_push(sgw_self()->queue, ((__ptr_e))) == OGS_OK)
|
||||
|
||||
const char *sgw_event_get_name(sgw_event_t *e);
|
||||
|
||||
#ifdef __cplusplus
|
||||
|
||||
@@ -29,17 +29,18 @@ static void _gtpv2_c_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
teid = ntohl(gtp_h->teid);
|
||||
|
||||
if (SGW_S5C_TEID(teid))
|
||||
{
|
||||
e = sgw_event_new(SGW_EVT_S5C_MESSAGE);
|
||||
}
|
||||
else
|
||||
{
|
||||
e = sgw_event_new(SGW_EVT_S11_MESSAGE);
|
||||
}
|
||||
ogs_assert(e);
|
||||
e->pkbuf = pkbuf;
|
||||
|
||||
sgw_event_send(e);
|
||||
rv = ogs_queue_push(sgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
ogs_pkbuf_free(e->pkbuf);
|
||||
sgw_event_free(e);
|
||||
}
|
||||
}
|
||||
|
||||
static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
@@ -206,7 +207,11 @@ static void _gtpv1_u_recv_cb(short when, ogs_socket_t fd, void *data)
|
||||
e = sgw_event_new(SGW_EVT_LO_DLDATA_NOTI);
|
||||
ogs_assert(e);
|
||||
e->bearer = bearer;
|
||||
sgw_event_send(e);
|
||||
rv = ogs_queue_push(sgw_self()->queue, e);
|
||||
if (rv != OGS_OK) {
|
||||
ogs_error("ogs_queue_push() failed:%d", (int)rv);
|
||||
sgw_event_free(e);
|
||||
}
|
||||
|
||||
SGW_SET_UE_STATE(sgw_ue, SGW_DL_NOTI_SENT);
|
||||
}
|
||||
|
||||
@@ -14,7 +14,10 @@ int sgw_initialize()
|
||||
{
|
||||
int rv;
|
||||
|
||||
rv = sgw_context_init();
|
||||
sgw_context_init();
|
||||
sgw_event_init();
|
||||
|
||||
rv = gtp_xact_init(sgw_self()->timer_mgr);
|
||||
if (rv != OGS_OK) return rv;
|
||||
|
||||
rv = sgw_context_parse_config();
|
||||
@@ -51,9 +54,6 @@ static void sgw_main(void *data)
|
||||
ogs_fsm_t sgw_sm;
|
||||
int rv;
|
||||
|
||||
sgw_event_init();
|
||||
gtp_xact_init(sgw_self()->timer_mgr);
|
||||
|
||||
ogs_fsm_create(&sgw_sm, sgw_state_initial, sgw_state_final);
|
||||
ogs_fsm_init(&sgw_sm, 0);
|
||||
|
||||
|
||||
@@ -369,8 +369,6 @@ static void attach_test1(abts_case *tc, void *data)
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
/* Send Detach Request */
|
||||
rv = tests1ap_build_detach_request(&sendbuf, msgindex);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
@@ -444,6 +442,7 @@ static void attach_test1(abts_case *tc, void *data)
|
||||
rv = testenb_gtpu_close(gtpu);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
ogs_msleep(300);
|
||||
return;
|
||||
|
||||
#if IT_WILL_BE_REMOVED
|
||||
@@ -706,8 +705,6 @@ static void attach_test2(abts_case *tc, void *data)
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
/*****************************************************************
|
||||
* Attach Request : IMSI, Integrity Protected, MAC Matched
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
@@ -751,8 +748,6 @@ static void attach_test2(abts_case *tc, void *data)
|
||||
/*****************************************************************
|
||||
* Attach Request : Unknown IMSI, Integrity Protected
|
||||
* Send Initial-UE Message + Attach Request + PDN Connectivity */
|
||||
ogs_msleep(300);
|
||||
|
||||
rv = tests1ap_build_initial_ue_msg(&sendbuf, msgindex+2);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
rv = testenb_s1ap_send(sock, sendbuf);
|
||||
@@ -815,6 +810,8 @@ static void attach_test2(abts_case *tc, void *data)
|
||||
/* eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
ogs_msleep(300);
|
||||
}
|
||||
|
||||
/**************************************************************
|
||||
@@ -1350,6 +1347,8 @@ static void attach_test4(abts_case *tc, void *data)
|
||||
/* eNB disonncect from SGW */
|
||||
rv = testenb_gtpu_close(gtpu);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
ogs_msleep(300);
|
||||
}
|
||||
|
||||
static void attach_test5(abts_case *tc, void *data)
|
||||
@@ -1687,6 +1686,8 @@ static void attach_test5(abts_case *tc, void *data)
|
||||
/* eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
ogs_msleep(300);
|
||||
}
|
||||
|
||||
abts_suite *test_attach(abts_suite *suite)
|
||||
|
||||
@@ -313,18 +313,18 @@ static void handover_test1(abts_case *tc, void *data)
|
||||
|
||||
mongoc_collection_destroy(collection);
|
||||
|
||||
/* Two eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock1);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
rv = testenb_s1ap_close(sock2);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* eNB disonncect from SGW */
|
||||
rv = testenb_gtpu_close(gtpu2);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
rv = testenb_gtpu_close(gtpu1);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
rv = testenb_gtpu_close(gtpu2);
|
||||
/* Two eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock2);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
rv = testenb_s1ap_close(sock1);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
@@ -229,8 +229,6 @@ static void test1_func(abts_case *tc, void *data)
|
||||
ABTS_TRUE(tc, memcmp(recvbuf->data+32, tmp+32, 20) == 0);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
/* Send GTP-U ICMP Packet */
|
||||
rv = testgtpu_build_ping(&sendbuf, "45.45.0.2", "45.45.0.1");
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
@@ -242,16 +240,6 @@ static void test1_func(abts_case *tc, void *data)
|
||||
ABTS_PTR_NOTNULL(tc, recvbuf);
|
||||
ogs_pkbuf_free(recvbuf);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
/* eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/* eNB disonncect from SGW */
|
||||
rv = testenb_gtpu_close(gtpu);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
/********** Remove Subscriber in Database */
|
||||
doc = BCON_NEW("imsi", BCON_UTF8("310014987654004"));
|
||||
ABTS_PTR_NOTNULL(tc, doc);
|
||||
@@ -261,8 +249,6 @@ static void test1_func(abts_case *tc, void *data)
|
||||
|
||||
mongoc_collection_destroy(collection);
|
||||
|
||||
ogs_msleep(300);
|
||||
|
||||
/* eNB disonncect from MME */
|
||||
rv = testenb_s1ap_close(sock);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
@@ -271,7 +257,7 @@ static void test1_func(abts_case *tc, void *data)
|
||||
rv = testenb_gtpu_close(gtpu);
|
||||
ABTS_INT_EQUAL(tc, OGS_OK, rv);
|
||||
|
||||
return;
|
||||
ogs_msleep(300);
|
||||
}
|
||||
|
||||
abts_suite *test_mnc3(abts_suite *suite)
|
||||
|
||||
@@ -74,12 +74,8 @@ int test_initialize(app_param_t *param, int argc, const char *const argv[])
|
||||
ogs_error("app_will_initialize() failed");
|
||||
return OGS_ERROR;
|
||||
}
|
||||
rv = mme_context_init();
|
||||
if (rv != OGS_OK)
|
||||
{
|
||||
ogs_error("mme_context_init() failed");
|
||||
return OGS_ERROR;
|
||||
}
|
||||
|
||||
mme_context_init();
|
||||
app_did_initialize();
|
||||
|
||||
return rv;
|
||||
|
||||
@@ -111,6 +111,7 @@ int main(int argc, const char **argv)
|
||||
|
||||
abts_init(argc, argv);
|
||||
|
||||
memset(¶m, 0, sizeof(param));
|
||||
for (i = 1; i < argc; i++) {
|
||||
/* abts_init(argc, argv) handles the following options */
|
||||
if (!strcmp(argv[i], "-v")) continue;
|
||||
@@ -154,7 +155,6 @@ int main(int argc, const char **argv)
|
||||
ogs_core()->log.level = OGS_LOG_ERROR;
|
||||
test_initialize(¶m, argc, argv);
|
||||
|
||||
|
||||
for (i = 0; alltests[i].func; i++)
|
||||
{
|
||||
suite = alltests[i].func(suite);
|
||||
|
||||
@@ -59,7 +59,8 @@ int test_app_initialize(app_param_t *param)
|
||||
if (pcrf_sem1) ogs_proc_mutex_delete(pcrf_sem1);
|
||||
if (pcrf_sem2) ogs_proc_mutex_delete(pcrf_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
@@ -104,7 +105,8 @@ int test_app_initialize(app_param_t *param)
|
||||
if (pgw_sem1) ogs_proc_mutex_delete(pgw_sem1);
|
||||
if (pgw_sem2) ogs_proc_mutex_delete(pgw_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
@@ -151,7 +153,8 @@ int test_app_initialize(app_param_t *param)
|
||||
if (sgw_sem1) ogs_proc_mutex_delete(sgw_sem1);
|
||||
if (sgw_sem2) ogs_proc_mutex_delete(sgw_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
@@ -199,7 +202,8 @@ int test_app_initialize(app_param_t *param)
|
||||
if (hss_sem1) ogs_proc_mutex_delete(hss_sem1);
|
||||
if (hss_sem2) ogs_proc_mutex_delete(hss_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
@@ -248,7 +252,8 @@ int test_app_initialize(app_param_t *param)
|
||||
if (mme_sem1) ogs_proc_mutex_delete(mme_sem1);
|
||||
if (mme_sem2) ogs_proc_mutex_delete(mme_sem2);
|
||||
|
||||
app_did_terminate();
|
||||
context_final();
|
||||
ogs_core_finalize();
|
||||
|
||||
_exit(EXIT_SUCCESS);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user