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
20a17bf6
Commit
20a17bf6
authored
Sep 01, 2015
by
David S. Miller
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
flow_dissector: Use 'const' where possible.
Signed-off-by:
David S. Miller
<
davem@davemloft.net
>
parent
de4c1f8b
Changes
3
Show whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
49 additions
and
46 deletions
+49
-46
include/linux/skbuff.h
include/linux/skbuff.h
+4
-4
include/net/flow.h
include/net/flow.h
+4
-4
net/core/flow_dissector.c
net/core/flow_dissector.c
+41
-38
No files found.
include/linux/skbuff.h
View file @
20a17bf6
...
@@ -1029,9 +1029,9 @@ static inline __u32 skb_get_hash(struct sk_buff *skb)
...
@@ -1029,9 +1029,9 @@ static inline __u32 skb_get_hash(struct sk_buff *skb)
return
skb
->
hash
;
return
skb
->
hash
;
}
}
__u32
__skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
struct
flowi6
*
fl6
);
__u32
__skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
const
struct
flowi6
*
fl6
);
static
inline
__u32
skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
struct
flowi6
*
fl6
)
static
inline
__u32
skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
const
struct
flowi6
*
fl6
)
{
{
if
(
!
skb
->
l4_hash
&&
!
skb
->
sw_hash
)
{
if
(
!
skb
->
l4_hash
&&
!
skb
->
sw_hash
)
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
...
@@ -1043,9 +1043,9 @@ static inline __u32 skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6)
...
@@ -1043,9 +1043,9 @@ static inline __u32 skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6)
return
skb
->
hash
;
return
skb
->
hash
;
}
}
__u32
__skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
struct
flowi4
*
fl
);
__u32
__skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
const
struct
flowi4
*
fl
);
static
inline
__u32
skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
struct
flowi4
*
fl4
)
static
inline
__u32
skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
const
struct
flowi4
*
fl4
)
{
{
if
(
!
skb
->
l4_hash
&&
!
skb
->
sw_hash
)
{
if
(
!
skb
->
l4_hash
&&
!
skb
->
sw_hash
)
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
...
...
include/net/flow.h
View file @
20a17bf6
...
@@ -244,18 +244,18 @@ void flow_cache_flush(struct net *net);
...
@@ -244,18 +244,18 @@ void flow_cache_flush(struct net *net);
void
flow_cache_flush_deferred
(
struct
net
*
net
);
void
flow_cache_flush_deferred
(
struct
net
*
net
);
extern
atomic_t
flow_cache_genid
;
extern
atomic_t
flow_cache_genid
;
__u32
__get_hash_from_flowi6
(
struct
flowi6
*
fl6
,
struct
flow_keys
*
keys
);
__u32
__get_hash_from_flowi6
(
const
struct
flowi6
*
fl6
,
struct
flow_keys
*
keys
);
static
inline
__u32
get_hash_from_flowi6
(
struct
flowi6
*
fl6
)
static
inline
__u32
get_hash_from_flowi6
(
const
struct
flowi6
*
fl6
)
{
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
return
__get_hash_from_flowi6
(
fl6
,
&
keys
);
return
__get_hash_from_flowi6
(
fl6
,
&
keys
);
}
}
__u32
__get_hash_from_flowi4
(
struct
flowi4
*
fl4
,
struct
flow_keys
*
keys
);
__u32
__get_hash_from_flowi4
(
const
struct
flowi4
*
fl4
,
struct
flow_keys
*
keys
);
static
inline
__u32
get_hash_from_flowi4
(
struct
flowi4
*
fl4
)
static
inline
__u32
get_hash_from_flowi4
(
const
struct
flowi4
*
fl4
)
{
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
...
...
net/core/flow_dissector.c
View file @
20a17bf6
...
@@ -19,13 +19,13 @@
...
@@ -19,13 +19,13 @@
#include <net/flow_dissector.h>
#include <net/flow_dissector.h>
#include <scsi/fc/fc_fcoe.h>
#include <scsi/fc/fc_fcoe.h>
static
bool
skb_flow_dissector_uses_key
(
struct
flow_dissector
*
flow_dissector
,
static
bool
dissector_uses_key
(
const
struct
flow_dissector
*
flow_dissector
,
enum
flow_dissector_key_id
key_id
)
enum
flow_dissector_key_id
key_id
)
{
{
return
flow_dissector
->
used_keys
&
(
1
<<
key_id
);
return
flow_dissector
->
used_keys
&
(
1
<<
key_id
);
}
}
static
void
skb_flow_
dissector_set_key
(
struct
flow_dissector
*
flow_dissector
,
static
void
dissector_set_key
(
struct
flow_dissector
*
flow_dissector
,
enum
flow_dissector_key_id
key_id
)
enum
flow_dissector_key_id
key_id
)
{
{
flow_dissector
->
used_keys
|=
(
1
<<
key_id
);
flow_dissector
->
used_keys
|=
(
1
<<
key_id
);
...
@@ -51,19 +51,19 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
...
@@ -51,19 +51,19 @@ void skb_flow_dissector_init(struct flow_dissector *flow_dissector,
* boundaries of unsigned short.
* boundaries of unsigned short.
*/
*/
BUG_ON
(
key
->
offset
>
USHRT_MAX
);
BUG_ON
(
key
->
offset
>
USHRT_MAX
);
BUG_ON
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
BUG_ON
(
dissector_uses_key
(
flow_dissector
,
key
->
key_id
));
key
->
key_id
));
skb_flow_
dissector_set_key
(
flow_dissector
,
key
->
key_id
);
dissector_set_key
(
flow_dissector
,
key
->
key_id
);
flow_dissector
->
offset
[
key
->
key_id
]
=
key
->
offset
;
flow_dissector
->
offset
[
key
->
key_id
]
=
key
->
offset
;
}
}
/* Ensure that the dissector always includes control and basic key.
/* Ensure that the dissector always includes control and basic key.
* That way we are able to avoid handling lack of these in fast path.
* That way we are able to avoid handling lack of these in fast path.
*/
*/
BUG_ON
(
!
skb_flow_
dissector_uses_key
(
flow_dissector
,
BUG_ON
(
!
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_CONTROL
));
FLOW_DISSECTOR_KEY_CONTROL
));
BUG_ON
(
!
skb_flow_
dissector_uses_key
(
flow_dissector
,
BUG_ON
(
!
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_BASIC
));
FLOW_DISSECTOR_KEY_BASIC
));
}
}
EXPORT_SYMBOL
(
skb_flow_dissector_init
);
EXPORT_SYMBOL
(
skb_flow_dissector_init
);
...
@@ -154,7 +154,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -154,7 +154,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
FLOW_DISSECTOR_KEY_BASIC
,
FLOW_DISSECTOR_KEY_BASIC
,
target_container
);
target_container
);
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_ETH_ADDRS
))
{
FLOW_DISSECTOR_KEY_ETH_ADDRS
))
{
struct
ethhdr
*
eth
=
eth_hdr
(
skb
);
struct
ethhdr
*
eth
=
eth_hdr
(
skb
);
struct
flow_dissector_key_eth_addrs
*
key_eth_addrs
;
struct
flow_dissector_key_eth_addrs
*
key_eth_addrs
;
...
@@ -178,7 +178,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -178,7 +178,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
ip_proto
=
iph
->
protocol
;
ip_proto
=
iph
->
protocol
;
if
(
!
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
!
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_IPV4_ADDRS
))
FLOW_DISSECTOR_KEY_IPV4_ADDRS
))
break
;
break
;
...
@@ -218,7 +218,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -218,7 +218,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
ip_proto
=
iph
->
nexthdr
;
ip_proto
=
iph
->
nexthdr
;
nhoff
+=
sizeof
(
struct
ipv6hdr
);
nhoff
+=
sizeof
(
struct
ipv6hdr
);
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_IPV6_ADDRS
))
{
FLOW_DISSECTOR_KEY_IPV6_ADDRS
))
{
struct
flow_dissector_key_ipv6_addrs
*
key_ipv6_addrs
;
struct
flow_dissector_key_ipv6_addrs
*
key_ipv6_addrs
;
...
@@ -232,7 +232,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -232,7 +232,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
flow_label
=
ip6_flowlabel
(
iph
);
flow_label
=
ip6_flowlabel
(
iph
);
if
(
flow_label
)
{
if
(
flow_label
)
{
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_FLOW_LABEL
))
{
FLOW_DISSECTOR_KEY_FLOW_LABEL
))
{
key_tags
=
skb_flow_dissector_target
(
flow_dissector
,
key_tags
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_FLOW_LABEL
,
FLOW_DISSECTOR_KEY_FLOW_LABEL
,
...
@@ -257,7 +257,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -257,7 +257,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
if
(
!
vlan
)
if
(
!
vlan
)
goto
out_bad
;
goto
out_bad
;
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_VLANID
))
{
FLOW_DISSECTOR_KEY_VLANID
))
{
key_tags
=
skb_flow_dissector_target
(
flow_dissector
,
key_tags
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_VLANID
,
FLOW_DISSECTOR_KEY_VLANID
,
...
@@ -298,7 +298,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -298,7 +298,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
if
(
!
hdr
)
if
(
!
hdr
)
goto
out_bad
;
goto
out_bad
;
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_TIPC_ADDRS
))
{
FLOW_DISSECTOR_KEY_TIPC_ADDRS
))
{
key_addrs
=
skb_flow_dissector_target
(
flow_dissector
,
key_addrs
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_TIPC_ADDRS
,
FLOW_DISSECTOR_KEY_TIPC_ADDRS
,
...
@@ -320,7 +320,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -320,7 +320,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
if
((
ntohl
(
hdr
[
0
].
entry
)
&
MPLS_LS_LABEL_MASK
)
>>
if
((
ntohl
(
hdr
[
0
].
entry
)
&
MPLS_LS_LABEL_MASK
)
>>
MPLS_LS_LABEL_SHIFT
==
MPLS_LABEL_ENTROPY
)
{
MPLS_LS_LABEL_SHIFT
==
MPLS_LABEL_ENTROPY
)
{
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_MPLS_ENTROPY
))
{
FLOW_DISSECTOR_KEY_MPLS_ENTROPY
))
{
key_keyid
=
skb_flow_dissector_target
(
flow_dissector
,
key_keyid
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_MPLS_ENTROPY
,
FLOW_DISSECTOR_KEY_MPLS_ENTROPY
,
...
@@ -374,7 +374,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -374,7 +374,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
if
(
!
keyid
)
if
(
!
keyid
)
goto
out_bad
;
goto
out_bad
;
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_GRE_KEYID
))
{
FLOW_DISSECTOR_KEY_GRE_KEYID
))
{
key_keyid
=
skb_flow_dissector_target
(
flow_dissector
,
key_keyid
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_GRE_KEYID
,
FLOW_DISSECTOR_KEY_GRE_KEYID
,
...
@@ -470,7 +470,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
...
@@ -470,7 +470,7 @@ bool __skb_flow_dissect(const struct sk_buff *skb,
break
;
break
;
}
}
if
(
skb_flow_
dissector_uses_key
(
flow_dissector
,
if
(
dissector_uses_key
(
flow_dissector
,
FLOW_DISSECTOR_KEY_PORTS
))
{
FLOW_DISSECTOR_KEY_PORTS
))
{
key_ports
=
skb_flow_dissector_target
(
flow_dissector
,
key_ports
=
skb_flow_dissector_target
(
flow_dissector
,
FLOW_DISSECTOR_KEY_PORTS
,
FLOW_DISSECTOR_KEY_PORTS
,
...
@@ -497,18 +497,21 @@ static __always_inline void __flow_hash_secret_init(void)
...
@@ -497,18 +497,21 @@ static __always_inline void __flow_hash_secret_init(void)
net_get_random_once
(
&
hashrnd
,
sizeof
(
hashrnd
));
net_get_random_once
(
&
hashrnd
,
sizeof
(
hashrnd
));
}
}
static
__always_inline
u32
__flow_hash_words
(
u32
*
words
,
u32
length
,
u32
keyval
)
static
__always_inline
u32
__flow_hash_words
(
const
u32
*
words
,
u32
length
,
u32
keyval
)
{
{
return
jhash2
(
words
,
length
,
keyval
);
return
jhash2
(
words
,
length
,
keyval
);
}
}
static
inline
void
*
flow_keys_hash_start
(
struct
flow_keys
*
flow
)
static
inline
const
u32
*
flow_keys_hash_start
(
const
struct
flow_keys
*
flow
)
{
{
const
void
*
p
=
flow
;
BUILD_BUG_ON
(
FLOW_KEYS_HASH_OFFSET
%
sizeof
(
u32
));
BUILD_BUG_ON
(
FLOW_KEYS_HASH_OFFSET
%
sizeof
(
u32
));
return
(
void
*
)
flow
+
FLOW_KEYS_HASH_OFFSET
;
return
(
const
u32
*
)(
p
+
FLOW_KEYS_HASH_OFFSET
)
;
}
}
static
inline
size_t
flow_keys_hash_length
(
struct
flow_keys
*
flow
)
static
inline
size_t
flow_keys_hash_length
(
const
struct
flow_keys
*
flow
)
{
{
size_t
diff
=
FLOW_KEYS_HASH_OFFSET
+
sizeof
(
flow
->
addrs
);
size_t
diff
=
FLOW_KEYS_HASH_OFFSET
+
sizeof
(
flow
->
addrs
);
BUILD_BUG_ON
((
sizeof
(
*
flow
)
-
FLOW_KEYS_HASH_OFFSET
)
%
sizeof
(
u32
));
BUILD_BUG_ON
((
sizeof
(
*
flow
)
-
FLOW_KEYS_HASH_OFFSET
)
%
sizeof
(
u32
));
...
@@ -598,7 +601,7 @@ static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval)
...
@@ -598,7 +601,7 @@ static inline u32 __flow_hash_from_keys(struct flow_keys *keys, u32 keyval)
__flow_hash_consistentify
(
keys
);
__flow_hash_consistentify
(
keys
);
hash
=
__flow_hash_words
(
(
u32
*
)
flow_keys_hash_start
(
keys
),
hash
=
__flow_hash_words
(
flow_keys_hash_start
(
keys
),
flow_keys_hash_length
(
keys
),
keyval
);
flow_keys_hash_length
(
keys
),
keyval
);
if
(
!
hash
)
if
(
!
hash
)
hash
=
1
;
hash
=
1
;
...
@@ -677,7 +680,7 @@ __u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb)
...
@@ -677,7 +680,7 @@ __u32 skb_get_hash_perturb(const struct sk_buff *skb, u32 perturb)
}
}
EXPORT_SYMBOL
(
skb_get_hash_perturb
);
EXPORT_SYMBOL
(
skb_get_hash_perturb
);
__u32
__skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
struct
flowi6
*
fl6
)
__u32
__skb_get_hash_flowi6
(
struct
sk_buff
*
skb
,
const
struct
flowi6
*
fl6
)
{
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
...
@@ -701,7 +704,7 @@ __u32 __skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6)
...
@@ -701,7 +704,7 @@ __u32 __skb_get_hash_flowi6(struct sk_buff *skb, struct flowi6 *fl6)
}
}
EXPORT_SYMBOL
(
__skb_get_hash_flowi6
);
EXPORT_SYMBOL
(
__skb_get_hash_flowi6
);
__u32
__skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
struct
flowi4
*
fl4
)
__u32
__skb_get_hash_flowi4
(
struct
sk_buff
*
skb
,
const
struct
flowi4
*
fl4
)
{
{
struct
flow_keys
keys
;
struct
flow_keys
keys
;
...
@@ -787,7 +790,7 @@ u32 skb_get_poff(const struct sk_buff *skb)
...
@@ -787,7 +790,7 @@ u32 skb_get_poff(const struct sk_buff *skb)
return
__skb_get_poff
(
skb
,
skb
->
data
,
&
keys
,
skb_headlen
(
skb
));
return
__skb_get_poff
(
skb
,
skb
->
data
,
&
keys
,
skb_headlen
(
skb
));
}
}
__u32
__get_hash_from_flowi6
(
struct
flowi6
*
fl6
,
struct
flow_keys
*
keys
)
__u32
__get_hash_from_flowi6
(
const
struct
flowi6
*
fl6
,
struct
flow_keys
*
keys
)
{
{
memset
(
keys
,
0
,
sizeof
(
*
keys
));
memset
(
keys
,
0
,
sizeof
(
*
keys
));
...
@@ -806,7 +809,7 @@ __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys)
...
@@ -806,7 +809,7 @@ __u32 __get_hash_from_flowi6(struct flowi6 *fl6, struct flow_keys *keys)
}
}
EXPORT_SYMBOL
(
__get_hash_from_flowi6
);
EXPORT_SYMBOL
(
__get_hash_from_flowi6
);
__u32
__get_hash_from_flowi4
(
struct
flowi4
*
fl4
,
struct
flow_keys
*
keys
)
__u32
__get_hash_from_flowi4
(
const
struct
flowi4
*
fl4
,
struct
flow_keys
*
keys
)
{
{
memset
(
keys
,
0
,
sizeof
(
*
keys
));
memset
(
keys
,
0
,
sizeof
(
*
keys
));
...
...
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