linux/include/uapi/linux/igmp.h
<<
>>
Prefs
   1/*
   2 *      Linux NET3:     Internet Group Management Protocol  [IGMP]
   3 *
   4 *      Authors:
   5 *              Alan Cox <alan@lxorguk.ukuu.org.uk>
   6 *
   7 *      Extended to talk the BSD extended IGMP protocol of mrouted 3.6
   8 *
   9 *
  10 *      This program is free software; you can redistribute it and/or
  11 *      modify it under the terms of the GNU General Public License
  12 *      as published by the Free Software Foundation; either version
  13 *      2 of the License, or (at your option) any later version.
  14 */
  15
  16#ifndef _UAPI_LINUX_IGMP_H
  17#define _UAPI_LINUX_IGMP_H
  18
  19#include <linux/types.h>
  20#include <asm/byteorder.h>
  21
  22/*
  23 *      IGMP protocol structures
  24 */
  25
  26/*
  27 *      Header in on cable format
  28 */
  29
  30struct igmphdr {
  31        __u8 type;
  32        __u8 code;              /* For newer IGMP */
  33        __sum16 csum;
  34        __be32 group;
  35};
  36
  37/* V3 group record types [grec_type] */
  38#define IGMPV3_MODE_IS_INCLUDE          1
  39#define IGMPV3_MODE_IS_EXCLUDE          2
  40#define IGMPV3_CHANGE_TO_INCLUDE        3
  41#define IGMPV3_CHANGE_TO_EXCLUDE        4
  42#define IGMPV3_ALLOW_NEW_SOURCES        5
  43#define IGMPV3_BLOCK_OLD_SOURCES        6
  44
  45struct igmpv3_grec {
  46        __u8    grec_type;
  47        __u8    grec_auxwords;
  48        __be16  grec_nsrcs;
  49        __be32  grec_mca;
  50        __be32  grec_src[0];
  51};
  52
  53struct igmpv3_report {
  54        __u8 type;
  55        __u8 resv1;
  56        __be16 csum;
  57        __be16 resv2;
  58        __be16 ngrec;
  59        struct igmpv3_grec grec[0];
  60};
  61
  62struct igmpv3_query {
  63        __u8 type;
  64        __u8 code;
  65        __be16 csum;
  66        __be32 group;
  67#if defined(__LITTLE_ENDIAN_BITFIELD)
  68        __u8 qrv:3,
  69             suppress:1,
  70             resv:4;
  71#elif defined(__BIG_ENDIAN_BITFIELD)
  72        __u8 resv:4,
  73             suppress:1,
  74             qrv:3;
  75#else
  76#error "Please fix <asm/byteorder.h>"
  77#endif
  78        __u8 qqic;
  79        __be16 nsrcs;
  80        __be32 srcs[0];
  81};
  82
  83#define IGMP_HOST_MEMBERSHIP_QUERY      0x11    /* From RFC1112 */
  84#define IGMP_HOST_MEMBERSHIP_REPORT     0x12    /* Ditto */
  85#define IGMP_DVMRP                      0x13    /* DVMRP routing */
  86#define IGMP_PIM                        0x14    /* PIM routing */
  87#define IGMP_TRACE                      0x15
  88#define IGMPV2_HOST_MEMBERSHIP_REPORT   0x16    /* V2 version of 0x12 */
  89#define IGMP_HOST_LEAVE_MESSAGE         0x17
  90#define IGMPV3_HOST_MEMBERSHIP_REPORT   0x22    /* V3 version of 0x12 */
  91
  92#define IGMP_MTRACE_RESP                0x1e
  93#define IGMP_MTRACE                     0x1f
  94
  95
  96/*
  97 *      Use the BSD names for these for compatibility
  98 */
  99
 100#define IGMP_DELAYING_MEMBER            0x01
 101#define IGMP_IDLE_MEMBER                0x02
 102#define IGMP_LAZY_MEMBER                0x03
 103#define IGMP_SLEEPING_MEMBER            0x04
 104#define IGMP_AWAKENING_MEMBER           0x05
 105
 106#define IGMP_MINLEN                     8
 107
 108#define IGMP_MAX_HOST_REPORT_DELAY      10      /* max delay for response to */
 109                                                /* query (in seconds)   */
 110
 111#define IGMP_TIMER_SCALE                10      /* denotes that the igmphdr->timer field */
 112                                                /* specifies time in 10th of seconds     */
 113
 114#define IGMP_AGE_THRESHOLD              400     /* If this host don't hear any IGMP V1  */
 115                                                /* message in this period of time,      */
 116                                                /* revert to IGMP v2 router.            */
 117
 118#define IGMP_ALL_HOSTS          htonl(0xE0000001L)
 119#define IGMP_ALL_ROUTER         htonl(0xE0000002L)
 120#define IGMPV3_ALL_MCR          htonl(0xE0000016L)
 121#define IGMP_LOCAL_GROUP        htonl(0xE0000000L)
 122#define IGMP_LOCAL_GROUP_MASK   htonl(0xFFFFFF00L)
 123
 124/*
 125 * struct for keeping the multicast list in
 126 */
 127
 128#endif /* _UAPI_LINUX_IGMP_H */
 129