[ovs-dev] [flow-stats 10/14] flow: Make flow_compose() fake packets slightly more realistic.
Ben Pfaff
blp at nicira.com
Thu Dec 8 22:01:35 UTC 2011
This makes flow_extract() happier with TCP packets that this function
produces.
---
lib/flow.c | 3 +++
lib/packets.h | 1 +
2 files changed, 4 insertions(+), 0 deletions(-)
diff --git a/lib/flow.c b/lib/flow.c
index a491aff..a352f07 100644
--- a/lib/flow.c
+++ b/lib/flow.c
@@ -1020,6 +1020,7 @@ flow_compose(struct ofpbuf *b, const struct flow *flow)
b->l4 = tcp = ofpbuf_put_zeros(b, sizeof *tcp);
tcp->tcp_src = flow->tp_src;
tcp->tcp_dst = flow->tp_dst;
+ tcp->tcp_ctl = TCP_CTL(0, 5);
} else if (flow->nw_proto == IPPROTO_UDP) {
struct udp_header *udp;
@@ -1034,6 +1035,8 @@ flow_compose(struct ofpbuf *b, const struct flow *flow)
icmp->icmp_code = ntohs(flow->tp_dst);
}
}
+
+ ip->ip_tot_len = htons(b->data + b->size - b->l3);
} else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
/* XXX */
} else if (flow->dl_type == htons(ETH_TYPE_ARP)) {
diff --git a/lib/packets.h b/lib/packets.h
index 9e283a5..19b7346 100644
--- a/lib/packets.h
+++ b/lib/packets.h
@@ -357,6 +357,7 @@ BUILD_ASSERT_DECL(UDP_HEADER_LEN == sizeof(struct udp_header));
#define TCP_ACK 0x10
#define TCP_URG 0x20
+#define TCP_CTL(flags, offset) (htons((flags) | ((offset) << 12)))
#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x003f)
#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
--
1.7.4.4
More information about the dev
mailing list