Skip to content

Commit

Permalink
packet: packet_get_tcp_flags: use flow's innermost dl_type
Browse files Browse the repository at this point in the history
Use the innermost dl_type when decoding L3 and L4 data from a packet.

Signed-off-by: Simon Horman <[email protected]>
Signed-off-by: Ben Pfaff <[email protected]>
  • Loading branch information
horms authored and blp committed Feb 6, 2013
1 parent 3779fc8 commit e8c16d8
Show file tree
Hide file tree
Showing 2 changed files with 10 additions and 3 deletions.
4 changes: 3 additions & 1 deletion lib/packets.c
Original file line number Diff line number Diff line change
Expand Up @@ -887,7 +887,9 @@ packet_set_udp_port(struct ofpbuf *packet, ovs_be16 src, ovs_be16 dst)
uint8_t
packet_get_tcp_flags(const struct ofpbuf *packet, const struct flow *flow)
{
if (is_ip_any(flow) && flow->nw_proto == IPPROTO_TCP && packet->l7) {
ovs_be16 dl_type = flow_innermost_dl_type(flow);
if (dl_type_is_ip_any(dl_type) &&
flow->nw_proto == IPPROTO_TCP && packet->l7) {
const struct tcp_header *tcp = packet->l4;
return TCP_FLAGS(tcp->tcp_ctl);
} else {
Expand Down
9 changes: 7 additions & 2 deletions lib/packets.h
Original file line number Diff line number Diff line change
Expand Up @@ -548,10 +548,15 @@ static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
return ipv6_addr_equals(mask, &in6addr_exact);
}

static inline bool dl_type_is_ip_any(ovs_be16 dl_type)
{
return dl_type == htons(ETH_TYPE_IP)
|| dl_type == htons(ETH_TYPE_IPV6);
}

static inline bool is_ip_any(const struct flow *flow)
{
return flow->dl_type == htons(ETH_TYPE_IP)
|| flow->dl_type == htons(ETH_TYPE_IPV6);
return dl_type_is_ip_any(flow->dl_type);
}

void format_ipv6_addr(char *addr_str, const struct in6_addr *addr);
Expand Down

0 comments on commit e8c16d8

Please sign in to comment.