diff options
author | Cong Wang <cwang@twopensource.com> | 2014-10-15 17:33:21 -0400 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2014-10-17 12:02:57 -0400 |
commit | e25f866fbc8a4bf387b5dbe8e25aa5b07e55c74f (patch) | |
tree | df2c77e0b95e195dc496bba98155e2c62b9a80cd /include/net/tcp.h | |
parent | 2077eebf7d8bf20b36524de45851e28111a60c52 (diff) |
ipv4: share tcp_v4_save_options() with cookie_v4_check()
cookie_v4_check() allocates ip_options_rcu in the same way
with tcp_v4_save_options(), we can just make it a helper function.
Cc: Krzysztof Kolasa <kkolasa@winsoft.pl>
Cc: Eric Dumazet <edumazet@google.com>
Signed-off-by: Cong Wang <cwang@twopensource.com>
Signed-off-by: Cong Wang <xiyou.wangcong@gmail.com>
Acked-by: Eric Dumazet <edumazet@google.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include/net/tcp.h')
-rw-r--r-- | include/net/tcp.h | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/include/net/tcp.h b/include/net/tcp.h index 74efeda994b3..869637a7caf7 100644 --- a/include/net/tcp.h +++ b/include/net/tcp.h | |||
@@ -1666,4 +1666,24 @@ int tcpv4_offload_init(void); | |||
1666 | void tcp_v4_init(void); | 1666 | void tcp_v4_init(void); |
1667 | void tcp_init(void); | 1667 | void tcp_init(void); |
1668 | 1668 | ||
1669 | /* | ||
1670 | * Save and compile IPv4 options, return a pointer to it | ||
1671 | */ | ||
1672 | static inline struct ip_options_rcu *tcp_v4_save_options(struct sk_buff *skb) | ||
1673 | { | ||
1674 | const struct ip_options *opt = &TCP_SKB_CB(skb)->header.h4.opt; | ||
1675 | struct ip_options_rcu *dopt = NULL; | ||
1676 | |||
1677 | if (opt && opt->optlen) { | ||
1678 | int opt_size = sizeof(*dopt) + opt->optlen; | ||
1679 | |||
1680 | dopt = kmalloc(opt_size, GFP_ATOMIC); | ||
1681 | if (dopt && __ip_options_echo(&dopt->opt, skb, opt)) { | ||
1682 | kfree(dopt); | ||
1683 | dopt = NULL; | ||
1684 | } | ||
1685 | } | ||
1686 | return dopt; | ||
1687 | } | ||
1688 | |||
1669 | #endif /* _TCP_H */ | 1689 | #endif /* _TCP_H */ |