Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenHarmony
kernel_linux
提交
b42597e2
K
kernel_linux
项目概览
OpenHarmony
/
kernel_linux
上一次同步 3 年多
通知
13
Star
8
Fork
2
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
K
kernel_linux
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
提交
b42597e2
编写于
7月 11, 2012
作者:
D
David S. Miller
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
ipv4: Add ipv4_redirect() and ipv4_sk_redirect() helper functions.
Signed-off-by:
N
David S. Miller
<
davem@davemloft.net
>
上级
e47a185b
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
31 addition
and
0 deletion
+31
-0
include/net/route.h
include/net/route.h
+3
-0
net/ipv4/route.c
net/ipv4/route.c
+28
-0
未找到文件。
include/net/route.h
浏览文件 @
b42597e2
...
...
@@ -180,6 +180,9 @@ static inline int ip_route_input_noref(struct sk_buff *skb, __be32 dst, __be32 s
extern
void
ipv4_update_pmtu
(
struct
sk_buff
*
skb
,
struct
net
*
net
,
u32
mtu
,
int
oif
,
u32
mark
,
u8
protocol
,
int
flow_flags
);
extern
void
ipv4_sk_update_pmtu
(
struct
sk_buff
*
skb
,
struct
sock
*
sk
,
u32
mtu
);
extern
void
ipv4_redirect
(
struct
sk_buff
*
skb
,
struct
net
*
net
,
int
oif
,
u32
mark
,
u8
protocol
,
int
flow_flags
);
extern
void
ipv4_sk_redirect
(
struct
sk_buff
*
skb
,
struct
sock
*
sk
);
extern
void
ip_rt_send_redirect
(
struct
sk_buff
*
skb
);
extern
unsigned
int
inet_addr_type
(
struct
net
*
net
,
__be32
addr
);
...
...
net/ipv4/route.c
浏览文件 @
b42597e2
...
...
@@ -1590,6 +1590,34 @@ void ipv4_sk_update_pmtu(struct sk_buff *skb, struct sock *sk, u32 mtu)
}
EXPORT_SYMBOL_GPL
(
ipv4_sk_update_pmtu
);
void
ipv4_redirect
(
struct
sk_buff
*
skb
,
struct
net
*
net
,
int
oif
,
u32
mark
,
u8
protocol
,
int
flow_flags
)
{
const
struct
iphdr
*
iph
=
(
const
struct
iphdr
*
)
skb
->
data
;
struct
flowi4
fl4
;
struct
rtable
*
rt
;
flowi4_init_output
(
&
fl4
,
oif
,
mark
,
RT_TOS
(
iph
->
tos
),
RT_SCOPE_UNIVERSE
,
protocol
,
flow_flags
,
iph
->
daddr
,
iph
->
saddr
,
0
,
0
);
rt
=
__ip_route_output_key
(
net
,
&
fl4
);
if
(
!
IS_ERR
(
rt
))
{
ip_do_redirect
(
&
rt
->
dst
,
skb
);
ip_rt_put
(
rt
);
}
}
EXPORT_SYMBOL_GPL
(
ipv4_redirect
);
void
ipv4_sk_redirect
(
struct
sk_buff
*
skb
,
struct
sock
*
sk
)
{
const
struct
inet_sock
*
inet
=
inet_sk
(
sk
);
return
ipv4_redirect
(
skb
,
sock_net
(
sk
),
sk
->
sk_bound_dev_if
,
sk
->
sk_mark
,
inet
->
hdrincl
?
IPPROTO_RAW
:
sk
->
sk_protocol
,
inet_sk_flowi_flags
(
sk
));
}
EXPORT_SYMBOL_GPL
(
ipv4_sk_redirect
);
static
struct
dst_entry
*
ipv4_dst_check
(
struct
dst_entry
*
dst
,
u32
cookie
)
{
struct
rtable
*
rt
=
(
struct
rtable
*
)
dst
;
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录