Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
openeuler
Kernel
提交
bb611874
K
Kernel
项目概览
openeuler
/
Kernel
1 年多 前同步成功
通知
8
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
Kernel
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
bb611874
编写于
4月 27, 2010
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
差异文件
Merge branch 'master' of
git://git.kernel.org/pub/scm/linux/kernel/git/kaber/ipmr-2.6
上级
d328bc83
cb6a4e46
变更
9
隐藏空白更改
内联
并排
Showing
9 changed file
with
112 addition
and
32 deletion
+112
-32
include/linux/fib_rules.h
include/linux/fib_rules.h
+0
-8
include/linux/rtnetlink.h
include/linux/rtnetlink.h
+6
-0
include/net/fib_rules.h
include/net/fib_rules.h
+1
-1
net/core/fib_rules.c
net/core/fib_rules.c
+1
-1
net/core/rtnetlink.c
net/core/rtnetlink.c
+7
-7
net/decnet/dn_rules.c
net/decnet/dn_rules.c
+2
-2
net/ipv4/fib_rules.c
net/ipv4/fib_rules.c
+2
-2
net/ipv4/ipmr.c
net/ipv4/ipmr.c
+91
-9
net/ipv6/fib6_rules.c
net/ipv6/fib6_rules.c
+2
-2
未找到文件。
include/linux/fib_rules.h
浏览文件 @
bb611874
...
...
@@ -15,14 +15,6 @@
/* try to find source address in routing lookups */
#define FIB_RULE_FIND_SADDR 0x00010000
/* fib_rules families. values up to 127 are reserved for real address
* families, values above 128 may be used arbitrarily.
*/
#define FIB_RULES_IPV4 AF_INET
#define FIB_RULES_IPV6 AF_INET6
#define FIB_RULES_DECNET AF_DECnet
#define FIB_RULES_IPMR 128
struct
fib_rule_hdr
{
__u8
family
;
__u8
dst_len
;
...
...
include/linux/rtnetlink.h
浏览文件 @
bb611874
...
...
@@ -7,6 +7,12 @@
#include <linux/if_addr.h>
#include <linux/neighbour.h>
/* rtnetlink families. Values up to 127 are reserved for real address
* families, values above 128 may be used arbitrarily.
*/
#define RTNL_FAMILY_IPMR 128
#define RTNL_FAMILY_MAX 128
/****
* Routing/neighbour discovery messages.
****/
...
...
include/net/fib_rules.h
浏览文件 @
bb611874
...
...
@@ -104,7 +104,7 @@ static inline u32 frh_get_table(struct fib_rule_hdr *frh, struct nlattr **nla)
return
frh
->
table
;
}
extern
struct
fib_rules_ops
*
fib_rules_register
(
struct
fib_rules_ops
*
,
struct
net
*
);
extern
struct
fib_rules_ops
*
fib_rules_register
(
const
struct
fib_rules_ops
*
,
struct
net
*
);
extern
void
fib_rules_unregister
(
struct
fib_rules_ops
*
);
extern
void
fib_rules_cleanup_ops
(
struct
fib_rules_ops
*
);
...
...
net/core/fib_rules.c
浏览文件 @
bb611874
...
...
@@ -122,7 +122,7 @@ static int __fib_rules_register(struct fib_rules_ops *ops)
}
struct
fib_rules_ops
*
fib_rules_register
(
struct
fib_rules_ops
*
tmpl
,
struct
net
*
net
)
fib_rules_register
(
const
struct
fib_rules_ops
*
tmpl
,
struct
net
*
net
)
{
struct
fib_rules_ops
*
ops
;
int
err
;
...
...
net/core/rtnetlink.c
浏览文件 @
bb611874
...
...
@@ -98,7 +98,7 @@ int lockdep_rtnl_is_held(void)
EXPORT_SYMBOL
(
lockdep_rtnl_is_held
);
#endif
/* #ifdef CONFIG_PROVE_LOCKING */
static
struct
rtnl_link
*
rtnl_msg_handlers
[
NPROTO
];
static
struct
rtnl_link
*
rtnl_msg_handlers
[
RTNL_FAMILY_MAX
+
1
];
static
inline
int
rtm_msgindex
(
int
msgtype
)
{
...
...
@@ -118,7 +118,7 @@ static rtnl_doit_func rtnl_get_doit(int protocol, int msgindex)
{
struct
rtnl_link
*
tab
;
if
(
protocol
<
NPROTO
)
if
(
protocol
<
=
RTNL_FAMILY_MAX
)
tab
=
rtnl_msg_handlers
[
protocol
];
else
tab
=
NULL
;
...
...
@@ -133,7 +133,7 @@ static rtnl_dumpit_func rtnl_get_dumpit(int protocol, int msgindex)
{
struct
rtnl_link
*
tab
;
if
(
protocol
<
NPROTO
)
if
(
protocol
<
=
RTNL_FAMILY_MAX
)
tab
=
rtnl_msg_handlers
[
protocol
];
else
tab
=
NULL
;
...
...
@@ -167,7 +167,7 @@ int __rtnl_register(int protocol, int msgtype,
struct
rtnl_link
*
tab
;
int
msgindex
;
BUG_ON
(
protocol
<
0
||
protocol
>
=
NPROTO
);
BUG_ON
(
protocol
<
0
||
protocol
>
RTNL_FAMILY_MAX
);
msgindex
=
rtm_msgindex
(
msgtype
);
tab
=
rtnl_msg_handlers
[
protocol
];
...
...
@@ -219,7 +219,7 @@ int rtnl_unregister(int protocol, int msgtype)
{
int
msgindex
;
BUG_ON
(
protocol
<
0
||
protocol
>
=
NPROTO
);
BUG_ON
(
protocol
<
0
||
protocol
>
RTNL_FAMILY_MAX
);
msgindex
=
rtm_msgindex
(
msgtype
);
if
(
rtnl_msg_handlers
[
protocol
]
==
NULL
)
...
...
@@ -241,7 +241,7 @@ EXPORT_SYMBOL_GPL(rtnl_unregister);
*/
void
rtnl_unregister_all
(
int
protocol
)
{
BUG_ON
(
protocol
<
0
||
protocol
>
=
NPROTO
);
BUG_ON
(
protocol
<
0
||
protocol
>
RTNL_FAMILY_MAX
);
kfree
(
rtnl_msg_handlers
[
protocol
]);
rtnl_msg_handlers
[
protocol
]
=
NULL
;
...
...
@@ -1385,7 +1385,7 @@ static int rtnl_dump_all(struct sk_buff *skb, struct netlink_callback *cb)
if
(
s_idx
==
0
)
s_idx
=
1
;
for
(
idx
=
1
;
idx
<
NPROTO
;
idx
++
)
{
for
(
idx
=
1
;
idx
<
=
RTNL_FAMILY_MAX
;
idx
++
)
{
int
type
=
cb
->
nlh
->
nlmsg_type
-
RTM_BASE
;
if
(
idx
<
s_idx
||
idx
==
PF_PACKET
)
continue
;
...
...
net/decnet/dn_rules.c
浏览文件 @
bb611874
...
...
@@ -216,8 +216,8 @@ static void dn_fib_rule_flush_cache(struct fib_rules_ops *ops)
dn_rt_cache_flush
(
-
1
);
}
static
struct
fib_rules_ops
dn_fib_rules_ops_template
=
{
.
family
=
FIB_RULES_DECNET
,
static
const
struct
fib_rules_ops
__net_initdata
dn_fib_rules_ops_template
=
{
.
family
=
AF_DECnet
,
.
rule_size
=
sizeof
(
struct
dn_fib_rule
),
.
addr_size
=
sizeof
(
u16
),
.
action
=
dn_fib_rule_action
,
...
...
net/ipv4/fib_rules.c
浏览文件 @
bb611874
...
...
@@ -245,8 +245,8 @@ static void fib4_rule_flush_cache(struct fib_rules_ops *ops)
rt_cache_flush
(
ops
->
fro_net
,
-
1
);
}
static
struct
fib_rules_ops
fib4_rules_ops_template
=
{
.
family
=
FIB_RULES_IPV4
,
static
const
struct
fib_rules_ops
__net_initdata
fib4_rules_ops_template
=
{
.
family
=
AF_INET
,
.
rule_size
=
sizeof
(
struct
fib4_rule
),
.
addr_size
=
sizeof
(
u32
),
.
action
=
fib4_rule_action
,
...
...
net/ipv4/ipmr.c
浏览文件 @
bb611874
...
...
@@ -128,8 +128,8 @@ static int ip_mr_forward(struct net *net, struct mr_table *mrt,
int
local
);
static
int
ipmr_cache_report
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
pkt
,
vifi_t
vifi
,
int
assert
);
static
int
ipmr_fill_mroute
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
skb
,
struct
mfc_cache
*
c
,
struct
rtmsg
*
rtm
);
static
int
__
ipmr_fill_mroute
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
skb
,
struct
mfc_cache
*
c
,
struct
rtmsg
*
rtm
);
static
void
ipmr_expire_process
(
unsigned
long
arg
);
#ifdef CONFIG_IP_MROUTE_MULTIPLE_TABLES
...
...
@@ -216,8 +216,8 @@ static int ipmr_rule_fill(struct fib_rule *rule, struct sk_buff *skb,
return
0
;
}
static
struct
fib_rules_ops
ipmr_rules_ops_template
=
{
.
family
=
FIB_RULES
_IPMR
,
static
const
struct
fib_rules_ops
__net_initdata
ipmr_rules_ops_template
=
{
.
family
=
RTNL_FAMILY
_IPMR
,
.
rule_size
=
sizeof
(
struct
ipmr_rule
),
.
addr_size
=
sizeof
(
u32
),
.
action
=
ipmr_rule_action
,
...
...
@@ -831,7 +831,7 @@ static void ipmr_cache_resolve(struct net *net, struct mr_table *mrt,
if
(
ip_hdr
(
skb
)
->
version
==
0
)
{
struct
nlmsghdr
*
nlh
=
(
struct
nlmsghdr
*
)
skb_pull
(
skb
,
sizeof
(
struct
iphdr
));
if
(
ipmr_fill_mroute
(
mrt
,
skb
,
c
,
NLMSG_DATA
(
nlh
))
>
0
)
{
if
(
__
ipmr_fill_mroute
(
mrt
,
skb
,
c
,
NLMSG_DATA
(
nlh
))
>
0
)
{
nlh
->
nlmsg_len
=
(
skb_tail_pointer
(
skb
)
-
(
u8
*
)
nlh
);
}
else
{
...
...
@@ -1904,9 +1904,8 @@ static int pim_rcv(struct sk_buff * skb)
}
#endif
static
int
ipmr_fill_mroute
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
skb
,
struct
mfc_cache
*
c
,
struct
rtmsg
*
rtm
)
static
int
__ipmr_fill_mroute
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
skb
,
struct
mfc_cache
*
c
,
struct
rtmsg
*
rtm
)
{
int
ct
;
struct
rtnexthop
*
nhp
;
...
...
@@ -1994,11 +1993,93 @@ int ipmr_get_route(struct net *net,
if
(
!
nowait
&&
(
rtm
->
rtm_flags
&
RTM_F_NOTIFY
))
cache
->
mfc_flags
|=
MFC_NOTIFY
;
err
=
ipmr_fill_mroute
(
mrt
,
skb
,
cache
,
rtm
);
err
=
__
ipmr_fill_mroute
(
mrt
,
skb
,
cache
,
rtm
);
read_unlock
(
&
mrt_lock
);
return
err
;
}
static
int
ipmr_fill_mroute
(
struct
mr_table
*
mrt
,
struct
sk_buff
*
skb
,
u32
pid
,
u32
seq
,
struct
mfc_cache
*
c
)
{
struct
nlmsghdr
*
nlh
;
struct
rtmsg
*
rtm
;
nlh
=
nlmsg_put
(
skb
,
pid
,
seq
,
RTM_NEWROUTE
,
sizeof
(
*
rtm
),
NLM_F_MULTI
);
if
(
nlh
==
NULL
)
return
-
EMSGSIZE
;
rtm
=
nlmsg_data
(
nlh
);
rtm
->
rtm_family
=
RTNL_FAMILY_IPMR
;
rtm
->
rtm_dst_len
=
32
;
rtm
->
rtm_src_len
=
32
;
rtm
->
rtm_tos
=
0
;
rtm
->
rtm_table
=
mrt
->
id
;
NLA_PUT_U32
(
skb
,
RTA_TABLE
,
mrt
->
id
);
rtm
->
rtm_type
=
RTN_MULTICAST
;
rtm
->
rtm_scope
=
RT_SCOPE_UNIVERSE
;
rtm
->
rtm_protocol
=
RTPROT_UNSPEC
;
rtm
->
rtm_flags
=
0
;
NLA_PUT_BE32
(
skb
,
RTA_SRC
,
c
->
mfc_origin
);
NLA_PUT_BE32
(
skb
,
RTA_DST
,
c
->
mfc_mcastgrp
);
if
(
__ipmr_fill_mroute
(
mrt
,
skb
,
c
,
rtm
)
<
0
)
goto
nla_put_failure
;
return
nlmsg_end
(
skb
,
nlh
);
nla_put_failure:
nlmsg_cancel
(
skb
,
nlh
);
return
-
EMSGSIZE
;
}
static
int
ipmr_rtm_dumproute
(
struct
sk_buff
*
skb
,
struct
netlink_callback
*
cb
)
{
struct
net
*
net
=
sock_net
(
skb
->
sk
);
struct
mr_table
*
mrt
;
struct
mfc_cache
*
mfc
;
unsigned
int
t
=
0
,
s_t
;
unsigned
int
h
=
0
,
s_h
;
unsigned
int
e
=
0
,
s_e
;
s_t
=
cb
->
args
[
0
];
s_h
=
cb
->
args
[
1
];
s_e
=
cb
->
args
[
2
];
read_lock
(
&
mrt_lock
);
ipmr_for_each_table
(
mrt
,
net
)
{
if
(
t
<
s_t
)
goto
next_table
;
if
(
t
>
s_t
)
s_h
=
0
;
for
(
h
=
s_h
;
h
<
MFC_LINES
;
h
++
)
{
list_for_each_entry
(
mfc
,
&
mrt
->
mfc_cache_array
[
h
],
list
)
{
if
(
e
<
s_e
)
goto
next_entry
;
if
(
ipmr_fill_mroute
(
mrt
,
skb
,
NETLINK_CB
(
cb
->
skb
).
pid
,
cb
->
nlh
->
nlmsg_seq
,
mfc
)
<
0
)
goto
done
;
next_entry:
e
++
;
}
e
=
s_e
=
0
;
}
s_h
=
0
;
next_table:
t
++
;
}
done:
read_unlock
(
&
mrt_lock
);
cb
->
args
[
2
]
=
e
;
cb
->
args
[
1
]
=
h
;
cb
->
args
[
0
]
=
t
;
return
skb
->
len
;
}
#ifdef CONFIG_PROC_FS
/*
* The /proc interfaces to multicast routing /proc/ip_mr_cache /proc/ip_mr_vif
...
...
@@ -2355,6 +2436,7 @@ int __init ip_mr_init(void)
goto
add_proto_fail
;
}
#endif
rtnl_register
(
RTNL_FAMILY_IPMR
,
RTM_GETROUTE
,
NULL
,
ipmr_rtm_dumproute
);
return
0
;
#ifdef CONFIG_IP_PIMSM_V2
...
...
net/ipv6/fib6_rules.c
浏览文件 @
bb611874
...
...
@@ -237,8 +237,8 @@ static size_t fib6_rule_nlmsg_payload(struct fib_rule *rule)
+
nla_total_size
(
16
);
/* src */
}
static
struct
fib_rules_ops
fib6_rules_ops_template
=
{
.
family
=
FIB_RULES_IPV
6
,
static
const
struct
fib_rules_ops
__net_initdata
fib6_rules_ops_template
=
{
.
family
=
AF_INET
6
,
.
rule_size
=
sizeof
(
struct
fib6_rule
),
.
addr_size
=
sizeof
(
struct
in6_addr
),
.
action
=
fib6_rule_action
,
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录