OLD | NEW |
1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ | 1 /* -*- Mode: C++; c-file-style: "gnu"; indent-tabs-mode:nil; -*- */ |
2 /* | 2 /* |
3 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) | 3 * Copyright (c) 2012 Centre Tecnologic de Telecomunicacions de Catalunya (CTTC) |
4 * | 4 * |
5 * This program is free software; you can redistribute it and/or modify | 5 * This program is free software; you can redistribute it and/or modify |
6 * it under the terms of the GNU General Public License version 2 as | 6 * it under the terms of the GNU General Public License version 2 as |
7 * published by the Free Software Foundation; | 7 * published by the Free Software Foundation; |
8 * | 8 * |
9 * This program is distributed in the hope that it will be useful, | 9 * This program is distributed in the hope that it will be useful, |
10 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
(...skipping 12 matching lines...) Expand all Loading... |
23 | 23 |
24 #include <ns3/address.h> | 24 #include <ns3/address.h> |
25 #include <ns3/ptr.h> | 25 #include <ns3/ptr.h> |
26 #include <ns3/object.h> | 26 #include <ns3/object.h> |
27 #include <ns3/eps-bearer.h> | 27 #include <ns3/eps-bearer.h> |
28 #include <ns3/epc-tft.h> | 28 #include <ns3/epc-tft.h> |
29 #include <list> | 29 #include <list> |
30 | 30 |
31 namespace ns3 { | 31 namespace ns3 { |
32 | 32 |
| 33 /** |
| 34 * EpcS11Sap |
| 35 */ |
33 class EpcS11Sap | 36 class EpcS11Sap |
34 { | 37 { |
35 public: | 38 public: |
36 | 39 |
37 virtual ~EpcS11Sap (); | 40 virtual ~EpcS11Sap (); |
38 | 41 |
| 42 /** |
| 43 * GTPC message |
| 44 */ |
39 struct GtpcMessage | 45 struct GtpcMessage |
40 { | 46 { |
41 uint32_t teid; | 47 uint32_t teid; ///< TEID |
42 }; | 48 }; |
43 | 49 |
44 /** | 50 /** |
45 * Fully-qualified TEID, see 3GPP TS 29.274 section 8.22 | 51 * Fully-qualified TEID, see 3GPP TS 29.274 section 8.22 |
46 *· | 52 *· |
47 */ | 53 */ |
48 struct Fteid· | 54 struct Fteid· |
49 { | 55 { |
50 uint32_t teid; | 56 uint32_t teid; ///< TEID |
51 Ipv4Address address; | 57 Ipv4Address address; ///< IP address |
52 }; | 58 }; |
53 | 59 |
54 /** | 60 /** |
55 * TS 29.274 8.21 User Location Information (ULI) | 61 * TS 29.274 8.21 User Location Information (ULI) |
56 *· | 62 *· |
57 */ | 63 */ |
58 struct Uli | 64 struct Uli |
59 { | 65 { |
60 uint16_t gci; | 66 uint16_t gci; ///< GCI |
61 }; | 67 }; |
62 ·· | 68 ·· |
63 · | 69 · |
64 }; | 70 }; |
65 | 71 |
66 /** | 72 /** |
67 * \ingroup lte | 73 * \ingroup lte |
68 * | 74 * |
69 * MME side of the S11 Service Access Point (SAP), provides the MME | 75 * MME side of the S11 Service Access Point (SAP), provides the MME |
70 * methods to be called when an S11 message is received by the MME.· | 76 * methods to be called when an S11 message is received by the MME.· |
71 */ | 77 */ |
72 class EpcS11SapMme : public EpcS11Sap | 78 class EpcS11SapMme : public EpcS11Sap |
73 { | 79 { |
74 public: | 80 public: |
75 ·· | 81 ·· |
76 /** | 82 /** |
77 * 3GPP TS 29.274 version 8.3.1 Release 8 section 8.28 | 83 * 3GPP TS 29.274 version 8.3.1 Release 8 section 8.28 |
78 *· | 84 *· |
79 */ | 85 */ |
80 struct BearerContextCreated | 86 struct BearerContextCreated |
81 { | 87 { |
82 | 88 |
83 EpcS11Sap::Fteid sgwFteid; | 89 EpcS11Sap::Fteid sgwFteid; ///< EPC FTEID |
84 uint8_t epsBearerId;· | 90 uint8_t epsBearerId; ///< EPS bearer ID |
85 EpsBearer bearerLevelQos;· | 91 EpsBearer bearerLevelQos; ///< EPS bearer |
86 Ptr<EpcTft> tft; | 92 Ptr<EpcTft> tft; ///< traffic flow template |
87 }; | 93 }; |
88 | 94 |
89 | 95 |
90 /**····· | 96 /**····· |
91 * Create Session Response message, see 3GPP TS 29.274 7.2.2 | 97 * Create Session Response message, see 3GPP TS 29.274 7.2.2 |
92 */ | 98 */ |
93 struct CreateSessionResponseMessage : public GtpcMessage | 99 struct CreateSessionResponseMessage : public GtpcMessage |
94 { | 100 { |
95 std::list<BearerContextCreated> bearerContextsCreated; | 101 std::list<BearerContextCreated> bearerContextsCreated; ///< bearer contexts
created |
96 }; | 102 }; |
97 | 103 |
98 | 104 |
99 /**· | 105 /**· |
100 * send a Create Session Response message | 106 * send a Create Session Response message |
101 *· | 107 *· |
102 * \param msg the message | 108 * \param msg the message |
103 */ | 109 */ |
104 virtual void CreateSessionResponse (CreateSessionResponseMessage msg) = 0; | 110 virtual void CreateSessionResponse (CreateSessionResponseMessage msg) = 0; |
105 | 111 |
| 112 /** |
| 113 * Bearer Context Removed structure |
| 114 */ |
106 struct BearerContextRemoved | 115 struct BearerContextRemoved |
107 { | 116 { |
108 uint8_t epsBearerId; | 117 uint8_t epsBearerId; ///< EPS bearer ID |
109 }; | 118 }; |
110 | 119 |
111 /** | 120 /** |
112 * Delete Bearer Request message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.9.2 | 121 * Delete Bearer Request message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.9.2 |
113 */ | 122 */ |
114 struct DeleteBearerRequestMessage : public GtpcMessage | 123 struct DeleteBearerRequestMessage : public GtpcMessage |
115 { | 124 { |
116 std::list<BearerContextRemoved> bearerContextsRemoved; | 125 std::list<BearerContextRemoved> bearerContextsRemoved; ///< list of bearer c
ontext removed |
117 }; | 126 }; |
118 | 127 |
119 /** | 128 /** |
120 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Request mes
sage shall be sent on the S11 interface by PGW to SGW and from SGW to MME | 129 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Request mes
sage shall be sent on the S11 interface by PGW to SGW and from SGW to MME |
121 * \param msg the message | 130 * \param msg the message |
122 */ | 131 */ |
123 virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg) = 0; | 132 virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg) = 0; |
124 | 133 |
125 | 134 |
126 | 135 |
127 | 136 |
128 /**····· | 137 /**····· |
129 * Modify Bearer Response message, see 3GPP TS 29.274 7.2.7 | 138 * Modify Bearer Response message, see 3GPP TS 29.274 7.2.7 |
130 */ | 139 */ |
131 struct ModifyBearerResponseMessage : public GtpcMessage | 140 struct ModifyBearerResponseMessage : public GtpcMessage |
132 { | 141 { |
| 142 /// Cause enumeration |
133 enum Cause { | 143 enum Cause { |
134 REQUEST_ACCEPTED = 0, | 144 REQUEST_ACCEPTED = 0, |
135 REQUEST_ACCEPTED_PARTIALLY, | 145 REQUEST_ACCEPTED_PARTIALLY, |
136 REQUEST_REJECTED, | 146 REQUEST_REJECTED, |
137 CONTEXT_NOT_FOUND | 147 CONTEXT_NOT_FOUND |
138 } cause; | 148 } cause; ///< the cause |
139 }; | 149 }; |
140 | 150 |
141 /**· | 151 /**· |
142 * send a Modify Bearer Response message | 152 * send a Modify Bearer Response message |
143 *· | 153 *· |
144 * \param msg the message | 154 * \param msg the message |
145 */ | 155 */ |
146 virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg) = 0; | 156 virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg) = 0; |
147 | 157 |
148 }; | 158 }; |
149 | 159 |
150 /** | 160 /** |
151 * \ingroup lte | 161 * \ingroup lte |
152 * | 162 * |
153 * SGW side of the S11 Service Access Point (SAP), provides the SGW | 163 * SGW side of the S11 Service Access Point (SAP), provides the SGW |
154 * methods to be called when an S11 message is received by the SGW.· | 164 * methods to be called when an S11 message is received by the SGW.· |
155 */ | 165 */ |
156 class EpcS11SapSgw : public EpcS11Sap | 166 class EpcS11SapSgw : public EpcS11Sap |
157 { | 167 { |
158 public: | 168 public: |
159 | 169 |
| 170 /// BearerContextToBeCreated structure |
160 struct BearerContextToBeCreated | 171 struct BearerContextToBeCreated |
161 {···· | 172 {···· |
162 EpcS11Sap::Fteid sgwFteid; | 173 EpcS11Sap::Fteid sgwFteid; ///< FTEID |
163 uint8_t epsBearerId;· | 174 uint8_t epsBearerId; ///< EPS bearer ID |
164 EpsBearer bearerLevelQos;· | 175 EpsBearer bearerLevelQos; ///< bearer QOS level |
165 Ptr<EpcTft> tft; | 176 Ptr<EpcTft> tft; ///< traffic flow template |
166 }; | 177 }; |
167 | 178 |
168 ·· | 179 ·· |
169 /**····· | 180 /**····· |
170 * Create Session Request message, see 3GPP TS 29.274 7.2.1 | 181 * Create Session Request message, see 3GPP TS 29.274 7.2.1 |
171 */ | 182 */ |
172 struct CreateSessionRequestMessage : public GtpcMessage | 183 struct CreateSessionRequestMessage : public GtpcMessage |
173 { | 184 { |
174 uint64_t imsi;· | 185 uint64_t imsi; ///< IMSI |
175 Uli uli;· | 186 Uli uli; ///< ULI |
176 std::list<BearerContextToBeCreated> bearerContextsToBeCreated;···· | 187 std::list<BearerContextToBeCreated> bearerContextsToBeCreated; ///< list of
bearer contexts to be created ··· |
177 }; | 188 }; |
178 | 189 |
179 /**· | 190 /**· |
180 * send a Create Session Request message | 191 * send a Create Session Request message |
181 *· | 192 *· |
182 * \param msg the message | 193 * \param msg the message |
183 */ | 194 */ |
184 virtual void CreateSessionRequest (CreateSessionRequestMessage msg) = 0; | 195 virtual void CreateSessionRequest (CreateSessionRequestMessage msg) = 0; |
185 | 196 |
| 197 /// BearerContextToBeCreated structure |
186 struct BearerContextToBeRemoved | 198 struct BearerContextToBeRemoved |
187 { | 199 { |
188 uint8_t epsBearerId; | 200 uint8_t epsBearerId; ///< EPS bearer ID |
189 }; | 201 }; |
190 | 202 |
191 /** | 203 /** |
192 * Delete Bearer Command message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.17.1 | 204 * Delete Bearer Command message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.17.1 |
193 */ | 205 */ |
194 struct DeleteBearerCommandMessage : public GtpcMessage | 206 struct DeleteBearerCommandMessage : public GtpcMessage |
195 { | 207 { |
196 std::list<BearerContextToBeRemoved> bearerContextsToBeRemoved; | 208 std::list<BearerContextToBeRemoved> bearerContextsToBeRemoved; ///< list of
bearer contexts to be removed |
197 }; | 209 }; |
198 | 210 |
199 /** | 211 /** |
200 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command mes
sage shall be sent on the S11 interface by the MME to the SGW | 212 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command mes
sage shall be sent on the S11 interface by the MME to the SGW |
201 */ | 213 */ |
202 virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg) = 0; | 214 virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg) = 0; |
203 | 215 |
204 | 216 /// BearerContextRemovedSgwPgw structure |
205 struct BearerContextRemovedSgwPgw | 217 struct BearerContextRemovedSgwPgw |
206 { | 218 { |
207 uint8_t epsBearerId; | 219 uint8_t epsBearerId; ///< EPS bearer ID |
208 }; | 220 }; |
209 | 221 |
210 /** | 222 /** |
211 * Delete Bearer Response message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.10.2 | 223 * Delete Bearer Response message, see 3GPP TS 29.274 Release 9 V9.3.0 section
7.2.10.2 |
212 */ | 224 */ |
213 struct DeleteBearerResponseMessage : public GtpcMessage | 225 struct DeleteBearerResponseMessage : public GtpcMessage |
214 { | 226 { |
215 std::list<BearerContextRemovedSgwPgw> bearerContextsRemoved; | 227 std::list<BearerContextRemovedSgwPgw> bearerContextsRemoved; ///< list of
bearer contexts removed |
216 }; | 228 }; |
217 | 229 |
218 /** | 230 /** |
219 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command mes
sage shall be sent on the S11 interface by the MME to the SGW | 231 * \brief As per 3GPP TS 29.274 Release 9 V9.3.0, a Delete Bearer Command mes
sage shall be sent on the S11 interface by the MME to the SGW |
220 * \param msg the message | 232 * \param msg the message |
221 */ | 233 */ |
222 virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg) = 0; | 234 virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg) = 0; |
223 | 235 |
224 /**····· | 236 /**····· |
225 * Modify Bearer Request message, see 3GPP TS 29.274 7.2.7 | 237 * Modify Bearer Request message, see 3GPP TS 29.274 7.2.7 |
226 */ | 238 */ |
227 struct ModifyBearerRequestMessage : public GtpcMessage | 239 struct ModifyBearerRequestMessage : public GtpcMessage |
228 { | 240 { |
229 Uli uli; | 241 Uli uli; ///< ULI |
230 }; | 242 }; |
231 | 243 |
232 /**· | 244 /**· |
233 * send a Modify Bearer Request message | 245 * send a Modify Bearer Request message |
234 *· | 246 *· |
235 * \param msg the message | 247 * \param msg the message |
236 */ | 248 */ |
237 virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg) = 0; | 249 virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg) = 0; |
238 | 250 |
239 }; | 251 }; |
240 | 252 |
241 | 253 |
242 | 254 |
243 | 255 |
244 | 256 |
245 | 257 |
246 | 258 |
247 /** | 259 /** |
248 * Template for the implementation of the EpcS11SapMme as a member | 260 * Template for the implementation of the EpcS11SapMme as a member |
249 * of an owner class of type C to which all methods are forwarded | 261 * of an owner class of type C to which all methods are forwarded |
250 *· | 262 *· |
251 */ | 263 */ |
252 template <class C> | 264 template <class C> |
253 class MemberEpcS11SapMme : public EpcS11SapMme | 265 class MemberEpcS11SapMme : public EpcS11SapMme |
254 { | 266 { |
255 public: | 267 public: |
| 268 /** |
| 269 * Constructor |
| 270 * |
| 271 * \param owner the owner class |
| 272 */ |
256 MemberEpcS11SapMme (C* owner); | 273 MemberEpcS11SapMme (C* owner); |
257 | 274 |
258 // inherited from EpcS11SapMme | 275 // inherited from EpcS11SapMme |
259 virtual void CreateSessionResponse (CreateSessionResponseMessage msg); | 276 virtual void CreateSessionResponse (CreateSessionResponseMessage msg); |
260 virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg); | 277 virtual void ModifyBearerResponse (ModifyBearerResponseMessage msg); |
261 virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg); | 278 virtual void DeleteBearerRequest (DeleteBearerRequestMessage msg); |
262 | 279 |
263 private: | 280 private: |
264 MemberEpcS11SapMme (); | 281 MemberEpcS11SapMme (); |
265 C* m_owner; | 282 C* m_owner; ///< owner class |
266 }; | 283 }; |
267 | 284 |
| 285 /** |
| 286 * Constructor |
| 287 * |
| 288 * \param owner the owner class |
| 289 */ |
268 template <class C> | 290 template <class C> |
269 MemberEpcS11SapMme<C>::MemberEpcS11SapMme (C* owner) | 291 MemberEpcS11SapMme<C>::MemberEpcS11SapMme (C* owner) |
270 : m_owner (owner) | 292 : m_owner (owner) |
271 { | 293 { |
272 } | 294 } |
273 | 295 |
274 template <class C> | 296 template <class C> |
275 MemberEpcS11SapMme<C>::MemberEpcS11SapMme () | 297 MemberEpcS11SapMme<C>::MemberEpcS11SapMme () |
276 { | 298 { |
277 } | 299 } |
(...skipping 22 matching lines...) Expand all Loading... |
300 | 322 |
301 /** | 323 /** |
302 * Template for the implementation of the EpcS11SapSgw as a member | 324 * Template for the implementation of the EpcS11SapSgw as a member |
303 * of an owner class of type C to which all methods are forwarded | 325 * of an owner class of type C to which all methods are forwarded |
304 *· | 326 *· |
305 */ | 327 */ |
306 template <class C> | 328 template <class C> |
307 class MemberEpcS11SapSgw : public EpcS11SapSgw | 329 class MemberEpcS11SapSgw : public EpcS11SapSgw |
308 { | 330 { |
309 public: | 331 public: |
| 332 /** |
| 333 * Constructor |
| 334 * |
| 335 * \param owner the owner class |
| 336 */ |
310 MemberEpcS11SapSgw (C* owner); | 337 MemberEpcS11SapSgw (C* owner); |
311 | 338 |
312 // inherited from EpcS11SapSgw | 339 // inherited from EpcS11SapSgw |
313 virtual void CreateSessionRequest (CreateSessionRequestMessage msg); | 340 virtual void CreateSessionRequest (CreateSessionRequestMessage msg); |
314 virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg); | 341 virtual void ModifyBearerRequest (ModifyBearerRequestMessage msg); |
315 virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg); | 342 virtual void DeleteBearerCommand (DeleteBearerCommandMessage msg); |
316 virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg); | 343 virtual void DeleteBearerResponse (DeleteBearerResponseMessage msg); |
317 | 344 |
318 private: | 345 private: |
319 MemberEpcS11SapSgw (); | 346 MemberEpcS11SapSgw (); |
320 C* m_owner; | 347 C* m_owner; ///< owner class |
321 }; | 348 }; |
322 | 349 |
| 350 /** |
| 351 * Constructor |
| 352 * |
| 353 * \param owner the owner class |
| 354 */ |
323 template <class C> | 355 template <class C> |
324 MemberEpcS11SapSgw<C>::MemberEpcS11SapSgw (C* owner) | 356 MemberEpcS11SapSgw<C>::MemberEpcS11SapSgw (C* owner) |
325 : m_owner (owner) | 357 : m_owner (owner) |
326 { | 358 { |
327 } | 359 } |
328 | 360 |
329 template <class C> | 361 template <class C> |
330 MemberEpcS11SapSgw<C>::MemberEpcS11SapSgw () | 362 MemberEpcS11SapSgw<C>::MemberEpcS11SapSgw () |
331 { | 363 { |
332 } | 364 } |
(...skipping 22 matching lines...) Expand all Loading... |
355 m_owner->DoDeleteBearerResponse (msg); | 387 m_owner->DoDeleteBearerResponse (msg); |
356 } | 388 } |
357 | 389 |
358 | 390 |
359 | 391 |
360 | 392 |
361 } //namespace ns3 | 393 } //namespace ns3 |
362 | 394 |
363 #endif /* EPC_S11_SAP_H */ | 395 #endif /* EPC_S11_SAP_H */ |
364 | 396 |
OLD | NEW |