diff options
author | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-09-22 07:28:16 -0400 |
---|---|---|
committer | Pablo Neira Ayuso <pablo@netfilter.org> | 2014-09-26 12:42:30 -0400 |
commit | 7276ca3fa23864133f5ee7431c51546d9b7f695f (patch) | |
tree | 7f092d8fe6c15560941665f80d6481d42d13c204 | |
parent | 772476df7047db87ac4174d1ed396512912d23bf (diff) |
netfilter: bridge: nf_bridge_copy_header as static inline in header
Move nf_bridge_copy_header() as static inline in netfilter_bridge.h
header file. This patch prepares the modularization of the br_netfilter
code.
Signed-off-by: Pablo Neira Ayuso <pablo@netfilter.org>
-rw-r--r-- | include/linux/netfilter_bridge.h | 48 | ||||
-rw-r--r-- | net/bridge/br_netfilter.c | 28 |
2 files changed, 38 insertions, 38 deletions
diff --git a/include/linux/netfilter_bridge.h b/include/linux/netfilter_bridge.h index 8ab1c278b66d..fe996d59de64 100644 --- a/include/linux/netfilter_bridge.h +++ b/include/linux/netfilter_bridge.h | |||
@@ -24,16 +24,6 @@ enum nf_br_hook_priorities { | |||
24 | #define BRNF_8021Q 0x10 | 24 | #define BRNF_8021Q 0x10 |
25 | #define BRNF_PPPoE 0x20 | 25 | #define BRNF_PPPoE 0x20 |
26 | 26 | ||
27 | /* Only used in br_forward.c */ | ||
28 | int nf_bridge_copy_header(struct sk_buff *skb); | ||
29 | static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb) | ||
30 | { | ||
31 | if (skb->nf_bridge && | ||
32 | skb->nf_bridge->mask & (BRNF_BRIDGED | BRNF_BRIDGED_DNAT)) | ||
33 | return nf_bridge_copy_header(skb); | ||
34 | return 0; | ||
35 | } | ||
36 | |||
37 | static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) | 27 | static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) |
38 | { | 28 | { |
39 | switch (skb->protocol) { | 29 | switch (skb->protocol) { |
@@ -46,6 +36,44 @@ static inline unsigned int nf_bridge_encap_header_len(const struct sk_buff *skb) | |||
46 | } | 36 | } |
47 | } | 37 | } |
48 | 38 | ||
39 | static inline void nf_bridge_update_protocol(struct sk_buff *skb) | ||
40 | { | ||
41 | if (skb->nf_bridge->mask & BRNF_8021Q) | ||
42 | skb->protocol = htons(ETH_P_8021Q); | ||
43 | else if (skb->nf_bridge->mask & BRNF_PPPoE) | ||
44 | skb->protocol = htons(ETH_P_PPP_SES); | ||
45 | } | ||
46 | |||
47 | /* Fill in the header for fragmented IP packets handled by | ||
48 | * the IPv4 connection tracking code. | ||
49 | * | ||
50 | * Only used in br_forward.c | ||
51 | */ | ||
52 | static inline int nf_bridge_copy_header(struct sk_buff *skb) | ||
53 | { | ||
54 | int err; | ||
55 | unsigned int header_size; | ||
56 | |||
57 | nf_bridge_update_protocol(skb); | ||
58 | header_size = ETH_HLEN + nf_bridge_encap_header_len(skb); | ||
59 | err = skb_cow_head(skb, header_size); | ||
60 | if (err) | ||
61 | return err; | ||
62 | |||
63 | skb_copy_to_linear_data_offset(skb, -header_size, | ||
64 | skb->nf_bridge->data, header_size); | ||
65 | __skb_push(skb, nf_bridge_encap_header_len(skb)); | ||
66 | return 0; | ||
67 | } | ||
68 | |||
69 | static inline int nf_bridge_maybe_copy_header(struct sk_buff *skb) | ||
70 | { | ||
71 | if (skb->nf_bridge && | ||
72 | skb->nf_bridge->mask & (BRNF_BRIDGED | BRNF_BRIDGED_DNAT)) | ||
73 | return nf_bridge_copy_header(skb); | ||
74 | return 0; | ||
75 | } | ||
76 | |||
49 | static inline unsigned int nf_bridge_mtu_reduction(const struct sk_buff *skb) | 77 | static inline unsigned int nf_bridge_mtu_reduction(const struct sk_buff *skb) |
50 | { | 78 | { |
51 | if (unlikely(skb->nf_bridge->mask & BRNF_PPPoE)) | 79 | if (unlikely(skb->nf_bridge->mask & BRNF_PPPoE)) |
diff --git a/net/bridge/br_netfilter.c b/net/bridge/br_netfilter.c index a615264cf01a..61929a7cd815 100644 --- a/net/bridge/br_netfilter.c +++ b/net/bridge/br_netfilter.c | |||
@@ -245,14 +245,6 @@ static inline void nf_bridge_save_header(struct sk_buff *skb) | |||
245 | skb->nf_bridge->data, header_size); | 245 | skb->nf_bridge->data, header_size); |
246 | } | 246 | } |
247 | 247 | ||
248 | static inline void nf_bridge_update_protocol(struct sk_buff *skb) | ||
249 | { | ||
250 | if (skb->nf_bridge->mask & BRNF_8021Q) | ||
251 | skb->protocol = htons(ETH_P_8021Q); | ||
252 | else if (skb->nf_bridge->mask & BRNF_PPPoE) | ||
253 | skb->protocol = htons(ETH_P_PPP_SES); | ||
254 | } | ||
255 | |||
256 | /* When handing a packet over to the IP layer | 248 | /* When handing a packet over to the IP layer |
257 | * check whether we have a skb that is in the | 249 | * check whether we have a skb that is in the |
258 | * expected format | 250 | * expected format |
@@ -320,26 +312,6 @@ drop: | |||
320 | return -1; | 312 | return -1; |
321 | } | 313 | } |
322 | 314 | ||
323 | /* Fill in the header for fragmented IP packets handled by | ||
324 | * the IPv4 connection tracking code. | ||
325 | */ | ||
326 | int nf_bridge_copy_header(struct sk_buff *skb) | ||
327 | { | ||
328 | int err; | ||
329 | unsigned int header_size; | ||
330 | |||
331 | nf_bridge_update_protocol(skb); | ||
332 | header_size = ETH_HLEN + nf_bridge_encap_header_len(skb); | ||
333 | err = skb_cow_head(skb, header_size); | ||
334 | if (err) | ||
335 | return err; | ||
336 | |||
337 | skb_copy_to_linear_data_offset(skb, -header_size, | ||
338 | skb->nf_bridge->data, header_size); | ||
339 | __skb_push(skb, nf_bridge_encap_header_len(skb)); | ||
340 | return 0; | ||
341 | } | ||
342 | |||
343 | /* PF_BRIDGE/PRE_ROUTING *********************************************/ | 315 | /* PF_BRIDGE/PRE_ROUTING *********************************************/ |
344 | /* Undo the changes made for ip6tables PREROUTING and continue the | 316 | /* Undo the changes made for ip6tables PREROUTING and continue the |
345 | * bridge PRE_ROUTING hook. */ | 317 | * bridge PRE_ROUTING hook. */ |