MFF_LOG_REGS;
#undef MFF_LOG_REG
- /* Connection tracking state. */
+ /* Connection tracking state. See CS_* in lib/packets.h. */
expr_symtab_add_field(&symtab, "ct_state", MFF_CT_STATE, NULL, false);
- expr_symtab_add_predicate(&symtab, "ct.trk", "ct_state[7]");
+ expr_symtab_add_predicate(&symtab, "ct.trk", "ct_state[5]");
expr_symtab_add_subfield(&symtab, "ct.new", "ct.trk", "ct_state[0]");
expr_symtab_add_subfield(&symtab, "ct.est", "ct.trk", "ct_state[1]");
expr_symtab_add_subfield(&symtab, "ct.rel", "ct.trk", "ct_state[2]");
- expr_symtab_add_subfield(&symtab, "ct.inv", "ct.trk", "ct_state[5]");
- expr_symtab_add_subfield(&symtab, "ct.rpl", "ct.trk", "ct_state[6]");
+ expr_symtab_add_subfield(&symtab, "ct.rpl", "ct.trk", "ct_state[3]");
+ expr_symtab_add_subfield(&symtab, "ct.inv", "ct.trk", "ct_state[4]");
/* Data fields. */
expr_symtab_add_field(&symtab, "eth.src", MFF_ETH_SRC, NULL, false);
expr_symtab_add_field(&symtab, "eth.dst", MFF_ETH_DST, NULL, false);
expr_symtab_add_field(&symtab, "eth.type", MFF_ETH_TYPE, NULL, true);
+ expr_symtab_add_predicate(&symtab, "eth.bcast",
+ "eth.dst == ff:ff:ff:ff:ff:ff");
+ expr_symtab_add_subfield(&symtab, "eth.mcast", NULL, "eth.dst[40]");
expr_symtab_add_field(&symtab, "vlan.tci", MFF_VLAN_TCI, NULL, false);
expr_symtab_add_predicate(&symtab, "vlan.present", "vlan.tci[12]");
expr_symtab_add_field(&symtab, "ip4.src", MFF_IPV4_SRC, "ip4", false);
expr_symtab_add_field(&symtab, "ip4.dst", MFF_IPV4_DST, "ip4", false);
+ expr_symtab_add_predicate(&symtab, "ip4.mcast", "ip4.dst[28..31] == 0xe");
expr_symtab_add_predicate(&symtab, "icmp4", "ip4 && ip.proto == 1");
expr_symtab_add_field(&symtab, "icmp4.type", MFF_ICMPV4_TYPE, "icmp4",