|
|
|
|
@ -2403,10 +2403,14 @@ static int AFPBypassCallback(Packet *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]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
|
|
|
|
|
keys[0]->ip_proto = IPV4_GET_IPPROTO(p);
|
|
|
|
|
if (IPV4_GET_IPPROTO(p) == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
|
}
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[0],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2421,10 +2425,10 @@ static int AFPBypassCallback(Packet *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]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
|
|
|
|
|
keys[1]->ip_proto = IPV4_GET_IPPROTO(p);
|
|
|
|
|
keys[1]->ip_proto = keys[0]->ip_proto;
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2453,9 +2457,14 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[0]->port16[0] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[0]->port16[1] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[0]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[0]->ip_proto = IPV6_GET_NH(p);
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
|
|
|
|
|
if (IPV6_GET_NH(p) == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
|
}
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[0],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2472,9 +2481,10 @@ static int AFPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[1]->port16[0] = GET_TCP_DST_PORT(p);
|
|
|
|
|
keys[1]->port16[1] = GET_TCP_SRC_PORT(p);
|
|
|
|
|
keys[1]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[1]->ip_proto = IPV6_GET_NH(p);
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
|
|
|
|
|
keys[1]->ip_proto = keys[0]->ip_proto;
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2537,9 +2547,13 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
* (as in eBPF filter) so we need to pass from host to network order */
|
|
|
|
|
keys[0]->port16[0] = htons(p->sp);
|
|
|
|
|
keys[0]->port16[1] = htons(p->dp);
|
|
|
|
|
keys[0]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[0]->ip_proto = IPV4_GET_IPPROTO(p);
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
if (IPV4_GET_IPPROTO(p) == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
|
}
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[0],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2554,9 +2568,9 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
keys[1]->dst = p->src.addr_data32[0];
|
|
|
|
|
keys[1]->port16[0] = htons(p->dp);
|
|
|
|
|
keys[1]->port16[1] = htons(p->sp);
|
|
|
|
|
keys[1]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[1]->ip_proto = IPV4_GET_IPPROTO(p);
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[1]->ip_proto = keys[0]->ip_proto;
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2585,9 +2599,13 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[0]->port16[0] = htons(GET_TCP_SRC_PORT(p));
|
|
|
|
|
keys[0]->port16[1] = htons(GET_TCP_DST_PORT(p));
|
|
|
|
|
keys[0]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[0]->ip_proto = IPV6_GET_NH(p);
|
|
|
|
|
keys[0]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[0]->vlan1 = p->vlan_id[1];
|
|
|
|
|
if (IPV6_GET_NH(p) == IPPROTO_TCP) {
|
|
|
|
|
keys[0]->ip_proto = 1;
|
|
|
|
|
} else {
|
|
|
|
|
keys[0]->ip_proto = 0;
|
|
|
|
|
}
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[0],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
@ -2604,9 +2622,9 @@ static int AFPXDPBypassCallback(Packet *p)
|
|
|
|
|
}
|
|
|
|
|
keys[1]->port16[0] = htons(GET_TCP_DST_PORT(p));
|
|
|
|
|
keys[1]->port16[1] = htons(GET_TCP_SRC_PORT(p));
|
|
|
|
|
keys[1]->vlan_id[0] = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan_id[1] = p->vlan_id[1];
|
|
|
|
|
keys[1]->ip_proto = IPV6_GET_NH(p);
|
|
|
|
|
keys[1]->vlan0 = p->vlan_id[0];
|
|
|
|
|
keys[1]->vlan1 = p->vlan_id[1];
|
|
|
|
|
keys[1]->ip_proto = keys[0]->ip_proto;
|
|
|
|
|
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
|
|
|
|
|
p->afp_v.nr_cpus) == 0) {
|
|
|
|
|
SCFree(keys[0]);
|
|
|
|
|
|