forked from Minki/linux
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/kaber/ipmr-2.6
This commit is contained in:
commit
bf47f4b0ba
@ -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;
|
||||
};
|
||||
|
@ -24,7 +24,8 @@
|
||||
#define MRT6_DEL_MFC (MRT6_BASE+5) /* Delete a multicast forwarding entry */
|
||||
#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_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
|
||||
|
||||
|
@ -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.
|
||||
|
@ -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
|
||||
};
|
||||
|
@ -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
|
||||
|
@ -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))) {
|
||||
|
932
net/ipv6/ip6mr.c
932
net/ipv6/ip6mr.c
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user