|
|
|
@ -2210,13 +2210,13 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[0]->src = htonl(GET_IPV4_SRC_ADDR_U32(p));
|
|
|
|
|
keys[0]->dst = htonl(GET_IPV4_DST_ADDR_U32(p));
|
|
|
|
|
keys[0]->port16[0] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[0]->port16[1] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[0]->port16[0] = p->sp;
|
|
|
|
|
keys[0]->port16[1] = p->dp;
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[0]->vlan2 = p->vlan_id[2];
|
|
|
|
|
|
|
|
|
|
if (IPV4_GET_IPPROTO(p) == IPPROTO_TCP) {
|
|
|
|
|
if (p->proto == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
@ -2236,8 +2236,8 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[1]->src = htonl(GET_IPV4_DST_ADDR_U32(p));
|
|
|
|
|
keys[1]->dst = htonl(GET_IPV4_SRC_ADDR_U32(p));
|
|
|
|
|
keys[1]->port16[0] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[1]->port16[1] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[1]->port16[0] = p->dp;
|
|
|
|
|
keys[1]->port16[1] = p->sp;
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[1]->vlan2 = p->vlan_id[2];
|
|
|
|
@ -2255,7 +2255,7 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
return AFPSetFlowStorage(p, p->afp_v.v4_map_fd, keys[0], keys[1], AF_INET);
|
|
|
|
|
}
|
|
|
|
|
/* For IPv6 case we don't handle extended header in eBPF */
|
|
|
|
|
if (PacketIsIPv6(p) && ((IPV6_GET_NH(p) == IPPROTO_TCP) || (IPV6_GET_NH(p) == IPPROTO_UDP))) {
|
|
|
|
|
if (PacketIsIPv6(p) && ((p->proto == IPPROTO_TCP) || (p->proto == IPPROTO_UDP))) {
|
|
|
|
|
int i;
|
|
|
|
|
if (p->afp_v.v6_map_fd == -1) {
|
|
|
|
|
return 0;
|
|
|
|
@ -2271,13 +2271,13 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
keys[0]->src[i] = ntohl(GET_IPV6_SRC_ADDR(p)[i]);
|
|
|
|
|
keys[0]->dst[i] = ntohl(GET_IPV6_DST_ADDR(p)[i]);
|
|
|
|
|
}
|
|
|
|
|
keys[0]->port16[0] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[0]->port16[1] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[0]->port16[0] = p->sp;
|
|
|
|
|
keys[0]->port16[1] = p->dp;
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[0]->vlan2 = p->vlan_id[2];
|
|
|
|
|
|
|
|
|
|
if (IPV6_GET_NH(p) == IPPROTO_TCP) {
|
|
|
|
|
if (p->proto == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
@ -2299,8 +2299,8 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
keys[1]->src[i] = ntohl(GET_IPV6_DST_ADDR(p)[i]);
|
|
|
|
|
keys[1]->dst[i] = ntohl(GET_IPV6_SRC_ADDR(p)[i]);
|
|
|
|
|
}
|
|
|
|
|
keys[1]->port16[0] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[1]->port16[1] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[1]->port16[0] = p->dp;
|
|
|
|
|
keys[1]->port16[1] = p->sp;
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[1]->vlan2 = p->vlan_id[2];
|
|
|
|
@ -2372,7 +2372,7 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[0]->vlan2 = p->vlan_id[2];
|
|
|
|
|
if (IPV4_GET_IPPROTO(p) == IPPROTO_TCP) {
|
|
|
|
|
if (p->proto == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
@ -2409,7 +2409,7 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
return AFPSetFlowStorage(p, p->afp_v.v4_map_fd, keys[0], keys[1], AF_INET);
|
|
|
|
|
}
|
|
|
|
|
/* For IPv6 case we don't handle extended header in eBPF */
|
|
|
|
|
if (PacketIsIPv6(p) && ((IPV6_GET_NH(p) == IPPROTO_TCP) || (IPV6_GET_NH(p) == IPPROTO_UDP))) {
|
|
|
|
|
if (PacketIsIPv6(p) && ((p->proto == IPPROTO_TCP) || (p->proto == IPPROTO_UDP))) {
|
|
|
|
|
SCLogDebug("add an IPv6");
|
|
|
|
|
if (p->afp_v.v6_map_fd == -1) {
|
|
|
|
|
return 0;
|
|
|
|
@ -2425,12 +2425,12 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
keys[0]->src[i] = GET_IPV6_SRC_ADDR(p)[i];
|
|
|
|
|
keys[0]->dst[i] = GET_IPV6_DST_ADDR(p)[i];
|
|
|
|
|
}
|
|
|
|
|
keys[0]->port16[0] = htons(GET_TCP_SRC_PORT(p));
|
|
|
|
|
keys[0]->port16[1] = htons(GET_TCP_DST_PORT(p));
|
|
|
|
|
keys[0]->port16[0] = htons(p->sp);
|
|
|
|
|
keys[0]->port16[1] = htons(p->dp);
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[0]->vlan2 = p->vlan_id[2];
|
|
|
|
|
if (IPV6_GET_NH(p) == IPPROTO_TCP) {
|
|
|
|
|
if (p->proto == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
@ -2452,8 +2452,8 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
keys[1]->src[i] = GET_IPV6_DST_ADDR(p)[i];
|
|
|
|
|
keys[1]->dst[i] = GET_IPV6_SRC_ADDR(p)[i];
|
|
|
|
|
}
|
|
|
|
|
keys[1]->port16[0] = htons(GET_TCP_DST_PORT(p));
|
|
|
|
|
keys[1]->port16[1] = htons(GET_TCP_SRC_PORT(p));
|
|
|
|
|
keys[1]->port16[0] = htons(p->dp);
|
|
|
|
|
keys[1]->port16[1] = htons(p->sp);
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[1]->vlan2 = p->vlan_id[2];
|
|
|
|
|