Erlang 21

diameter_dict




erlang

diameter_dict

फ़ाइल

diameter_dict

फ़ाइल सारांश

व्यास अनुप्रयोग का शब्दकोश इंटरफ़ेस।

विवरण

व्यास के रूप में कॉन्फ़िगर की गई व्यास सेवा diameter:start_service/2 , एक या अधिक समर्थित व्यास अनुप्रयोगों को निर्दिष्ट करती है। प्रत्येक व्यास अनुप्रयोग एक शब्दकोश मॉड्यूल निर्दिष्ट करता है जो अपने संदेशों और AVPs को एन्कोड और डिकोड करना जानता है। शब्दकोश मॉड्यूल बदले में एक फ़ाइल से उत्पन्न होता है जो इन संदेशों और AVPs को परिभाषित करता है। ऐसी फाइल का FILE FORMAT नीचे FILE FORMAT में परिभाषित किया गया है। उपयोगकर्ता डिक्शनरी फ़ाइलों को बनाकर अपने विशिष्ट अनुप्रयोगों के लिए समर्थन जोड़ते हैं, या तो diameterc(1) या diameter_make(3) का उपयोग करके एरलंग मॉड्यूल के लिए उन्हें संकलित करते हैं और एक सेवा पर परिणामी शब्दकोशों मॉड्यूल को कॉन्फ़िगर करते हैं।

डिक्शनरी मॉड्यूल जेनरेशन में एक hrl फाइल भी होती है जो संदेशों के लिए रिकॉर्ड्स को परिभाषित करती है और डिक्शनरी द्वारा परिभाषित AVP के समूह, ये रिकॉर्ड्स जो व्यास एप्लिकेशन का उपयोगकर्ता भेजता है और प्राप्त करता है, modulo के अन्य संभावित प्रारूपों के रूप में diameter_app(3) में चर्चा करता है। इन रिकॉर्ड्स और डायमीटर डेटा फॉर्मेट्स के अनुरूप अंतर्निहित इरलांग डेटा प्रकारों की चर्चा क्रमशः MESSAGE RECORDS और डेटा टाइप्स में की जाती है। उत्पन्न hrl में भी संलग्न प्रकार के AVP के संभावित मूल्यों के लिए मैक्रो परिभाषाएँ हैं।

व्यास आवेदन में RFC 6733 की धारा 2.4 में परिभाषित अनुप्रयोगों के लिए संबंधित पांच शब्दकोश मॉड्यूल शामिल हैं: व्यास_जन_बेस_rfc3588 और व्यास_जन_बेस_रफेक6733 diameter_gen_base_rfc6733 लिए सामान्य संदेश अनुप्रयोग के लिए आवेदन पहचानकर्ता 0, diameter_gen_accounting (आरएफसी 3588 के लिए) और व्यास_जेन_क्रॉफ्ट_आरसी .3333 और व्यास_जन_ संबंध एप्लिकेशन पहचानकर्ता 0xFFFFFFFF के साथ रिले एप्लिकेशन।

कॉमन मैसेज और रिले एप्लिकेशन ही ऐसे अनुप्रयोग हैं जिनका व्यास खुद में कोई विशिष्ट ज्ञान है। सामान्य संदेश एप्लिकेशन का उपयोग उन संदेशों के लिए किया जाता है जो व्यास खुद को संभालते हैं: सीईआर / सीईए, डीडब्ल्यूआर / डीडब्ल्यूए और डीपीआर / डीपीए। रिले एप्लिकेशन को मैसेज और एवीपी के बाद से एन्कोड / डिकोड करने के संबंध में विशेष उपचार दिया जाता है और इसे हैंडल करने वाले विशेष रूप से परिभाषित नहीं होते हैं।

फाइल प्रारूप

एक डिक्शनरी फाइल में अलग-अलग सेक्शन होते हैं। प्रत्येक अनुभाग शून्य या अधिक तर्कों के बाद एक टैग के साथ शुरू होता है और अगले खंड या फ़ाइल के अंत में शुरू होता है। टैग में एक एम्परसेंड वर्ण शामिल होता है जो एक कीवर्ड द्वारा पीछा किया जाता है और व्हाट्सएप द्वारा उनके तर्कों से अलग किया जाता है। व्हॉट्सएप व्यक्तिगत टोकन को अलग करता है लेकिन अन्यथा महत्वहीन है।

टैग, उनके तर्क और प्रत्येक संबंधित अनुभाग की सामग्री इस प्रकार हैं। प्रत्येक अनुभाग कई बार हो सकता है जब तक कि अन्यथा निर्दिष्ट न हो। जिस क्रम में वर्गों को निर्दिष्ट किया गया है वह महत्वहीन है।

@id Number

पूर्णांक संख्या को विचाराधीन एप्लिकेशन के व्यास एप्लीकेशन आईडी के रूप में परिभाषित करता है। यदि डिक्शनरी @messages को परिभाषित करती है तो एक बार में सबसे अधिक हो सकती है और इसकी आवश्यकता है अनुभाग में रिक्त सामग्री है।

एप्लिकेशन आईडी अनुप्रयोग के आउटगोइंग संदेशों के व्यास हैडर में सेट की जाती है, और संबंधित शब्दकोश मॉड्यूल की पहचान करने के लिए एक आने वाले संदेश के हेडर में मूल्य का उपयोग किया जाता है।

उदाहरण:

@id 16777231
@name Mod

उत्पन्न शब्दकोश मॉड्यूल के नाम को परिभाषित करता है। अधिक से अधिक एक बार हो सकता है और डिक्शनरी फाइल के नाम पर किसी भी एक्सटेंशन को घटा सकते हैं। अनुभाग में रिक्त सामग्री है।

ध्यान दें कि एक शब्दकोश मॉड्यूल में एक अद्वितीय नाम होना चाहिए ताकि सिस्टम में मौजूदा मॉड्यूल से टकरा न जाए।

उदाहरण:

@name etsi_e2
@prefix Name

उत्पन्न शब्दकोश मॉड्यूल और hrl में रिकॉर्ड और निरंतर नाम ( '_' चरित्र के बाद) में जोड़े जाने वाले उपसर्ग के रूप में नाम को परिभाषित करता है। अधिक से अधिक एक बार हो सकता है। अनुभाग में रिक्त सामग्री है।

एक उपसर्ग वैकल्पिक है, लेकिन विभिन्न डायमीटर अनुप्रयोगों में समान रूप से नामित संदेशों और AVPs से उत्पन्न रिकॉर्ड और निरंतर नामों के बीच अंतर करने के लिए उपयोग किया जा सकता है।

उदाहरण:

@prefix etsi_e2
@vendor Number Name

पूर्णांक संख्या को डिफ़ॉल्ट Vendor-Id AVPs के रूप में परिभाषित करता है जिसके लिए V ध्वज सेट है। नाम दस्तावेज़ के मालिक का नाम है लेकिन अन्यथा अप्रयुक्त है। यदि एक एवीपी वी ध्वज सेट करता है और अन्यथा एक वेंडर-ईडी को नहीं सौंपा जाता है, तो यह सबसे अधिक बार हो सकता है और इसकी आवश्यकता होती है। अनुभाग में रिक्त सामग्री है।

उदाहरण:

@vendor 13019 ETSI
@avp_vendor_id Number

पूर्णांक संख्या को परिभाषित करता है, खंड सामग्री में सूचीबद्ध @vendor के विक्रेता-आईडी के रूप में, @vendor डिफ़ॉल्ट को ओवरराइड करता है। अनुभाग सामग्री में AVP नाम होते हैं।

उदाहरण:

@avp_vendor_id 2937

WWW-Auth
Domain-Index
Region-Set
@inherits Mod

एक शब्दकोश मॉड्यूल का नाम परिभाषित करता है जिसमें AVP परिभाषाएँ होती हैं जिन्हें वर्तमान शब्दकोश में आयात किया जाना चाहिए। अनुभाग सामग्री में उन एवीपी के नाम शामिल हैं जिनकी परिभाषा शब्दकोश से आयात की जानी चाहिए, एक खाली सूची जिसके कारण सभी को आयात किया जाना चाहिए। किसी भी सूचीबद्ध एवीपी को वर्तमान डिक्शनरी में परिभाषित नहीं किया जाना चाहिए और एक से अधिक डिक्शनरी से एक ही एवीपी को प्राप्त करना एक त्रुटि है।

ध्यान दें कि एक विरासत वाला AVP जो V फ्लैग सेट करता है, उसके Vendor-Id को विरासत में दिए गए डिक्शनरी में @vendor या विरासत वाले डिक्शनरी में ले लेता है। विशेष रूप से, विरासत में दिए गए शब्दकोश में @avp_vendor_id को अनदेखा किया गया है। एक शब्दकोश से @vendor करना जो आवश्यक @vendor को निर्दिष्ट करता है, @vendor का उपयोग शब्दकोश की परिभाषाओं की एक प्रति के साथ करने के बराबर है, लेकिन पूर्व आसान पुन: उपयोग के लिए बनाता है।

सभी शब्दकोशों को आमतौर पर RFC 6733 AVP को व्यास_जन_बेस_रैफ़6767 से प्राप्त करना चाहिए।

उदाहरण:

@inherits diameter_gen_base_rfc6733
@avp_types

नाम, कोड, प्रकार और व्यक्तिगत एवीपी के झंडे को परिभाषित करता है। अनुभाग में प्रपत्र की परिभाषाएँ हैं

Name Code Type Flags

जहाँ कोड पूर्णांक AVP कोड है, टाइप करें नीचे दिए गए अनुभाग DATA TYPES में परिभाषित AVP डेटा फॉर्मेट की पहचान करता है, और फ्लैग V, M और P वर्णों का एक स्ट्रिंग है जो झंडे को एक आउटगोइंग AVP या एकल '-' पर सेट होने का संकेत देता है '-' (माइनस) वर्ण यदि कोई भी सेट नहीं करना है।

उदाहरण:

@avp_types

Location-Information   350  Grouped     MV
Requested-Information  353  Enumerated   V
चेतावनी

R ध्वज को RFC 6733 द्वारा चित्रित किया गया है।

@custom_types Mod

AVPs निर्दिष्ट करता है जिसके लिए मॉड्यूल मॉड एन्कोड / डीकोड फ़ंक्शन प्रदान करता है। अनुभाग सामग्री में AVP नाम होते हैं। प्रत्येक ऐसे नाम के लिए, Mod:Name(encode|decode, Type, Data, Opts) एवीपी के मूल्यों के लिए एनकोड / डीकोड प्रदान करने की उम्मीद है, जहां नाम एवीपी का नाम है, टाइप यह @avp_types में घोषित प्रकार है शब्दकोश के @avp_types अनुभाग, डेटा को एन्कोड / डिकोड करने के लिए मान है, और Opts एक शब्द है जिसे एनकोड / डिकोड के माध्यम से पारित किया जाता है।

उदाहरण:

@custom_types rfc4005_avps

Framed-IP-Address
@codecs Mod

@custom_types तरह, लेकिन Mod:Type(encode|decode, Name, Data, Opts) को निर्यात करने के लिए निर्दिष्ट मॉड्यूल की आवश्यकता होती है Mod:Type(encode|decode, Name, Data, Opts) @custom_types Mod:Type(encode|decode, Name, Data, Opts) बजाय Mod:Name(encode|decode, Type, Data, Opts)

उदाहरण:

@codecs rfc4005_avps

Framed-IP-Address
@messages

एप्लिकेशन के संदेशों को परिभाषित करता है। अनुभाग सामग्री में RFC 6733, "कमांड कोड प्रारूप विनिर्देश" की धारा 3.2 में निर्दिष्ट प्रपत्र की परिभाषाएँ हैं।

@messages

RTR ::= < Diameter Header: 287, REQ, PXY >
        < Session-Id >
        { Auth-Application-Id }
        { Auth-Session-State }
        { Origin-Host }
        { Origin-Realm }
        { Destination-Host }
        { SIP-Deregistration-Reason }
        [ Destination-Realm ]
        [ User-Name ]
      * [ SIP-AOR ]
      * [ Proxy-Info ]
      * [ Route-Record ]
      * [ AVP ]

RTA ::= < Diameter Header: 287, PXY >
        < Session-Id >
        { Auth-Application-Id }
        { Result-Code }
        { Auth-Session-State }
        { Origin-Host }
        { Origin-Realm }
        [ Authorization-Lifetime ]
        [ Auth-Grace-Period ]
        [ Redirect-Host ]
        [ Redirect-Host-Usage ]
        [ Redirect-Max-Cache-Time ]
      * [ Proxy-Info ]
      * [ Route-Record ]
      * [ AVP ]
@grouped

समूह के प्रकार वाले एवीपी की सामग्री को परिभाषित करता है। अनुभाग सामग्री में RFC 6733, "समूहीकृत AVP मान" की धारा 4.4 में निर्दिष्ट प्रपत्र की परिभाषाएँ हैं।

उदाहरण:

@grouped

SIP-Deregistration-Reason ::= < AVP Header: 383 >
                              { SIP-Reason-Code }
                              [ SIP-Reason-Info ]
                            * [ AVP ]

एक वर्गीकृत एवीपी की परिभाषा में एक विक्रेता-आईडी निर्दिष्ट करना इसे @avp_vendor_id साथ निर्दिष्ट करने के बराबर है।

@enum Name

एवीपी नाम के मानों को परिभाषित करता है जैसे एनुमरेटेड। अनुभाग सामग्री में नाम और संबंधित पूर्णांक मान शामिल हैं। हेक्साडेसिमल के रूप में व्याख्या किए जाने के लिए पूर्णांक मान को 0x के साथ उपसर्ग किया जा सकता है।

ध्यान दें कि प्रश्न में एवीपी को विरासत में एक डिक्शनरी में परिभाषित किया जा सकता है ताकि किसी अन्य डिक्शनरी में अतिरिक्त मानों को लागू किया जा सके।

उदाहरण:

@enum SIP-Reason-Code

PERMANENT_TERMINATION    0
NEW_SIP_SERVER_ASSIGNED  1
SIP_SERVER_CHANGE        2
REMOVE_SIP_SERVER        3
@end

समाप्त करने के लिए शब्दकोश का कारण बनता है: किसी भी शेष सामग्री को नजरअंदाज कर दिया जाता है।

टिप्पणियों को अर्धविराम का उपयोग करके एक शब्दकोश फ़ाइल में शामिल किया जा सकता है: अर्धविराम से पंक्ति के अंत तक के पात्रों को अनदेखा किया जाता है।

संदेश रिकॉर्ड

शब्दकोश विनिर्देश से उत्पन्न घंटा संदेशों के लिए रिकॉर्ड को परिभाषित करता है और @messages और @grouped समूह में परिभाषित @messages को @grouped करता है। प्रत्येक संदेश या समूहित AVP परिभाषा के लिए, एक रिकॉर्ड परिभाषित किया जाता है जिसका नाम संदेश या AVP नाम है, जो किसी भी उपसर्ग के साथ उपसर्ग के साथ @prefix उपसर्ग के साथ परिभाषित किया @prefix , और जिसके क्षेत्र संदेश में निहित AVP के नाम हैं या क्रम में AVP समूहीकृत हैं प्रश्न में परिभाषा में निर्दिष्ट। उदाहरण के लिए, समूहीकृत एवीपी

SIP-Deregistration-Reason ::= < AVP Header: 383 >
                              { SIP-Reason-Code }
                              [ SIP-Reason-Info ]
                            * [ AVP ]

एक खाली उपसर्ग दिए गए निम्नलिखित रिकॉर्ड परिभाषा में परिणाम देगा।

-record('SIP-Deregistration-Reason', {'SIP-Reason-Code',
                                      'SIP-Reason-Info',
                                      'AVP'}).

उत्पन्न रिकॉर्ड के क्षेत्रों में एन्कोड किए गए मान एवीपी के प्रकार और संख्या पर निर्भर करते हैं। विशेष रूप से, एक एवीपी, जो एवीपी के प्रकार के मूल्य के रूप में एन्कोडेड है, एक एवीपी के रूप में निर्दिष्ट किया जाता है, जबकि एवीपी किसी भी अन्य विनिर्देश के साथ एवीपी के प्रकार के मूल्यों की सूची के रूप में एन्कोड किया जाता है। एवीपी का प्रकार एवीपी परिभाषा में निर्दिष्ट है, नीचे वर्णित आरएफसी 6733 प्रकार।

जानकारी का प्रकार

RFC 6733 के खंड 4.2 ("मूल AVP डेटा प्रारूप") और 4.3 ("व्युत्पन्न AVP डेटा प्रारूप") में परिभाषित डेटा प्रारूप यहां परिभाषित किए गए प्रकारों के मानों के रूप में एन्कोड किए गए हैं। मानों को diameter:call/4 भेज दिया जाता diameter:call/4 अनुरोध भेजते समय अनुरोध रिकॉर्ड में diameter:call/4 , परिणामस्वरूप उत्तर रिकॉर्ड में वापस आ जाता है और आने वाले अनुरोध के रिसेप्शन पर एक handle_request/3 कॉलबैक में पारित किया जाता है।

जिन मामलों में ऑक्टेस्ट्रिंग () और व्युत्पन्न प्रकारों के लिए स्ट्रिंग () और बाइनरी () प्रकारों के बीच एक विकल्प होता है, प्रतिनिधित्व diameter:service_opt() के मूल्य से निर्धारित diameter:service_opt() string_decode

मूल AVP डेटा प्रारूप

OctetString() = string() | binary()
Integer32()   = -2147483647..2147483647
Integer64()   = -9223372036854775807..9223372036854775807
Unsigned32()  = 0..4294967295
Unsigned64()  = 0..18446744073709551615
Float32()     = '-infinity' | float() | infinity
Float64()     = '-infinity' | float() | infinity
Grouped()     = record()

एन्कोड करने पर, एक ऑक्टेटस्ट्रिंग () को आयोलिस्ट () के रूप में निर्दिष्ट किया जा सकता है, अत्यधिक बड़े फ़्लोट्स (पूर्ण मान में) infinity या '-infinity' बराबर होते हैं और अत्यधिक बड़े पूर्णांक एनकोड विफलता के परिणामस्वरूप होते हैं। समूहित AVP के रिकॉर्ड पिछले अनुभाग में चर्चा किए गए हैं।

व्युत्पन्न AVP डेटा प्रारूप

Address() = OctetString()
          | tuple()

एनकोड पर, एक ऑक्टेटस्ट्रिंग () IPv4 एड्रेस सामान्य xxxx फॉर्मेट में पार्स किया जाता है, जबकि IPv6 एड्रेस RFC 2373 के सेक्शन 2.2, "टेक्स्ट रिप्रेजेंटेशन ऑफ एड्रेसेस" के सेक्शन 2.2 द्वारा निर्दिष्ट किसी भी फॉर्मेट में पार्स किया जाता है। IPv4 tuple () की लंबाई 4 है और इसमें प्रकार का मान 0..255 है। एक IPv6 टुपल () की लंबाई 8 है और इसमें प्रकार 0..65535 का मान है। टपल प्रतिनिधित्व का उपयोग डिकोड पर किया जाता है।

Time() = {date(), time()}

where

  date() = {Year, Month, Day}
  time() = {Hour, Minute, Second}

  Year   = integer()
  Month  = 1..12
  Day    = 1..31
  Hour   = 0..23
  Minute = 0..59
  Second = 0..59

इसके अतिरिक्त, जो एन्कोड किए जा सकते हैं, उन्हें RFC 2030 से आवश्यक एक्सटेंशन के साथ RFC 6733 द्वारा आवश्यक के रूप में चार ऑक्टेट के रूप में उनके एन्कोडिंग के माध्यम से सीमित किया जाता है। विशेष रूप से, {{1968,1,20},{3,14,8}} बीच केवल मान {{1968,1,20},{3,14,8}} और {{2104,2,26},{9,42,23}} (दोनों समावेशी) एन्कोड किया जा सकता है।

UTF8String() = [integer()] | binary()

सूची तत्व स्ट्रिंग में अलग-अलग वर्णों के UTF-8 एनकोडिंग हैं। अमान्य कोडपॉइंट्स के परिणामस्वरूप एन्कोड / डिकोड विफलता होगी। सांकेतिक शब्दों में बदलना, एक UTF8String () द्विआधारी के रूप में, या बायनेरिज़ और कोडपॉइंट्स की नेस्टेड सूची के रूप में निर्दिष्ट किया जा सकता है।

DiameterIdentity() = OctetString()

एक मान की लंबाई कम से कम 1 होनी चाहिए।

DiameterURI() = OctetString()
              | #diameter_URI{type = Type,
                              fqdn = FQDN,
                              port = Port,
                              transport = Transport,
                              protocol  = Protocol}

where

  Type = aaa | aaas
  FQDN = OctetString()
  Port = integer()
  Transport = sctp | tcp
  Protocol  = diameter | radius | 'tacacs+'

सांकेतिक शब्दों में बदलना, बंदरगाह, परिवहन और प्रोटोकॉल क्रमशः 3868, sctp और व्यास पर डिफ़ॉल्ट। एक ऑक्टेटस्ट्रिंग-वैल्यू डायमीटरुरि () का व्याकरण RFC 6733 के खंड 4.3 में निर्दिष्ट है। रिकॉर्ड प्रतिनिधित्व डिकोड पर उपयोग किया जाता है।

Enumerated() = Integer32()

सांकेतिक शब्दों में बदलना, शब्दकोश की hrl फ़ाइल में परिभाषित मैक्रोज़ का उपयोग करके मूल्यों को निर्दिष्ट किया जा सकता है।

IPFilterRule()  = OctetString()
QoSFilterRule() = OctetString()

इस प्रकार के मान वर्तमान में व्यास द्वारा पार्स नहीं किए गए हैं।

यह भी देखें

diameterc(1) , diameter(3) , diameter_app(3) , diameter_codec(3) , diameter_make(3)