2
0
mirror of https://github.com/openvswitch/ovs synced 2025-08-30 13:58:14 +00:00

packet: packet_get_tcp_flags: use flow's innermost dl_type

Use the innermost dl_type when decoding L3 and L4 data from a packet.

Signed-off-by: Simon Horman <horms@verge.net.au>
Signed-off-by: Ben Pfaff <blp@nicira.com>
This commit is contained in:
Simon Horman
2013-02-06 22:53:54 +09:00
committed by Ben Pfaff
parent 3779fc82d4
commit e8c16d8366
2 changed files with 10 additions and 3 deletions

View File

@@ -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 {

View File

@@ -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);