Skip to content

Commit

Permalink
update NEWS, README and rebar for 2.0.0 release
Browse files Browse the repository at this point in the history
  • Loading branch information
RoadRunnr committed Aug 2, 2018
1 parent b1133d6 commit 483f548
Show file tree
Hide file tree
Showing 4 changed files with 218 additions and 86 deletions.
12 changes: 12 additions & 0 deletions NEWS.md
@@ -1,6 +1,18 @@
erGW - 3GPP GGSN and PDN-GW in Erlang
=====================================

Version 2.0.0 - 02 Aug 2018
----------------------------

* Rewrite user plane interface to use control and user plane separation
of EPC nodes (CUPS) architecture, compatible [UPF implementation](https://github.com/travelping/vpp/tree/feature/upf)
* Drop tetrapak build support
* Support Erlang OTP 20.1 through 21.0
* Implement NAPTR based node selection
* IPv6 control and user plane support
* Beta quality features:
* S11 / SAE-GW

Version 1.16.0 - 03 Oct 2017
----------------------------

Expand Down
264 changes: 194 additions & 70 deletions README.md
Expand Up @@ -4,7 +4,7 @@ erGW - 3GPP GGSN and PDN-GW in Erlang
[![Coverage Status][coveralls badge]][coveralls]
[![Erlang Versions][erlang version badge]][travis]

This is a 3GPP GGSN and PDN-GW implemented in Erlang. It strives to eventually support all the functionality as defined by [3GPP TS 23.002](https://portal.3gpp.org/desktopmodules/Specifications/SpecificationDetails.aspx?specificationId=728) Section 4.1.3.1 for the GGSN and Section 4.1.4.2.2 for the PDN-GW.
This is a 3GPP GGSN and PDN-GW implemented in Erlang. It strives to eventually support all the functionality as defined by [3GPP TS 23.002](http://www.3gpp.org/dynareport/23002.htm) Section 4.1.3.1 for the GGSN and Section 4.1.4.2.2 for the PDN-GW.

IMPLEMENTED FEATURES
--------------------
Expand Down Expand Up @@ -33,6 +33,12 @@ for them are not guaranteed to work across versions. Check [CONFIG.md](CONFIG.md
* rate limiting, defaults to 100 requests/second
* metrics, see [METRICS.md](METRICS.md)

USER PLANE
----------

erGW usese the 3GPP control and user plane separation of EPC nodes architecture as layed out
in [3GPP TS 23.214](http://www.3gpp.org/dynareport/23244.htm) and [3GPP TS 29.244](http://www.3gpp.org/dynareport/29244.htm).

RADIUS over Gi/SGi
------------------

Expand Down Expand Up @@ -67,10 +73,9 @@ Using rebar:
RUNNING
-------

A erGW installation needs a data path provider to handle the GTP-U path. This instance can be installed on the same host or a different host.
A erGW installation needs a user plane provider to handle the GTP-U path. This instance can be installed on the same host or a different host.

* for a data path suitable for GGSN/PGW see: [GTP-u-KMod](https://github.com/travelping/gtp_u_kmod)
* for a data path suitable for GTPhub see: [GTP-u-EDP](https://github.com/travelping/gtp_u_edp)
A suitable user plane node based on [VPP](https://wiki.fd.io/view/VPP) can be found at [VPP-UFP](https://github.com/travelping/vpp/tree/feature/upf).

erGW can be started with the normal Erlang command line tools, e.g.:

Expand All @@ -84,71 +89,190 @@ Eshell V8.0.3 (abort with ^G)

This requires a suitable ergw.config, e.g.:

[{setup, [{data_dir, "/var/lib/ergw"},
{log_dir, "/var/log/gtp-c-node"} %% NOTE: lager is not using this
]},

{ergw, [{sockets,
[{irx, [{type, 'gtp-c'},
{ip, {192,0,2,16}},
{netdev, "grx"},
freebind
]},
{grx, [{type, 'gtp-u'},
{node, 'gtp-u-node@localhost'},
{name, 'grx'}]}
]},

{vrfs,
[{upstream, [{pools, [{{10, 180, 0, 1}, {10, 180, 255, 254}, 32},
{{16#8001, 0, 0, 0, 0, 0, 0, 0}, {16#8001, 0, 0, 16#FFFF, 0, 0, 0, 0}, 64}
]},
{'MS-Primary-DNS-Server', {8,8,8,8}},
{'MS-Secondary-DNS-Server', {8,8,4,4}},
{'MS-Primary-NBNS-Server', {127,0,0,1}},
{'MS-Secondary-NBNS-Server', {127,0,0,1}}
]}
]},

{handlers,
[{gn, [{handler, pgw_s5s8},
{sockets, [irx]},
{data_paths, [grx]},
{aaa, [{'Username',
[{default, ['IMSI', <<"@">>, 'APN']}]}]}
]},
{s5s8, [{handler, pgw_s5s8},
{sockets, [irx]},
{data_paths, [grx]}
]}
]},

{apns,
[{[<<"example">>, <<"net">>], [{vrf, upstream}]}
]}
]},

{ergw_aaa, [
%% {ergw_aaa_provider, {ergw_aaa_mock, [{shared_secret, <<"MySecret">>}]}}
{ergw_aaa_provider,
{ergw_aaa_radius,
[{nas_identifier,<<"nas01.example.com">>},
{radius_auth_server,{{192,0,2,32},1812,<<"secret">>}},
{radius_acct_server,{{192,0,2,32},1813,<<"secret">>}}
]}
}
]},

{lager, [
{log_root, "/var/log/gtp-c-node"},
{colored, true},
{handlers, [
{lager_console_backend, debug},
{lager_file_backend, [{file, "error.log"}, {level, error}]},
{lager_file_backend, [{file, "console.log"}, {level, debug}]}
]}
]}
].
```erlang
%-*-Erlang-*-
[{setup, [{data_dir, "/var/lib/ergw"},
{log_dir, "/var/log/gtp-c-node"} %% NOTE: lager is not using this
]},

{ergw, [{'$setup_vars',
[{"ORIGIN", {value, "epc.mnc001.mcc001.3gppnetwork.org"}}]},
{plmn_id, {<<"001">>, <<"01">>}},

{http_api,
[{port, 8080},
{ip, {0,0,0,0}}
]},

{sockets,
[{'cp-socket',
[{type, 'gtp-u'},
{vrf, cp},
{ip, {127,0,0,1}},
freebind,
{reuseaddr, true}
]},
{irx, [{type, 'gtp-c'},
{vrf, epc},
{ip, {127,0,0,1}},
{reuseaddr, true}
]}
]},

{vrfs,
[{sgi, [{pools, [{{10, 106, 0, 1}, {10, 106, 255, 254}, 32},
{{16#8001, 0, 0, 0, 0, 0, 0, 0},
{16#8001, 0, 0, 16#FFFF, 0, 0, 0, 0}, 64}
]},
{'MS-Primary-DNS-Server', {8,8,8,8}},
{'MS-Secondary-DNS-Server', {8,8,4,4}},
{'MS-Primary-NBNS-Server', {127,0,0,1}},
{'MS-Secondary-NBNS-Server', {127,0,0,1}}
]}
]},

{sx_socket,
[{node, 'ergw'},
{name, 'ergw'},
{socket, 'cp-socket'},
{ip, {127,0,0,1}},
freebind
]},

{handlers,
[{'h1', [{handler, pgw_s5s8},
{protocol, gn},
{sockets, [irx]},
{node_selection, [default]}
]},
{'h2', [{handler, pgw_s5s8},
{protocol, s5s8},
{sockets, [irx]},
{node_selection, [default]}
]}
]},

{apns,
[{[<<"tpip">>, <<"net">>], [{vrf, sgi}]},
{[<<"APN1">>], [{vrf, sgi}]}
]},

{node_selection,
[{default,
{static,
[
%% APN NAPTR alternative
{"_default.apn.$ORIGIN", {300,64536},
[{"x-3gpp-upf","x-sxb"}],
"topon.sx.prox01.$ORIGIN"},

%% A/AAAA record alternatives
{"topon.sx.prox01.$ORIGIN", [{127,0,0,1}], []}
]
}
}
]
},

{nodes,
[{default,
[{vrfs,
[{cp, [{features, ['CP-Function']}]},
{epc, [{features, ['Access']}]},
{sgi, [{features, ['SGi-LAN']}]}]
}]
}]
}
]},

%% {exometer_core, [{reporters, [{exometer_report_netdata, []}]}]},

{ergw_aaa,
[{handlers,
[{ergw_aaa_static,
[{'NAS-Identifier', <<"NAS-Identifier">>},
{'Acct-Interim-Interval', 600},
{'Framed-Protocol', 'PPP'},
{'Service-Type', 'Framed-User'},
{'Node-Id', <<"PGW-001">>},
{'Charging-Rule-Base-Name', <<"cr-01">>},
{rules, #{'Default' =>
#{'Rating-Group' => [3000],
'Flow-Information' =>
[#{'Flow-Description' => [<<"permit out ip from any to assigned">>],
'Flow-Direction' => [1] %% DownLink
},
#{'Flow-Description' => [<<"permit out ip from any to assigned">>],
'Flow-Direction' => [2] %% UpLink
}],
'Metering-Method' => [1],
'Precedence' => [100]
}
}
}
]}
]},

{services,
[{'Default', [{handler, 'ergw_aaa_static'}]}
]},

{apps,
[{default,
[{session, ['Default']},
{procedures, [{authenticate, []},
{authorize, []},
{start, []},
{interim, []},
{stop, []}
]}
]}
]}
]},

{hackney, [
{mod_metrics, exometer}
]},

{jobs, [{samplers,
[{cpu_feedback, jobs_sampler_cpu, []}
]},
{queues,
[{path_restart,
[{regulators, [{counter, [{limit, 100}]}]},
{modifiers, [{cpu_feedback, 10}]} %% 10 = % increment by which to modify the limit
]},
{create,
[{max_time, 5000}, %% max 5 seconds
{regulators, [{rate, [{limit, 100}]}]},
{modifiers, [{cpu_feedback, 10}]} %% 10 = % increment by which to modify the limit
]},
{delete,
[{regulators, [{counter, [{limit, 100}]}]},
{modifiers, [{cpu_feedback, 10}]} %% 10 = % increment by which to modify the limit
]},
{other,
[{max_time, 10000}, %% max 10 seconds
{regulators, [{rate, [{limit, 1000}]}]},
{modifiers, [{cpu_feedback, 10}]} %% 10 = % increment by which to modify the limit
]}
]}
]},

{lager, [
{log_root, "/var/log/gtp-c-node"},
{colored, true},
{error_logger_redirect, true},
{crash_log, "crash.log"},
{error_logger_hwm, 5000},
{handlers, [
{lager_console_backend, [{level, debug}]},
{lager_file_backend, [{file, "error.log"}, {level, error}]},
{lager_file_backend, [{file, "console.log"}, {level, debug}]}
]}
]}
].
```

The configuration is documented in [CONFIG.md](CONFIG.md)

Expand All @@ -161,4 +285,4 @@ See [Installing on Ubuntu 16.04](https://github.com/travelping/ergw-gtp-c-node#i
[travis badge]: https://img.shields.io/travis/travelping/ergw/master.svg?style=flat-square
[coveralls]: https://coveralls.io/github/travelping/ergw
[coveralls badge]: https://img.shields.io/coveralls/travelping/ergw/master.svg?style=flat-square
[erlang version badge]: https://img.shields.io/badge/erlang-R20.0%20to%2021.0-blue.svg?style=flat-square
[erlang version badge]: https://img.shields.io/badge/erlang-R20.1%20to%2021.0-blue.svg?style=flat-square
6 changes: 3 additions & 3 deletions rebar.config
Expand Up @@ -13,10 +13,10 @@
{stacktrace_compat, "1.0.0"},
{erlando, {git, "https://github.com/travelping/erlando.git", {tag, "1.0.2"}}},
{netdata, {git, "https://github.com/RoadRunnr/erl_netdata.git", {ref, "cbd6eaf"}}},
{gtplib, {git, "https://github.com/travelping/gtplib.git", {branch, "master"}}},
{pfcplib, {git, "https://github.com/travelping/pfcplib.git", {branch, "master"}}},
{gtplib, {git, "https://github.com/travelping/gtplib.git", {tag, "1.3.0"}}},
{pfcplib, {git, "https://github.com/travelping/pfcplib.git", {tag, "1.0.0"}}},
{gen_socket, {git, "git://github.com/travelping/gen_socket", {ref, "195a427"}}},
{ergw_aaa, {git, "git://github.com/travelping/ergw_aaa", {branch, "feature/rf"}}}
{ergw_aaa, {git, "git://github.com/travelping/ergw_aaa", {tag, "3.0.0"}}}
]}.

{minimum_otp_vsn, "20.1"}.
Expand Down

0 comments on commit 483f548

Please sign in to comment.