437
438 /* masks */
439 #define IPV6_FLOWINFO_FLOWLABEL 0xffff0f00U
440 #define IPV6_FLOWINFO_TCLASS 0x0000f00fU
441
442 #endif /* _BIG_ENDIAN */
443
444 /*
445 * Note: Macros IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT are for
446 * use as RHS of Static initializers of "struct in6_addr" (or in6_addr_t)
447 * only. They need to be different for User/Kernel versions because union
448 * component data structure is defined differently (it is identical at
449 * binary representation level).
450 *
451 * const struct in6_addr IN6ADDR_ANY_INIT;
452 * const struct in6_addr IN6ADDR_LOOPBACK_INIT;
453 */
454
455
456 #ifdef _KERNEL
457 #define IN6ADDR_ANY_INIT { 0, 0, 0, 0 }
458
459 #ifdef _BIG_ENDIAN
460 #define IN6ADDR_LOOPBACK_INIT { 0, 0, 0, 0x00000001U }
461 #else /* _BIG_ENDIAN */
462 #define IN6ADDR_LOOPBACK_INIT { 0, 0, 0, 0x01000000U }
463 #endif /* _BIG_ENDIAN */
464
465 #else
466
467 #define IN6ADDR_ANY_INIT { 0, 0, 0, 0, \
468 0, 0, 0, 0, \
469 0, 0, 0, 0, \
470 0, 0, 0, 0 }
471
472 #define IN6ADDR_LOOPBACK_INIT { 0, 0, 0, 0, \
473 0, 0, 0, 0, \
474 0, 0, 0, 0, \
475 0, 0, 0, 0x1U }
476 #endif /* _KERNEL */
477
478 /*
479 * RFC 2553 specifies the following macros. Their type is defined
480 * as "int" in the RFC but they only have boolean significance
481 * (zero or non-zero). For the purposes of our comment notation,
482 * we assume a hypothetical type "bool" defined as follows to
483 * write the prototypes assumed for macros in our comments better.
484 *
485 * typedef int bool;
486 */
487
488 /*
489 * IN6 macros used to test for special IPv6 addresses
490 * (Mostly from spec)
491 *
492 * bool IN6_IS_ADDR_UNSPECIFIED (const struct in6_addr *);
493 * bool IN6_IS_ADDR_LOOPBACK (const struct in6_addr *);
494 * bool IN6_IS_ADDR_MULTICAST (const struct in6_addr *);
495 * bool IN6_IS_ADDR_LINKLOCAL (const struct in6_addr *);
|
437
438 /* masks */
439 #define IPV6_FLOWINFO_FLOWLABEL 0xffff0f00U
440 #define IPV6_FLOWINFO_TCLASS 0x0000f00fU
441
442 #endif /* _BIG_ENDIAN */
443
444 /*
445 * Note: Macros IN6ADDR_ANY_INIT and IN6ADDR_LOOPBACK_INIT are for
446 * use as RHS of Static initializers of "struct in6_addr" (or in6_addr_t)
447 * only. They need to be different for User/Kernel versions because union
448 * component data structure is defined differently (it is identical at
449 * binary representation level).
450 *
451 * const struct in6_addr IN6ADDR_ANY_INIT;
452 * const struct in6_addr IN6ADDR_LOOPBACK_INIT;
453 */
454
455
456 #ifdef _KERNEL
457 #define IN6ADDR_ANY_INIT {{{ 0, 0, 0, 0 }}}
458
459 #ifdef _BIG_ENDIAN
460 #define IN6ADDR_LOOPBACK_INIT {{{ 0, 0, 0, 0x00000001U }}}
461 #else /* _BIG_ENDIAN */
462 #define IN6ADDR_LOOPBACK_INIT {{{ 0, 0, 0, 0x01000000U }}}
463 #endif /* _BIG_ENDIAN */
464
465 #else
466
467 #define IN6ADDR_ANY_INIT {{{ 0, 0, 0, 0, \
468 0, 0, 0, 0, \
469 0, 0, 0, 0, \
470 0, 0, 0, 0 }}}
471
472 #define IN6ADDR_LOOPBACK_INIT {{{ 0, 0, 0, 0, \
473 0, 0, 0, 0, \
474 0, 0, 0, 0, \
475 0, 0, 0, 0x1U }}}
476 #endif /* _KERNEL */
477
478 /*
479 * RFC 2553 specifies the following macros. Their type is defined
480 * as "int" in the RFC but they only have boolean significance
481 * (zero or non-zero). For the purposes of our comment notation,
482 * we assume a hypothetical type "bool" defined as follows to
483 * write the prototypes assumed for macros in our comments better.
484 *
485 * typedef int bool;
486 */
487
488 /*
489 * IN6 macros used to test for special IPv6 addresses
490 * (Mostly from spec)
491 *
492 * bool IN6_IS_ADDR_UNSPECIFIED (const struct in6_addr *);
493 * bool IN6_IS_ADDR_LOOPBACK (const struct in6_addr *);
494 * bool IN6_IS_ADDR_MULTICAST (const struct in6_addr *);
495 * bool IN6_IS_ADDR_LINKLOCAL (const struct in6_addr *);
|