Project

General

Profile

Bug #8242 ยป source-af-packet.c.patch

Patch that takes vlan.use-for-tracking into account - John Graat, 01/21/2026 01:05 PM

View differences:

source-af-packet.c 2026-01-21 08:48:06.340177352 +0100
keys[0]->dst = htonl(GET_IPV4_DST_ADDR_U32(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];
keys[0]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[0]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[0]->vlan2 = p->vlan_id[2] & g_vlan_mask;
if (p->proto == IPPROTO_TCP) {
keys[0]->ip_proto = 1;
......
keys[1]->dst = htonl(GET_IPV4_SRC_ADDR_U32(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];
keys[1]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[1]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[1]->vlan2 = p->vlan_id[2] & g_vlan_mask;
keys[1]->ip_proto = keys[0]->ip_proto;
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
......
}
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];
keys[0]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[0]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[0]->vlan2 = p->vlan_id[2] & g_vlan_mask;
if (p->proto == IPPROTO_TCP) {
keys[0]->ip_proto = 1;
......
}
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];
keys[1]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[1]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[1]->vlan2 = p->vlan_id[2] & g_vlan_mask;
keys[1]->ip_proto = keys[0]->ip_proto;
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
......
* (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]->vlan0 = p->vlan_id[0];
keys[0]->vlan1 = p->vlan_id[1];
keys[0]->vlan2 = p->vlan_id[2];
keys[0]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[0]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[0]->vlan2 = p->vlan_id[2] & g_vlan_mask;
if (p->proto == IPPROTO_TCP) {
keys[0]->ip_proto = 1;
} else {
......
keys[1]->dst = p->src.addr_data32[0];
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];
keys[1]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[1]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[1]->vlan2 = p->vlan_id[2] & g_vlan_mask;
keys[1]->ip_proto = keys[0]->ip_proto;
if (AFPInsertHalfFlow(p->afp_v.v4_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
......
}
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];
keys[0]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[0]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[0]->vlan2 = p->vlan_id[2] & g_vlan_mask;
if (p->proto == IPPROTO_TCP) {
keys[0]->ip_proto = 1;
} else {
......
}
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];
keys[1]->vlan0 = p->vlan_id[0] & g_vlan_mask;
keys[1]->vlan1 = p->vlan_id[1] & g_vlan_mask;
keys[1]->vlan2 = p->vlan_id[2] & g_vlan_mask;
keys[1]->ip_proto = keys[0]->ip_proto;
if (AFPInsertHalfFlow(p->afp_v.v6_map_fd, keys[1],
p->afp_v.nr_cpus) == 0) {
    (1-1/1)