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
Kirill Smelkov
linux
Commits
7d8c6e39
Commit
7d8c6e39
authored
Jun 12, 2015
by
Eric W. Biederman
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
ipv6: Pass struct net through ip6_fragment
Signed-off-by:
Eric W. Biederman
<
ebiederm@xmission.com
>
parent
694869b3
Changes
6
Show whitespace changes
Inline
Side-by-side
Showing
6 changed files
with
21 additions
and
17 deletions
+21
-17
include/linux/netfilter_ipv6.h
include/linux/netfilter_ipv6.h
+2
-2
include/net/ip6_route.h
include/net/ip6_route.h
+2
-2
net/bridge/br_netfilter_hooks.c
net/bridge/br_netfilter_hooks.c
+1
-1
net/ipv6/ip6_output.c
net/ipv6/ip6_output.c
+7
-9
net/ipv6/xfrm6_output.c
net/ipv6/xfrm6_output.c
+8
-2
net/openvswitch/actions.c
net/openvswitch/actions.c
+1
-1
No files found.
include/linux/netfilter_ipv6.h
View file @
7d8c6e39
...
...
@@ -17,8 +17,8 @@ struct nf_ipv6_ops {
int
(
*
chk_addr
)(
struct
net
*
net
,
const
struct
in6_addr
*
addr
,
const
struct
net_device
*
dev
,
int
strict
);
void
(
*
route_input
)(
struct
sk_buff
*
skb
);
int
(
*
fragment
)(
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
sock
*
,
struct
sk_buff
*
));
int
(
*
fragment
)(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
net
*
,
struct
sock
*
,
struct
sk_buff
*
));
};
#ifdef CONFIG_NETFILTER
...
...
include/net/ip6_route.h
View file @
7d8c6e39
...
...
@@ -173,8 +173,8 @@ static inline bool ipv6_anycast_destination(const struct dst_entry *dst,
ipv6_addr_equal
(
&
rt
->
rt6i_dst
.
addr
,
daddr
));
}
int
ip6_fragment
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
sock
*
,
struct
sk_buff
*
));
int
ip6_fragment
(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
net
*
,
struct
sock
*
,
struct
sk_buff
*
));
static
inline
int
ip6_skb_dst_mtu
(
struct
sk_buff
*
skb
)
{
...
...
net/bridge/br_netfilter_hooks.c
View file @
7d8c6e39
...
...
@@ -786,7 +786,7 @@ static int br_nf_dev_queue_xmit(struct net *net, struct sock *sk, struct sk_buff
data
->
size
);
if
(
v6ops
)
return
v6ops
->
fragment
(
sk
,
skb
,
br_nf_push_frag_xmit_sk
);
return
v6ops
->
fragment
(
net
,
sk
,
skb
,
br_nf_push_frag_xmit
);
kfree_skb
(
skb
);
return
-
EMSGSIZE
;
...
...
net/ipv6/ip6_output.c
View file @
7d8c6e39
...
...
@@ -56,11 +56,10 @@
#include <net/checksum.h>
#include <linux/mroute6.h>
static
int
ip6_finish_output2
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
static
int
ip6_finish_output2
(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
struct
dst_entry
*
dst
=
skb_dst
(
skb
);
struct
net_device
*
dev
=
dst
->
dev
;
struct
net
*
net
=
dev_net
(
dev
);
struct
neighbour
*
neigh
;
struct
in6_addr
*
nexthop
;
int
ret
;
...
...
@@ -126,9 +125,9 @@ static int ip6_finish_output(struct net *net, struct sock *sk, struct sk_buff *s
if
((
skb
->
len
>
ip6_skb_dst_mtu
(
skb
)
&&
!
skb_is_gso
(
skb
))
||
dst_allfrag
(
skb_dst
(
skb
))
||
(
IP6CB
(
skb
)
->
frag_max_size
&&
skb
->
len
>
IP6CB
(
skb
)
->
frag_max_size
))
return
ip6_fragment
(
sk
,
skb
,
ip6_finish_output2
);
return
ip6_fragment
(
net
,
sk
,
skb
,
ip6_finish_output2
);
else
return
ip6_finish_output2
(
sk
,
skb
);
return
ip6_finish_output2
(
net
,
sk
,
skb
);
}
int
ip6_output
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
...
...
@@ -554,8 +553,8 @@ static void ip6_copy_metadata(struct sk_buff *to, struct sk_buff *from)
skb_copy_secmark
(
to
,
from
);
}
int
ip6_fragment
(
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
sock
*
,
struct
sk_buff
*
))
int
ip6_fragment
(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
,
int
(
*
output
)(
struct
net
*
,
struct
sock
*
,
struct
sk_buff
*
))
{
struct
sk_buff
*
frag
;
struct
rt6_info
*
rt
=
(
struct
rt6_info
*
)
skb_dst
(
skb
);
...
...
@@ -568,7 +567,6 @@ int ip6_fragment(struct sock *sk, struct sk_buff *skb,
__be32
frag_id
;
int
ptr
,
offset
=
0
,
err
=
0
;
u8
*
prevhdr
,
nexthdr
=
0
;
struct
net
*
net
=
dev_net
(
skb_dst
(
skb
)
->
dev
);
hlen
=
ip6_find_1stfragopt
(
skb
,
&
prevhdr
);
nexthdr
=
*
prevhdr
;
...
...
@@ -688,7 +686,7 @@ int ip6_fragment(struct sock *sk, struct sk_buff *skb,
ip6_copy_metadata
(
frag
,
skb
);
}
err
=
output
(
sk
,
skb
);
err
=
output
(
net
,
sk
,
skb
);
if
(
!
err
)
IP6_INC_STATS
(
net
,
ip6_dst_idev
(
&
rt
->
dst
),
IPSTATS_MIB_FRAGCREATES
);
...
...
@@ -816,7 +814,7 @@ int ip6_fragment(struct sock *sk, struct sk_buff *skb,
/*
* Put this fragment into the sending queue.
*/
err
=
output
(
sk
,
frag
);
err
=
output
(
net
,
sk
,
frag
);
if
(
err
)
goto
fail
;
...
...
net/ipv6/xfrm6_output.c
View file @
7d8c6e39
...
...
@@ -131,6 +131,12 @@ int xfrm6_output_finish(struct sock *sk, struct sk_buff *skb)
return
xfrm_output
(
sk
,
skb
);
}
static
int
__xfrm6_output_finish
(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
struct
xfrm_state
*
x
=
skb_dst
(
skb
)
->
xfrm
;
return
x
->
outer_mode
->
afinfo
->
output_finish
(
sk
,
skb
);
}
static
int
__xfrm6_output
(
struct
net
*
net
,
struct
sock
*
sk
,
struct
sk_buff
*
skb
)
{
struct
dst_entry
*
dst
=
skb_dst
(
skb
);
...
...
@@ -160,8 +166,8 @@ static int __xfrm6_output(struct net *net, struct sock *sk, struct sk_buff *skb)
if
(
x
->
props
.
mode
==
XFRM_MODE_TUNNEL
&&
((
skb
->
len
>
mtu
&&
!
skb_is_gso
(
skb
))
||
dst_allfrag
(
skb_dst
(
skb
))))
{
return
ip6_fragment
(
sk
,
skb
,
x
->
outer_mode
->
afinfo
->
output_finish
);
return
ip6_fragment
(
net
,
sk
,
skb
,
__xfrm6_
output_finish
);
}
return
x
->
outer_mode
->
afinfo
->
output_finish
(
sk
,
skb
);
}
...
...
net/openvswitch/actions.c
View file @
7d8c6e39
...
...
@@ -727,7 +727,7 @@ static void ovs_fragment(struct net *net, struct vport *vport,
skb_dst_set_noref
(
skb
,
&
ovs_rt
.
dst
);
IP6CB
(
skb
)
->
frag_max_size
=
mru
;
v6ops
->
fragment
(
skb
->
sk
,
skb
,
ovs_vport_output_sk
);
v6ops
->
fragment
(
net
,
skb
->
sk
,
skb
,
ovs_vport_output
);
refdst_drop
(
orig_dst
);
}
else
{
WARN_ONCE
(
1
,
"Failed fragment ->%s: eth=%04x, MRU=%d, MTU=%d."
,
...
...
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