diameter_interface/modeling/message/
dictionary.rs

1/*
2Author: Mr. Jason Lee -> https://github.com/lwlee2608/diameter-rs
3Updated by: Ahmed Mehanna -> https://github.com/AhmedMehanna1/diameter-protocol
4 */
5
6use crate::modeling::avp::avp::AvpType;
7use crate::modeling::message::application_id::ApplicationId;
8use crate::modeling::message::command_code::CommandCode;
9use lazy_static::lazy_static;
10use serde::Deserialize;
11use serde_xml_rs::from_str;
12use std::collections::{BTreeMap, HashMap};
13use std::sync::RwLock;
14
15#[derive(Debug)]
16pub struct Dictionary {
17    avps: BTreeMap<AvpKey, AvpDefinition>,
18    applications: HashMap<String, ApplicationId>,
19    commands: HashMap<String, CommandCode>,
20}
21
22#[derive(Debug, Clone, PartialEq, Eq, PartialOrd, Ord)]
23pub enum AvpKey {
24    Code(u32),
25    CodeAndVendor(u32, u32),
26}
27
28#[derive(Debug)]
29pub struct AvpDefinition {
30    pub code: u32,
31    pub vendor_id: Option<u32>,
32    pub name: String,
33    pub avp_type: AvpType,
34    pub m_flag: bool,
35}
36
37impl Dictionary {
38    pub fn new(xmls: &[&str]) -> Self {
39        let mut dict = Dictionary {
40            avps: BTreeMap::new(),
41            applications: HashMap::new(),
42            commands: HashMap::new(),
43        };
44
45        for xml in xmls {
46            dict.load_xml(xml)
47        }
48
49        dict
50    }
51
52    pub fn load_xml(&mut self, xml: &str) {
53        parse(xml, self);
54    }
55
56    pub fn add_avp(&mut self, avp: AvpDefinition) {
57        let code: u32 = avp.code;
58        match avp.vendor_id {
59            Some(vendor_id) => {
60                self.avps
61                    .insert(AvpKey::CodeAndVendor(code, vendor_id), avp);
62            }
63            None => {
64                self.avps.insert(AvpKey::Code(code), avp);
65            }
66        }
67    }
68
69    pub fn get_avp(&self, code: u32, vendor_id: Option<u32>) -> Option<&AvpDefinition> {
70        let key = match vendor_id {
71            Some(vendor_id) => AvpKey::CodeAndVendor(code, vendor_id),
72            None => AvpKey::Code(code),
73        };
74        self.avps.get(&key)
75    }
76
77    pub fn get_avp_by_name(&self, name: &str) -> Option<&AvpDefinition> {
78        // Might consider indexing avp.name
79        self.avps.values().find(|avp| avp.name == name)
80    }
81
82    pub fn get_avp_type(&self, code: u32, vendor_id: Option<u32>) -> Option<&AvpType> {
83        let key = match vendor_id {
84            Some(vendor_id) => AvpKey::CodeAndVendor(code, vendor_id),
85            None => AvpKey::Code(code),
86        };
87        match self.avps.get(&key) {
88            Some(avp) => Some(&avp.avp_type),
89            None => None,
90        }
91    }
92
93    pub fn get_avp_name(&self, code: u32, vendor_id: Option<u32>) -> Option<&str> {
94        let key = match vendor_id {
95            Some(vendor_id) => AvpKey::CodeAndVendor(code, vendor_id),
96            None => AvpKey::Code(code),
97        };
98        match self.avps.get(&key) {
99            Some(avp) => Some(&avp.name),
100            None => None,
101        }
102    }
103}
104
105#[derive(Debug, Deserialize, PartialEq)]
106struct Diameter {
107    #[serde(rename = "application")]
108    applications: Vec<Application>,
109}
110
111#[derive(Debug, Deserialize, PartialEq)]
112struct Application {
113    id: String,
114    name: String,
115    #[serde(rename = "command", default)]
116    commands: Vec<Command>,
117    #[serde(rename = "avp", default)]
118    avps: Vec<Avp>,
119}
120
121#[derive(Debug, Deserialize, PartialEq)]
122struct Command {
123    code: String,
124    short: String,
125    name: String,
126    request: CommandDetail,
127    answer: CommandDetail,
128}
129
130#[derive(Debug, Deserialize, PartialEq)]
131struct CommandDetail {
132    #[serde(rename = "rule", default)]
133    rules: Vec<Rule>,
134}
135
136#[derive(Debug, Deserialize, PartialEq)]
137struct Rule {
138    avp: String,
139    required: String,
140    max: Option<String>,
141    min: Option<String>,
142}
143
144#[derive(Debug, Deserialize, PartialEq)]
145struct Avp {
146    name: String,
147    code: String,
148    must: Option<String>,
149    may: Option<String>,
150    #[serde(rename = "must-not")]
151    must_not: Option<String>,
152    #[serde(rename = "may-encrypt")]
153    may_encrypt: Option<String>,
154    #[serde(rename = "vendor-id")]
155    vendor_id: Option<String>,
156    data: Data,
157}
158
159#[derive(Debug, Deserialize, PartialEq)]
160struct Data {
161    #[serde(rename = "type")]
162    data_type: String,
163    #[serde(default)]
164    item: Vec<Item>,
165}
166
167#[derive(Debug, Deserialize, PartialEq)]
168struct Item {
169    code: String,
170    name: String,
171}
172
173pub fn parse(xml: &str, dictionary: &mut Dictionary) {
174    let dict: Diameter = from_str(xml).unwrap();
175
176    dict.applications.iter().for_each(|app| {
177        let app_id = app.id.parse::<u32>().unwrap();
178        let app_id: ApplicationId = ApplicationId::try_from(app_id).unwrap();
179        dictionary.applications.insert(app.name.clone(), app_id);
180
181        app.commands.iter().for_each(|cmd| {
182            let cmd_code = cmd.code.parse::<u32>().unwrap();
183            let cmd_code: CommandCode = CommandCode::try_from(cmd_code).unwrap();
184            dictionary.commands.insert(cmd.name.clone(), cmd_code);
185        });
186
187        app.avps.iter().for_each(|avp| {
188            let avp_type = match avp.data.data_type.as_str() {
189                "UTF8String" => AvpType::UTF8String,
190                "OctetString" => AvpType::OctetString,
191                "Integer32" => AvpType::Integer32,
192                "Integer64" => AvpType::Integer64,
193                "Unsigned32" => AvpType::Unsigned32,
194                "Unsigned64" => AvpType::Unsigned64,
195                "Enumerated" => AvpType::Enumerated,
196                "Grouped" => AvpType::Grouped,
197                "DiameterIdentity" => AvpType::Identity,
198                "DiameterURI" => AvpType::DiameterURI,
199                "Time" => AvpType::Time,
200                "IPv4" => AvpType::AddressIPv4,
201                "IPv6" => AvpType::AddressIPv6,
202                "Float32" => AvpType::Float32,
203                "Float64" => AvpType::Float64,
204                _ => AvpType::Unknown,
205            };
206
207            let flags: Vec<&str> = match avp.must {
208                Some(ref s) => s.split(',').collect(),
209                None => vec![],
210            };
211            let m_flag = if flags.contains(&"M") { true } else { false };
212            let vendor_id = match avp.vendor_id {
213                Some(ref s) => Some(s.parse::<u32>().unwrap()),
214                None => None,
215            };
216
217            let avp_definition = AvpDefinition {
218                code: avp.code.parse::<u32>().unwrap(),
219                vendor_id,
220                name: avp.name.clone(),
221                avp_type,
222                m_flag,
223            };
224
225            dictionary.add_avp(avp_definition);
226        });
227    });
228}
229lazy_static! {
230    pub static ref DEFAULT_DICT: RwLock<Dictionary> = {
231        let xml = &DEFAULT_DICT_XML;
232        let dictionary = Dictionary::new(&[&xml]);
233        RwLock::new(dictionary)
234    };
235    pub static ref DEFAULT_DICT_XML: &'static str = {
236        let xml = r#"
237<diameter>
238	<application id="4" type="auth" name="Charging Control">
239		<!-- Diameter Credit Control Application -->
240		<!-- http://tools.ietf.org/html/rfc4006 -->
241
242		<command code="272" short="CC" name="Credit-Control">
243			<request>
244				<!-- http://tools.ietf.org/html/rfc4006#section-3.1 -->
245				<rule avp="Session-Id" required="true" max="1"/>
246				<rule avp="Origin-Host" required="true" max="1"/>
247				<rule avp="Origin-Realm" required="true" max="1"/>
248				<rule avp="Destination-Realm" required="true" max="1"/>
249				<rule avp="Auth-Application-Id" required="true" max="1"/>
250				<rule avp="Service-Context-Id" required="true" max="1"/>
251				<rule avp="CC-Request-Type" required="true" max="1"/>
252				<rule avp="CC-Request-Number" required="true" max="1"/>
253				<rule avp="Destination-Host" required="false" max="1"/>
254				<rule avp="User-Name" required="false" max="1"/>
255				<rule avp="CC-Sub-Session-Id" required="false" max="1"/>
256				<rule avp="Acct-Multi-Session-Id" required="false" max="1"/>
257				<rule avp="Origin-State-Id" required="false" max="1"/>
258				<rule avp="Event-Timestamp" required="false" max="1"/>
259				<rule avp="Subscription-Id" required="false" max="1"/>
260				<rule avp="Service-Identifier" required="false" max="1"/>
261				<rule avp="Termination-Cause" required="false" max="1"/>
262				<rule avp="Requested-Service-Unit" required="false" max="1"/>
263				<rule avp="Requested-Action" required="false" max="1"/>
264				<rule avp="Used-Service-Unit" required="false" max="1"/>
265				<rule avp="Multiple-Services-Indicator" required="false" max="1"/>
266				<rule avp="Multiple-Services-Credit-Control" required="false" max="1"/>
267				<rule avp="Service-Parameter-Info" required="false" max="1"/>
268				<rule avp="CC-Correlation-Id" required="false" max="1"/>
269				<rule avp="User-Equipment-Info" required="false" max="1"/>
270				<rule avp="Proxy-Info" required="false" max="1"/>
271				<rule avp="Route-Record" required="false" max="1"/>
272				<rule avp="Service-Information" required="false" max="1"/>
273			</request>
274			<answer>
275				<!-- http://tools.ietf.org/html/rfc4006#section-3.2 -->
276				<rule avp="Session-Id" required="true" max="1"/>
277				<rule avp="Result-Code" required="true" max="1"/>
278				<rule avp="Origin-Host" required="true" max="1"/>
279				<rule avp="Origin-Realm" required="true" max="1"/>
280				<rule avp="CC-Request-Type" required="true" max="1"/>
281				<rule avp="CC-Request-Number" required="true" max="1"/>
282				<rule avp="User-Name" required="false" max="1"/>
283				<rule avp="CC-Session-Failover" required="false" max="1"/>
284				<rule avp="CC-Sub-Session-Id" required="false" max="1"/>
285				<rule avp="Acct-Multi-Session-Id" required="false" max="1"/>
286				<rule avp="Origin-State-Id" required="false" max="1"/>
287				<rule avp="Event-Timestamp" required="false" max="1"/>
288				<rule avp="Granted-Service-Unit" required="false" max="1"/>
289				<rule avp="Multiple-Services-Credit-Control" required="false" max="1"/>
290				<rule avp="Cost-Information" required="false" max="1"/>
291				<rule avp="Final-Unit-Indication" required="false" max="1"/>
292				<rule avp="Check-Balance-Result" required="false" max="1"/>
293				<rule avp="Credit-Control-Failure-Handling" required="false" max="1"/>
294				<rule avp="Direct-Debiting-Failure-Handling" required="false" max="1"/>
295				<rule avp="Validity-Time" required="false" max="1"/>
296				<rule avp="Redirect-Host" required="false" max="1"/>
297				<rule avp="Redirect-Host-Usage" required="false" max="1"/>
298				<rule avp="Redirect-Max-Cache-Time" required="false" max="1"/>
299				<rule avp="Proxy-Info" required="false" max="1"/>
300				<rule avp="Route-Record" required="false" max="1"/>
301				<rule avp="Failed-AVP" required="false" max="1"/>
302			</answer>
303		</command>
304    </application>
305
306    <application id="0" name="Base">
307		<command code="257" short="CE" name="Capabilities-Exchange">
308			<request>
309				<rule avp="Origin-Host" required="true" max="1"/>
310				<rule avp="Origin-Realm" required="true" max="1"/>
311				<rule avp="Host-IP-Address" required="true" min="1"/>
312				<rule avp="Vendor-Id" required="true" max="1"/>
313				<rule avp="Product-Name" required="true" max="1"/>
314				<rule avp="Origin-State-Id" required="false" max="1"/>
315				<rule avp="Supported-Vendor-Id" required="False"/>
316				<rule avp="Auth-Application-Id" required="False"/>
317				<rule avp="Inband-Security-Id" required="False"/>
318				<rule avp="Acct-Application-Id" required="False"/>
319				<rule avp="Vendor-Specific-Application-Id" required="False"/>
320				<rule avp="Firmware-Revision" required="False" max="1"/>
321			</request>
322			<answer>
323				<rule avp="Result-Code" required="true" max="1"/>
324				<rule avp="Origin-Host" required="true" max="1"/>
325				<rule avp="Origin-Realm" required="true" max="1"/>
326				<rule avp="Host-IP-Address" required="true" min="1"/>
327				<rule avp="Vendor-Id" required="true" max="1"/>
328				<rule avp="Product-Name" required="true" max="1"/>
329				<rule avp="Origin-State-Id" required="false" max="1"/>
330				<rule avp="Error-Message" required="false" max="1"/>
331				<rule avp="Failed-AVP" required="false" max="1"/>
332				<rule avp="Supported-Vendor-Id" required="False"/>
333				<rule avp="Auth-Application-Id" required="False"/>
334				<rule avp="Inband-Security-Id" required="False"/>
335				<rule avp="Acct-Application-Id" required="False"/>
336				<rule avp="Vendor-Specific-Application-Id" required="False"/>
337				<rule avp="Firmware-Revision" required="False" max="1"/>
338			</answer>
339		</command>
340
341		<command code="258" short="RA" name="Re-Auth">
342			<request>
343				<rule avp="Session-Id" required="true" max="1"/>
344				<rule avp="Origin-Host" required="true" max="1"/>
345				<rule avp="Origin-Realm" required="true" max="1"/>
346				<rule avp="Destination-Realm" required="true" max="1"/>
347				<rule avp="Destination-Host" required="true" max="1"/>
348				<rule avp="Auth-Application-Id" required="true" max="1"/>
349				<rule avp="Re-Auth-Request-Type" required="true" max="1"/>
350				<rule avp="User-Name" required="false" max="1"/>
351				<rule avp="Origin-State-Id" required="false" max="1"/>
352				<rule avp="Proxy-Info" required="false"/>
353				<rule avp="Route-Record" required="false"/>
354			</request>
355			<answer>
356				<rule avp="Session-Id" required="true" max="1"/>
357				<rule avp="Result-Code" required="true" max="1"/>
358				<rule avp="Origin-Host" required="true" max="1"/>
359				<rule avp="Origin-Realm" required="true" max="1"/>
360				<rule avp="User-Name" required="false" max="1"/>
361				<rule avp="Origin-State-Id" required="false" max="1"/>
362				<rule avp="Error-Message" required="false" max="1"/>
363				<rule avp="Error-Reporting-Host" required="false" max="1"/>
364				<rule avp="Failed-AVP" required="false" max="1"/>
365				<rule avp="Redirect-Host" required="false"/>
366				<rule avp="Redirect-Host-Usage" required="false" max="1"/>
367				<rule avp="Redirect-Max-Cache-Time" required="false" max="1"/>
368				<rule avp="Proxy-Info" required="false"/>
369			</answer>
370		</command>
371
372		<command code="271" short="AC" name="Accounting">
373			<request>
374				<rule avp="Session-Id" required="true" max="1"/>
375				<rule avp="Origin-Host" required="true" max="1"/>
376				<rule avp="Origin-Realm" required="true" max="1"/>
377				<rule avp="Destination-Realm" required="true" max="1"/>
378				<rule avp="Accounting-Record-Type" required="true" max="1"/>
379				<rule avp="Accounting-Record-Number" required="true" max="1"/>
380				<rule avp="Acct-Application-Id" required="false" max="1"/>
381				<rule avp="Vendor-Specific-Application-Id" required="false" max="1"/>
382				<rule avp="User-Name" required="false" max="1"/>
383				<rule avp="Destination-Host" required="false" max="1"/>
384				<rule avp="Accounting-Sub-Session-Id" required="false" max="1"/>
385				<rule avp="Acct-Session-Id" required="false" max="1"/>
386				<rule avp="Acct-Multi-Session-Id" required="false" max="1"/>
387				<rule avp="Acct-Interim-Interval" required="false" max="1"/>
388				<rule avp="Accounting-Realtime-Required" required="false" max="1"/>
389				<rule avp="Origin-State-Id" required="false" max="1"/>
390				<rule avp="Event-Timestamp" required="false" max="1"/>
391				<rule avp="Proxy-Info" required="false"/>
392				<rule avp="Route-Record" required="false"/>
393			</request>
394			<answer>
395				<rule avp="Session-Id" required="true" max="1"/>
396				<rule avp="Result-Code" required="true" max="1"/>
397				<rule avp="Origin-Host" required="true" max="1"/>
398				<rule avp="Origin-Realm" required="true" max="1"/>
399				<rule avp="Accounting-Record-Type" required="true" max="1"/>
400				<rule avp="Accounting-Record-Number" required="true" max="1"/>
401				<rule avp="Acct-Application-Id" required="false" max="1"/>
402				<rule avp="Vendor-Specific-Application-Id" required="false" max="1"/>
403				<rule avp="User-Name" required="false" max="1"/>
404				<rule avp="Accounting-Sub-Session-Id" required="false" max="1"/>
405				<rule avp="Acct-Session-Id" required="false" max="1"/>
406				<rule avp="Acct-Multi-Session-Id" required="false" max="1"/>
407				<rule avp="Error-Message" required="false" max="1"/>
408				<rule avp="Error-Reporting-Host" required="false" max="1"/>
409				<rule avp="Failed-AVP" required="false" max="1"/>
410				<rule avp="Acct-Interim-Interval" required="false" max="1"/>
411				<rule avp="Accounting-Realtime-Required" required="false" max="1"/>
412				<rule avp="Origin-State-Id" required="false" max="1"/>
413				<rule avp="Event-Timestamp" required="false" max="1"/>
414				<rule avp="Proxy-Info" required="false"/>
415			</answer>
416		</command>
417
418		<command code="274" short="AS" name="Abort-Session">
419			<request>
420				<rule avp="Session-Id" required="true" max="1"/>
421				<rule avp="Origin-Host" required="true" max="1"/>
422				<rule avp="Origin-Realm" required="true" max="1"/>
423				<rule avp="Destination-Realm" required="true" max="1"/>
424				<rule avp="Destination-Host" required="true" max="1"/>
425				<rule avp="Auth-Application-Id" required="true" max="1"/>
426				<rule avp="User-Name" required="false" max="1"/>
427				<rule avp="Origin-State-Id" required="false" max="1"/>
428				<rule avp="Proxy-Info" required="false"/>
429				<rule avp="Route-Record" required="false"/>
430			</request>
431			<answer>
432				<rule avp="Session-Id" required="true" max="1"/>
433				<rule avp="Result-Code" required="true" max="1"/>
434				<rule avp="Origin-Host" required="true" max="1"/>
435				<rule avp="Origin-Realm" required="true" max="1"/>
436				<rule avp="User-Name" required="false" max="1"/>
437				<rule avp="Origin-State-Id" required="false" max="1"/>
438				<rule avp="Error-Message" required="false" max="1"/>
439				<rule avp="Error-Reporting-Host" required="false" max="1"/>
440				<rule avp="Failed-AVP" required="false" max="1"/>
441				<rule avp="Redirect-Host" required="false"/>
442				<rule avp="Redirect-Host-Usage" required="false" max="1"/>
443				<rule avp="Redirect-Max-Cache-Time" required="false" max="1"/>
444				<rule avp="Proxy-Info" required="false"/>
445			</answer>
446		</command>
447
448		<command code="275" short="ST" name="Session-Termination">
449			<request>
450				<rule avp="Session-Id" required="true" max="1"/>
451				<rule avp="Origin-Host" required="true" max="1"/>
452				<rule avp="Origin-Realm" required="true" max="1"/>
453				<rule avp="Destination-Realm" required="true" max="1"/>
454				<rule avp="Auth-Application-Id" required="true" max="1"/>
455				<rule avp="Termination-Cause" required="true" max="1"/>
456				<rule avp="User-Name" required="false" max="1"/>
457				<rule avp="Destination-Host" required="false" max="1"/>
458				<rule avp="Class" required="false"/>
459				<rule avp="Origin-State-Id" required="false" max="1"/>
460				<rule avp="Proxy-Info" required="false"/>
461				<rule avp="Route-Record" required="false"/>
462			</request>
463			<answer>
464				<rule avp="Session-Id" required="true" max="1"/>
465				<rule avp="Result-Code" required="true" max="1"/>
466				<rule avp="Origin-Host" required="true" max="1"/>
467				<rule avp="Origin-Realm" required="true" max="1"/>
468				<rule avp="User-Name" required="false" max="1"/>
469				<rule avp="Class" required="false"/>
470				<rule avp="Error-Message" required="false" max="1"/>
471				<rule avp="Error-Reporting-Host" required="false" max="1"/>
472				<rule avp="Failed-AVP" required="false" max="1"/>
473				<rule avp="Origin-State-Id" required="false" max="1"/>
474				<rule avp="Redirect-Host" required="false"/>
475				<rule avp="Redirect-Host-Usage" required="false" max="1"/>
476				<rule avp="Redirect-Max-Cache-Time" required="false" max="1"/>
477				<rule avp="Proxy-Info" required="false"/>
478			</answer>
479		</command>
480
481		<command code="280" short="DW" name="Device-Watchdog">
482			<request>
483				<rule avp="Origin-Host" required="true" max="1"/>
484				<rule avp="Origin-Realm" required="true" max="1"/>
485				<rule avp="Origin-State-Id" required="false" max="1"/>
486			</request>
487			<answer>
488				<rule avp="Result-Code" required="true" max="1"/>
489				<rule avp="Origin-Host" required="true" max="1"/>
490				<rule avp="Origin-Realm" required="true" max="1"/>
491				<rule avp="Error-Message" required="false" max="1"/>
492				<rule avp="Failed-AVP" required="false" max="1"/>
493				<rule avp="Origin-State-Id" required="false" max="1"/>
494			</answer>
495		</command>
496
497		<command code="282" short="DP" name="Disconnect-Peer">
498			<request>
499				<rule avp="Origin-Host" required="true" max="1"/>
500				<rule avp="Origin-Realm" required="true" max="1"/>
501				<rule avp="Disconnect-Cause" required="false" max="1"/>
502			</request>
503			<answer>
504				<rule avp="Result-Code" required="true" max="1"/>
505				<rule avp="Origin-Host" required="true" max="1"/>
506				<rule avp="Origin-Realm" required="true" max="1"/>
507				<rule avp="Error-Message" required="false" max="1"/>
508				<rule avp="Failed-AVP" required="false" max="1"/>
509			</answer>
510		</command>
511
512		<avp name="Acct-Interim-Interval" code="85" must="M" may="P" must-not="V" may-encrypt="Y">
513			<data type="Unsigned32"/>
514		</avp>
515
516		<avp name="Accounting-Realtime-Required" code="483" must="M" may="P" must-not="V" may-encrypt="Y">
517			<data type="Enumerated">
518				<item code="1" name="DELIVER_AND_GRANT"/>
519				<item code="2" name="GRANT_AND_STORE"/>
520				<item code="3" name="GRANT_AND_LOSE"/>
521			</data>
522		</avp>
523
524		<avp name="Acct-Multi-Session-Id" code="50" must="M" may="P" must-not="V" may-encrypt="Y">
525			<data type="UTF8String"/>
526		</avp>
527
528		<avp name="Accounting-Record-Number" code="485" must="M" may="P" must-not="V" may-encrypt="Y">
529			<data type="Unsigned32"/>
530		</avp>
531
532		<avp name="Accounting-Record-Type" code="480" must="M" may="P" must-not="V" may-encrypt="Y">
533			<data type="Enumerated">
534				<item code="1" name="EVENT_RECORD"/>
535				<item code="2" name="START_RECORD"/>
536				<item code="3" name="INTERIM_RECORD"/>
537				<item code="4" name="STOP_RECORD"/>
538			</data>
539		</avp>
540
541		<avp name="Accounting-Session-Id" code="44" must="M" may="P" must-not="V" may-encrypt="Y">
542			<data type="OctetString"/>
543		</avp>
544
545		<avp name="Accounting-Sub-Session-Id" code="287" must="M" may="P" must-not="V" may-encrypt="Y">
546			<data type="Unsigned64"/>
547		</avp>
548
549		<avp name="Acct-Application-Id" code="259" must="M" may="P" must-not="V" may-encrypt="-">
550			<data type="Unsigned32"/>
551		</avp>
552
553		<avp name="Auth-Application-Id" code="258" must="M" may="P" must-not="V" may-encrypt="-">
554			<data type="Unsigned32"/>
555		</avp>
556
557		<avp name="Auth-Request-Type" code="274" must="M" may="P" must-not="V" may-encrypt="-">
558			<data type="Enumerated">
559				<item code="1" name="AUTHENTICATE_ONLY"/>
560				<item code="2" name="AUTHORIZE_ONLY"/>
561				<item code="3" name="AUTHORIZE_AUTHENTICATE"/>
562			</data>
563		</avp>
564
565		<avp name="Authorization-Lifetime" code="291" must="M" may="P" must-not="V" may-encrypt="-">
566			<data type="Unsigned32"/>
567		</avp>
568
569		<avp name="Auth-Grace-Period" code="276" must="M" may="P" must-not="V" may-encrypt="-">
570			<data type="Unsigned32"/>
571		</avp>
572
573		<avp name="Auth-Session-State" code="277" must="M" may="P" must-not="V" may-encrypt="-">
574			<data type="Enumerated">
575				<item code="0" name="STATE_MAINTAINED"/>
576				<item code="1" name="NO_STATE_MAINTAINED"/>
577			</data>
578		</avp>
579
580		<avp name="Re-Auth-Request-Type" code="285" must="M" may="P" must-not="V" may-encrypt="-">
581			<data type="Enumerated">
582				<item code="0" name="AUTHORIZE_ONLY"/>
583				<item code="1" name="AUTHORIZE_AUTHENTICATE"/>
584			</data>
585		</avp>
586
587		<avp name="Class" code="25" must="M" may="P" must-not="V" may-encrypt="Y">
588			<data type="OctetString"/>
589		</avp>
590
591		<avp name="Destination-Host" code="293" must="M" may="P" must-not="V" may-encrypt="-">
592			<data type="DiameterIdentity"/>
593		</avp>
594
595		<avp name="Destination-Realm" code="283" must="M" may="P" must-not="V" may-encrypt="-">
596			<data type="DiameterIdentity"/>
597		</avp>
598
599		<avp name="Disconnect-Cause" code="273" must="M" may="P" must-not="V" may-encrypt="-">
600			<data type="Enumerated">
601				<item code="0" name="REBOOTING"/>
602				<item code="1" name="BUSY"/>
603				<item code="2" name="DO_NOT_WANT_TO_TALK_TO_YOU"/>
604			</data>
605		</avp>
606
607		<avp name="Error-Message" code="281" must="-" may="P" must-not="V,M" may-encrypt="-">
608			<data type="UTF8String"/>
609		</avp>
610
611		<avp name="Error-Reporting-Host" code="294" must="-" may="P" must-not="V,M" may-encrypt="-">
612			<data type="DiameterIdentity"/>
613		</avp>
614
615		<avp name="Event-Timestamp" code="55" must="M" may="P" must-not="V" may-encrypt="-">
616			<data type="Time"/>
617		</avp>
618
619		<avp name="Experimental-Result" code="297" must="M" may="P" must-not="V" may-encrypt="-">
620			<data type="Grouped">
621				<rule avp="Vendor-Id" required="true" max="1"/>
622				<rule avp="Experimental-Result-Code" required="true" max="1"/>
623			</data>
624		</avp>
625
626		<avp name="Experimental-Result-Code" code="298" must="M" may="P" must-not="V" may-encrypt="-">
627			<data type="Unsigned32"/>
628		</avp>
629
630		<avp name="Failed-AVP" code="279" must="M" may="P" must-not="V" may-encrypt="-">
631			<data type="Grouped"/>
632		</avp>
633
634		<avp name="Firmware-Revision" code="267" must="-" may="-" must-not="P,V,M" may-encrypt="-">
635			<data type="Unsigned32"/>
636		</avp>
637
638		<avp name="Host-IP-Address" code="257" must="M" may="P" must-not="V" may-encrypt="-">
639			<data type="Address"/>
640		</avp>
641
642		<avp name="Inband-Security-Id" code="299" must="M" may="P" must-not="V" may-encrypt="-">
643			<data type="Unsigned32"/>
644		</avp>
645
646		<avp name="Multi-Round-Time-Out" code="272" must="M" may="P" must-not="V" may-encrypt="Y">
647			<data type="Unsigned32"/>
648		</avp>
649
650		<avp name="Origin-Host" code="264" must="M" may="P" must-not="V" may-encrypt="-">
651			<data type="DiameterIdentity"/>
652		</avp>
653
654		<avp name="Origin-Realm" code="296" must="M" may="P" must-not="V" may-encrypt="-">
655			<data type="DiameterIdentity"/>
656		</avp>
657
658		<avp name="Origin-State-Id" code="278" must="M" may="P" must-not="V" may-encrypt="-">
659			<data type="Unsigned32"/>
660		</avp>
661
662		<avp name="Product-Name" code="269" must="-" may="-" must-not="P,V,M" may-encrypt="-">
663			<data type="UTF8String"/>
664		</avp>
665
666		<avp name="Proxy-Host" code="280" must="M" may="-" must-not="P,V" may-encrypt="-">
667			<data type="DiameterIdentity"/>
668		</avp>
669
670		<avp name="Proxy-Info" code="284" must="M" may="-" must-not="P,V" may-encrypt="-">
671			<data type="Grouped">
672				<rule avp="Proxy-Host" required="true" max="1"/>
673				<rule avp="Proxy-State" required="true" max="1"/>
674			</data>
675		</avp>
676
677		<avp name="Proxy-State" code="33" must="M" may="-" must-not="P,V" may-encrypt="-">
678			<data type="OctetString"/>
679		</avp>
680
681		<avp name="Redirect-Host" code="292" must="M" may="P" must-not="V" may-encrypt="-">
682			<data type="DiameterURI"/>
683		</avp>
684
685		<avp name="Redirect-Host-Usage" code="261" must="M" may="P" must-not="V" may-encrypt="-">
686			<data type="Enumerated">
687				<item code="0" name="DONT_CACHE"/>
688				<item code="1" name="ALL_SESSION"/>
689				<item code="2" name="ALL_REALM"/>
690				<item code="3" name="REALM_AND_APPLICATION"/>
691				<item code="4" name="ALL_APPLICATION"/>
692				<item code="5" name="ALL_HOST"/>
693				<item code="6" name="ALL_USER"/>
694			</data>
695		</avp>
696
697		<avp name="Redirect-Max-Cache-Time" code="262" must="M" may="P" must-not="V" may-encrypt="-">
698			<data type="Unsigned32"/>
699		</avp>
700
701		<avp name="Result-Code" code="268" must="M" may="P" must-not="V" may-encrypt="-">
702			<data type="Unsigned32"/>
703		</avp>
704
705		<avp name="Route-Record" code="282" must="M" may="-" must-not="P,V" may-encrypt="-">
706			<data type="DiameterIdentity"/>
707		</avp>
708
709		<avp name="Session-Id" code="263" must="M" may="P" must-not="V" may-encrypt="Y">
710			<data type="UTF8String"/>
711		</avp>
712
713		<avp name="Session-Timeout" code="27" must="M" may="P" must-not="V" may-encrypt="-">
714			<data type="Unsigned32"/>
715		</avp>
716
717		<avp name="Session-Binding" code="270" must="M" may="P" must-not="V" may-encrypt="Y">
718			<data type="Unsigned32"/>
719		</avp>
720
721		<avp name="Session-Server-Failover" code="271" must="M" may="P" must-not="V" may-encrypt="Y">
722			<data type="Enumerated">
723				<item code="0" name="REFUSE_SERVICE"/>
724				<item code="1" name="TRY_AGAIN"/>
725				<item code="2" name="ALLOW_SERVICE"/>
726				<item code="3" name="TRY_AGAIN_ALLOW_SERVICE"/>
727			</data>
728		</avp>
729
730		<avp name="Supported-Vendor-Id" code="265" must="M" may="P" must-not="V" may-encrypt="-">
731			<data type="Unsigned32"/>
732		</avp>
733
734		<avp name="Termination-Cause" code="295" must="M" may="P" must-not="V" may-encrypt="-">
735			<data type="Enumerated">
736				<item code="1" name="DIAMETER_LOGOUT"/>
737				<item code="2" name="DIAMETER_SERVICE_NOT_PROVIDED"/>
738				<item code="3" name="DIAMETER_BAD_ANSWER"/>
739				<item code="4" name="DIAMETER_ADMINISTRATIVE"/>
740				<item code="5" name="DIAMETER_LINK_BROKEN"/>
741				<item code="6" name="DIAMETER_AUTH_EXPIRED"/>
742				<item code="7" name="DIAMETER_USER_MOVED"/>
743				<item code="8" name="DIAMETER_SESSION_TIMEOUT"/>
744			</data>
745		</avp>
746
747		<avp name="User-Name" code="1" must="M" may="P" must-not="V" may-encrypt="Y">
748			<data type="UTF8String"/>
749		</avp>
750
751		<avp name="Vendor-Id" code="266" must="M" may="P" must-not="V" may-encrypt="-">
752			<data type="Unsigned32"/>
753		</avp>
754
755		<avp name="Vendor-Specific-Application-Id" code="260" must="M" may="P" must-not="V" may-encrypt="-">
756			<data type="Grouped">
757				<rule avp="Vendor-Id" required="false" max="1"/>
758				<rule avp="Auth-Application-Id" required="true" max="1"/>
759				<rule avp="Acct-Application-Id" required="true" max="1"/>
760			</data>
761		</avp>
762
763		<!-- IETF RFC 7683 - https://tools.ietf.org/html/rfc7683 -->
764		<avp name="OC-Supported-Features" code="621" must-not="V">
765			<data type="Grouped">
766				<rule avp="OC-Feature-Vector" required="false"/>
767				<rule avp="AVP" required="false"/>
768			</data>
769		</avp>
770
771		<avp name="OC-Feature-Vector" code="622" must-not="V">
772			<data type="Unsigned64"/>
773		</avp>
774
775		<avp name="OC-OLR" code="623" must-not="V">
776			<data type="Grouped">
777				<rule avp="OC-Sequence-Number" required="true" max="1"/>
778				<rule avp="OC-Report-Type" required="true" max="1"/>
779				<rule avp="OC-Reduction-Percentage" required="false" max="1"/>
780				<rule avp="OC-Validity-Duration" required="false" max="1"/>
781				<rule avp="AVP" required="false"/>
782			</data>
783		</avp>
784
785		<avp name="OC-Sequence-Number" code="624" must-not="V">
786			<data type="Unsigned64"/>
787		</avp>
788
789		<avp name="OC-Validity-Duration" code="625" must-not="V">
790			<data type="Unsigned32"/>
791		</avp>
792
793		<avp name="OC-Report-Type" code="626" must-not="V">
794			<data type="Enumerated">
795				<item code="0" name="HOST_REPORT"/>
796				<item code="1" name="REALM_REPORT"/>
797			</data>
798		</avp>
799
800		<avp name="OC-Reduction-Percentage" code="627" must-not="V">
801			<data type="Unsigned32"/>
802		</avp>
803
804		<!-- IETF RFC 7944 - https://tools.ietf.org/html/rfc7944 -->
805		<avp name="DRMP" code="301" must-not="V">
806			<data type="Enumerated">
807				<item code="0" name="PRIORITY_0"/>
808				<item code="1" name="PRIORITY_1"/>
809				<item code="2" name="PRIORITY_2"/>
810				<item code="3" name="PRIORITY_3"/>
811				<item code="4" name="PRIORITY_4"/>
812				<item code="5" name="PRIORITY_5"/>
813				<item code="6" name="PRIORITY_6"/>
814				<item code="7" name="PRIORITY_7"/>
815				<item code="8" name="PRIORITY_8"/>
816				<item code="9" name="PRIORITY_9"/>
817				<item code="10" name="PRIORITY_10"/>
818				<item code="11" name="PRIORITY_11"/>
819				<item code="12" name="PRIORITY_12"/>
820				<item code="13" name="PRIORITY_13"/>
821				<item code="14" name="PRIORITY_14"/>
822				<item code="15" name="PRIORITY_15"/>
823			</data>
824		</avp>
825
826		<avp name="CC-Request-Number" code="415" must="M" may="P" must-not="V" may-encrypt="Y">
827			<!-- http://tools.ietf.org/html/rfc4006#section-8.2 -->
828			<data type="Unsigned32"/>
829		</avp>
830
831		<avp name="Service-Information" code="873" must="V,M" may="P" must-not="-" may-encrypt="N" vendor-id="10415">
832			<data type="Grouped">
833				<rule avp="Subscription-Id" required="false"/>
834				<rule avp="AoC-Information" required="false" max="1"/>
835				<rule avp="PS-Information" required="false" max="1"/>
836				<rule avp="IMS-Information" required="false" max="1"/>
837				<rule avp="MMS-Information" required="false" max="1"/>
838				<rule avp="LCS-Information" required="false" max="1"/>
839				<rule avp="PoC-Information" required="false" max="1"/>
840				<rule avp="MBMS-Information" required="false" max="1"/>
841				<rule avp="SMS-Information" required="false" max="1"/>
842				<rule avp="VCS-Information" required="false" max="1"/>
843				<rule avp="MMTel-Information" required="false" max="1"/>
844				<rule avp="Service-Generic-Information" required="false" max="1"/>
845				<rule avp="IM-Information" required="false" max="1"/>
846				<rule avp="DCD-Information" required="false" max="1"/>
847			</data>
848		</avp>
849
850		<avp name="PS-Information" code="874" must="V,M" may="P" must-not="-" may-encrypt="N" vendor-id="10415">
851			<data type="Grouped">
852				<rule avp="TGPP-Charging-Id" required="false" max="1"/>
853				<rule avp="PDN-Connection-Charging-Id" required="false" max="1"/>
854				<rule avp="Node-Id" required="false" max="1"/>
855				<rule avp="TGPP-PDP-Type" required="false" max="1"/>
856				<rule avp="PDP-Address" required="false"/>
857				<rule avp="PDP-Address-Prefix-Length" required="false" max="1"/>
858				<rule avp="Dynamic-Address-Flag" required="false" max="1"/>
859				<rule avp="Dynamic-Address-Flag-Extension" required="false" max="1"/>
860				<rule avp="QoS-Information" required="false" max="1"/>
861				<rule avp="SGSN-Address" required="false"/>
862				<rule avp="GGSN-Address" required="false"/>
863				<rule avp="TDF-IP-Address" required="false"/>
864				<rule avp="SGW-Address" required="false"/>
865				<rule avp="ePDG-Address" required="false"/>
866				<rule avp="CG-Address" required="false" max="1"/>
867				<rule avp="Serving-Node-Type" required="false" max="1"/>
868				<rule avp="SGW-Change" required="false" max="1"/>
869				<rule avp="TGPP-IMSI-MCC-MNC" required="false" max="1"/>
870				<rule avp="IMSI-Unauthenticated-Flag" required="false" max="1"/>
871				<rule avp="TGPP-GGSN-MCC-MNC" required="false" max="1"/>
872				<rule avp="TGPP-NSAPI" required="false" max="1"/>
873				<rule avp="Called-Station-Id" required="false" max="1"/>
874				<rule avp="TGPP-Session-Stop-Indicator" required="false" max="1"/>
875				<rule avp="TGPP-Selection-Mode" required="false" max="1"/>
876				<rule avp="TGPP-Charging-Characteristics" required="false" max="1"/>
877				<rule avp="Charging-Characteristics-Selection-Mode" required="false" max="1"/>
878				<rule avp="TGPP-SGSN-MCC-MNC" required="false" max="1"/>
879				<rule avp="TGPP-MS-TimeZone" required="false" max="1"/>
880				<rule avp="Charging-Rule-Base-Name" required="false" max="1"/>
881				<rule avp="ADC-Rule-Base-Name" required="false" max="1"/>
882				<rule avp="TGPP-User-Location-Info" required="false" max="1"/>
883				<rule avp="User-Location-Info-Time" required="false" max="1"/>
884				<rule avp="User-CSG-Information" required="false" max="1"/>
885				<rule avp="Presence-Reporting-Area-Information" required="false" max="1"/>
886				<rule avp="TGPP2-BSID" required="false" max="1"/>
887				<rule avp="TWAN-User-Location-Info" required="false" max="1"/>
888				<rule avp="TGPP-RAT-Type" required="false" max="1"/>
889				<rule avp="PS-Furnish-Charging-Information" required="false" max="1"/>
890				<rule avp="PDP-Context-Type" required="false" max="1"/>
891				<rule avp="Offline-Charging" required="false" max="1"/>
892				<rule avp="Traffic-Data-Volumes" required="false"/>
893				<rule avp="Service-Data-Container" required="false"/>
894				<rule avp="User-Equipment-Info" required="false" max="1"/>
895				<rule avp="Terminal-Information" required="false" max="1"/>
896				<rule avp="Start-Time" required="false" max="1"/>
897				<rule avp="Stop-Time" required="false" max="1"/>
898				<rule avp="Change-Condition" required="false" max="1"/>
899				<rule avp="Diagnostics" required="false" max="1"/>
900				<rule avp="Low-Priority-Indicator" required="false" max="1"/>
901				<rule avp="MME-Number-for-MT-SMS" required="false" max="1"/>
902				<rule avp="MME-Name" required="false" max="1"/>
903				<rule avp="MME-Realm" required="false" max="1"/>
904				<rule avp="Logical-Access-Id" required="false" max="1"/>
905				<rule avp="Physical-Access-Id" required="false" max="1"/>
906				<rule avp="Fixed-User-Location-Info" required="false" max="1"/>
907				<rule avp="CN-Operator-Selection-Entity" required="false" max="1"/>
908			</data>
909		</avp>
910
911		<avp name="Called-Station-Id" code="30" must="M" may="-" must-not="V" may-encrypt="Y">
912            <data type="UTF8String"/>
913        </avp>
914
915		<avp name="CC-Correlation-Id" code="411" must="-" may="P,M" must-not="V" may-encrypt="Y">
916			<!-- http://tools.ietf.org/html/rfc4006#section-8.1 -->
917			<data type="OctetString"/>
918		</avp>
919
920		<avp name="CC-Input-Octets" code="412" must="M" may="P" must-not="V" may-encrypt="Y">
921			<!-- http://tools.ietf.org/html/rfc4006#section-8.24 -->
922			<data type="Unsigned64"/>
923		</avp>
924
925		<avp name="CC-Money" code="413" must="M" may="P" must-not="V" may-encrypt="Y">
926			<!-- http://tools.ietf.org/html/rfc4006#section-8.22 -->
927			<data type="Grouped">
928				<rule avp="Unit-Value" required="true" max="1"/>
929				<rule avp="Currency-Code" required="true" max="1"/>
930			</data>
931		</avp>
932
933		<avp name="CC-Output-Octets" code="414" must="M" may="P" must-not="V" may-encrypt="Y">
934			<!-- http://tools.ietf.org/html/rfc4006#section-8.25 -->
935			<data type="Unsigned64"/>
936		</avp>
937
938		<avp name="CC-Request-Number" code="415" must="M" may="P" must-not="V" may-encrypt="Y">
939			<!-- http://tools.ietf.org/html/rfc4006#section-8.2 -->
940			<data type="Unsigned32"/>
941		</avp>
942
943		<avp name="CC-Request-Type" code="416" must="M" may="P" must-not="V" may-encrypt="Y">
944			<!-- http://tools.ietf.org/html/rfc4006#section-8.3 -->
945			<data type="Enumerated">
946				<item code="1" name="INITIAL_REQUEST"/>
947				<item code="2" name="UPDATE_REQUEST"/>
948				<item code="3" name="TERMINATION_REQUEST"/>
949			</data>
950		</avp>
951
952		<avp name="CC-Service-Specific-Units" code="417" must="M" may="P" must-not="V" may-encrypt="Y">
953			<data type="Unsigned64"/>
954		</avp>
955
956		<avp name="CC-Session-Failover" code="418" must="M" may="P" must-not="V" may-encrypt="Y">
957			<!-- http://tools.ietf.org/html/rfc4006#section-8.4 -->
958			<data type="Enumerated">
959				<item code="0" name="FAILOVER_NOT_SUPPORTED"/>
960				<item code="1" name="FAILOVER_SUPPORTED"/>
961			</data>
962		</avp>
963
964		<avp name="CC-Sub-Session-Id" code="419" must="M" may="P" must-not="V" may-encrypt="Y">
965			<!-- http://tools.ietf.org/html/rfc4006#section-8.5 -->
966			<data type="Unsigned64"/>
967		</avp>
968
969		<avp name="CC-Time" code="420" must="M" may="P" must-not="V" may-encrypt="Y">
970			<!-- http://tools.ietf.org/html/rfc4006#section-8.21 -->
971			<data type="Unsigned32"/>
972		</avp>
973
974		<avp name="CC-Total-Octets" code="421" must="M" may="P" must-not="V" may-encrypt="Y">
975			<!-- http://tools.ietf.org/html/rfc4006#section-8.23 -->
976			<data type="Unsigned64"/>
977		</avp>
978
979		<avp name="CC-Unit-Type" code="454" must="M" may="P" must-not="V" may-encrypt="Y">
980			<!-- http://tools.ietf.org/html/rfc4006#section-8.32 -->
981			<data type="Enumerated">
982				<item code="0" name="TIME"/>
983				<item code="1" name="MONEY"/>
984				<item code="2" name="TOTAL-OCTETS"/>
985				<item code="3" name="INPUT-OCTETS"/>
986				<item code="4" name="OUTPUT-OCTETS"/>
987				<item code="5" name="SERVICE-SPECIFIC-UNITS"/>
988			</data>
989		</avp>
990
991		<avp name="Check-Balance-Result" code="422" must="M" may="P" must-not="V" may-encrypt="Y">
992			<!-- http://tools.ietf.org/html/rfc4006#section-8.6 -->
993			<data type="Enumerated">
994				<item code="0" name="ENOUGH_CREDIT"/>
995				<item code="1" name="NO_CREDIT"/>
996			</data>
997		</avp>
998
999		<avp name="Cost-Information" code="423" must="M" may="P" must-not="V" may-encrypt="Y">
1000			<!-- http://tools.ietf.org/html/rfc4006#section-8.7 -->
1001			<data type="Grouped">
1002				<rule avp="Unit-Value" required="true" max="1"/>
1003				<rule avp="Currency-Code" required="true" max="1"/>
1004				<rule avp="Cost-Unit" required="true" max="1"/>
1005			</data>
1006		</avp>
1007
1008		<avp name="Cost-Unit" code="424" must="M" may="P" must-not="V" may-encrypt="Y">
1009			<!-- http://tools.ietf.org/html/rfc4006#section-8.12 -->
1010			<data type="UTF8String"/>
1011		</avp>
1012
1013		<avp name="Credit-Control" code="426" must="M" may="P" must-not="V" may-encrypt="Y">
1014			<!-- http://tools.ietf.org/html/rfc4006#section-8.13 -->
1015			<data type="Enumerated">
1016				<item code="0" name="CREDIT_AUTHORIZATION"/>
1017				<item code="1" name="RE_AUTHORIZATION"/>
1018			</data>
1019		</avp>
1020
1021		<avp name="Credit-Control-Failure-Handling" code="427" must="M" may="P" must-not="V" may-encrypt="Y">
1022			<!-- http://tools.ietf.org/html/rfc4006#section-8.14 -->
1023			<data type="Enumerated">
1024				<item code="0" name="TERMINATE"/>
1025				<item code="1" name="CONTINUE"/>
1026				<item code="2" name="RETRY_AND_TERMINATE"/>
1027			</data>
1028		</avp>
1029
1030		<avp name="Currency-Code" code="425" must="M" may="P" must-not="V" may-encrypt="Y">
1031			<!-- http://tools.ietf.org/html/rfc4006#section-8.11 -->
1032			<data type="Unsigned32"/>
1033		</avp>
1034
1035		<avp name="Direct-Debiting-Failure-Handling" code="428" must="M" may="P" must-not="V" may-encrypt="Y">
1036			<!-- http://tools.ietf.org/html/rfc4006#section-8.15 -->
1037			<data type="Enumerated">
1038				<item code="0" name="TERMINATE_OR_BUFFER"/>
1039				<item code="1" name="CONTINUE"/>
1040			</data>
1041		</avp>
1042
1043		<avp name="Exponent" code="429" must="M" may="P" must-not="V" may-encrypt="Y">
1044			<!-- http://tools.ietf.org/html/rfc4006#section-8.9 -->
1045			<data type="Integer32"/>
1046		</avp>
1047
1048		<avp name="Final-Unit-Action" code="449" must="M" may="P" must-not="V" may-encrypt="Y">
1049			<!-- http://tools.ietf.org/html/rfc4006#section-8.35 -->
1050			<data type="Enumerated">
1051				<item code="0" name="TERMINATE"/>
1052				<item code="1" name="REDIRECT"/>
1053				<item code="2" name="RESTRICT_ACCESS"/>
1054			</data>
1055		</avp>
1056
1057		<avp name="Final-Unit-Indication" code="430" must="M" may="P" must-not="V" may-encrypt="Y">
1058			<!-- http://tools.ietf.org/html/rfc4006#section-8.34 -->
1059			<data type="Grouped">
1060				<rule avp="Final-Unit-Action" required="true" max="1"/>
1061				<rule avp="Restriction-Filter-Rule" required="false" max="1"/>
1062				<rule avp="Filter-Id" required="false" max="1"/>
1063				<rule avp="Redirect-Server" required="false" max="1"/>
1064			</data>
1065		</avp>
1066
1067		<avp name="Granted-Service-Unit" code="431" must="M" may="P" must-not="V" may-encrypt="Y">
1068			<!-- http://tools.ietf.org/html/rfc4006#section-8.17 -->
1069			<data type="Grouped">
1070				<rule avp="Tariff-Time-Change" required="false" max="1"/>
1071				<rule avp="CC-Time" required="false" max="1"/>
1072				<rule avp="CC-Money" required="false" max="1"/>
1073				<rule avp="CC-Total-Octets" required="false" max="1"/>
1074				<rule avp="CC-Input-Octets" required="false" max="1"/>
1075				<rule avp="CC-Output-Octets" required="false" max="1"/>
1076				<rule avp="CC-Service-Specific-Units" required="false" max="1"/>
1077				<!-- *[ AVP ]-->
1078			</data>
1079		</avp>
1080
1081		<avp name="G-S-U-Pool-Identifier" code="453" must="M" may="P" must-not="V" may-encrypt="Y">
1082			<!-- http://tools.ietf.org/html/rfc4006#section-8.31 -->
1083			<data type="Unsigned32"/>
1084		</avp>
1085
1086		<avp name="G-S-U-Pool-Reference" code="457" must="M" may="P" must-not="V" may-encrypt="Y">
1087			<!-- http://tools.ietf.org/html/rfc4006#section-8.30 -->
1088			<data type="Grouped">
1089				<rule avp="G-S-U-Pool-Identifier" required="true" max="1"/>
1090				<rule avp="CC-Unit-Type" required="true" max="1"/>
1091				<rule avp="Unit-Value" required="true" max="1"/>
1092			</data>
1093		</avp>
1094
1095		<avp name="Multiple-Services-Credit-Control" code="456" must="M" may="P" must-not="V" may-encrypt="Y">
1096			<!-- http://tools.ietf.org/html/rfc4006#section-8.16 -->
1097			<data type="Grouped">
1098				<rule avp="Granted-Service-Unit" required="false" max="1"/>
1099				<rule avp="Requested-Service-Unit" required="false" max="1"/>
1100				<rule avp="Used-Service-Unit" required="false" max="1"/>
1101				<rule avp="Tariff-Change-Usage" required="false" max="1"/>
1102				<rule avp="Service-Identifier" required="false" max="1"/>
1103				<rule avp="Rating-Group" required="false" max="1"/>
1104				<rule avp="G-S-U-Pool-Reference" required="false" max="1"/>
1105				<rule avp="Validity-Time" required="false" max="1"/>
1106				<rule avp="Result-Code" required="false" max="1"/>
1107				<rule avp="Final-Unit-Indication" required="false" max="1"/>
1108				<!-- *[ AVP ]-->
1109			</data>
1110		</avp>
1111
1112		<avp name="Multiple-Services-Indicator" code="455" must="M" may="P" must-not="V" may-encrypt="Y">
1113			<!-- http://tools.ietf.org/html/rfc4006#section-8.40 -->
1114			<data type="Enumerated">
1115				<item code="0" name="MULTIPLE_SERVICES_NOT_SUPPORTED"/>
1116				<item code="1" name="MULTIPLE_SERVICES_SUPPORTED"/>
1117			</data>
1118		</avp>
1119
1120		<avp name="Rating-Group" code="432" must="M" may="P" must-not="V" may-encrypt="Y">
1121			<!-- http://tools.ietf.org/html/rfc4006#section-8.29 -->
1122			<data type="Unsigned32"/>
1123		</avp>
1124
1125		<avp name="Redirect-Address-Type" code="433" must="M" may="P" must-not="V" may-encrypt="Y">
1126			<!-- http://tools.ietf.org/html/rfc4006#section-8.38 -->
1127			<data type="Enumerated">
1128				<item code="0" name="IPv4 Address"/>
1129				<item code="1" name="IPv6 Address"/>
1130				<item code="2" name="URL"/>
1131				<item code="3" name="SIP URI"/>
1132			</data>
1133		</avp>
1134
1135		<avp name="Redirect-Server" code="434" must="M" may="P" must-not="V" may-encrypt="Y">
1136			<!-- http://tools.ietf.org/html/rfc4006#section-8.37 -->
1137			<data type="Grouped">
1138				<rule avp="Redirect-Address-Type" required="true" max="1"/>
1139				<rule avp="Redirect-Server-Address" required="true" max="1"/>
1140			</data>
1141		</avp>
1142
1143		<avp name="Redirect-Server-Address" code="435" must="M" may="P" must-not="V" may-encrypt="Y">
1144			<!-- http://tools.ietf.org/html/rfc4006#section-8.39 -->
1145			<data type="UTF8String"/>
1146		</avp>
1147
1148		<avp name="Requested-Action" code="436" must="M" may="P" must-not="V" may-encrypt="Y">
1149			<!-- http://tools.ietf.org/html/rfc4006#section-8.41 -->
1150			<data type="Enumerated">
1151				<item code="0" name="DIRECT_DEBITING"/>
1152				<item code="1" name="REFUND_ACCOUNT"/>
1153				<item code="2" name="CHECK_BALANCE"/>
1154				<item code="3" name="PRICE_ENQUIRY"/>
1155			</data>
1156		</avp>
1157
1158		<avp name="Requested-Service-Unit" code="437" must="M" may="P" must-not="V" may-encrypt="Y">
1159			<!-- http://tools.ietf.org/html/rfc4006#section-8.18-->
1160			<data type="Grouped">
1161				<rule avp="CC-Time" required="false" max="1"/>
1162				<rule avp="CC-Money" required="false" max="1"/>
1163				<rule avp="CC-Total-Octets" required="false" max="1"/>
1164				<rule avp="CC-Input-Octets" required="false" max="1"/>
1165				<rule avp="CC-Output-Octets" required="false" max="1"/>
1166				<rule avp="CC-Service-Specific-Units" required="false" max="1"/>
1167				<!-- *[ AVP ]-->
1168			</data>
1169		</avp>
1170
1171		<avp name="Restriction-Filter-Rule" code="438" must="M" may="P" must-not="V" may-encrypt="Y">
1172			<!-- http://tools.ietf.org/html/rfc4006#section-8.36-->
1173			<data type="IPFilterRule"/>
1174		</avp>
1175
1176		<avp name="Service-Context-Id" code="461" must="M" may="P" must-not="V" may-encrypt="Y">
1177			<!-- http://tools.ietf.org/html/rfc4006#section-8.42-->
1178			<data type="UTF8String"/>
1179		</avp>
1180
1181		<avp name="Service-Identifier" code="439" must="M" may="P" must-not="V" may-encrypt="Y">
1182			<!-- http://tools.ietf.org/html/rfc4006#section-8.28-->
1183			<data type="Unsigned32"/>
1184		</avp>
1185
1186		<avp name="Service-Parameter-Info" code="440" must="-" may="P,M" must-not="V" may-encrypt="Y">
1187			<!-- http://tools.ietf.org/html/rfc4006#section-8.43-->
1188			<data type="Grouped">
1189				<rule avp="Service-Parameter-Type" required="true" max="1"/>
1190				<rule avp="Service-Parameter-Value" required="true" max="1"/>
1191			</data>
1192		</avp>
1193
1194		<avp name="Service-Parameter-Type" code="441" must="-" may="P,M" must-not="V" may-encrypt="Y">
1195			<!-- http://tools.ietf.org/html/rfc4006#section-8.44-->
1196			<data type="Unsigned32"/>
1197		</avp>
1198
1199		<avp name="Service-Parameter-Value" code="442" must="-" may="P,M" must-not="V" may-encrypt="Y">
1200			<!-- http://tools.ietf.org/html/rfc4006#section-8.45-->
1201			<data type="OctetString"/>
1202		</avp>
1203
1204		<avp name="Subscription-Id" code="443" must="M" may="P" must-not="V" may-encrypt="Y">
1205			<!-- http://tools.ietf.org/html/rfc4006#section-8.46-->
1206			<data type="Grouped">
1207				<rule avp="Subscription-Id-Type" required="true" max="1"/>
1208				<rule avp="Subscription-Id-Data" required="true" max="1"/>
1209			</data>
1210		</avp>
1211
1212		<avp name="Subscription-Id-Data" code="444" must="M" may="P" must-not="V" may-encrypt="Y">
1213			<!-- http://tools.ietf.org/html/rfc4006#section-8.48-->
1214			<data type="UTF8String"/>
1215		</avp>
1216
1217		<avp name="Subscription-Id-Type" code="450" must="M" may="P" must-not="V" may-encrypt="Y">
1218			<!-- http://tools.ietf.org/html/rfc4006#section-8.47-->
1219			<data type="Enumerated">
1220				<item code="0" name="END_USER_E164"/>
1221				<item code="1" name="END_USER_IMSI"/>
1222				<item code="2" name="END_USER_SIP_URI"/>
1223				<item code="3" name="END_USER_NAI"/>
1224			</data>
1225		</avp>
1226
1227		<avp name="Tariff-Change-Usage" code="452" must="M" may="P" must-not="V" may-encrypt="Y">
1228			<!-- http://tools.ietf.org/html/rfc4006#section-8.27-->
1229			<data type="Enumerated">
1230				<item code="0" name="UNIT_BEFORE_TARIFF_CHANGE"/>
1231				<item code="1" name="UNIT_AFTER_TARIFF_CHANGE"/>
1232				<item code="2" name="UNIT_INDETERMINATE"/>
1233			</data>
1234		</avp>
1235
1236		<avp name="Tariff-Time-Change" code="451" must="M" may="P" must-not="V" may-encrypt="Y">
1237			<!-- http://tools.ietf.org/html/rfc4006#section-8.20-->
1238			<data type="Time"/>
1239		</avp>
1240
1241		<avp name="Unit-Value" code="445" must="M" may="P" must-not="V" may-encrypt="Y">
1242			<!-- http://tools.ietf.org/html/rfc4006#section-8.8-->
1243			<data type="Grouped">
1244				<rule avp="Value-Digits" required="true" max="1"/>
1245				<rule avp="Exponent" required="true" max="1"/>
1246			</data>
1247		</avp>
1248
1249		<avp name="Used-Service-Unit" code="446" must="M" may="P" must-not="V" may-encrypt="Y">
1250			<!-- http://tools.ietf.org/html/rfc4006#section-8.19-->
1251			<data type="Grouped">
1252				<rule avp="Tariff-Change-Usage" required="false" max="1"/>
1253				<rule avp="CC-Time" required="false" max="1"/>
1254				<rule avp="CC-Money" required="false" max="1"/>
1255				<rule avp="CC-Total-Octets" required="false" max="1"/>
1256				<rule avp="CC-Input-Octets" required="false" max="1"/>
1257				<rule avp="CC-Output-Octets" required="false" max="1"/>
1258				<rule avp="CC-Service-Specific-Units" required="false" max="1"/>
1259				<!-- *[ AVP ]-->
1260			</data>
1261		</avp>
1262
1263		<avp name="User-Equipment-Info" code="458" must="-" may="P,M" must-not="V" may-encrypt="Y">
1264			<!-- http://tools.ietf.org/html/rfc4006#section-8.49-->
1265			<data type="Grouped">
1266				<rule avp="User-Equipment-Info-Type" required="true" max="1"/>
1267				<rule avp="User-Equipment-Info-Value" required="true" max="1"/>
1268			</data>
1269		</avp>
1270
1271		<avp name="User-Equipment-Info-Type" code="459" must="-" may="P,M" must-not="V" may-encrypt="Y">
1272			<!-- http://tools.ietf.org/html/rfc4006#section-8.50-->
1273			<data type="Enumerated">
1274				<item code="0" name="IMEISV"/>
1275				<item code="1" name="MAC"/>
1276				<item code="2" name="EUI64"/>
1277				<item code="3" name="MODIFIED_EUI64"/>
1278			</data>
1279		</avp>
1280
1281		<avp name="User-Equipment-Info-Value" code="460" must="-" may="P,M" must-not="V" may-encrypt="Y">
1282			<!-- http://tools.ietf.org/html/rfc4006#section-8.51-->
1283			<data type="OctetString"/>
1284		</avp>
1285
1286		<avp name="Value-Digits" code="447" must="M" may="P" must-not="V" may-encrypt="Y">
1287			<!-- http://tools.ietf.org/html/rfc4006#section-8.10-->
1288			<data type="Integer64"/>
1289		</avp>
1290
1291		<avp name="Validity-Time" code="448" must="M" may="P" must-not="V" may-encrypt="Y">
1292			<!-- http://tools.ietf.org/html/rfc4006#section-8.33-->
1293			<data type="Unsigned32"/>
1294		</avp>
1295
1296		<avp name="Timezone-Offset" code="571" vendor-id="10415" must="V" may-encrypt="Y">
1297			<data type="Integer32"/>
1298		</avp>
1299    </application>
1300</diameter>
1301    "#;
1302        xml
1303    };
1304}