From df9b6612b52d671f7dc286deedb1cef8a3ed58ab Mon Sep 17 00:00:00 2001 From: Ben Pfaff Date: Mon, 19 Dec 2011 14:45:23 -0800 Subject: [PATCH] flow: Make flow_compose() fake packets slightly more realistic. This makes flow_extract() happier with TCP packets that this function produces. Signed-off-by: Ben Pfaff --- lib/flow.c | 4 ++++ lib/packets.h | 1 + 2 files changed, 5 insertions(+) diff --git a/lib/flow.c b/lib/flow.c index a491afff..922412fd 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,9 @@ flow_compose(struct ofpbuf *b, const struct flow *flow) icmp->icmp_code = ntohs(flow->tp_dst); } } + + ip->ip_tot_len = htons((uint8_t *) b->data + b->size + - (uint8_t *) 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 9e283a5a..19b7346b 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) -- 2.30.2