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 #define IGMP_DELAYING_MEMBER 0x01
50 #define IGMP_IDLE_MEMBER 0x02
51 #define IGMP_LAZY_MEMBER 0x03
52 #define IGMP_SLEEPING_MEMBER 0x04
53 #define IGMP_AWAKENING_MEMBER 0x05
54
55 #define IGMP_OLD_ROUTER 0x00
56 #define IGMP_NEW_ROUTER 0x01
57
58
59
60 #define IGMP_ALL_HOSTS htonl(0xE0000001L)
61
62
63
64
65
66 #ifdef __KERNEL__
67 struct ip_mc_socklist
68 {
69 unsigned long multiaddr[IP_MAX_MEMBERSHIPS];
70 struct device *multidev[IP_MAX_MEMBERSHIPS];
71 };
72
73 struct ip_mc_list
74 {
75 struct device *interface;
76 unsigned long multiaddr;
77 struct ip_mc_list *next;
78 struct timer_list timer;
79 int tm_running;
80 int users;
81 };
82
83 extern struct ip_mc_list *ip_mc_head;
84
85
86 extern int igmp_rcv(struct sk_buff *, struct device *, struct options *, __u32, unsigned short,
87 __u32, int , struct inet_protocol *);
88 extern void ip_mc_drop_device(struct device *dev);
89 extern int ip_mc_join_group(struct sock *sk, struct device *dev, unsigned long addr);
90 extern int ip_mc_leave_group(struct sock *sk, struct device *dev,unsigned long addr);
91 extern void ip_mc_drop_socket(struct sock *sk);
92 extern void ip_mr_init(void);
93 #endif
94 #endif