Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
L
linux
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
nexedi
linux
Commits
bf47f4b0
Commit
bf47f4b0
authored
May 12, 2010
by
David S. Miller
Browse files
Options
Browse Files
Download
Plain Diff
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/kaber/ipmr-2.6
parents
0b9715e6
5b285cac
Changes
7
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
703 additions
and
298 deletions
+703
-298
include/linux/ipv6.h
include/linux/ipv6.h
+1
-0
include/linux/mroute6.h
include/linux/mroute6.h
+12
-23
include/linux/rtnetlink.h
include/linux/rtnetlink.h
+2
-1
include/net/netns/ipv6.h
include/net/netns/ipv6.h
+5
-9
net/ipv6/Kconfig
net/ipv6/Kconfig
+14
-0
net/ipv6/ip6_output.c
net/ipv6/ip6_output.c
+1
-1
net/ipv6/ip6mr.c
net/ipv6/ip6mr.c
+668
-264
No files found.
include/linux/ipv6.h
View file @
bf47f4b0
...
...
@@ -383,6 +383,7 @@ struct raw6_sock {
__u32
checksum
;
/* perform checksum */
__u32
offset
;
/* checksum offset */
struct
icmp6_filter
filter
;
__u32
ip6mr_table
;
/* ipv6_pinfo has to be the last member of raw6_sock, see inet6_sk_generic */
struct
ipv6_pinfo
inet6
;
};
...
...
include/linux/mroute6.h
View file @
bf47f4b0
...
...
@@ -25,6 +25,7 @@
#define MRT6_VERSION (MRT6_BASE+6)
/* Get the kernel multicast version */
#define MRT6_ASSERT (MRT6_BASE+7)
/* Activate PIM assert mode */
#define MRT6_PIM (MRT6_BASE+8)
/* enable PIM code */
#define MRT6_TABLE (MRT6_BASE+9)
/* Specify mroute table ID */
#define SIOCGETMIFCNT_IN6 SIOCPROTOPRIVATE
/* IP protocol privates */
#define SIOCGETSGCNT_IN6 (SIOCPROTOPRIVATE+1)
...
...
@@ -182,10 +183,7 @@ struct mif_device {
#define VIFF_STATIC 0x8000
struct
mfc6_cache
{
struct
mfc6_cache
*
next
;
/* Next entry on cache line */
#ifdef CONFIG_NET_NS
struct
net
*
mfc6_net
;
#endif
struct
list_head
list
;
struct
in6_addr
mf6c_mcastgrp
;
/* Group the entry belongs to */
struct
in6_addr
mf6c_origin
;
/* Source of packet */
mifi_t
mf6c_parent
;
/* Source interface */
...
...
@@ -208,18 +206,6 @@ struct mfc6_cache {
}
mfc_un
;
};
static
inline
struct
net
*
mfc6_net
(
const
struct
mfc6_cache
*
mfc
)
{
return
read_pnet
(
&
mfc
->
mfc6_net
);
}
static
inline
void
mfc6_net_set
(
struct
mfc6_cache
*
mfc
,
struct
net
*
net
)
{
write_pnet
(
&
mfc
->
mfc6_net
,
hold_net
(
net
));
}
#define MFC_STATIC 1
#define MFC_NOTIFY 2
...
...
@@ -244,14 +230,17 @@ extern int ip6mr_get_route(struct net *net, struct sk_buff *skb,
struct
rtmsg
*
rtm
,
int
nowait
);
#ifdef CONFIG_IPV6_MROUTE
static
inline
struct
sock
*
mroute6_socket
(
struct
net
*
net
)
{
return
net
->
ipv6
.
mroute6_sk
;
}
extern
struct
sock
*
mroute6_socket
(
struct
net
*
net
,
struct
sk_buff
*
skb
);
extern
int
ip6mr_sk_done
(
struct
sock
*
sk
);
#else
static
inline
struct
sock
*
mroute6_socket
(
struct
net
*
net
)
{
return
NULL
;
}
static
inline
int
ip6mr_sk_done
(
struct
sock
*
sk
)
{
return
0
;
}
static
inline
struct
sock
*
mroute6_socket
(
struct
net
*
net
,
struct
sk_buff
*
skb
)
{
return
NULL
;
}
static
inline
int
ip6mr_sk_done
(
struct
sock
*
sk
)
{
return
0
;
}
#endif
#endif
...
...
include/linux/rtnetlink.h
View file @
bf47f4b0
...
...
@@ -11,7 +11,8 @@
* families, values above 128 may be used arbitrarily.
*/
#define RTNL_FAMILY_IPMR 128
#define RTNL_FAMILY_MAX 128
#define RTNL_FAMILY_IP6MR 129
#define RTNL_FAMILY_MAX 129
/****
* Routing/neighbour discovery messages.
...
...
include/net/netns/ipv6.h
View file @
bf47f4b0
...
...
@@ -59,15 +59,11 @@ struct netns_ipv6 {
struct
sock
*
tcp_sk
;
struct
sock
*
igmp_sk
;
#ifdef CONFIG_IPV6_MROUTE
struct
sock
*
mroute6_sk
;
struct
mfc6_cache
**
mfc6_cache_array
;
struct
mif_device
*
vif6_table
;
int
maxvif
;
atomic_t
cache_resolve_queue_len
;
int
mroute_do_assert
;
int
mroute_do_pim
;
#ifdef CONFIG_IPV6_PIMSM_V2
int
mroute_reg_vif_num
;
#ifndef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES
struct
mr6_table
*
mrt6
;
#else
struct
list_head
mr6_tables
;
struct
fib_rules_ops
*
mr6_rules_ops
;
#endif
#endif
};
...
...
net/ipv6/Kconfig
View file @
bf47f4b0
...
...
@@ -229,6 +229,20 @@ config IPV6_MROUTE
Experimental support for IPv6 multicast forwarding.
If unsure, say N.
config IPV6_MROUTE_MULTIPLE_TABLES
bool "IPv6: multicast policy routing"
depends on IPV6_MROUTE
select FIB_RULES
help
Normally, a multicast router runs a userspace daemon and decides
what to do with a multicast packet based on the source and
destination addresses. If you say Y here, the multicast router
will also be able to take interfaces and packet marks into
account and run multiple instances of userspace daemons
simultaneously, each one handling a single table.
If unsure, say N.
config IPV6_PIMSM_V2
bool "IPv6: PIM-SM version 2 support (EXPERIMENTAL)"
depends on IPV6_MROUTE
...
...
net/ipv6/ip6_output.c
View file @
bf47f4b0
...
...
@@ -108,7 +108,7 @@ static int ip6_finish_output2(struct sk_buff *skb)
struct
inet6_dev
*
idev
=
ip6_dst_idev
(
skb_dst
(
skb
));
if
(
!
(
dev
->
flags
&
IFF_LOOPBACK
)
&&
sk_mc_loop
(
skb
->
sk
)
&&
((
mroute6_socket
(
dev_net
(
dev
))
&&
((
mroute6_socket
(
dev_net
(
dev
)
,
skb
)
&&
!
(
IP6CB
(
skb
)
->
flags
&
IP6SKB_FORWARDED
))
||
ipv6_chk_mcast_addr
(
dev
,
&
ipv6_hdr
(
skb
)
->
daddr
,
&
ipv6_hdr
(
skb
)
->
saddr
)))
{
...
...
net/ipv6/ip6mr.c
View file @
bf47f4b0
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment