Linux Kernel
3.7.1
Main Page
Related Pages
Modules
Namespaces
Data Structures
Files
File List
Globals
All
Data Structures
Namespaces
Files
Functions
Variables
Typedefs
Enumerations
Enumerator
Macros
Groups
Pages
include
linux
igmp.h
Go to the documentation of this file.
1
/*
2
* Linux NET3: Internet Group Management Protocol [IGMP]
3
*
4
* Authors:
5
* Alan Cox <
[email protected]
>
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
#ifndef _LINUX_IGMP_H
16
#define _LINUX_IGMP_H
17
18
#include <
linux/skbuff.h
>
19
#include <
linux/timer.h
>
20
#include <linux/in.h>
21
#include <
uapi/linux/igmp.h
>
22
23
static
inline
struct
igmphdr
*igmp_hdr(
const
struct
sk_buff
*
skb
)
24
{
25
return
(
struct
igmphdr
*)skb_transport_header(skb);
26
}
27
28
static
inline
struct
igmpv3_report
*
29
igmpv3_report_hdr(
const
struct
sk_buff
*skb)
30
{
31
return
(
struct
igmpv3_report
*)skb_transport_header(skb);
32
}
33
34
static
inline
struct
igmpv3_query
*
35
igmpv3_query_hdr(
const
struct
sk_buff
*skb)
36
{
37
return
(
struct
igmpv3_query
*)skb_transport_header(skb);
38
}
39
40
extern
int
sysctl_igmp_max_memberships
;
41
extern
int
sysctl_igmp_max_msf
;
42
43
struct
ip_sf_socklist
{
44
unsigned
int
sl_max
;
45
unsigned
int
sl_count
;
46
struct
rcu_head
rcu
;
47
__be32
sl_addr
[0];
48
};
49
50
#define IP_SFLSIZE(count) (sizeof(struct ip_sf_socklist) + \
51
(count) * sizeof(__be32))
52
53
#define IP_SFBLOCK 10
/* allocate this many at once */
54
55
/* ip_mc_socklist is real list now. Speed is not argument;
56
this list never used in fast path code
57
*/
58
59
struct
ip_mc_socklist
{
60
struct
ip_mc_socklist
__rcu
*
next_rcu
;
61
struct
ip_mreqn
multi
;
62
unsigned
int
sfmode
;
/* MCAST_{INCLUDE,EXCLUDE} */
63
struct
ip_sf_socklist
__rcu
*
sflist
;
64
struct
rcu_head
rcu
;
65
};
66
67
struct
ip_sf_list
{
68
struct
ip_sf_list
*
sf_next
;
69
__be32
sf_inaddr
;
70
unsigned
long
sf_count
[2];
/* include/exclude counts */
71
unsigned
char
sf_gsresp
;
/* include in g & s response? */
72
unsigned
char
sf_oldin
;
/* change state */
73
unsigned
char
sf_crcount
;
/* retrans. left to send */
74
};
75
76
struct
ip_mc_list
{
77
struct
in_device *
interface
;
78
__be32
multiaddr
;
79
unsigned
int
sfmode
;
80
struct
ip_sf_list
*
sources
;
81
struct
ip_sf_list
*
tomb
;
82
unsigned
long
sfcount
[2];
83
union
{
84
struct
ip_mc_list
*
next
;
85
struct
ip_mc_list
__rcu
*
next_rcu
;
86
};
87
struct
timer_list
timer
;
88
int
users
;
89
atomic_t
refcnt
;
90
spinlock_t
lock
;
91
char
tm_running
;
92
char
reporter
;
93
char
unsolicit_count
;
94
char
loaded
;
95
unsigned
char
gsquery
;
/* check source marks? */
96
unsigned
char
crcount
;
97
struct
rcu_head
rcu
;
98
};
99
100
/* V3 exponential field decoding */
101
#define IGMPV3_MASK(value, nb) ((nb)>=32 ? (value) : ((1<<(nb))-1) & (value))
102
#define IGMPV3_EXP(thresh, nbmant, nbexp, value) \
103
((value) < (thresh) ? (value) : \
104
((IGMPV3_MASK(value, nbmant) | (1<<(nbmant))) << \
105
(IGMPV3_MASK((value) >> (nbmant), nbexp) + (nbexp))))
106
107
#define IGMPV3_QQIC(value) IGMPV3_EXP(0x80, 4, 3, value)
108
#define IGMPV3_MRC(value) IGMPV3_EXP(0x80, 4, 3, value)
109
110
extern
int
ip_check_mc_rcu
(
struct
in_device *
dev
,
__be32
mc_addr,
__be32
src_addr
,
u16
proto
);
111
extern
int
igmp_rcv
(
struct
sk_buff
*);
112
extern
int
ip_mc_join_group
(
struct
sock
*
sk
,
struct
ip_mreqn
*
imr
);
113
extern
int
ip_mc_leave_group
(
struct
sock
*
sk
,
struct
ip_mreqn
*
imr
);
114
extern
void
ip_mc_drop_socket
(
struct
sock
*
sk
);
115
extern
int
ip_mc_source
(
int
add
,
int
omode,
struct
sock
*
sk
,
116
struct
ip_mreq_source
*mreqs,
int
ifindex);
117
extern
int
ip_mc_msfilter
(
struct
sock
*
sk
,
struct
ip_msfilter
*msf,
int
ifindex);
118
extern
int
ip_mc_msfget
(
struct
sock
*
sk
,
struct
ip_msfilter
*msf,
119
struct
ip_msfilter
__user *optval,
int
__user *optlen);
120
extern
int
ip_mc_gsfget
(
struct
sock
*
sk
,
struct
group_filter
*gsf,
121
struct
group_filter
__user *optval,
int
__user *optlen);
122
extern
int
ip_mc_sf_allow
(
struct
sock
*
sk
,
__be32
local,
__be32
rmt
,
int
dif);
123
extern
void
ip_mc_init_dev
(
struct
in_device *);
124
extern
void
ip_mc_destroy_dev
(
struct
in_device *);
125
extern
void
ip_mc_up
(
struct
in_device *);
126
extern
void
ip_mc_down
(
struct
in_device *);
127
extern
void
ip_mc_unmap
(
struct
in_device *);
128
extern
void
ip_mc_remap
(
struct
in_device *);
129
extern
void
ip_mc_dec_group
(
struct
in_device *in_dev,
__be32
addr
);
130
extern
void
ip_mc_inc_group
(
struct
in_device *in_dev,
__be32
addr
);
131
extern
void
ip_mc_rejoin_groups
(
struct
in_device *in_dev);
132
133
#endif
Generated on Thu Jan 10 2013 14:51:35 for Linux Kernel by
1.8.2