To simplify the example, only one type of request UDRs is accepted, and one of two types of reply UDRs is sent back. Hence, the requestMessage
and responseMessage
fields of the Radius UDR will be populated with any of these UDR types:
UDR Type | Description |
---|---|
|
|
|
|
The full Ultra Format Definition for the example is not shown, since it is beyond the scope of this manual to handle packet content or UFDL syntax.
Shortened Ultra Format Definition
The format definition is here stored in the Default
directory with the name extendedRadius
.
external Access_Request_Ext sequential : identified_by(Code == 1), dynamic_size(RecLength) { int Code: static_size(1); int Identifier: static_size(1); int RecLength: static_size(2), encode_value(udr_size); bytearray Authenticator: static_size(16); switched_set( Type ) { int Type: static_size(1); int Length: static_size(1), encode_value(case_size); case(1) { ascii User_Name: dynamic_size( Length - 2 ); }; case(2) { ascii User_Password: dynamic_size( Length - 2 ), terminated_by(0); }; // ... // Further field definitions. // ... }; }; external Access_Accept_Ext sequential : identified_by(Code == 2), dynamic_size(RecLength) { // ... // Further field definitions. // ... }; external Access_Reject_Ext sequential : identified_by(Code == 3), dynamic_size(RecLength) { // ... // Further field definitions. // ... }; internal Vendor_Specific_Int { int Type; int Length; int VendorID; int SubAttrID; int VendorLength; int InfoCode; string Data; }; in_map Access_Request_Map : external(Access_Request_Ext), target_internal(Access_Request_Int) { automatic { Vendor_Specific_Ext: internal( Vendor_Specific_Int ), target_internal( Vendor_Specific_TI1 ); }; }; in_map Access_Accept_InMap: external(Access_Accept_Ext), target_internal( Access_Accept_Int ) { automatic { Vendor_Specific_Ext: internal( Vendor_Specific_Int ); }; }; out_map Access_Accept_Map : external(Access_Accept_Ext), internal(Access_Accept_Int) { automatic; }; in_map Access_Reject_InMap: external(Access_Reject_Ext), target_internal( Access_Reject_Int ) { automatic { Vendor_Specific_Ext: internal( Vendor_Specific_Int ); }; }; out_map Access_Reject_Map : external(Access_Reject_Ext), internal(Access_Reject_Int) { automatic; }; decoder Request_Dec: in_map(Access_Request_Map); encoder Response_Enc: out_map(Access_Accept_Map), out_map(Access_Reject_Map);