@@ -28,6 +28,7 @@
#include "openvswitch/types.h"
#include "packets.h"
#include "unaligned.h"
+#include "dp-packet.h"
struct ct_endpoint {
struct ct_addr addr;
@@ -116,4 +117,16 @@ conn_update_expiration(struct conntrack_bucket *ctb, struct conn *conn,
conn_init_expiration(ctb, conn, tm, now);
}
+static inline uint32_t
+tcp_payload_length(struct dp_packet *pkt)
+{
+ char * tcp_payload = (char *) dp_packet_get_tcp_payload(pkt);
+ if (tcp_payload) {
+ return (char *) dp_packet_tail(pkt) - dp_packet_l2_pad_size(pkt)
+ - tcp_payload;
+ } else {
+ return 0;
+ }
+}
+
#endif /* conntrack-private.h */
@@ -144,13 +144,6 @@ tcp_get_wscale(const struct tcp_header *tcp)
return wscale;
}
-static uint32_t
-tcp_payload_length(struct dp_packet *pkt)
-{
- return (char *) dp_packet_tail(pkt) - dp_packet_l2_pad_size(pkt)
- - (char *) dp_packet_get_tcp_payload(pkt);
-}
-
static enum ct_update_res
tcp_conn_update(struct conn *conn_, struct conntrack_bucket *ctb,
struct dp_packet *pkt, bool reply, long long now)
The function tcp_payload_length is moved to a private include file to be used by other conntrack files. A sanity check is added for general use, although previous usage was safe in that filtering is already done by the time it is called. Signed-off-by: Darrell Ball <dlu998@gmail.com> --- lib/conntrack-private.h | 13 +++++++++++++ lib/conntrack-tcp.c | 7 ------- 2 files changed, 13 insertions(+), 7 deletions(-)