added a lot of printk output to ease writing of emulator
[linux-2.4.21-pre4.git] / include / linux / igmp.h
1 /*
2  *      Linux NET3:     Internet Group Management Protocol  [IGMP]
3  *
4  *      Authors:
5  *              Alan Cox <Alan.Cox@linux.org>
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 _LINUX_IGMP_H
17 #define _LINUX_IGMP_H
18
19 /*
20  *      IGMP protocol structures
21  */
22
23 /*
24  *      Header in on cable format
25  */
26
27 struct igmphdr
28 {
29         __u8 type;
30         __u8 code;              /* For newer IGMP */
31         __u16 csum;
32         __u32 group;
33 };
34
35 #define IGMP_HOST_MEMBERSHIP_QUERY      0x11    /* From RFC1112 */
36 #define IGMP_HOST_MEMBERSHIP_REPORT     0x12    /* Ditto */
37 #define IGMP_DVMRP                      0x13    /* DVMRP routing */
38 #define IGMP_PIM                        0x14    /* PIM routing */
39 #define IGMP_TRACE                      0x15
40 #define IGMP_HOST_NEW_MEMBERSHIP_REPORT 0x16    /* New version of 0x11 */
41 #define IGMP_HOST_LEAVE_MESSAGE         0x17
42
43 #define IGMP_MTRACE_RESP                0x1e
44 #define IGMP_MTRACE                     0x1f
45
46
47 /*
48  *      Use the BSD names for these for compatibility
49  */
50
51 #define IGMP_DELAYING_MEMBER            0x01
52 #define IGMP_IDLE_MEMBER                0x02
53 #define IGMP_LAZY_MEMBER                0x03
54 #define IGMP_SLEEPING_MEMBER            0x04
55 #define IGMP_AWAKENING_MEMBER           0x05
56
57 #define IGMP_MINLEN                     8
58
59 #define IGMP_MAX_HOST_REPORT_DELAY      10      /* max delay for response to */
60                                                 /* query (in seconds)   */
61
62 #define IGMP_TIMER_SCALE                10      /* denotes that the igmphdr->timer field */
63                                                 /* specifies time in 10th of seconds     */
64
65 #define IGMP_AGE_THRESHOLD              400     /* If this host don't hear any IGMP V1  */
66                                                 /* message in this period of time,      */
67                                                 /* revert to IGMP v2 router.            */
68
69 #define IGMP_ALL_HOSTS          htonl(0xE0000001L)
70 #define IGMP_ALL_ROUTER         htonl(0xE0000002L)
71 #define IGMP_LOCAL_GROUP        htonl(0xE0000000L)
72 #define IGMP_LOCAL_GROUP_MASK   htonl(0xFFFFFF00L)
73
74 /*
75  * struct for keeping the multicast list in
76  */
77
78 #ifdef __KERNEL__
79
80 /* ip_mc_socklist is real list now. Speed is not argument;
81    this list never used in fast path code
82  */
83
84 struct ip_mc_socklist
85 {
86         struct ip_mc_socklist   *next;
87         int                     count;
88         struct ip_mreqn         multi;
89 };
90
91 struct ip_mc_list
92 {
93         struct in_device        *interface;
94         unsigned long           multiaddr;
95         struct ip_mc_list       *next;
96         struct timer_list       timer;
97         int                     users;
98         atomic_t                refcnt;
99         spinlock_t              lock;
100         char                    tm_running;
101         char                    reporter;
102         char                    unsolicit_count;
103         char                    loaded;
104 };
105
106 extern int ip_check_mc(struct in_device *dev, u32 mc_addr);
107 extern int igmp_rcv(struct sk_buff *);
108 extern int ip_mc_join_group(struct sock *sk, struct ip_mreqn *imr);
109 extern int ip_mc_leave_group(struct sock *sk, struct ip_mreqn *imr);
110 extern void ip_mc_drop_socket(struct sock *sk);
111 extern void ip_mr_init(void);
112 extern void ip_mc_init_dev(struct in_device *);
113 extern void ip_mc_destroy_dev(struct in_device *);
114 extern void ip_mc_up(struct in_device *);
115 extern void ip_mc_down(struct in_device *);
116 extern void ip_mc_dec_group(struct in_device *in_dev, u32 addr);
117 extern void ip_mc_inc_group(struct in_device *in_dev, u32 addr);
118 #endif
119 #endif