1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 #ifndef _LINUX_IGMP_H
17 #define _LINUX_IGMP_H
18
19
20
21
22
23
24
25
26
27 struct igmphdr
28 {
29 __u8 type;
30 __u8 code;
31 __u16 csum;
32 __u32 group;
33 };
34
35 #define IGMP_HOST_MEMBERSHIP_QUERY 0x11
36 #define IGMP_HOST_MEMBERSHIP_REPORT 0x12
37 #define IGMP_DVMRP 0x13
38 #define IGMP_PIM 0x14
39 #define IGMP_HOST_NEW_MEMBERSHIP_REPORT 0x16
40 #define IGMP_HOST_LEAVE_MESSAGE 0x17
41
42 #define IGMP_MTRACE_RESP 0x1e
43 #define IGMP_MTRACE 0x1f
44
45
46
47
48
49
50 #define IGMP_DELAYING_MEMBER 0x01
51 #define IGMP_IDLE_MEMBER 0x02
52 #define IGMP_LAZY_MEMBER 0x03
53 #define IGMP_SLEEPING_MEMBER 0x04
54 #define IGMP_AWAKENING_MEMBER 0x05
55
56 #define IGMP_OLD_ROUTER 0x00
57 #define IGMP_NEW_ROUTER 0x01
58
59
60
61 #define IGMP_ALL_HOSTS htonl(0xE0000001L)
62
63
64
65
66
67 #ifdef __KERNEL__
68 struct ip_mc_socklist
69 {
70 unsigned long multiaddr[IP_MAX_MEMBERSHIPS];
71 struct device *multidev[IP_MAX_MEMBERSHIPS];
72 };
73
74 struct ip_mc_list
75 {
76 struct device *interface;
77 unsigned long multiaddr;
78 struct ip_mc_list *next;
79 struct timer_list timer;
80 int tm_running;
81 int users;
82 };
83
84 extern struct ip_mc_list *ip_mc_head;
85
86
87 extern int igmp_rcv(struct sk_buff *, struct device *, struct options *, __u32, unsigned short,
88 __u32, int , struct inet_protocol *);
89 extern void ip_mc_drop_device(struct device *dev);
90 extern int ip_mc_join_group(struct sock *sk, struct device *dev, unsigned long addr);
91 extern int ip_mc_leave_group(struct sock *sk, struct device *dev,unsigned long addr);
92 extern void ip_mc_drop_socket(struct sock *sk);
93 extern void ip_mr_init(void);
94 #endif
95 #endif