| Disclaimer |
|
xiii | |
| About the Authors |
|
xv | |
| Foreword |
|
xvii | |
| Preface |
|
xix | |
| Acknowledgement |
|
xxiii | |
|
|
|
xxv | |
|
|
|
1 | (8) |
|
|
|
1 | (1) |
|
1.2 Open Standards and the IETF |
|
|
2 | (1) |
|
|
|
3 | (3) |
|
1.3.1 Diameter versus RADIUS |
|
|
4 | (1) |
|
1.3.2 Diameter Improvements |
|
|
5 | (1) |
|
1.4 What is freeDiameter? |
|
|
6 | (1) |
|
|
|
6 | (3) |
|
2 Fundamental Diameter Concepts and Building Blocks |
|
|
9 | (20) |
|
|
|
9 | (1) |
|
|
|
9 | (1) |
|
2.3 Diameter Protocol Structure |
|
|
10 | (1) |
|
2.4 Diameter Applications |
|
|
10 | (1) |
|
|
|
11 | (1) |
|
|
|
11 | (1) |
|
2.5.2 Peer-to-Peer Messaging Layer |
|
|
12 | (1) |
|
2.5.3 Setting up a Connection between freeDiameter Peers |
|
|
12 | (1) |
|
2.6 Diameter Message Overview |
|
|
12 | (8) |
|
2.6.1 The Command Code Format |
|
|
13 | (2) |
|
|
|
15 | (1) |
|
2.6.3 Attribute-Value Pairs |
|
|
16 | (1) |
|
|
|
16 | (4) |
|
2.6.4 Derived AVP Data Formats |
|
|
20 | (1) |
|
|
|
20 | (1) |
|
|
|
21 | (4) |
|
2.8.1 Successful Transactions |
|
|
21 | (1) |
|
|
|
21 | (1) |
|
|
|
22 | (1) |
|
|
|
23 | (2) |
|
|
|
25 | (2) |
|
|
|
25 | (1) |
|
|
|
25 | (1) |
|
|
|
25 | (2) |
|
|
|
27 | (1) |
|
|
|
27 | (1) |
|
|
|
27 | (2) |
|
3 Communication between Neighboring Peers |
|
|
29 | (32) |
|
|
|
29 | (1) |
|
3.2 Peer Connections and Diameter Sessions |
|
|
29 | (1) |
|
|
|
29 | (2) |
|
|
|
31 | (5) |
|
|
|
31 | (1) |
|
3.4.1.1 Static Discovery in freeDiameter |
|
|
31 | (1) |
|
|
|
32 | (3) |
|
3.4.2.1 Dynamic Discovery and DiameterURI |
|
|
35 | (1) |
|
3.4.2.2 DNS Further Reading |
|
|
36 | (1) |
|
3.5 Connection Establishment |
|
|
36 | (1) |
|
3.5.1 The Election Process: Handling Simultaneous Connection Attempts |
|
|
37 | (1) |
|
3.6 Capabilities Exchange |
|
|
37 | (5) |
|
3.6.1 freeDiameter example |
|
|
38 | (1) |
|
3.6.2 The Capabilities Exchange Request |
|
|
39 | (1) |
|
3.6.3 Capabilities Exchange Answer |
|
|
40 | (1) |
|
3.6.4 Hop-by-Hop Identifiers |
|
|
41 | (1) |
|
|
|
42 | (1) |
|
3.8 Peer Connection Maintenance |
|
|
43 | (6) |
|
3.8.1 Transport Failure, Failover, and Failback Procedures |
|
|
45 | (4) |
|
|
|
49 | (1) |
|
3.9 Advanced Transport and Peer Topics |
|
|
49 | (10) |
|
|
|
50 | (1) |
|
|
|
51 | (2) |
|
3.9.2.1 Multi-homing in freeDiameter |
|
|
53 | (3) |
|
3.9.3 Avoiding Head-of-Line Blocking |
|
|
56 | (1) |
|
3.9.4 Multiple Connection Instances |
|
|
56 | (3) |
|
|
|
59 | (2) |
|
4 Diameter End-to-End Communication |
|
|
61 | (20) |
|
|
|
61 | (1) |
|
|
|
61 | (2) |
|
4.3 Diameter Request Routing |
|
|
63 | (4) |
|
4.3.1 AVPs to Route Request Messages |
|
|
64 | (1) |
|
4.3.1.1 Destination-Realm AVP |
|
|
64 | (1) |
|
4.3.1.2 Destination-Host AVP |
|
|
64 | (1) |
|
4.3.1.3 Auth-Application-Id and Acct-Application-Id AVPs |
|
|
64 | (2) |
|
|
|
65 | (1) |
|
|
|
66 | (1) |
|
|
|
66 | (1) |
|
|
|
66 | (1) |
|
4.4 Request Routing Error Handling |
|
|
67 | (1) |
|
4.4.1 Detecting Duplicated Messages |
|
|
67 | (1) |
|
|
|
67 | (1) |
|
4.5 Answer Message Routing |
|
|
68 | (1) |
|
4.5.1 Relaying and Proxying Answer Messages |
|
|
69 | (1) |
|
4.6 Intra-Realm versus Inter-Realm Communication |
|
|
69 | (1) |
|
4.7 Diameter Routing and Inter-Connection Networks |
|
|
70 | (5) |
|
4.7.1 Inter-Connection Approaches |
|
|
70 | (2) |
|
4.7.2 Dynamic Diameter Node Discovery |
|
|
72 | (1) |
|
|
|
73 | (1) |
|
|
|
73 | (1) |
|
|
|
73 | (2) |
|
4.8 Diameter Overload Control |
|
|
75 | (4) |
|
|
|
77 | (1) |
|
4.8.2 Overload Control State |
|
|
77 | (2) |
|
4.8.3 Overload Abatement Considerations |
|
|
79 | (1) |
|
|
|
79 | (2) |
|
|
|
81 | (24) |
|
|
|
57 | (25) |
|
|
|
82 | (5) |
|
|
|
83 | (1) |
|
5.2.2 Symmetric Key Primitives |
|
|
84 | (1) |
|
5.2.3 Asymmetric Key Primitives |
|
|
84 | (2) |
|
5.2.4 Key Length Recommendations |
|
|
86 | (1) |
|
|
|
87 | (3) |
|
|
|
90 | (4) |
|
5.4.1 Diameter Security Model |
|
|
90 | (1) |
|
5.4.1.1 Secure Transports |
|
|
91 | (1) |
|
|
|
92 | (1) |
|
5.4.2 Relation to Threats |
|
|
93 | (1) |
|
5.4.3 Mitigating Other Threats |
|
|
93 | (1) |
|
5.5 PKI Example Configuration in freeDiameter |
|
|
94 | (8) |
|
5.5.1 The Configuration File |
|
|
94 | (2) |
|
|
|
96 | (1) |
|
5.5.3 Protecting Exchanges via TLS |
|
|
97 | (1) |
|
5.5.3.1 Common Name and Hostname Mismatch |
|
|
98 | (1) |
|
5.5.3.2 Unprotected Exchanges |
|
|
99 | (1) |
|
5.5.3.3 Certificate Revocation |
|
|
100 | (2) |
|
|
|
102 | (1) |
|
|
|
102 | (3) |
|
|
|
105 | (54) |
|
|
|
105 | (1) |
|
|
|
105 | (10) |
|
|
|
106 | (1) |
|
6.2.2 Accounting Application Setup |
|
|
106 | (1) |
|
6.2.3 Accounting Services |
|
|
107 | (2) |
|
|
|
109 | (1) |
|
6.2.5 Correlation of Accounting Records |
|
|
109 | (1) |
|
6.2.6 Sending Accounting Information |
|
|
110 | (1) |
|
|
|
110 | (2) |
|
6.2.8 freeDiameter Example |
|
|
112 | (1) |
|
|
|
113 | (1) |
|
6.2.10 Example: 3GPP Rf Interface for Mobile Offline Charging |
|
|
113 | (1) |
|
6.2.10.1 Rf Interface Commands |
|
|
114 | (1) |
|
|
|
115 | (7) |
|
6.3.1 Credit-Control-Request Command |
|
|
116 | (2) |
|
6.3.2 Credit-Control-Answer Command |
|
|
118 | (2) |
|
|
|
120 | (1) |
|
|
|
121 | (1) |
|
6.3.5 Example: 3GPP Ro Interface for Online Charging |
|
|
121 | (1) |
|
|
|
122 | (8) |
|
|
|
122 | (1) |
|
|
|
123 | (1) |
|
|
|
123 | (1) |
|
|
|
123 | (1) |
|
|
|
124 | (1) |
|
6.4.3.1 Push Mode Authorization Schemes |
|
|
124 | (1) |
|
6.4.3.2 Pull Mode Authorization |
|
|
124 | (2) |
|
6.4.4 Establishing and Managing a QoS Application Session |
|
|
126 | (1) |
|
6.4.4.1 Establishing a Session |
|
|
126 | (3) |
|
6.4.5 Re-Authorizing a Session |
|
|
129 | (1) |
|
6.4.5.1 Re-Authorization Initiated by the NE |
|
|
129 | (1) |
|
6.4.5.2 Re-Authorization Initiated by the Authorizing Elements |
|
|
129 | (1) |
|
6.4.6 Terminating a Session |
|
|
129 | (1) |
|
6.4.6.1 Session Terminated by the NE |
|
|
129 | (1) |
|
6.4.6.2 Session Terminated by the AE |
|
|
129 | (1) |
|
6.5 Interworking RADIUS and Diameter |
|
|
130 | (7) |
|
|
|
137 | (19) |
|
6.6.1 Evolved Packet Core |
|
|
137 | (1) |
|
|
|
138 | (1) |
|
6.6.2.1 Common AVPs for Soa Commands |
|
|
139 | (1) |
|
|
|
140 | (1) |
|
6.6.3.1 Authentication-Information-Request Command |
|
|
140 | (1) |
|
6.6.3.2 Authentication-Information-Answer Command |
|
|
141 | (1) |
|
6.6.4 Location Management |
|
|
142 | (1) |
|
6.6.4.1 Update-Location-Request Command |
|
|
142 | (2) |
|
6.6.4.2 Cancel-Location-Request Command |
|
|
144 | (1) |
|
6.6.4.3 Cancel-Location-Answer Command |
|
|
145 | (1) |
|
6.6.4.4 Update-Location-Answer Command |
|
|
145 | (1) |
|
6.6.5 Subscriber Data Handling |
|
|
146 | (1) |
|
6.6.5.1 Insert-Subscriber-Data-Request Command |
|
|
146 | (1) |
|
6.6.5.2 Insert-Subscriber-Data-Answer Command |
|
|
147 | (2) |
|
6.6.5.3 Delete-Subscriber-Data-Request Command |
|
|
149 | (1) |
|
6.6.5.4 Delete-Subscriber-Data-Answer Message |
|
|
150 | (1) |
|
|
|
150 | (1) |
|
6.6.6.1 Reset-Request Command |
|
|
150 | (1) |
|
6.6.6.2 Reset-Answer Command |
|
|
151 | (1) |
|
|
|
152 | (1) |
|
6.6.7.1 Notify-Request Command |
|
|
152 | (2) |
|
6.6.7.2 Notify-Answer Command |
|
|
154 | (1) |
|
6.6.8 Ending Subscriber Sessions |
|
|
154 | (1) |
|
6.6.8.1 Purge-UE-Request AVPs |
|
|
154 | (1) |
|
6.6.8.2 Purge-UE-Answer Command |
|
|
155 | (1) |
|
|
|
156 | (1) |
|
|
|
156 | (3) |
|
7 Guidelines for Extending Diameter |
|
|
159 | (14) |
|
|
|
159 | (1) |
|
7.2 Registration Policies |
|
|
160 | (1) |
|
7.3 Overview of Extension Strategies |
|
|
161 | (1) |
|
7.4 Extending Attribute-Value Pairs |
|
|
162 | (1) |
|
7.4.1 Extending Existing AVPs |
|
|
162 | (1) |
|
7.4.1.1 Creating New AVP Flags |
|
|
162 | (1) |
|
7.4.1.2 Adding AVP Extension Points |
|
|
162 | (1) |
|
7.4.1.3 Adding New AVP Values |
|
|
162 | (1) |
|
|
|
163 | (3) |
|
7.5.1 Allocating New Command Flags |
|
|
163 | (1) |
|
|
|
163 | (2) |
|
7.5.2.1 Adding New AVPs to Base Commands |
|
|
165 | (1) |
|
7.5.3 Creating New Commands |
|
|
165 | (1) |
|
|
|
165 | (1) |
|
7.6 Creating New Applications |
|
|
166 | (1) |
|
|
|
166 | (1) |
|
|
|
167 | (2) |
|
7.8 Vendor-specific Extensions |
|
|
169 | (1) |
|
|
|
169 | (1) |
|
|
|
170 | (1) |
|
7.8.3 Diameter Applications |
|
|
170 | (1) |
|
7.9 Prototyping with freeDiameter |
|
|
170 | (1) |
|
|
|
170 | (3) |
|
Appendix A freeDiameter Tutorial |
|
|
173 | (10) |
|
A.1 Introduction to Virtual Machines |
|
|
173 | (1) |
|
A.2 Installing the Virtualization Software |
|
|
174 | (1) |
|
A.3 Creating Your Own Environment |
|
|
174 | (1) |
|
A.4 Downloading the VM Image |
|
|
174 | (1) |
|
A.5 Installing and Starting the Master VM freeDiameter |
|
|
174 | (1) |
|
A.6 Creating a Connection Between Two Diameter Peers |
|
|
175 | (8) |
|
A.6.1 Building client.example.net |
|
|
176 | (1) |
|
A.6.2 Building server.example.net |
|
|
177 | (1) |
|
A.6.3 Creating the Diameter Connection |
|
|
178 | (5) |
|
Appendix B freeDiameter from Sources |
|
|
183 | (18) |
|
|
|
183 | (1) |
|
B.2 Tools and Dependencies |
|
|
183 | (2) |
|
B.2.1 Runtime Dependencies |
|
|
184 | (1) |
|
|
|
184 | (1) |
|
|
|
184 | (1) |
|
B.2.1.3 Internationalized Domain Names |
|
|
185 | (1) |
|
B.3 Obtaining freeDiameter Source Code |
|
|
185 | (1) |
|
B.4 Configuring the Build |
|
|
186 | (2) |
|
B.5 Compiling freeDiameter |
|
|
188 | (1) |
|
B.6 Installing freeDiameter |
|
|
189 | (1) |
|
B.7 freeDiameter Configuration File |
|
|
189 | (1) |
|
B.8 Running and Debugging freeDiameter |
|
|
190 | (2) |
|
B.9 Extensions for Debug Support |
|
|
192 | (7) |
|
|
|
192 | (1) |
|
B.9.2 Logging Diameter Messages: dbg_msg_dumps.fdx |
|
|
193 | (2) |
|
B.9.3 Measuring Processing Time: dbg_msg_timings.fdx |
|
|
195 | (1) |
|
B.9.4 Viewing Queue Statistics: dbgjnonitor.fdx |
|
|
196 | (1) |
|
B.9.5 Understanding Routing Decisions: dbg_rt.fdx |
|
|
197 | (1) |
|
B.9.6 The Interactive Python Shell Extension: dbg_interactive.fdx |
|
|
198 | (1) |
|
|
|
199 | (1) |
|
|
|
199 | (2) |
|
Appendix C The freeDiameter Framework |
|
|
201 | (8) |
|
|
|
201 | (1) |
|
|
|
201 | (1) |
|
C.3 freeDiameter API Overview |
|
|
202 | (5) |
|
|
|
203 | (2) |
|
|
|
205 | (2) |
|
|
|
207 | (1) |
|
C.4 freeDiameter Architectures |
|
|
207 | (1) |
|
|
|
208 | (1) |
| Glossary |
|
209 | (4) |
| Index |
|
213 | |