fixup
parent
d19e33fd5e
commit
61276c4170
|
@ -0,0 +1,2 @@
|
|||
_build
|
||||
*.beam
|
|
@ -1,321 +0,0 @@
|
|||
;;
|
||||
;; %CopyrightBegin%
|
||||
;;
|
||||
;; Copyright (C) 2019 by Harald Welte. All Rights Reserved.
|
||||
;;
|
||||
;; This resembles 3GPP TS 29.273 version 15.3.0 Release 15
|
||||
;;
|
||||
;; Licensed under the Apache License, Version 2.0 (the "License");
|
||||
;; you may not use this file except in compliance with the License.
|
||||
;; You may obtain a copy of the License at
|
||||
;;
|
||||
;; http://www.apache.org/licenses/LICENSE-2.0
|
||||
;;
|
||||
;; Unless required by applicable law or agreed to in writing, software
|
||||
;; distributed under the License is distributed on an "AS IS" BASIS,
|
||||
;; WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
;; See the License for the specific language governing permissions and
|
||||
;; limitations under the License.
|
||||
;;
|
||||
;; %CopyrightEnd%
|
||||
;;
|
||||
|
||||
;;
|
||||
;; Edits:
|
||||
;;
|
||||
;;
|
||||
|
||||
@id 16777250
|
||||
@name diameter_3gpp_ts29_273
|
||||
@prefix diameter_aaa
|
||||
@vendor 10415 3GPP
|
||||
|
||||
@inherits diameter_gen_base_rfc6733
|
||||
@inherits diameter_rfc4005_nasreq
|
||||
@inherits diameter_rfc4006_cc
|
||||
@inherits diameter_3gpp_base
|
||||
@inherits diameter_etsi_es283_034
|
||||
;; @inherits diameter_3gpp_ts29_061_gmb
|
||||
;; @inherits diameter_3gpp_ts29_214
|
||||
@inherits diameter_3gpp_ts29_229
|
||||
@inherits diameter_3gpp_ts32_299
|
||||
|
||||
@inherits diameter_rfc7944
|
||||
@inherits diameter_rfc7683
|
||||
@inherits diameter_rfc6942
|
||||
@inherits diameter_rfc4072
|
||||
@inherits diameter_rfc6734
|
||||
@inherits diameter_3gpp_break_circles
|
||||
;;@inherits diameter_rfc5778
|
||||
;;@inherits diameter_3gpp_ts29_212
|
||||
|
||||
@avp_types
|
||||
|
||||
MIP6-Feature-Vector 124 Unsigned64 M
|
||||
Service-Selection 493 UTF8String M
|
||||
Mobile-Node-Identifier 506 UTF8String M
|
||||
QoS-Capability 578 Grouped M
|
||||
RAT-Type 1032 Enumerated MV
|
||||
APN-Configuration 1430 Grouped MV
|
||||
ANID 1504 UTF8String MV
|
||||
Trace-Info 1505 Grouped V
|
||||
AN-Trusted 1503 Enumerated MV
|
||||
MIP-FA-RK 1506 OctetString MV
|
||||
MIP-FA-RK-SPI 1507 Unsigned32 MV
|
||||
PPR-Flags 1508 Unsigned32 V
|
||||
WLAN-Identifier 1509 Grouped V
|
||||
TWAN-Access-Info 1510 Grouped V
|
||||
Access-Authorization-Flags 1511 Unsigned32 V
|
||||
TWAN-Default-APN-Context-Id 1512 Unsigned32 V
|
||||
Full-Network-Name 1516 OctetString V
|
||||
Short-Network-Name 1517 OctetString V
|
||||
AAA-Failure-Indication 1518 Unsigned32 V
|
||||
Transport-Access-Type 1519 Enumerated V
|
||||
DER-Flags 1520 Unsigned32 V
|
||||
DEA-Flags 1521 Unsigned32 V
|
||||
SSID 1524 UTF8String V
|
||||
HESSID 1525 UTF8String V
|
||||
Access-Network-Info 1526 Grouped V
|
||||
TWAN-Connection-Mode 1527 Unsigned32 V
|
||||
TWAN-Connectivity-Parameters 1528 Grouped V
|
||||
Connectivity-Flags 1529 Unsigned32 V
|
||||
TWAN-PCO 1530 OctetString V
|
||||
TWAG-CP-Address 1531 Address V
|
||||
TWAG-UG-Address 1532 UTF8String V
|
||||
TWAN-S2a-Failure-Cause 1533 Unsigned32 V
|
||||
SM-Back-Off-Timer 1534 Unsigned32 V
|
||||
WLCP-Key 1535 OctetString V
|
||||
Emergency-Services 1538 Unsigned32 V
|
||||
IMEI-Check-In-VPLMN-Result 1540 Unsigned32 V
|
||||
|
||||
@messages
|
||||
|
||||
;; 5.2.2.1.1 Diameter-EAP-Request (DER) Command
|
||||
DER ::= < Diameter Header: 268, REQ, PXY >
|
||||
< Session-Id >
|
||||
{ Auth-Application-Id }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Destination-Realm }
|
||||
{ Auth-Request-Type }
|
||||
{ EAP-Payload }
|
||||
[ DRMP ]
|
||||
[ Destination-Host ]
|
||||
[ User-Name ]
|
||||
[ Calling-Station-Id ]
|
||||
[ RAT-Type ]
|
||||
[ ANID ]
|
||||
[ Full-Network-Name ]
|
||||
[ Short-Network-Name ]
|
||||
[ QoS-Capability ]
|
||||
[ MIP6-Feature-Vector ]
|
||||
[ Visited-Network-Identifier ]
|
||||
[ Service-Selection ]
|
||||
[ Terminal-Information ]
|
||||
[ OC-Supported-Features ]
|
||||
*[ Supported-Features ]
|
||||
[ AAA-Failure-Indication ]
|
||||
[ WLAN-Identifier ]
|
||||
[ DER-Flags ]
|
||||
[ TWAN-Connection-Mode ]
|
||||
[ TWAN-Connectivity-Parameters ]
|
||||
* 2 [ TWAG-CP-Address ]
|
||||
[ ERP-RK-Request ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.1.2 Diameter-EAP-Answer (DEA) Command
|
||||
DEA ::= < Diameter Header: 268, PXY >
|
||||
< Session-Id >
|
||||
{ Auth-Application-Id }
|
||||
{ Result-Code }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Auth-Request-Type }
|
||||
[ DRMP ]
|
||||
[ Experimental-Result ]
|
||||
[ EAP-Payload ]
|
||||
[ User-Name ]
|
||||
[ Session-Timeout ]
|
||||
[ Accoting-Interim-Interval ]
|
||||
[ EAP-Master-Session-Key ]
|
||||
[ Context-Identifier ]
|
||||
[ APN-OI-Replacement ]
|
||||
*[ APN-Configuration ]
|
||||
[MIP6-Agent-Info ]
|
||||
[ MIP6-Feature-Vector ]
|
||||
[ Mobile-Node-Identifier ]
|
||||
[ 3GPP-Charging-Characteristics ]
|
||||
[ AMBR ]
|
||||
*[ Redirect-Host ]
|
||||
[ AN-Trusted ]
|
||||
[ Trace-Info ]
|
||||
[ Subscription-Id ]
|
||||
[ OC-Supported-Features ]
|
||||
[ OC-OLR ]
|
||||
;;*[ Load ]
|
||||
*[ Supported-Features ]
|
||||
[ MIP-FA-RK ]
|
||||
[ MIP-FA-RK-SPI ]
|
||||
[ NSWO-Authorization ]
|
||||
[ DEA-Flags ]
|
||||
[ TWAN-Connection-Mode ]
|
||||
[ TWAN-Connectivity-Parameters ]
|
||||
[ WLCP-Key ]
|
||||
[ Terminal-Information ]
|
||||
[ UE-Usage-Type ]
|
||||
[ Emergency-Services ]
|
||||
[ Emergency-Info ]
|
||||
[ Key ]
|
||||
[ ERP-Realm ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.2.1 Abort-Session-Request
|
||||
ASR ::= < Diameter Header: 274, REQ, PXY >
|
||||
< Session-Id >
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Destination-Realm }
|
||||
{ Destination-Host }
|
||||
{ Auth-Application-Id }
|
||||
[ DRMP ]
|
||||
[ User-Name ]
|
||||
[ Auth-Session-State ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.2.2 Abort-Session-Answer
|
||||
ASA ::= < Diameter Header: 274, PXY >
|
||||
< Session-Id >
|
||||
{ Result-Code }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
[ DRMP ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.2.3 Session-Termination-Request
|
||||
STR ::= < Diameter Header: 275, REQ, PXY >
|
||||
< Session-Id >
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Destination-Realm }
|
||||
{ Auth-Application-Id }
|
||||
{ Termination-Cause }
|
||||
[ DRMP ]
|
||||
[ Destination-Host ]
|
||||
[ User-Name ]
|
||||
[ OC-Supported-Features ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.2.4 Session-Termination-Answer
|
||||
STA ::= < Diameter Header: 275, PXY >
|
||||
< Session-Id >
|
||||
{ Result-Code }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
[ DRMP ]
|
||||
[ OC-Supported-Features ]
|
||||
[ OC-OLR ]
|
||||
;;*[ Load ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.3.1 Re-Auth-Request
|
||||
RAR ::= < Diameter Header: 258, REQ, PXY >
|
||||
< Session-Id >
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Destination-Realm }
|
||||
{ Destination-Host }
|
||||
{ Auth-Application-Id }
|
||||
{ Re-Auth-Request-Type }
|
||||
[ DRMP ]
|
||||
[ User-Name ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.3.2 Re-Auth-Answer
|
||||
RAA ::= < Diameter Header: 258, PXY >
|
||||
< Session-Id >
|
||||
{ Result-Code }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
[ DRMP ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.3.3 AA-Request
|
||||
AAR ::= < Diameter Header: 265, REQ, PXY >
|
||||
< Session-Id >
|
||||
{ Auth-Application-Id }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
{ Destination-Realm }
|
||||
{ Auth-Request-Type }
|
||||
[ DRMP ]
|
||||
[ Destination-Host ]
|
||||
[ User-Name ]
|
||||
[ MIP6-Feature-Vector ]
|
||||
[ Access-Network-Info ]
|
||||
[ Local-Time-Zone ]
|
||||
[ OC-Supported-Features ]
|
||||
*[ AVP ]
|
||||
|
||||
;; 5.2.2.3.4 AA-Answer
|
||||
AAA ::= < Diameter Header: 265, PXY >
|
||||
< Session-Id >
|
||||
{ Auth-Application-Id }
|
||||
{ Auth-Request-Type }
|
||||
{ Result-Code }
|
||||
{ Origin-Host }
|
||||
{ Origin-Realm }
|
||||
[ DRMP ]
|
||||
[ Experimental-Result ]
|
||||
[ Session-Timeout ]
|
||||
[ Acct-Interim-Interval ]
|
||||
[ Context-Identifier ]
|
||||
[ APN-OI-Replacement ]
|
||||
*[ APN-Configuration ]
|
||||
[ 3GPP-Charging-Characteristics ]
|
||||
[ Trace-Info ]
|
||||
[ Subscription-Id ]
|
||||
[ OC-Supported-Features ]
|
||||
[ OC-OLR ]
|
||||
[ UE-Usage-Type ]
|
||||
[ Emergency-Info]
|
||||
;;*[ Load ]
|
||||
*[ AVP ]
|
||||
|
||||
@enum Transport-Acess-Type
|
||||
BBF 0
|
||||
|
||||
@enum AN-Trusted
|
||||
TRUSTED 0
|
||||
UNTRUSTED 1
|
||||
|
||||
@grouped
|
||||
|
||||
WLAN-Identifier ::= < AVP Header: 1509 10415 >
|
||||
[SSID ]
|
||||
[HESSID ]
|
||||
*[ AVP ]
|
||||
|
||||
Access-Network-Info ::= < AVP Header: 1526 10415 >
|
||||
[ SSID ]
|
||||
[ BSSID ]
|
||||
[ Location-Information ]
|
||||
[ Location-Data ]
|
||||
[ Operator-Name ]
|
||||
[ Logical-Access-ID ]
|
||||
*[ AVP ]
|
||||
|
||||
TWAN-Connectivity-Parameters ::= < AVP Header: 1528 10415 >
|
||||
[ Connectivity-Flags ]
|
||||
[ Service-Selection ]
|
||||
[ PDN-Type ]
|
||||
* 2 [ Served-Party-IP-Address ]
|
||||
[ TWAN-PCO ]
|
||||
[ TWAG-UP-Address ]
|
||||
[ TWAN-S2a-Failure-Cause ]
|
||||
[ SM-Back-Off-Timer ]
|
||||
*[ AVP ]
|
||||
|
||||
TWAN-Access-Info::= < AVP Header: 1510 10415 >
|
||||
[ Access-Authorization-Flags ]
|
||||
[ WLAN-Identifier ]
|
||||
*[ AVP ]
|
|
@ -33,6 +33,7 @@
|
|||
@inherits diameter_3gpp_ts29_212
|
||||
@inherits diameter_3gpp_ts29_214
|
||||
@inherits diameter_3gpp_ts29_329
|
||||
@inherits diameter_3gpp_ts29_229
|
||||
|
||||
;; ===========================================================================
|
||||
|
||||
|
|
|
@ -1,582 +0,0 @@
|
|||
%% -------------------------------------------------------------------
|
||||
%% This is a generated file.
|
||||
%% -------------------------------------------------------------------
|
||||
|
||||
-module(diameter_rfc6942).
|
||||
|
||||
-compile({parse_transform, diameter_exprecs}).
|
||||
|
||||
-compile(nowarn_unused_function).
|
||||
|
||||
-export_records(['ERP-RK-Request', 'Proxy-Info',
|
||||
'Failed-AVP', 'Experimental-Result',
|
||||
'Vendor-Specific-Application-Id']).
|
||||
|
||||
-record('ERP-RK-Request', {'ERP-Realm', 'AVP' = []}).
|
||||
|
||||
-record('Proxy-Info',
|
||||
{'Proxy-Host', 'Proxy-State', 'AVP' = []}).
|
||||
|
||||
-record('Failed-AVP', {'AVP' = []}).
|
||||
|
||||
-record('Experimental-Result',
|
||||
{'Vendor-Id', 'Experimental-Result-Code'}).
|
||||
|
||||
-record('Vendor-Specific-Application-Id',
|
||||
{'Vendor-Id', 'Auth-Application-Id' = [],
|
||||
'Acct-Application-Id' = []}).
|
||||
|
||||
-export([name/0, id/0, vendor_id/0, vendor_name/0,
|
||||
decode_avps/3, encode_avps/3, grouped_avp/4, msg_name/2,
|
||||
msg_header/1, rec2msg/1, msg2rec/1, name2rec/1,
|
||||
avp_name/2, avp_arity/1, avp_arity/2, avp_header/1,
|
||||
avp/4, enumerated_avp/3, empty_value/2, dict/0]).
|
||||
|
||||
-include_lib("diameter/include/diameter.hrl").
|
||||
|
||||
-include_lib("diameter/include/diameter_gen.hrl").
|
||||
|
||||
name() -> diameter_rfc6942.
|
||||
|
||||
id() -> 1.
|
||||
|
||||
vendor_id() -> erlang:error(undefined).
|
||||
|
||||
vendor_name() -> erlang:error(undefined).
|
||||
|
||||
msg_name(_, _) -> ''.
|
||||
|
||||
msg_header(_) -> erlang:error(badarg).
|
||||
|
||||
rec2msg(_) -> erlang:error(badarg).
|
||||
|
||||
msg2rec(_) -> erlang:error(badarg).
|
||||
|
||||
name2rec('ERP-RK-Request') -> 'ERP-RK-Request';
|
||||
name2rec('Proxy-Info') -> 'Proxy-Info';
|
||||
name2rec('Failed-AVP') -> 'Failed-AVP';
|
||||
name2rec('Experimental-Result') ->
|
||||
'Experimental-Result';
|
||||
name2rec('Vendor-Specific-Application-Id') ->
|
||||
'Vendor-Specific-Application-Id';
|
||||
name2rec(T) -> msg2rec(T).
|
||||
|
||||
avp_name(618, undefined) ->
|
||||
{'ERP-RK-Request', 'Grouped'};
|
||||
avp_name(619, undefined) ->
|
||||
{'ERP-Realm', 'DiameterIdentity'};
|
||||
avp_name(483, undefined) ->
|
||||
{'Accounting-Realtime-Required', 'Enumerated'};
|
||||
avp_name(485, undefined) ->
|
||||
{'Accounting-Record-Number', 'Unsigned32'};
|
||||
avp_name(480, undefined) ->
|
||||
{'Accounting-Record-Type', 'Enumerated'};
|
||||
avp_name(287, undefined) ->
|
||||
{'Accounting-Sub-Session-Id', 'Unsigned64'};
|
||||
avp_name(259, undefined) ->
|
||||
{'Acct-Application-Id', 'Unsigned32'};
|
||||
avp_name(85, undefined) ->
|
||||
{'Acct-Interim-Interval', 'Unsigned32'};
|
||||
avp_name(50, undefined) ->
|
||||
{'Acct-Multi-Session-Id', 'UTF8String'};
|
||||
avp_name(44, undefined) ->
|
||||
{'Acct-Session-Id', 'OctetString'};
|
||||
avp_name(258, undefined) ->
|
||||
{'Auth-Application-Id', 'Unsigned32'};
|
||||
avp_name(276, undefined) ->
|
||||
{'Auth-Grace-Period', 'Unsigned32'};
|
||||
avp_name(274, undefined) ->
|
||||
{'Auth-Request-Type', 'Enumerated'};
|
||||
avp_name(277, undefined) ->
|
||||
{'Auth-Session-State', 'Enumerated'};
|
||||
avp_name(291, undefined) ->
|
||||
{'Authorization-Lifetime', 'Unsigned32'};
|
||||
avp_name(25, undefined) -> {'Class', 'OctetString'};
|
||||
avp_name(293, undefined) ->
|
||||
{'Destination-Host', 'DiameterIdentity'};
|
||||
avp_name(283, undefined) ->
|
||||
{'Destination-Realm', 'DiameterIdentity'};
|
||||
avp_name(273, undefined) ->
|
||||
{'Disconnect-Cause', 'Enumerated'};
|
||||
avp_name(281, undefined) ->
|
||||
{'Error-Message', 'UTF8String'};
|
||||
avp_name(294, undefined) ->
|
||||
{'Error-Reporting-Host', 'DiameterIdentity'};
|
||||
avp_name(55, undefined) -> {'Event-Timestamp', 'Time'};
|
||||
avp_name(297, undefined) ->
|
||||
{'Experimental-Result', 'Grouped'};
|
||||
avp_name(298, undefined) ->
|
||||
{'Experimental-Result-Code', 'Unsigned32'};
|
||||
avp_name(279, undefined) -> {'Failed-AVP', 'Grouped'};
|
||||
avp_name(267, undefined) ->
|
||||
{'Firmware-Revision', 'Unsigned32'};
|
||||
avp_name(257, undefined) ->
|
||||
{'Host-IP-Address', 'Address'};
|
||||
avp_name(299, undefined) ->
|
||||
{'Inband-Security-Id', 'Unsigned32'};
|
||||
avp_name(272, undefined) ->
|
||||
{'Multi-Round-Time-Out', 'Unsigned32'};
|
||||
avp_name(264, undefined) ->
|
||||
{'Origin-Host', 'DiameterIdentity'};
|
||||
avp_name(296, undefined) ->
|
||||
{'Origin-Realm', 'DiameterIdentity'};
|
||||
avp_name(278, undefined) ->
|
||||
{'Origin-State-Id', 'Unsigned32'};
|
||||
avp_name(269, undefined) ->
|
||||
{'Product-Name', 'UTF8String'};
|
||||
avp_name(280, undefined) ->
|
||||
{'Proxy-Host', 'DiameterIdentity'};
|
||||
avp_name(284, undefined) -> {'Proxy-Info', 'Grouped'};
|
||||
avp_name(33, undefined) ->
|
||||
{'Proxy-State', 'OctetString'};
|
||||
avp_name(285, undefined) ->
|
||||
{'Re-Auth-Request-Type', 'Enumerated'};
|
||||
avp_name(292, undefined) ->
|
||||
{'Redirect-Host', 'DiameterURI'};
|
||||
avp_name(261, undefined) ->
|
||||
{'Redirect-Host-Usage', 'Enumerated'};
|
||||
avp_name(262, undefined) ->
|
||||
{'Redirect-Max-Cache-Time', 'Unsigned32'};
|
||||
avp_name(268, undefined) ->
|
||||
{'Result-Code', 'Unsigned32'};
|
||||
avp_name(282, undefined) ->
|
||||
{'Route-Record', 'DiameterIdentity'};
|
||||
avp_name(270, undefined) ->
|
||||
{'Session-Binding', 'Unsigned32'};
|
||||
avp_name(263, undefined) ->
|
||||
{'Session-Id', 'UTF8String'};
|
||||
avp_name(271, undefined) ->
|
||||
{'Session-Server-Failover', 'Enumerated'};
|
||||
avp_name(27, undefined) ->
|
||||
{'Session-Timeout', 'Unsigned32'};
|
||||
avp_name(265, undefined) ->
|
||||
{'Supported-Vendor-Id', 'Unsigned32'};
|
||||
avp_name(295, undefined) ->
|
||||
{'Termination-Cause', 'Enumerated'};
|
||||
avp_name(1, undefined) -> {'User-Name', 'UTF8String'};
|
||||
avp_name(266, undefined) -> {'Vendor-Id', 'Unsigned32'};
|
||||
avp_name(260, undefined) ->
|
||||
{'Vendor-Specific-Application-Id', 'Grouped'};
|
||||
avp_name(_, _) -> 'AVP'.
|
||||
|
||||
avp_arity('ERP-RK-Request') ->
|
||||
[{'ERP-Realm', 1}, {'AVP', {0, '*'}}];
|
||||
avp_arity('Proxy-Info') ->
|
||||
[{'Proxy-Host', 1}, {'Proxy-State', 1},
|
||||
{'AVP', {0, '*'}}];
|
||||
avp_arity('Failed-AVP') -> [{'AVP', {1, '*'}}];
|
||||
avp_arity('Experimental-Result') ->
|
||||
[{'Vendor-Id', 1}, {'Experimental-Result-Code', 1}];
|
||||
avp_arity('Vendor-Specific-Application-Id') ->
|
||||
[{'Vendor-Id', 1}, {'Auth-Application-Id', {0, 1}},
|
||||
{'Acct-Application-Id', {0, 1}}];
|
||||
avp_arity(_) -> erlang:error(badarg).
|
||||
|
||||
avp_arity('ERP-RK-Request', 'ERP-Realm') -> 1;
|
||||
avp_arity('ERP-RK-Request', 'AVP') -> {0, '*'};
|
||||
avp_arity('Proxy-Info', 'Proxy-Host') -> 1;
|
||||
avp_arity('Proxy-Info', 'Proxy-State') -> 1;
|
||||
avp_arity('Proxy-Info', 'AVP') -> {0, '*'};
|
||||
avp_arity('Failed-AVP', 'AVP') -> {1, '*'};
|
||||
avp_arity('Experimental-Result', 'Vendor-Id') -> 1;
|
||||
avp_arity('Experimental-Result',
|
||||
'Experimental-Result-Code') ->
|
||||
1;
|
||||
avp_arity('Vendor-Specific-Application-Id',
|
||||
'Vendor-Id') ->
|
||||
1;
|
||||
avp_arity('Vendor-Specific-Application-Id',
|
||||
'Auth-Application-Id') ->
|
||||
{0, 1};
|
||||
avp_arity('Vendor-Specific-Application-Id',
|
||||
'Acct-Application-Id') ->
|
||||
{0, 1};
|
||||
avp_arity(_, _) -> 0.
|
||||
|
||||
avp_header('ERP-RK-Request') -> {618, 0, undefined};
|
||||
avp_header('ERP-Realm') -> {619, 0, undefined};
|
||||
avp_header('Accounting-Realtime-Required') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Accounting-Realtime-Required');
|
||||
avp_header('Accounting-Record-Number') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Accounting-Record-Number');
|
||||
avp_header('Accounting-Record-Type') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Accounting-Record-Type');
|
||||
avp_header('Accounting-Sub-Session-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Accounting-Sub-Session-Id');
|
||||
avp_header('Acct-Application-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Acct-Application-Id');
|
||||
avp_header('Acct-Interim-Interval') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Acct-Interim-Interval');
|
||||
avp_header('Acct-Multi-Session-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Acct-Multi-Session-Id');
|
||||
avp_header('Acct-Session-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Acct-Session-Id');
|
||||
avp_header('Auth-Application-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Auth-Application-Id');
|
||||
avp_header('Auth-Grace-Period') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Auth-Grace-Period');
|
||||
avp_header('Auth-Request-Type') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Auth-Request-Type');
|
||||
avp_header('Auth-Session-State') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Auth-Session-State');
|
||||
avp_header('Authorization-Lifetime') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Authorization-Lifetime');
|
||||
avp_header('Class') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Class');
|
||||
avp_header('Destination-Host') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Destination-Host');
|
||||
avp_header('Destination-Realm') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Destination-Realm');
|
||||
avp_header('Disconnect-Cause') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Disconnect-Cause');
|
||||
avp_header('Error-Message') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Error-Message');
|
||||
avp_header('Error-Reporting-Host') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Error-Reporting-Host');
|
||||
avp_header('Event-Timestamp') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Event-Timestamp');
|
||||
avp_header('Experimental-Result') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Experimental-Result');
|
||||
avp_header('Experimental-Result-Code') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Experimental-Result-Code');
|
||||
avp_header('Failed-AVP') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Failed-AVP');
|
||||
avp_header('Firmware-Revision') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Firmware-Revision');
|
||||
avp_header('Host-IP-Address') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Host-IP-Address');
|
||||
avp_header('Inband-Security-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Inband-Security-Id');
|
||||
avp_header('Multi-Round-Time-Out') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Multi-Round-Time-Out');
|
||||
avp_header('Origin-Host') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Origin-Host');
|
||||
avp_header('Origin-Realm') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Origin-Realm');
|
||||
avp_header('Origin-State-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Origin-State-Id');
|
||||
avp_header('Product-Name') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Product-Name');
|
||||
avp_header('Proxy-Host') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Proxy-Host');
|
||||
avp_header('Proxy-Info') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Proxy-Info');
|
||||
avp_header('Proxy-State') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Proxy-State');
|
||||
avp_header('Re-Auth-Request-Type') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Re-Auth-Request-Type');
|
||||
avp_header('Redirect-Host') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Redirect-Host');
|
||||
avp_header('Redirect-Host-Usage') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Redirect-Host-Usage');
|
||||
avp_header('Redirect-Max-Cache-Time') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Redirect-Max-Cache-Time');
|
||||
avp_header('Result-Code') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Result-Code');
|
||||
avp_header('Route-Record') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Route-Record');
|
||||
avp_header('Session-Binding') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Session-Binding');
|
||||
avp_header('Session-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Session-Id');
|
||||
avp_header('Session-Server-Failover') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Session-Server-Failover');
|
||||
avp_header('Session-Timeout') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Session-Timeout');
|
||||
avp_header('Supported-Vendor-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Supported-Vendor-Id');
|
||||
avp_header('Termination-Cause') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Termination-Cause');
|
||||
avp_header('User-Name') ->
|
||||
diameter_gen_base_rfc6733:avp_header('User-Name');
|
||||
avp_header('Vendor-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Vendor-Id');
|
||||
avp_header('Vendor-Specific-Application-Id') ->
|
||||
diameter_gen_base_rfc6733:avp_header('Vendor-Specific-Application-Id');
|
||||
avp_header(_) -> erlang:error(badarg).
|
||||
|
||||
avp(T, Data, 'ERP-RK-Request', Opts) ->
|
||||
grouped_avp(T, 'ERP-RK-Request', Data, Opts);
|
||||
avp(T, Data, 'ERP-Realm', Opts) ->
|
||||
diameter_types:'DiameterIdentity'(T, Data, Opts);
|
||||
avp(T, Data, 'Accounting-Realtime-Required', Opts) ->
|
||||
avp(T, Data, 'Accounting-Realtime-Required', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Accounting-Record-Number', Opts) ->
|
||||
avp(T, Data, 'Accounting-Record-Number', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Accounting-Record-Type', Opts) ->
|
||||
avp(T, Data, 'Accounting-Record-Type', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Accounting-Sub-Session-Id', Opts) ->
|
||||
avp(T, Data, 'Accounting-Sub-Session-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Acct-Application-Id', Opts) ->
|
||||
avp(T, Data, 'Acct-Application-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Acct-Interim-Interval', Opts) ->
|
||||
avp(T, Data, 'Acct-Interim-Interval', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Acct-Multi-Session-Id', Opts) ->
|
||||
avp(T, Data, 'Acct-Multi-Session-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Acct-Session-Id', Opts) ->
|
||||
avp(T, Data, 'Acct-Session-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Auth-Application-Id', Opts) ->
|
||||
avp(T, Data, 'Auth-Application-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Auth-Grace-Period', Opts) ->
|
||||
avp(T, Data, 'Auth-Grace-Period', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Auth-Request-Type', Opts) ->
|
||||
avp(T, Data, 'Auth-Request-Type', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Auth-Session-State', Opts) ->
|
||||
avp(T, Data, 'Auth-Session-State', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Authorization-Lifetime', Opts) ->
|
||||
avp(T, Data, 'Authorization-Lifetime', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Class', Opts) ->
|
||||
avp(T, Data, 'Class', Opts, diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Destination-Host', Opts) ->
|
||||
avp(T, Data, 'Destination-Host', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Destination-Realm', Opts) ->
|
||||
avp(T, Data, 'Destination-Realm', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Disconnect-Cause', Opts) ->
|
||||
avp(T, Data, 'Disconnect-Cause', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Error-Message', Opts) ->
|
||||
avp(T, Data, 'Error-Message', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Error-Reporting-Host', Opts) ->
|
||||
avp(T, Data, 'Error-Reporting-Host', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Event-Timestamp', Opts) ->
|
||||
avp(T, Data, 'Event-Timestamp', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Experimental-Result', Opts) ->
|
||||
grouped_avp(T, 'Experimental-Result', Data, Opts);
|
||||
avp(T, Data, 'Experimental-Result-Code', Opts) ->
|
||||
avp(T, Data, 'Experimental-Result-Code', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Failed-AVP', Opts) ->
|
||||
grouped_avp(T, 'Failed-AVP', Data, Opts);
|
||||
avp(T, Data, 'Firmware-Revision', Opts) ->
|
||||
avp(T, Data, 'Firmware-Revision', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Host-IP-Address', Opts) ->
|
||||
avp(T, Data, 'Host-IP-Address', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Inband-Security-Id', Opts) ->
|
||||
avp(T, Data, 'Inband-Security-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Multi-Round-Time-Out', Opts) ->
|
||||
avp(T, Data, 'Multi-Round-Time-Out', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Origin-Host', Opts) ->
|
||||
avp(T, Data, 'Origin-Host', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Origin-Realm', Opts) ->
|
||||
avp(T, Data, 'Origin-Realm', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Origin-State-Id', Opts) ->
|
||||
avp(T, Data, 'Origin-State-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Product-Name', Opts) ->
|
||||
avp(T, Data, 'Product-Name', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Proxy-Host', Opts) ->
|
||||
avp(T, Data, 'Proxy-Host', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Proxy-Info', Opts) ->
|
||||
grouped_avp(T, 'Proxy-Info', Data, Opts);
|
||||
avp(T, Data, 'Proxy-State', Opts) ->
|
||||
avp(T, Data, 'Proxy-State', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Re-Auth-Request-Type', Opts) ->
|
||||
avp(T, Data, 'Re-Auth-Request-Type', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Redirect-Host', Opts) ->
|
||||
avp(T, Data, 'Redirect-Host', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Redirect-Host-Usage', Opts) ->
|
||||
avp(T, Data, 'Redirect-Host-Usage', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Redirect-Max-Cache-Time', Opts) ->
|
||||
avp(T, Data, 'Redirect-Max-Cache-Time', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Result-Code', Opts) ->
|
||||
avp(T, Data, 'Result-Code', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Route-Record', Opts) ->
|
||||
avp(T, Data, 'Route-Record', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Session-Binding', Opts) ->
|
||||
avp(T, Data, 'Session-Binding', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Session-Id', Opts) ->
|
||||
avp(T, Data, 'Session-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Session-Server-Failover', Opts) ->
|
||||
avp(T, Data, 'Session-Server-Failover', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Session-Timeout', Opts) ->
|
||||
avp(T, Data, 'Session-Timeout', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Supported-Vendor-Id', Opts) ->
|
||||
avp(T, Data, 'Supported-Vendor-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Termination-Cause', Opts) ->
|
||||
avp(T, Data, 'Termination-Cause', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'User-Name', Opts) ->
|
||||
avp(T, Data, 'User-Name', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Vendor-Id', Opts) ->
|
||||
avp(T, Data, 'Vendor-Id', Opts,
|
||||
diameter_gen_base_rfc6733);
|
||||
avp(T, Data, 'Vendor-Specific-Application-Id', Opts) ->
|
||||
grouped_avp(T, 'Vendor-Specific-Application-Id', Data,
|
||||
Opts);
|
||||
avp(_, _, _, _) -> erlang:error(badarg).
|
||||
|
||||
enumerated_avp(_, _, _) -> erlang:error(badarg).
|
||||
|
||||
empty_value('ERP-RK-Request', Opts) ->
|
||||
empty_group('ERP-RK-Request', Opts);
|
||||
empty_value('Proxy-Info', Opts) ->
|
||||
empty_group('Proxy-Info', Opts);
|
||||
empty_value('Failed-AVP', Opts) ->
|
||||
empty_group('Failed-AVP', Opts);
|
||||
empty_value('Experimental-Result', Opts) ->
|
||||
empty_group('Experimental-Result', Opts);
|
||||
empty_value('Vendor-Specific-Application-Id', Opts) ->
|
||||
empty_group('Vendor-Specific-Application-Id', Opts);
|
||||
empty_value('Disconnect-Cause', _) -> <<0, 0, 0, 0>>;
|
||||
empty_value('Redirect-Host-Usage', _) -> <<0, 0, 0, 0>>;
|
||||
empty_value('Auth-Request-Type', _) -> <<0, 0, 0, 0>>;
|
||||
empty_value('Auth-Session-State', _) -> <<0, 0, 0, 0>>;
|
||||
empty_value('Re-Auth-Request-Type', _) ->
|
||||
<<0, 0, 0, 0>>;
|
||||
empty_value('Termination-Cause', _) -> <<0, 0, 0, 0>>;
|
||||
empty_value('Session-Server-Failover', _) ->
|
||||
<<0, 0, 0, 0>>;
|
||||
empty_value('Accounting-Record-Type', _) ->
|
||||
<<0, 0, 0, 0>>;
|
||||
empty_value('Accounting-Realtime-Required', _) ->
|
||||
<<0, 0, 0, 0>>;
|
||||
empty_value(Name, Opts) -> empty(Name, Opts).
|
||||
|
||||
dict() ->
|
||||
[1,
|
||||
{avp_types,
|
||||
[{"ERP-RK-Request", 618, "Grouped", []},
|
||||
{"ERP-Realm", 619, "DiameterIdentity", []}]},
|
||||
{avp_vendor_id, []}, {codecs, []}, {command_codes, []},
|
||||
{custom_types, []}, {define, []}, {enum, []},
|
||||
{grouped,
|
||||
[{"ERP-RK-Request", 618, [],
|
||||
[{"ERP-Realm"}, {'*', ["AVP"]}]}]},
|
||||
{id, 1},
|
||||
{import_avps,
|
||||
[{diameter_gen_base_rfc6733,
|
||||
[{"Accounting-Realtime-Required", 483, "Enumerated",
|
||||
"M"},
|
||||
{"Accounting-Record-Number", 485, "Unsigned32", "M"},
|
||||
{"Accounting-Record-Type", 480, "Enumerated", "M"},
|
||||
{"Accounting-Sub-Session-Id", 287, "Unsigned64", "M"},
|
||||
{"Acct-Application-Id", 259, "Unsigned32", "M"},
|
||||
{"Acct-Interim-Interval", 85, "Unsigned32", "M"},
|
||||
{"Acct-Multi-Session-Id", 50, "UTF8String", "M"},
|
||||
{"Acct-Session-Id", 44, "OctetString", "M"},
|
||||
{"Auth-Application-Id", 258, "Unsigned32", "M"},
|
||||
{"Auth-Grace-Period", 276, "Unsigned32", "M"},
|
||||
{"Auth-Request-Type", 274, "Enumerated", "M"},
|
||||
{"Auth-Session-State", 277, "Enumerated", "M"},
|
||||
{"Authorization-Lifetime", 291, "Unsigned32", "M"},
|
||||
{"Class", 25, "OctetString", "M"},
|
||||
{"Destination-Host", 293, "DiameterIdentity", "M"},
|
||||
{"Destination-Realm", 283, "DiameterIdentity", "M"},
|
||||
{"Disconnect-Cause", 273, "Enumerated", "M"},
|
||||
{"Error-Message", 281, "UTF8String", []},
|
||||
{"Error-Reporting-Host", 294, "DiameterIdentity", []},
|
||||
{"Event-Timestamp", 55, "Time", "M"},
|
||||
{"Experimental-Result", 297, "Grouped", "M"},
|
||||
{"Experimental-Result-Code", 298, "Unsigned32", "M"},
|
||||
{"Failed-AVP", 279, "Grouped", "M"},
|
||||
{"Firmware-Revision", 267, "Unsigned32", []},
|
||||
{"Host-IP-Address", 257, "Address", "M"},
|
||||
{"Inband-Security-Id", 299, "Unsigned32", "M"},
|
||||
{"Multi-Round-Time-Out", 272, "Unsigned32", "M"},
|
||||
{"Origin-Host", 264, "DiameterIdentity", "M"},
|
||||
{"Origin-Realm", 296, "DiameterIdentity", "M"},
|
||||
{"Origin-State-Id", 278, "Unsigned32", "M"},
|
||||
{"Product-Name", 269, "UTF8String", []},
|
||||
{"Proxy-Host", 280, "DiameterIdentity", "M"},
|
||||
{"Proxy-Info", 284, "Grouped", "M"},
|
||||
{"Proxy-State", 33, "OctetString", "M"},
|
||||
{"Re-Auth-Request-Type", 285, "Enumerated", "M"},
|
||||
{"Redirect-Host", 292, "DiameterURI", "M"},
|
||||
{"Redirect-Host-Usage", 261, "Enumerated", "M"},
|
||||
{"Redirect-Max-Cache-Time", 262, "Unsigned32", "M"},
|
||||
{"Result-Code", 268, "Unsigned32", "M"},
|
||||
{"Route-Record", 282, "DiameterIdentity", "M"},
|
||||
{"Session-Binding", 270, "Unsigned32", "M"},
|
||||
{"Session-Id", 263, "UTF8String", "M"},
|
||||
{"Session-Server-Failover", 271, "Enumerated", "M"},
|
||||
{"Session-Timeout", 27, "Unsigned32", "M"},
|
||||
{"Supported-Vendor-Id", 265, "Unsigned32", "M"},
|
||||
{"Termination-Cause", 295, "Enumerated", "M"},
|
||||
{"User-Name", 1, "UTF8String", "M"},
|
||||
{"Vendor-Id", 266, "Unsigned32", "M"},
|
||||
{"Vendor-Specific-Application-Id", 260, "Grouped",
|
||||
"M"}]}]},
|
||||
{import_enums,
|
||||
[{diameter_gen_base_rfc6733,
|
||||
[{"Disconnect-Cause",
|
||||
[{"REBOOTING", 0}, {"BUSY", 1},
|
||||
{"DO_NOT_WANT_TO_TALK_TO_YOU", 2}]},
|
||||
{"Redirect-Host-Usage",
|
||||
[{"DONT_CACHE", 0}, {"ALL_SESSION", 1},
|
||||
{"ALL_REALM", 2}, {"REALM_AND_APPLICATION", 3},
|
||||
{"ALL_APPLICATION", 4}, {"ALL_HOST", 5},
|
||||
{"ALL_USER", 6}]},
|
||||
{"Auth-Request-Type",
|
||||
[{"AUTHENTICATE_ONLY", 1}, {"AUTHORIZE_ONLY", 2},
|
||||
{"AUTHORIZE_AUTHENTICATE", 3}]},
|
||||
{"Auth-Session-State",
|
||||
[{"STATE_MAINTAINED", 0}, {"NO_STATE_MAINTAINED", 1}]},
|
||||
{"Re-Auth-Request-Type",
|
||||
[{"AUTHORIZE_ONLY", 0}, {"AUTHORIZE_AUTHENTICATE", 1}]},
|
||||
{"Termination-Cause",
|
||||
[{"LOGOUT", 1}, {"SERVICE_NOT_PROVIDED", 2},
|
||||
{"BAD_ANSWER", 3}, {"ADMINISTRATIVE", 4},
|
||||
{"LINK_BROKEN", 5}, {"AUTH_EXPIRED", 6},
|
||||
{"USER_MOVED", 7}, {"SESSION_TIMEOUT", 8}]},
|
||||
{"Session-Server-Failover",
|
||||
[{"REFUSE_SERVICE", 0}, {"TRY_AGAIN", 1},
|
||||
{"ALLOW_SERVICE", 2}, {"TRY_AGAIN_ALLOW_SERVICE", 3}]},
|
||||
{"Accounting-Record-Type",
|
||||
[{"EVENT_RECORD", 1}, {"START_RECORD", 2},
|
||||
{"INTERIM_RECORD", 3}, {"STOP_RECORD", 4}]},
|
||||
{"Accounting-Realtime-Required",
|
||||
[{"DELIVER_AND_GRANT", 1}, {"GRANT_AND_STORE", 2},
|
||||
{"GRANT_AND_LOSE", 3}]}]}]},
|
||||
{import_groups,
|
||||
[{diameter_gen_base_rfc6733,
|
||||
[{"Proxy-Info", 284, [],
|
||||
[{"Proxy-Host"}, {"Proxy-State"}, {'*', ["AVP"]}]},
|
||||
{"Failed-AVP", 279, [], [{'*', {"AVP"}}]},
|
||||
{"Experimental-Result", 297, [],
|
||||
[{"Vendor-Id"}, {"Experimental-Result-Code"}]},
|
||||
{"Vendor-Specific-Application-Id", 260, [],
|
||||
[{"Vendor-Id"}, ["Auth-Application-Id"],
|
||||
["Acct-Application-Id"]]}]}]},
|
||||
{inherits, [{"diameter_gen_base_rfc6733", []}]},
|
||||
{messages, []}].
|
||||
|
||||
|
|
@ -0,0 +1,31 @@
|
|||
{erl_opts, [debug_info, {parse_transform, lager_transform}]}.
|
||||
|
||||
{deps, [
|
||||
{setup, "2.0.2"},
|
||||
{lager, "3.6.8"}
|
||||
]}.
|
||||
|
||||
{minimum_otp_vsn, "20.3"}.
|
||||
{plugins, [
|
||||
{rebar3_diameter_compiler,
|
||||
{git, "https://github.com/carlosedp/rebar3_diameter_compiler.git", {branch, "master"}}}
|
||||
]}.
|
||||
|
||||
{xref_checks, [undefined_function_calls, undefined_functions,
|
||||
deprecated_function_calls, deprecated_functions]}.
|
||||
|
||||
{provider_hooks,
|
||||
[{pre,
|
||||
[{compile, {diameter, compile}},
|
||||
{clean, {diameter, clean}}
|
||||
]}
|
||||
]}.
|
||||
|
||||
{dia_first_files, ["diameter_3gpp_base.dia", "diameter_rfc7155_nasreq.dia", "diameter_3gpp_ts29_212.dia", "diameter_3gpp_ts32_299.dia", "diameter_3gpp_ts29_272.dia"]}.
|
||||
|
||||
{dia_opts, []}.
|
||||
|
||||
{dialyzer, [
|
||||
{plt_extra_apps, [kernel, stdlib, erts, tools, inets, compiler, diameter]},
|
||||
{warnings, [no_improper_lists]}
|
||||
]}.
|
|
@ -0,0 +1,13 @@
|
|||
{application, osmo_dia2gsup, [
|
||||
{decription, "Osmocom DIAMETER -> GSUP translator"},
|
||||
{vsn, "1"},
|
||||
{registered, []},
|
||||
{applications, [
|
||||
kernel,
|
||||
stdlib,
|
||||
lager,
|
||||
diameter
|
||||
]},
|
||||
{mod, {osmo_dia2gsup_app, []}},
|
||||
{env, []}
|
||||
]}.
|
|
@ -0,0 +1,117 @@
|
|||
-module(osmo_dia2gsup).
|
||||
-behavior(gen_server).
|
||||
|
||||
-include_lib("diameter/include/diameter.hrl").
|
||||
-include_lib("diameter/include/diameter_gen_base_rfc6733.hrl").
|
||||
%-include_lib("diameter_settings.hrl").
|
||||
|
||||
% API
|
||||
-export([start_link/0]).
|
||||
-export([start/0, stop/0]).
|
||||
|
||||
% gen_server callbacks
|
||||
-export([init/1, handle_call/3, handle_cast/2, handle_info/2]).
|
||||
-export([code_change/3, terminate/2]).
|
||||
|
||||
-define(SERVER, ?MODULE).
|
||||
|
||||
% Diameter application definitions
|
||||
|
||||
-define(DIA_STATS_TAB, iwf_stats).
|
||||
-define(DIA_STATS_COUNTERS, [event_OK, event_ERR]).
|
||||
|
||||
-define(SVC_NAME, ?MODULE).
|
||||
-define(APP_ALIAS, ?MODULE).
|
||||
-define(CALLBACK_MOD, server_cb).
|
||||
-define(DIAMETER_DICT_HSS, diameter_3gpp_ts29_272).
|
||||
|
||||
-define(SERVICE(Name), [{'Origin-Host', application:get_env(osmo_dia2gsup, origin_host, "hss.localdomain")},
|
||||
{'Origin-Realm', applicaiton:get_env(osmo_dia2gsup, origin_realm, "localdomain")},
|
||||
{'Vendor-Id', application:get_env(osmo_dia2gsup, vendor_id, 0)},
|
||||
{'Product-Name', "osmo_dia2gsup"},
|
||||
{'Auth-Application-Id', []},
|
||||
{application,
|
||||
[{alias, ?APP_ALIAS},
|
||||
{dictionary, ?DIAMETER_DICT_HSS},
|
||||
{module, ?CALLBACK_MOD}]
|
||||
}]).
|
||||
|
||||
|
||||
|
||||
%% ------------------------------------------------------------------
|
||||
%% API
|
||||
%% ------------------------------------------------------------------
|
||||
|
||||
start_link() ->
|
||||
gen_server:start_link({local, ?SERVER}, ?MODULE, [], []).
|
||||
|
||||
start() ->
|
||||
application:sensure_all_started(?MODULE),
|
||||
start_link().
|
||||
|
||||
stop() ->
|
||||
gen_server:cast(?SERVER, stop).
|
||||
|
||||
%% ------------------------------------------------------------------
|
||||
%% gen_server Function Definitions
|
||||
%% ------------------------------------------------------------------
|
||||
|
||||
%% @callback gen_server
|
||||
init(State) ->
|
||||
SvcName = ?MODULE,
|
||||
diameter:start_service(SvcName, ?SERVICE(SvcName)),
|
||||
Ip = application:get_env(osmo_dia2gsup, diameter_ip, "127.0.0.1"),
|
||||
Port = application:get_env(osmo_dia2gsup, diameter_port, 3868),
|
||||
Proto = applicaiton:get_env(osmo_dia2gsup, diameter_proto, sctp),
|
||||
listen({address, Proto, element(2,inet:parse_address(Ip)), Port}),
|
||||
lager:info("Diameter HSS Application started on IP ~s, ~p port ~p~n", [Ip, Proto, Port]),
|
||||
{ok, State}.
|
||||
|
||||
%% @callback gen_server
|
||||
handle_call(_Req, _From, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
%% @callback gen_server
|
||||
handle_cast(stop, State) ->
|
||||
{stop, normal, State};
|
||||
handle_cast(_req, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
|
||||
%% @callback gen_server
|
||||
handle_info(_Info, State) ->
|
||||
{noreply, State}.
|
||||
|
||||
%% @callback gen_server
|
||||
code_change(_OldVsn, State, _Extra) ->
|
||||
{ok, State}.
|
||||
|
||||
%% @callback gen_server
|
||||
terminate(normal, _State) ->
|
||||
diameter:stop_service(?SVC_NAME),
|
||||
lager:info("Diameter HSS Application stopped.~n"),
|
||||
ok;
|
||||
terminate(shutdown, _State) ->
|
||||
ok;
|
||||
terminate({shutdown, _Reason}, _State) ->
|
||||
ok;
|
||||
terminate(_Reason, _State) ->
|
||||
ok.
|
||||
|
||||
|
||||
|
||||
%% ------------------------------------------------------------------
|
||||
%% Internal Function Definitions
|
||||
%% ------------------------------------------------------------------
|
||||
|
||||
listen(Name, {address, Protocol, IPAddr, Port}) ->
|
||||
TransOpts = [{transport_module, tmod(Protocol)},
|
||||
{transport_config, [{reuseaddr, true},
|
||||
{ip, IPAddr}, {port, Port}]}],
|
||||
diameter:add_transport(Name, {listen, TransOpts}).
|
||||
|
||||
listen(Address) ->
|
||||
listen(?SVC_NAME, Address).
|
||||
|
||||
tmod(tcp) -> diameter_tcp;
|
||||
tmod(sctp) -> diameter_sctp.
|
|
@ -0,0 +1,17 @@
|
|||
-module(osmo_dia2gsup_app).
|
||||
-behaviour(application).
|
||||
|
||||
-export([start/2, stop/1]).
|
||||
|
||||
start(_StartType, _StartArgs) ->
|
||||
case somo_dia2gsup_sup:start_link() of
|
||||
{ok, _} = Net ->
|
||||
osmo_dia2gsup_sup:start_childs(SrvSupSpecs),
|
||||
ret;
|
||||
Other ->
|
||||
Other
|
||||
end.
|
||||
|
||||
stop(_State) ->
|
||||
ok.
|
||||
|
|
@ -0,0 +1,42 @@
|
|||
-module(server_cb).
|
||||
|
||||
|
||||
-include_lib("diameter/include/diameter.hrl").
|
||||
-include_lib("diameter/include/diameter_gen_base_rfc6733.hrl").
|
||||
-include_lib("diameter_3gpp_ts29_272.hrl").
|
||||
%-include_lib("diameter_settings.hrl").
|
||||
|
||||
|
||||
%% diameter callbacks
|
||||
-export([peer_up/3, peer_down/3, pick_peer/4, prepare_request/3, prepare_retransmit/3,
|
||||
handle_answer/4, handle_error/4, handle_request/3]).
|
||||
|
||||
-define(UNEXPECTED, erlang:error({unexpected, ?MODULE, ?LINE})).
|
||||
|
||||
peer_up(_SvcName, {PeerRef, Caps}, State) ->
|
||||
lager:info("Peer up ~p - ~p~n", [PeerRef, lager:pr(Caps, ?MODULE)]),
|
||||
State.
|
||||
|
||||
peer_down(_SvcName, {PeerRef, Caps}, State) ->
|
||||
lager:info("Peer down ~p - ~p~n", [PeerRef, lager:pr(Caps, ?MODULE)]),
|
||||
State.
|
||||
|
||||
pick_peer(_, _, _SvcName, _State) ->
|
||||
?UNEXPECTED.
|
||||
|
||||
prepare_request(_, _SvcName, _Peer) ->
|
||||
?UNEXPECTED.
|
||||
|
||||
prepare_retransmit(_Packet, _SvcName, _Peer) ->
|
||||
?UNEXPECTED.
|
||||
|
||||
handle_answer(_Packet, _Request, _SvcName, _Peer) ->
|
||||
?UNEXPECTED.
|
||||
|
||||
handle_error(_Reason, _Request, _SvcName, _Peer) ->
|
||||
lager:error("Request error: ~p~n", [_Reason]),
|
||||
?UNEXPECTED.
|
||||
|
||||
handle_request(#diameter_packet{}, _SvcName, {_,_}) ->
|
||||
lager:error("Unsuppoerted message.~n"),
|
||||
discard.
|
Loading…
Reference in New Issue