From c1fd0da550feb8524688e57cb54aa6b2052bab99 Mon Sep 17 00:00:00 2001 From: Eric Leblond Date: Sat, 9 Mar 2019 21:47:40 +0100 Subject: [PATCH] af-packet: add vlan_id in bypass key Bypassing on vlan was not supported due to the missing key. --- src/source-af-packet.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/src/source-af-packet.c b/src/source-af-packet.c index d87776f56c..19bb12d027 100644 --- a/src/source-af-packet.c +++ b/src/source-af-packet.c @@ -2377,6 +2377,8 @@ static int AFPBypassCallback(Packet *p) key.dst = htonl(GET_IPV4_DST_ADDR_U32(p)); key.port16[0] = GET_TCP_SRC_PORT(p); key.port16[1] = GET_TCP_DST_PORT(p); + key.vlan_id[0] = p->vlan_id[0]; + key.vlan_id[1] = p->vlan_id[1]; key.ip_proto = IPV4_GET_IPPROTO(p); if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, &key, p->flow_hash, p->flow->todstpktcnt, @@ -2409,6 +2411,8 @@ static int AFPBypassCallback(Packet *p) } key.port16[0] = GET_TCP_SRC_PORT(p); key.port16[1] = GET_TCP_DST_PORT(p); + key.vlan_id[0] = p->vlan_id[0]; + key.vlan_id[1] = p->vlan_id[1]; key.ip_proto = IPV6_GET_NH(p); if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, &key, p->flow_hash, p->flow->todstpktcnt, p->flow->todstbytecnt, p->afp_v.nr_cpus) == 0) { @@ -2468,6 +2472,8 @@ static int AFPXDPBypassCallback(Packet *p) * (as in eBPF filter) so we need to pass from host to network order */ key.port16[0] = htons(p->flow->sp); key.port16[1] = htons(p->flow->dp); + key.vlan_id[0] = p->vlan_id[0]; + key.vlan_id[1] = p->vlan_id[1]; key.ip_proto = IPV4_GET_IPPROTO(p); if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, &key, p->flow_hash, p->flow->todstpktcnt, p->flow->todstbytecnt, p->afp_v.nr_cpus) == 0) { @@ -2498,6 +2504,8 @@ static int AFPXDPBypassCallback(Packet *p) } key.port16[0] = htons(GET_TCP_SRC_PORT(p)); key.port16[1] = htons(GET_TCP_DST_PORT(p)); + key.vlan_id[0] = p->vlan_id[0]; + key.vlan_id[1] = p->vlan_id[1]; key.ip_proto = IPV6_GET_NH(p); if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, &key, p->flow_hash, p->flow->todstpktcnt, p->flow->todstbytecnt, p->afp_v.nr_cpus) == 0) {