|
1 // Copyright (c) 2004-2009 Nokia Corporation and/or its subsidiary(-ies). |
|
2 // All rights reserved. |
|
3 // This component and the accompanying materials are made available |
|
4 // under the terms of the License "Symbian Foundation License v1.0" to Symbian Foundation members and "Symbian Foundation End User License Agreement v1.0" to non-members |
|
5 // which accompanies this distribution, and is available |
|
6 // at the URL "http://www.symbianfoundation.org/legal/licencesv10.html". |
|
7 // |
|
8 // Initial Contributors: |
|
9 // Nokia Corporation - initial contribution. |
|
10 // |
|
11 // Contributors: |
|
12 // |
|
13 // Description: |
|
14 // icmp6_hdr.h - ICMPv6 header structure |
|
15 // This module defines the basic classes for accessing the header |
|
16 // structures within ICMPv6 packets. |
|
17 // |
|
18 |
|
19 |
|
20 |
|
21 /** |
|
22 @file icmp6_hdr.h |
|
23 @ingroup ip_packet_formats |
|
24 @publishedAll |
|
25 @released |
|
26 */ |
|
27 |
|
28 #ifndef __ICMP6_HDR_H__ |
|
29 #define __ICMP6_HDR_H__ |
|
30 |
|
31 #include <e32def.h> |
|
32 #include "in_hdr.h" |
|
33 #include <in_sock.h> // IPv6 enhanced in_sock.h |
|
34 |
|
35 /** |
|
36 * @addtogroup ip_packet_formats |
|
37 */ |
|
38 //@{ |
|
39 |
|
40 // TInet6HeaderICMP |
|
41 class TInet6HeaderICMP |
|
42 /** |
|
43 * ICMPv6 header common part layout. |
|
44 * |
|
45 * The basic ICMP header format only covers the common part (4 bytes) |
|
46 * and 4 bytes of the Message Body (can be accesses as "Parameter") |
|
47 @verbatim |
|
48 Extract from RFC-2462: General format of ICMP message |
|
49 |
|
50 0 1 2 3 |
|
51 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
52 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
53 | Type | Code | Checksum | |
|
54 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
55 | | |
|
56 + Message Body + |
|
57 | | |
|
58 @endverbatim |
|
59 * @publishedAll |
|
60 * @released |
|
61 */ |
|
62 { |
|
63 public: |
|
64 inline TInt HeaderLength() const |
|
65 /** |
|
66 * Gets the header length. |
|
67 * |
|
68 * @note |
|
69 * This length is not the true length of the |
|
70 * ICMP header. This only covers the fixed part. |
|
71 * |
|
72 * @return Header length. |
|
73 */ |
|
74 {return 4;} |
|
75 inline static TInt MinHeaderLength() |
|
76 /** |
|
77 * Gets the minimum header length. |
|
78 * |
|
79 * @return Minimum header length |
|
80 */ |
|
81 {return 4; } |
|
82 inline static TInt MaxHeaderLength() |
|
83 /** |
|
84 * Gets the maximum header length. |
|
85 * |
|
86 * @note |
|
87 * This length is not the true length of the |
|
88 * ICMP header. This only covers the fixed part. |
|
89 * |
|
90 * @return Maximum header length |
|
91 */ |
|
92 {return 4; } |
|
93 inline TUint8 *EndPtr() const |
|
94 /** |
|
95 * Gets a pointer to the byte following the header. |
|
96 * |
|
97 * @return |
|
98 * Pointer to the byte following the minimum |
|
99 * fixed header |
|
100 */ |
|
101 {return (TUint8 *)i + HeaderLength();} |
|
102 // |
|
103 // Access, get ICMP header field values from the packet |
|
104 // |
|
105 inline TUint8 Type() const |
|
106 /** |
|
107 * Gets the ICMPv6 type from the header. |
|
108 * @return ICMPv6 type [0..255] |
|
109 */ |
|
110 { |
|
111 return i[0]; |
|
112 } |
|
113 inline TUint8 Code() const |
|
114 /** |
|
115 * Gets the ICMPv6 code from the header. |
|
116 * @return ICMPv6 code [0..255] |
|
117 */ |
|
118 { |
|
119 return i[1]; |
|
120 } |
|
121 inline TInt Checksum() const |
|
122 /** |
|
123 * Gets the Checksum from the header. |
|
124 * @return Header Checksum (TUint16 in NETWORK byte order) |
|
125 */ |
|
126 { |
|
127 // Checksum is used in network byte order |
|
128 return *((TUint16 *)&i[2]); |
|
129 } |
|
130 inline TUint32 Parameter() const |
|
131 /** |
|
132 * Gets the ICMPv6 Parameter. |
|
133 * |
|
134 * Accesses the first 4 bytes of ICMP message body, and assumes |
|
135 * they form a 32 bit integer in network byte order. Returns |
|
136 * this integer in host order. |
|
137 * |
|
138 * @return ICMPv6 Parameter (as an integer) |
|
139 */ |
|
140 { |
|
141 return (i[4] << 24) | (i[5] << 16) | (i[6] << 8) | i[7]; |
|
142 } |
|
143 // |
|
144 // Build, set IP header field values into the packet |
|
145 // |
|
146 inline void SetType(TUint8 aType) |
|
147 /** |
|
148 * Sets the ICMPv6 type. |
|
149 * @param aType ICMPv6 type [0..255] |
|
150 */ |
|
151 { |
|
152 i[0] = aType; |
|
153 } |
|
154 inline void SetCode(TUint8 aCode) |
|
155 /** |
|
156 * Sets the ICMPv6 code. |
|
157 * @param aCode ICMPv6 code [0..255] |
|
158 */ |
|
159 { |
|
160 i[1] = aCode; |
|
161 } |
|
162 inline void SetChecksum(TInt aSum) |
|
163 /** |
|
164 * Sets the Checksum. |
|
165 * |
|
166 * @param aSum |
|
167 * The Checksum [0..65535] (16 least significant bits |
|
168 * stored as is (assumed to be in NETWORK byte order). |
|
169 */ |
|
170 { |
|
171 *((TUint16 *)&i[2]) = (TUint16)aSum; |
|
172 } |
|
173 inline void SetParameter(TUint32 aValue) |
|
174 /** |
|
175 * Sets the ICMPv6 Parameter. |
|
176 * |
|
177 * The value is converted into network byte order and |
|
178 * stored as the first 4 bytes of the ICMP message body. |
|
179 * |
|
180 * @param aValue |
|
181 * The parameter. |
|
182 */ |
|
183 { |
|
184 i[7] = (TUint8)aValue; |
|
185 i[6] = (TUint8)(aValue >> 8); |
|
186 i[5] = (TUint8)(aValue >> 16); |
|
187 i[4] = (TUint8)(aValue >> 24); |
|
188 } |
|
189 |
|
190 protected: |
|
191 union |
|
192 { |
|
193 TUint8 i[8]; |
|
194 TUint32 iAlign; // A dummy member to force the 4 byte alignment |
|
195 }; |
|
196 }; |
|
197 |
|
198 |
|
199 // |
|
200 // TInet6HeaderICMP_Echo |
|
201 // |
|
202 class TInet6HeaderICMP_Echo : public TInet6HeaderICMP |
|
203 /** |
|
204 * ICMPv6 Echo Request and Echo Reply layout. |
|
205 * |
|
206 * Describes the ICMP Echo Request and Replay layout. The space for |
|
207 * Identifier and Sequence is already covered by the base class. |
|
208 * |
|
209 @verbatim |
|
210 RFC-2463: |
|
211 |
|
212 0 1 2 3 |
|
213 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
214 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
215 | Type | Code | Checksum | |
|
216 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
217 | Identifier | Sequence Number | |
|
218 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
219 | Data ... |
|
220 +-+-+-+-+- |
|
221 @endverbatim |
|
222 @publishedAll |
|
223 @released |
|
224 */ |
|
225 { |
|
226 public: |
|
227 // |
|
228 // General |
|
229 // |
|
230 inline TInt HeaderLength() const |
|
231 /** |
|
232 * Gets the header length. |
|
233 * @return The length |
|
234 */ |
|
235 {return 8;} |
|
236 inline static TInt MinHeaderLength() |
|
237 /** |
|
238 * Gets the minimum header length. |
|
239 * @return The length |
|
240 */ |
|
241 {return 8; } |
|
242 inline static TInt MaxHeaderLength() |
|
243 /** |
|
244 * Gets the maximum header length. |
|
245 * @return The length |
|
246 */ |
|
247 {return 8; } |
|
248 |
|
249 // |
|
250 // Access, get ICMP header field values from the packet |
|
251 // |
|
252 inline TInt Identifier() const |
|
253 /** |
|
254 * Gets the Idenfifier |
|
255 * @return The Identifier |
|
256 */ |
|
257 { |
|
258 return (i[4] << 8) + i[5]; |
|
259 } |
|
260 inline TInt Sequence() const |
|
261 /** |
|
262 * Gets the Sequence Number |
|
263 * @return The number |
|
264 */ |
|
265 { |
|
266 return (i[6] << 8) + i[7]; |
|
267 } |
|
268 // |
|
269 // Build, set IP header field values into the packet |
|
270 // |
|
271 inline void SetIdentifier(TUint16 aIdentifier) |
|
272 /** |
|
273 * Sets the Idenfifier |
|
274 * @param aIdentifier The Identifier |
|
275 */ |
|
276 { |
|
277 i[4] = (TUint8)(aIdentifier >> 8); |
|
278 i[5] = (TUint8)aIdentifier; |
|
279 } |
|
280 inline void SetSequence(TUint16 aSequence) |
|
281 /** |
|
282 * Sets the Sequence Number |
|
283 * @param aSequence The number |
|
284 */ |
|
285 { |
|
286 i[6] = (TUint8)(aSequence >> 8); |
|
287 i[7] = (TUint8)aSequence; |
|
288 } |
|
289 private: |
|
290 }; |
|
291 |
|
292 |
|
293 class TInet6HeaderICMP_RouterSol: public TInet6HeaderICMP |
|
294 /** |
|
295 * ICMPv6 Router Solicitation layout. |
|
296 * |
|
297 @verbatim |
|
298 Router Solicitation Message Format (from RFC-2461) |
|
299 |
|
300 0 1 2 3 |
|
301 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
302 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
303 | Type | Code | Checksum | |
|
304 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
305 | Reserved | |
|
306 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
307 | Options ... |
|
308 +-+-+-+-+-+-+-+-+-+-+-+- |
|
309 @endverbatim |
|
310 * Aside from the fields provided by the base class, there is nothing |
|
311 * else here. |
|
312 * |
|
313 * Valid options: |
|
314 * |
|
315 * - #KInet6OptionICMP_SourceLink |
|
316 * |
|
317 * @publishedAll |
|
318 * @released |
|
319 */ |
|
320 { |
|
321 public: |
|
322 inline static TInt MinHeaderLength() {return 8; } |
|
323 inline static TInt MaxHeaderLength() {return 8; } |
|
324 inline TInt HeaderLength() const {return 8;} |
|
325 }; |
|
326 |
|
327 // Router Advertisement Message Format from RFC-2461 |
|
328 class TInet6HeaderICMP_RouterAdv : public TInet6HeaderICMP |
|
329 /** |
|
330 * ICMPv6 Router Advertisement layout. |
|
331 * |
|
332 * (Neighbour Discovery for IP version 6) |
|
333 * (+ Home Agent flag from draft-ietf-mobileip-ipv6-08) |
|
334 @verbatim |
|
335 Type=134, Code=0 |
|
336 |
|
337 0 1 2 3 |
|
338 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
339 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
340 | Type | Code | Checksum | |
|
341 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
342 | Cur Hop Limit |M|O|H|Prf|Rsrvd| Router Lifetime | |
|
343 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
344 | Reachable Time | |
|
345 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
346 | Retrans Timer | |
|
347 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
348 | Options ... |
|
349 +-+-+-+-+-+-+-+-+-+-+-+- |
|
350 @endverbatim |
|
351 * |
|
352 * @note |
|
353 * Above is longer thant what is declared in the base class |
|
354 * i-member. The user must verify the sufficient length of |
|
355 * the packet, when using this. |
|
356 * |
|
357 * Valid options: |
|
358 * |
|
359 * - #KInet6OptionICMP_SourceLink |
|
360 * - #KInet6OptionICMP_Mtu |
|
361 * - #KInet6OptionICMP_Prefix |
|
362 * - #KInet6OptionICMP_RouteInformation (draft) |
|
363 * |
|
364 * @publishedAll |
|
365 * @released |
|
366 */ |
|
367 { |
|
368 public: |
|
369 // |
|
370 // General |
|
371 // |
|
372 inline static TInt MinHeaderLength() {return 16; } |
|
373 inline static TInt MaxHeaderLength() {return 16; } |
|
374 inline TInt HeaderLength() const {return 16;} |
|
375 // |
|
376 // Access, get ICMP header field values from the packet |
|
377 // |
|
378 inline TInt CurHopLimit() const |
|
379 /** |
|
380 * Gets Cur Hop Limit. |
|
381 * @return Hop Limit |
|
382 */ |
|
383 { |
|
384 return i[4]; |
|
385 } |
|
386 inline TInt Flags() const |
|
387 /** |
|
388 * Gets flags byte |
|
389 * @return Flags (M, O, H, Prf and Rsrvd) |
|
390 */ |
|
391 { |
|
392 return i[5]; // M + O + Reserved as one unit |
|
393 } |
|
394 inline TInt M() const |
|
395 /** Gets Managed Address Configuration (M) flag */ |
|
396 { |
|
397 return i[5] & 0x80; |
|
398 } |
|
399 inline TInt O() const |
|
400 /** Gets Other Address Configuartion (O) flag */ |
|
401 { |
|
402 return i[5] & 0x40; |
|
403 } |
|
404 inline TInt H() const |
|
405 /** Gets Home Agent Configuration (H) flag */ |
|
406 { |
|
407 return i[5] & 0x20; |
|
408 } |
|
409 #if 1 |
|
410 inline TInt Prf() const |
|
411 /** |
|
412 * Gets default route preference. |
|
413 * |
|
414 * Experimental: draft-draves-ipngwg-router-selection-01.txt |
|
415 * Default Router Preferences and More-Specific Routes |
|
416 */ |
|
417 { |
|
418 return (i[5] >> 3) & 0x3; // should be treated as 2bit signed int |
|
419 } |
|
420 #endif |
|
421 inline TInt RouterLifetime() const |
|
422 /** |
|
423 * Gets the lifetime of the defaul route. |
|
424 * |
|
425 * If non-zero, specifies how long (in seconds) this |
|
426 * router is willing to act as a default router. |
|
427 * |
|
428 * @return The life time of the default route. |
|
429 * |
|
430 * @note |
|
431 * This is badly named. The parameter controls |
|
432 * only the default route processing. The value |
|
433 * ZERO does not mean that the sender is not a |
|
434 * router. |
|
435 */ |
|
436 { |
|
437 return (i[6] << 8) + i[7]; |
|
438 } |
|
439 inline TUint32 ReachableTime() const |
|
440 /** |
|
441 * Gets the value of reachable timer. |
|
442 */ |
|
443 { |
|
444 return (i[8] << 24) | (i[9] << 16) | (i[10] << 8) | i[11]; |
|
445 } |
|
446 inline TUint32 RetransTimer() const |
|
447 /** |
|
448 * Gets the value of retransmit timer. |
|
449 */ |
|
450 { |
|
451 return (i[12] << 24) | (i[13] << 16) | (i[14] << 8) | i[15]; |
|
452 } |
|
453 // |
|
454 // Build, set IP header field values into the packet |
|
455 // |
|
456 inline void SetCurHopLimit(TInt aLimit) |
|
457 /** |
|
458 * Sets the Cur Hoplimit. |
|
459 * @param aLimit The Hoplimit [0..255] |
|
460 */ |
|
461 { |
|
462 i[4] = (TUint8)aLimit; |
|
463 } |
|
464 inline void SetFlags(TInt aFlags) |
|
465 /** |
|
466 * Sets the flags. |
|
467 * @param aFlags The flags bits [0..255]. |
|
468 */ |
|
469 { |
|
470 i[5] = (TUint8)aFlags; |
|
471 } |
|
472 inline void SetRouterLifetime(TInt aTime) |
|
473 /** |
|
474 * Sets the lifetime of the default route. |
|
475 * @param aTime The lifetime. |
|
476 */ |
|
477 { |
|
478 i[7] = (TUint8)aTime; |
|
479 i[6] = (TUint8)(aTime >> 8); |
|
480 } |
|
481 inline void SetReachableTime(TUint32 aTime) |
|
482 /** |
|
483 * Sets the value of reachable timer |
|
484 * @param aTime The timer value |
|
485 */ |
|
486 { |
|
487 i[11] = (TUint8)aTime; |
|
488 i[10] = (TUint8)(aTime >> 8); |
|
489 i[9] = (TUint8)(aTime >> 16); |
|
490 i[8] = (TUint8)(aTime >> 24); |
|
491 } |
|
492 inline void SetRetransTimer(TUint32 aTimer) |
|
493 /** |
|
494 * Sets the value of the retransmit timer |
|
495 * @param aTimer The timer value |
|
496 */ |
|
497 { |
|
498 i[15] = (TUint8)aTimer; |
|
499 i[14] = (TUint8)(aTimer >> 8); |
|
500 i[13] = (TUint8)(aTimer >> 16); |
|
501 i[12] = (TUint8)(aTimer >> 24); |
|
502 } |
|
503 |
|
504 private: |
|
505 }; |
|
506 |
|
507 class TInet6HeaderICMP_NeighborSol : public TInet6HeaderICMP |
|
508 /** |
|
509 * ICMPv6 Neighbour Solicitation layout. |
|
510 @verbatim |
|
511 Neigbour Solicitation Message Format from RFC-2461 |
|
512 |
|
513 0 1 2 3 |
|
514 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
515 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
516 | Type | Code | Checksum | |
|
517 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
518 | Reserved | |
|
519 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
520 | | |
|
521 + + |
|
522 | | |
|
523 + Target Address + |
|
524 | | |
|
525 + + |
|
526 | | |
|
527 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
528 | Options ... |
|
529 +-+-+-+-+-+-+-+-+-+-+-+- |
|
530 @endverbatim |
|
531 * |
|
532 * @note |
|
533 * Above is longer thant what is declared in the base class |
|
534 * i-member. The user must verify the sufficient length of |
|
535 * the packet, when using this. |
|
536 * |
|
537 * Valid options: |
|
538 * |
|
539 * - #KInet6OptionICMP_SourceLink |
|
540 * |
|
541 * @publishedAll |
|
542 * @released |
|
543 */ |
|
544 { |
|
545 public: |
|
546 // |
|
547 // General |
|
548 // |
|
549 inline static TInt MinHeaderLength() {return 24; } |
|
550 inline static TInt MaxHeaderLength() {return 24; } |
|
551 inline TInt HeaderLength() const {return 24;} |
|
552 inline TIp6Addr &Target() const |
|
553 /** |
|
554 * Gets the Target Address. |
|
555 * |
|
556 * @return The target address (reference). |
|
557 */ |
|
558 { |
|
559 return (TIp6Addr &)i[8]; |
|
560 } |
|
561 private: |
|
562 }; |
|
563 |
|
564 |
|
565 class TInet6HeaderICMP_NeighborAdv : public TInet6HeaderICMP |
|
566 /** |
|
567 * ICMPv6 Neighbour Advertisement layout. |
|
568 @verbatim |
|
569 Neighbor Advertisement Message Format (from RFC-2461) |
|
570 |
|
571 0 1 2 3 |
|
572 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
573 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
574 | Type | Code | Checksum | |
|
575 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
576 |R|S|O| Reserved | |
|
577 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
578 | | |
|
579 + + |
|
580 | | |
|
581 + Target Address + |
|
582 | | |
|
583 + + |
|
584 | | |
|
585 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
586 | Options ... |
|
587 +-+-+-+-+-+-+-+-+-+-+-+- |
|
588 @endverbatim |
|
589 * @note |
|
590 * Above is longer thant what is declared in the base class |
|
591 * i-member. The user must verify the sufficient length of |
|
592 * the packet, when using this. |
|
593 * |
|
594 * Valid options: |
|
595 * |
|
596 * - #KInet6OptionICMP_TargetLink |
|
597 * |
|
598 * @publishedAll |
|
599 * @released |
|
600 */ |
|
601 { |
|
602 public: |
|
603 // |
|
604 // General |
|
605 // |
|
606 inline static TInt MinHeaderLength() {return 24; } |
|
607 inline static TInt MaxHeaderLength() {return 24; } |
|
608 inline TInt HeaderLength() const {return 24;} |
|
609 |
|
610 // |
|
611 // Set and Access the Target Address |
|
612 // |
|
613 inline TIp6Addr &Target() const |
|
614 /** |
|
615 * Gets the Target Address. |
|
616 * |
|
617 * @return The target address (reference). |
|
618 */ |
|
619 { |
|
620 return (TIp6Addr &)i[8]; |
|
621 } |
|
622 |
|
623 inline TInt R() |
|
624 { |
|
625 return 0x80 & i[4]; |
|
626 } |
|
627 inline TInt S() |
|
628 { |
|
629 return 0x40 & i[4]; |
|
630 } |
|
631 inline TInt O() |
|
632 { |
|
633 return 0x20 & i[4]; |
|
634 } |
|
635 inline void SetR(TInt aValue) |
|
636 { |
|
637 if (aValue) i[4] |= 0x80; else i[4] &= ~0x80; |
|
638 } |
|
639 inline void SetS(TInt aValue) |
|
640 { |
|
641 if (aValue) i[4] |= 0x40; else i[4] &= ~0x40; |
|
642 } |
|
643 inline void SetO(TInt aValue) |
|
644 { |
|
645 if (aValue) i[4] |= 0x20; else i[4] &= ~0x20; |
|
646 } |
|
647 |
|
648 }; |
|
649 |
|
650 |
|
651 class TInet6HeaderICMP_Redirect : public TInet6HeaderICMP |
|
652 /** |
|
653 * ICMPv6 Redirect layout. |
|
654 @verbatim |
|
655 Redirect Message Format (RFC-2461) |
|
656 |
|
657 0 1 2 3 |
|
658 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
659 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
660 | Type | Code | Checksum | |
|
661 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
662 | Reserved | |
|
663 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
664 | | |
|
665 + + |
|
666 | | |
|
667 + Target Address + |
|
668 | | |
|
669 + + |
|
670 | | |
|
671 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
672 | | |
|
673 + + |
|
674 | | |
|
675 + Destination Address + |
|
676 | | |
|
677 + + |
|
678 | | |
|
679 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
680 | Options ... |
|
681 +-+-+-+-+-+-+-+-+-+-+-+- |
|
682 |
|
683 @endverbatim |
|
684 * @note |
|
685 * Above is longer thant what is declared in the base class |
|
686 * i-member. The user must verify the sufficient length of |
|
687 * the packet, when using this. |
|
688 * |
|
689 * Valid options: |
|
690 * |
|
691 * - #KInet6OptionICMP_TargetLink |
|
692 * - #KInet6OptionICMP_Redirect |
|
693 * |
|
694 * @publishedAll |
|
695 * @released |
|
696 */ |
|
697 { |
|
698 public: |
|
699 // |
|
700 // General |
|
701 // |
|
702 inline static TInt MinHeaderLength() {return 40; } |
|
703 inline static TInt MaxHeaderLength() {return 40; } |
|
704 inline TInt HeaderLength() const {return 40;} |
|
705 |
|
706 inline TIp6Addr &Target() const |
|
707 /** |
|
708 * Gets the Target Address. |
|
709 * |
|
710 * @return The target address (reference). |
|
711 */ |
|
712 { |
|
713 return (TIp6Addr &)i[8]; |
|
714 } |
|
715 inline TIp6Addr &Destination() const |
|
716 /** |
|
717 * Gets the Destination Address. |
|
718 * |
|
719 * @return The destination address (reference). |
|
720 */ |
|
721 { |
|
722 return (TIp6Addr &)i[24]; |
|
723 } |
|
724 }; |
|
725 |
|
726 |
|
727 class TInet6OptionICMP_LinkLayer |
|
728 /** |
|
729 * ICMPv6 Link-layer Address layout. |
|
730 @verbatim |
|
731 Source/Target Link-layer Address Option (RFC-2461) |
|
732 |
|
733 0 1 2 3 |
|
734 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
735 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
736 | Type | Length | Link-Layer Address ... |
|
737 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
738 @endverbatim |
|
739 * @publishedAll |
|
740 * @released |
|
741 */ |
|
742 { |
|
743 public: |
|
744 inline static TInt MinHeaderLength() {return 8; } |
|
745 inline static TInt MaxHeaderLength() {return 8; } // Not very useful |
|
746 inline TInt HeaderLength() const {return Length() * 8; } |
|
747 // |
|
748 // Access |
|
749 // |
|
750 inline TInt Type() const |
|
751 { |
|
752 return i[0]; |
|
753 } |
|
754 inline TInt Length() const |
|
755 { |
|
756 return i[1]; |
|
757 } |
|
758 // |
|
759 // Access and Set |
|
760 // |
|
761 inline TPtr8 Address() const |
|
762 { |
|
763 return TPtr8((TUint8 *)&i[2], i[1] * 8 - 2, i[1] * 8 - 2); |
|
764 } |
|
765 // |
|
766 // Construct methods |
|
767 // |
|
768 inline void SetType(TInt aType) |
|
769 { |
|
770 i[0] = (TUint8)aType; |
|
771 } |
|
772 inline void SetLength(TInt aLength) |
|
773 { |
|
774 i[1] = (TUint8)aLength; |
|
775 } |
|
776 private: |
|
777 union |
|
778 { |
|
779 TUint8 i[8]; |
|
780 TUint32 iAlign; // A dummy member to force the 4 byte alignment |
|
781 }; |
|
782 }; |
|
783 |
|
784 |
|
785 class TInet6OptionICMP_Prefix |
|
786 /** |
|
787 * ICMPv6 Prefix Infotmation Option. |
|
788 @verbatim |
|
789 Prefix Information Option (RFC-2461) |
|
790 (+ Router Address flag from draft-ietf-mobileip-ipv6-08) |
|
791 0 1 2 3 |
|
792 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
793 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
794 | Type | Length | Prefix Length |L|A|R| Rsrvd1 | |
|
795 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
796 | Valid Lifetime | |
|
797 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
798 | Preferred Lifetime | |
|
799 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
800 | Reserved2 | |
|
801 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
802 | | |
|
803 + + |
|
804 | | |
|
805 + Prefix + |
|
806 | | |
|
807 + + |
|
808 | | |
|
809 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
810 |
|
811 @endverbatim |
|
812 * @publishedAll |
|
813 * @released |
|
814 */ |
|
815 { |
|
816 public: |
|
817 inline static TInt MinHeaderLength() {return 4*8; } |
|
818 inline static TInt MaxHeaderLength() {return 4*8; } // Not very useful |
|
819 inline TInt HeaderLength() const {return 4*8; } |
|
820 |
|
821 inline TInt Type() const |
|
822 { |
|
823 return i[0]; |
|
824 } |
|
825 inline TInt Length() const |
|
826 { |
|
827 return i[1]; |
|
828 } |
|
829 inline TInt PrefixLength() const |
|
830 { |
|
831 return i[2]; // 0..128 |
|
832 } |
|
833 inline TInt LFlag() const |
|
834 { |
|
835 return i[3] & 0x80; |
|
836 } |
|
837 inline TInt AFlag() const |
|
838 { |
|
839 return i[3] & 0x40; |
|
840 } |
|
841 inline TInt RFlag() const |
|
842 { |
|
843 return i[3] & 0x20; |
|
844 } |
|
845 inline TUint32 ValidLifetime() const |
|
846 { |
|
847 return (i[4] << 24) | (i[5] << 16) | (i[6] << 8) | i[7]; |
|
848 } |
|
849 inline TUint32 PreferredLifetime() const |
|
850 { |
|
851 return (i[8] << 24) | (i[9] << 16) | (i[10] << 8) | i[11]; |
|
852 } |
|
853 // |
|
854 // |
|
855 inline TIp6Addr &Prefix() const |
|
856 { |
|
857 return (TIp6Addr &)i[16]; |
|
858 } |
|
859 // |
|
860 // Construct methods |
|
861 // |
|
862 inline void SetType(TInt aType) |
|
863 { |
|
864 i[0] = (TUint8)aType; |
|
865 } |
|
866 inline void SetLength(TInt aLength) |
|
867 { |
|
868 i[1] = (TUint8)aLength; |
|
869 } |
|
870 inline void SetPrefixLength(TInt aLength) |
|
871 { |
|
872 i[2] = (TUint8)aLength; |
|
873 } |
|
874 inline void SetFlags(TInt aFlags) |
|
875 { |
|
876 i[3] = (TUint8)aFlags; |
|
877 } |
|
878 inline void SetValidLifetime(TUint32 aTime) |
|
879 { |
|
880 i[7] = (TUint8)aTime; |
|
881 i[6] = (TUint8)(aTime >> 8); |
|
882 i[5] = (TUint8)(aTime >> 16); |
|
883 i[4] = (TUint8)(aTime >> 24); |
|
884 } |
|
885 inline void SetPreferredLifetime(TUint32 aTime) |
|
886 { |
|
887 i[11] = (TUint8)aTime; |
|
888 i[10] = (TUint8)(aTime >> 8); |
|
889 i[9] = (TUint8)(aTime >> 16); |
|
890 i[8] = (TUint8)(aTime >> 24); |
|
891 } |
|
892 inline void SetReserved2(TUint32 aFiller) |
|
893 { |
|
894 i[15] = (TUint8)aFiller; |
|
895 i[14] = (TUint8)(aFiller >> 8); |
|
896 i[13] = (TUint8)(aFiller >> 16); |
|
897 i[12] = (TUint8)(aFiller >> 24); |
|
898 } |
|
899 |
|
900 |
|
901 private: |
|
902 union |
|
903 { |
|
904 TUint8 i[4*8]; |
|
905 TUint32 iAlign; // A dummy member to force the 4 byte alignment |
|
906 }; |
|
907 }; |
|
908 |
|
909 |
|
910 class TInet6OptionICMP_Mtu |
|
911 /** |
|
912 * ICMPv6 MTU Option. |
|
913 @verbatim |
|
914 MTU Option (RFC-2461) |
|
915 |
|
916 0 1 2 3 |
|
917 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
918 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
919 | Type | Length | Reserved | |
|
920 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
921 | MTU | |
|
922 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
923 @endverbatim |
|
924 * @publishedAll |
|
925 * @released |
|
926 */ |
|
927 { |
|
928 public: |
|
929 inline static TInt MinHeaderLength() {return 8; } |
|
930 inline static TInt MaxHeaderLength() {return 8; } // Not very useful |
|
931 inline TInt HeaderLength() const {return 8; } |
|
932 |
|
933 inline TInt Type() const |
|
934 { |
|
935 return i[0]; |
|
936 } |
|
937 inline TInt Length() const |
|
938 { |
|
939 return i[1]; |
|
940 } |
|
941 inline TInt Mtu() const |
|
942 { |
|
943 return (i[4] << 24) | (i[5] << 16) | (i[6] << 8) | i[7]; |
|
944 } |
|
945 // |
|
946 // Construct methods |
|
947 // |
|
948 inline void SetType(TInt aType) |
|
949 { |
|
950 i[0] = (TUint8)aType; |
|
951 } |
|
952 inline void SetLength(TInt aLength) |
|
953 { |
|
954 i[1] = (TUint8)aLength; |
|
955 // Silently ZERO the reserved bits... not too nice --- msa |
|
956 i[2] = 0; |
|
957 i[3] = 0; |
|
958 } |
|
959 inline void SetMtu(TUint32 aMtu) |
|
960 { |
|
961 i[7] = (TUint8)aMtu; |
|
962 i[6] = (TUint8)(aMtu >> 8); |
|
963 i[5] = (TUint8)(aMtu >> 16); |
|
964 i[4] = (TUint8)(aMtu >> 24); |
|
965 } |
|
966 private: |
|
967 TUint8 i[8]; |
|
968 }; |
|
969 |
|
970 |
|
971 #if 1 |
|
972 class TInet6OptionICMP_RouteInformation |
|
973 // Route Information Option |
|
974 // Experimental: draft-draves-ipngwg-router-selection-01.txt |
|
975 /** |
|
976 * ICMPv6 Route Information Option. |
|
977 @verbatim |
|
978 Default Router Preferences and More-Specific Routes |
|
979 |
|
980 0 1 2 3 |
|
981 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
982 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
983 | Type | Length | Prefix Length |Resvd|Prf|Resvd| |
|
984 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
985 | Route Lifetime | |
|
986 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
987 | | |
|
988 + + |
|
989 | | |
|
990 + Prefix + |
|
991 | | |
|
992 + + |
|
993 | | |
|
994 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
995 @endverbatim |
|
996 * @publishedAll |
|
997 * @released |
|
998 */ |
|
999 { |
|
1000 public: |
|
1001 inline static TInt MinHeaderLength() {return 8; } |
|
1002 inline static TInt MaxHeaderLength() {return 3*8; } |
|
1003 inline TInt HeaderLength() const {return Length()*8; } |
|
1004 |
|
1005 inline TInt Type() const |
|
1006 { |
|
1007 return i[0]; |
|
1008 } |
|
1009 inline TInt Length() const |
|
1010 { |
|
1011 return i[1]; |
|
1012 } |
|
1013 inline TInt PrefixLength() const |
|
1014 { |
|
1015 return i[2]; // 0..128 |
|
1016 } |
|
1017 inline TInt Prf() const |
|
1018 { |
|
1019 return (i[3] >> 3) & 0x3; // should be treated as 2bit signed int |
|
1020 } |
|
1021 inline TUint32 RouteLifetime() const |
|
1022 { |
|
1023 return (i[4] << 24) | (i[5] << 16) | (i[6] << 8) | i[7]; |
|
1024 } |
|
1025 // |
|
1026 // *WARNING* The "Prefix" returns a raw reference to the beginning |
|
1027 // of the prefix field in the option structure. HOWEVER, the option |
|
1028 // field can be shorter than 128 bits! If used to allocate space, |
|
1029 // the maximum is allocated and the method is safe, but that is not |
|
1030 // true if header is mapped directly to the received packet! -- msa |
|
1031 inline TIp6Addr &Prefix() const |
|
1032 { |
|
1033 return (TIp6Addr &)i[8]; |
|
1034 } |
|
1035 // |
|
1036 // Construct methods |
|
1037 // |
|
1038 inline void SetType(TInt aType) |
|
1039 { |
|
1040 i[0] = (TUint8)aType; |
|
1041 } |
|
1042 inline void SetLength(TInt aLength) |
|
1043 { |
|
1044 i[1] = (TUint8)aLength; |
|
1045 } |
|
1046 inline void SetPrefixLength(TInt aLength) |
|
1047 { |
|
1048 i[2] = (TUint8)aLength; |
|
1049 } |
|
1050 inline void SetPrefixLifetime(TUint32 aTime) |
|
1051 { |
|
1052 i[7] = (TUint8)aTime; |
|
1053 i[6] = (TUint8)(aTime >> 8); |
|
1054 i[5] = (TUint8)(aTime >> 16); |
|
1055 i[4] = (TUint8)(aTime >> 24); |
|
1056 } |
|
1057 |
|
1058 private: |
|
1059 union |
|
1060 { |
|
1061 TUint8 i[3*8]; // The space allocated for MAX LENGTH |
|
1062 TUint32 iAlign; // A dummy member to force the 4 byte alignment |
|
1063 }; |
|
1064 }; |
|
1065 |
|
1066 class TInet6OptionICMP_DnsInformation |
|
1067 /** |
|
1068 * ICMPv6 Recursive DNS Server Option. |
|
1069 * IPv6 DNS Configuration based on Router Advertisement |
|
1070 * |
|
1071 * Experimental: draft-jeong-dnsop-ipv6-discovery-03.txt |
|
1072 @verbatim |
|
1073 Recursive DNS Server Option |
|
1074 |
|
1075 0 1 2 3 |
|
1076 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 |
|
1077 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
1078 | Type | Length | Pref | Reserved | |
|
1079 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
1080 | Lifetime | |
|
1081 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
1082 | | |
|
1083 : IPv6 Address of RDNSS : |
|
1084 | | |
|
1085 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ |
|
1086 |
|
1087 @endverbatim |
|
1088 * @publishedAll |
|
1089 * @released |
|
1090 */ |
|
1091 { |
|
1092 public: |
|
1093 inline static TInt MinHeaderLength() {return 24; } |
|
1094 inline static TInt MaxHeaderLength() {return 24; } |
|
1095 inline TInt HeaderLength() const {return Length()*8; } |
|
1096 |
|
1097 inline TInt Type() const |
|
1098 { |
|
1099 return i[0]; |
|
1100 } |
|
1101 inline TInt Length() const |
|
1102 { |
|
1103 return i[1]; |
|
1104 } |
|
1105 inline TInt Pref() const |
|
1106 { |
|
1107 return (i[3] >> 4) & 0xF; |
|
1108 } |
|
1109 inline TUint32 Lifetime() const |
|
1110 { |
|
1111 return (i[4] << 24) | (i[5] << 16) | (i[6] << 8) | i[7]; |
|
1112 } |
|
1113 inline TIp6Addr &Address() const |
|
1114 { |
|
1115 return (TIp6Addr &)i[8]; |
|
1116 } |
|
1117 // |
|
1118 // Construct methods |
|
1119 // |
|
1120 inline void SetType(TInt aType) |
|
1121 { |
|
1122 i[0] = (TUint8)aType; |
|
1123 } |
|
1124 inline void SetLength(TInt aLength) |
|
1125 { |
|
1126 i[1] = (TUint8)aLength; |
|
1127 } |
|
1128 inline void SetPref(TInt aPref) |
|
1129 { |
|
1130 i[2] = (TUint8)(((aPref << 4) & 0xF0) | (i[2] & 0xF)); |
|
1131 } |
|
1132 inline void SetLifetime(TUint32 aTime) |
|
1133 { |
|
1134 i[7] = (TUint8)aTime; |
|
1135 i[6] = (TUint8)(aTime >> 8); |
|
1136 i[5] = (TUint8)(aTime >> 16); |
|
1137 i[4] = (TUint8)(aTime >> 24); |
|
1138 } |
|
1139 |
|
1140 private: |
|
1141 union |
|
1142 { |
|
1143 TUint8 i[24]; // The space allocated for MAX LENGTH |
|
1144 TUint32 iAlign; // A dummy member to force the 4 byte alignment |
|
1145 }; |
|
1146 }; |
|
1147 |
|
1148 #endif |
|
1149 |
|
1150 /** |
|
1151 * @name ICMPv6 Error Message Types (0-127) |
|
1152 */ |
|
1153 //@{ |
|
1154 const TUint8 KInet6ICMP_Unreachable = 1; |
|
1155 const TUint8 KInet6ICMP_PacketTooBig = 2; |
|
1156 const TUint8 KInet6ICMP_TimeExceeded = 3; |
|
1157 const TUint8 KInet6ICMP_ParameterProblem= 4; |
|
1158 //@} |
|
1159 /** |
|
1160 * @name ICMPv6 Informational Message Types (128-255) |
|
1161 */ |
|
1162 //@{ |
|
1163 /** Echo Request. See TInet6HeaderICMP_Echo. */ |
|
1164 const TUint8 KInet6ICMP_EchoRequest = 128; |
|
1165 /** Echo Reply. See TInet6HeaderICMP_Echo. */ |
|
1166 const TUint8 KInet6ICMP_EchoReply = 129; |
|
1167 /** Not implemented. */ |
|
1168 const TUint8 KInet6ICMP_GroupQuery = 130; |
|
1169 /** Not implemented. */ |
|
1170 const TUint8 KInet6ICMP_GroupReport = 131; |
|
1171 /** Not implemented. */ |
|
1172 const TUint8 KInet6ICMP_GroupDone = 132; |
|
1173 /** Router Solicitation. See TInet6HeaderICMP_RouterSol. */ |
|
1174 const TUint8 KInet6ICMP_RouterSol = 133; |
|
1175 /** Router Advertisement. See TInet6HeaderICMP_RouterAdv. */ |
|
1176 const TUint8 KInet6ICMP_RouterAdv = 134; |
|
1177 /** Neighbor Solicitation. See TInet6HeaderICMP_NeighborSol. */ |
|
1178 const TUint8 KInet6ICMP_NeighborSol = 135; |
|
1179 /** Neighbor Advertisement. See TInet6HeaderICMP_NeighborAdv. */ |
|
1180 const TUint8 KInet6ICMP_NeighborAdv = 136; |
|
1181 /** Redirect. See TInet6HeaderICMP_Redirect. */ |
|
1182 const TUint8 KInet6ICMP_Redirect = 137; |
|
1183 //@} |
|
1184 |
|
1185 /** |
|
1186 * @name ICMPv6 Option types. |
|
1187 * The default derivation of the symbol |
|
1188 * is from the name of the header class by replacing 'T' with 'K' (or |
|
1189 * vice versa). |
|
1190 * |
|
1191 */ |
|
1192 //@{ |
|
1193 /** Source Link-Layer Address. See TInet6OptionICMP_LinkLayer. */ |
|
1194 const TInt KInet6OptionICMP_SourceLink = 1; |
|
1195 /** Target Link-Layer Address. See TInet6OptionICMP_LinkLayer. */ |
|
1196 const TInt KInet6OptionICMP_TargetLink = 2; |
|
1197 /** Prefix Information. See TInet6OptionICMP_Prefix. */ |
|
1198 const TInt KInet6OptionICMP_Prefix = 3; |
|
1199 /** Redirect Header. (not implemented). */ |
|
1200 const TInt KInet6OptionICMP_Redirect = 4; |
|
1201 /** MTU. See TInet6OptionICMP_Mtu. */ |
|
1202 const TInt KInet6OptionICMP_Mtu = 5; |
|
1203 |
|
1204 #if 1 |
|
1205 // Experimental: draft-draves-ipngwg-router-selection-01.txt |
|
1206 // Default Router Preferences and More-Specific Routes |
|
1207 // *UNOFFICIAL NUMBER ASSIGNMENT (SAME AS MSR STACK)--REAL VALUE TBD* |
|
1208 /** Route Information. See TInet6OptionICMP_RouteInformation. */ |
|
1209 const TInt KInet6OptionICMP_RouteInformation = 9; |
|
1210 #endif |
|
1211 //@} |
|
1212 |
|
1213 //@} |
|
1214 #endif |