vlog.c:ovs_list_insert:
  164|    182|{
  165|    182|    elem->prev = before->prev;
  166|    182|    elem->next = before;
  167|    182|    before->prev->next = elem;
  168|    182|    before->prev = elem;
  169|    182|}

flow.c:nsh_get_ver:
  286|     74|{
  287|     74|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_VER_MASK) >> NSH_VER_SHIFT;
  ------------------
  |  |  226|     74|#define NSH_VER_MASK       0xc000
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_VER_MASK) >> NSH_VER_SHIFT;
  ------------------
  |  |  227|     74|#define NSH_VER_SHIFT      14
  ------------------
  288|     74|}
flow.c:nsh_get_flags:
  292|     74|{
  293|     74|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_FLAGS_MASK) >> NSH_FLAGS_SHIFT;
  ------------------
  |  |  228|     74|#define NSH_FLAGS_MASK     0x3000
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_FLAGS_MASK) >> NSH_FLAGS_SHIFT;
  ------------------
  |  |  229|     74|#define NSH_FLAGS_SHIFT    12
  ------------------
  294|     74|}
flow.c:nsh_hdr_len:
  273|     74|{
  274|     74|    return ((ntohs(nsh->ver_flags_ttl_len) & NSH_LEN_MASK)
  ------------------
  |  |  232|     74|#define NSH_LEN_MASK       0x003f
  ------------------
  275|     74|            >> NSH_LEN_SHIFT) << 2;
  ------------------
  |  |  233|     74|#define NSH_LEN_SHIFT      0
  ------------------
  276|     74|}
flow.c:nsh_get_ttl:
  304|     74|{
  305|     74|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_TTL_MASK) >> NSH_TTL_SHIFT;
  ------------------
  |  |  230|     74|#define NSH_TTL_MASK       0x0fc0
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_TTL_MASK) >> NSH_TTL_SHIFT;
  ------------------
  |  |  231|     74|#define NSH_TTL_SHIFT      6
  ------------------
  306|     74|}
flow.c:nsh_get_path_hdr:
  326|     46|{
  327|     46|    return nsh_16aligned_be32(&nsh->path_hdr);
  328|     46|}
flow.c:nsh_16aligned_be32:
  311|     46|{
  312|       |#ifdef WORDS_BIGENDIAN
  313|       |    return ((ovs_be32) x->hi << 16) | (ovs_be32) x->lo;
  314|       |#else
  315|     46|    return ((ovs_be32) x->lo << 16) | (ovs_be32) x->hi;
  316|     46|#endif
  317|     46|}

flow.c:init_this_module_flow:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netdev.c:init_this_module_netdev:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-port.c:init_this_module_ofp_port:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-protocol.c:init_this_module_ofp_protocol:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-queue.c:init_this_module_ofp_queue:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-table.c:init_this_module_ofp_table:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-util.c:init_this_module_ofp_util:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovs-rcu.c:init_this_module_ovs_rcu:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovs-router.c:init_this_module_ovs_router:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovs-thread.c:init_this_module_ovs_thread:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
poll-loop.c:init_this_module_poll_loop:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
socket-util.c:init_this_module_socket_util:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
timeval.c:init_this_module_timeval:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
unixctl.c:init_this_module_unixctl:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
userspace-tso.c:init_this_module_userspace_tso:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
util.c:init_this_module_util:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
uuid.c:init_this_module_uuid:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
vlog.c:init_this_module_vlog:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
socket-util-unix.c:init_this_module_socket_util_unix:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netdev-linux.c:init_this_module_netdev_linux:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netlink-socket.c:init_this_module_netlink_socket:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
route-table.c:init_this_module_route_table:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
tc.c:init_this_module_tc:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
backtrace.c:init_this_module_backtrace:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
command-line.c:init_this_module_command_line:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
coverage.c:init_this_module_coverage:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dp-packet-gso.c:init_this_module_dp_packet_gso:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-offload.c:init_this_module_dpif_offload:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-offload-dummy.c:init_this_module_dpif_offload_dummy:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif.c:init_this_module_dpif:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
entropy.c:init_this_module_entropy:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
fatal-signal.c:init_this_module_fatal_signal:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
hmap.c:init_this_module_hmap:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
jsonrpc.c:init_this_module_jsonrpc:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
meta-flow.c:init_this_module_meta_flow:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netdev-dummy.c:init_this_module_netdev_dummy:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netdev-vport.c:init_this_module_netdev_vport:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netlink.c:init_this_module_netlink:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
nx-match.c:init_this_module_nx_match:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
odp-execute.c:init_this_module_odp_execute:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
odp-util.c:init_this_module_odp_util:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-actions.c:init_this_module_ofp_actions:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-bundle.c:init_this_module_ofp_bundle:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-connection.c:init_this_module_ofp_connection:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-ct.c:init_this_module_ofp_ct:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-errors.c:init_this_module_ofp_errors:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-flow.c:init_this_module_ofp_flow:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-group.c:init_this_module_ofp_group:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-match.c:init_this_module_ofp_match:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-meter.c:init_this_module_ofp_meter:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-monitor.c:init_this_module_ofp_monitor:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-msgs.c:init_this_module_ofp_msgs:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ofp-packet.c:init_this_module_ofp_packet:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovs-replay.c:init_this_module_ovs_replay:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ox-stat.c:init_this_module_ox_stat:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
pcap-file.c:init_this_module_pcap:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
reconnect.c:init_this_module_reconnect:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
sha1.c:init_this_module_sha1:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream.c:init_this_module_stream:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
svec.c:init_this_module_svec:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netdev-native-tnl.c:init_this_module_native_tnl:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
daemon-unix.c:init_this_module_daemon_unix:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
signals.c:init_this_module_signals:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream-unix.c:init_this_module_stream_unix:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-netlink.c:init_this_module_dpif_netlink:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-netlink-rtnl.c:init_this_module_dpif_netlink_rtnl:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-offload-tc.c:init_this_module_dpif_offload_tc:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-offload-tc-netdev.c:init_this_module_dpif_offload_tc_netdev:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netlink-conntrack.c:init_this_module_netlink_conntrack:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
netlink-notifier.c:init_this_module_netlink_notifier:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream-ssl.c:init_this_module_stream_ssl:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
bundle.c:init_this_module_bundle:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
conntrack.c:init_this_module_conntrack:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
cooperative-multitasking.c:init_this_module_cooperative_multitasking:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ct-dpif.c:init_this_module_ct_dpif:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
daemon.c:init_this_module_daemon:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-netdev.c:init_this_module_dpif_netdev:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ipf.c:init_this_module_ipf:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
lockfile.c:init_this_module_lockfile:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovs-numa.c:init_this_module_ovs_numa:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
process.c:init_this_module_process:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream-fd.c:init_this_module_stream_fd:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream-replay.c:init_this_module_stream_replay:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
stream-tcp.c:init_this_module_stream_tcp:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpdk-stub.c:init_this_module_dpdk:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
conntrack-tp.c:init_this_module_conntrack_tp:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-netdev-dpcls.c:init_this_module_dpif_netdev_dpcls:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
dpif-netdev-perf.c:init_this_module_pmd_perf:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovsdb-error.c:init_this_module_ovsdb_error:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovsdb-idl.c:init_this_module_ovsdb_idl:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \
ovsdb-cs.c:init_this_module_ovsdb_cs:
  191|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  192|      2|            vlog_insert_module(&this_module.list);                      \
  193|      2|        }                                                               \

flow.c:bytes_to_be32:
  110|  1.24k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  1.24k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  1.24k|#endif
  116|  1.24k|    return (OVS_FORCE ovs_be32) x;
  117|  1.24k|}

miniflow_target.c:miniflow_hash_in_minimask:
  245|  2.01k|{
  246|  2.01k|    const uint64_t *mask_values = miniflow_get_values(&mask->masks);
  247|  2.01k|    const uint64_t *p = mask_values;
  248|  2.01k|    uint32_t hash = basis;
  249|  2.01k|    uint64_t value;
  250|       |
  251|  31.9k|    MINIFLOW_FOR_EACH_IN_FLOWMAP(value, flow, mask->masks.map) {
  ------------------
  |  |  663|  2.01k|    for (struct mf_for_each_in_map_aux aux__ =                      \
  |  |  664|  2.01k|        { 0, (FLOW)->map, (FLOWMAP), miniflow_get_values(FLOW) };   \
  |  |  665|  33.9k|         mf_get_next_in_map(&aux__, &(VALUE));)
  |  |  ------------------
  |  |  |  Branch (665:10): [True: 31.9k, False: 2.01k]
  |  |  ------------------
  ------------------
  252|  31.9k|        hash = hash_add64(hash, value & *p++);
  253|  31.9k|    }
  254|       |
  255|  2.01k|    return hash_finish(hash, (p - mask_values) * 8);
  256|  2.01k|}
miniflow_target.c:flow_hash_in_minimask:
  218|  2.01k|{
  219|  2.01k|    const uint64_t *mask_values = miniflow_get_values(&mask->masks);
  220|  2.01k|    const uint64_t *flow_u64 = (const uint64_t *)flow;
  221|  2.01k|    const uint64_t *p = mask_values;
  222|  2.01k|    uint32_t hash = basis;
  223|  2.01k|    map_t map;
  224|       |
  225|  4.03k|    FLOWMAP_FOR_EACH_MAP (map, mask->masks.map) {
  ------------------
  |  |  324|  2.01k|    for (size_t unit__ = 0;                                       \
  |  |  325|  6.04k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  6.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  12.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 4.03k, False: 2.01k]
  |  |  |  Branch (325:36): [True: 4.03k, False: 0]
  |  |  ------------------
  |  |  326|  4.03k|         unit__++)
  ------------------
  226|  4.03k|        size_t idx;
  227|       |
  228|  31.9k|        MAP_FOR_EACH_INDEX (idx, map) {
  ------------------
  |  |  278|  4.03k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|  4.03k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|  35.9k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 31.9k, False: 4.03k]
  |  |  |  |  |  Branch (286:19): [True: 31.9k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|  31.9k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  229|  31.9k|            hash = hash_add64(hash, flow_u64[idx] & *p++);
  230|  31.9k|        }
  231|  4.03k|        flow_u64 += MAP_T_BITS;
  ------------------
  |  |  270|  4.03k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  232|  4.03k|    }
  233|       |
  234|  2.01k|    return hash_finish(hash, (p - mask_values) * 8);
  235|  2.01k|}
miniflow_target.c:minimask_hash:
  319|  2.01k|{
  320|  2.01k|    const uint64_t *p = miniflow_get_values(&mask->masks);
  321|  2.01k|    size_t n_values = miniflow_n_values(&mask->masks);
  322|  2.01k|    uint32_t hash = basis;
  323|       |
  324|  33.9k|    for (size_t i = 0; i < n_values; i++) {
  ------------------
  |  Branch (324:24): [True: 31.9k, False: 2.01k]
  ------------------
  325|  31.9k|        hash = hash_add64(hash, *p++);
  326|  31.9k|    }
  327|       |
  328|  2.01k|    map_t map;
  329|  4.03k|    FLOWMAP_FOR_EACH_MAP (map, mask->masks.map) {
  ------------------
  |  |  324|  2.01k|    for (size_t unit__ = 0;                                       \
  |  |  325|  6.04k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  6.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  12.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 4.03k, False: 2.01k]
  |  |  |  Branch (325:36): [True: 4.03k, False: 0]
  |  |  ------------------
  |  |  326|  4.03k|         unit__++)
  ------------------
  330|  4.03k|        hash = hash_add64(hash, map);
  331|  4.03k|    }
  332|       |
  333|  2.01k|    return hash_finish(hash, n_values);
  334|  2.01k|}

coverage_counter_register:
   53|    264|{
   54|    264|    if (n_coverage_counters >= allocated_coverage_counters) {
  ------------------
  |  Branch (54:9): [True: 18, False: 246]
  ------------------
   55|     18|        coverage_counters = x2nrealloc(coverage_counters,
   56|     18|                                       &allocated_coverage_counters,
   57|     18|                                       sizeof(struct coverage_counter*));
   58|     18|    }
   59|    264|    coverage_counters[n_coverage_counters++] = counter;
   60|    264|}

dp-packet.c:dp_packet_batch_grow_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:flow_extract_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:miniflow_extract_ipv4_pkt_len_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:miniflow_extract_ipv4_pkt_too_short_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:miniflow_extract_ipv6_pkt_len_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:miniflow_extract_ipv6_pkt_too_short_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:miniflow_malloc_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
flow.c:flow_extract_add:
   72|  2.01k|        {                                                               \
   73|  2.01k|            *counter_##COUNTER##_get() += n;                            \
   74|  2.01k|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_too_short_add:
   72|     12|        {                                                               \
   73|     12|            *counter_##COUNTER##_get() += n;                            \
   74|     12|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_len_error_add:
   72|     60|        {                                                               \
   73|     60|            *counter_##COUNTER##_get() += n;                            \
   74|     60|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_too_short_add:
   72|      8|        {                                                               \
   73|      8|            *counter_##COUNTER##_get() += n;                            \
   74|      8|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_len_error_add:
   72|     35|        {                                                               \
   73|     35|            *counter_##COUNTER##_get() += n;                            \
   74|     35|        }                                                               \
flow.c:miniflow_malloc_add:
   72|  20.1k|        {                                                               \
   73|  20.1k|            *counter_##COUNTER##_get() += n;                            \
   74|  20.1k|        }                                                               \
netdev.c:netdev_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_sent_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_add_router_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_get_stats_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_push_header_drops_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_create_node_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_zero_timeout_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
seq.c:seq_change_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
timeval.c:long_poll_interval_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
unixctl.c:unixctl_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
unixctl.c:unixctl_replied_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
util.c:util_xalloc_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
util.c:util_xalloc_add:
   72|  20.1k|        {                                                               \
   73|  20.1k|            *counter_##COUNTER##_get() += n;                            \
   74|  20.1k|        }                                                               \
netdev-linux.c:netdev_set_policing_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_arp_lookup_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_ifindex_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_hwaddr_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_set_hwaddr_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_get_ethtool_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_set_ethtool_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_linux_invalid_l4_csum_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-linux.c:netdev_linux_unknown_l4_csum_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_overflow_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_recv_jumbo_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-socket.c:netlink_sent_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
route-table.c:route_table_dump_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
tc.c:tc_netlink_malformed_reply_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ccmap.c:ccmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ccmap.c:ccmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
cmap.c:cmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
cmap.c:cmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dp-packet-gso.c:dp_packet_gso_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dp-packet-gso.c:dp_packet_partial_gso_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_destroy_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_execute_with_help_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_del_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_flush_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_get_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_get_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_put_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_flow_put_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_get_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_meter_set_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_port_add_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_port_del_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif.c:dpif_purge_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_pathological_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hmap.c:hmap_reserve_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
jsonrpc.c:jsonrpc_recv_incomplete_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:datapath_drop_sample_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:datapath_drop_nsh_decap_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_of_pipeline_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_bridge_not_found_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_recursion_too_deep_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_too_many_resubmit_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_stack_too_deep_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_no_recirculation_context_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_recirculation_conflict_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_too_many_mpls_labels_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_invalid_tunnel_metadata_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_unsupported_packet_type_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_congestion_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_forwarding_disabled_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_tunnel_routing_failed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_tunnel_output_no_ethernet_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_tunnel_neigh_cache_miss_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
odp-execute.c:drop_action_tunnel_header_build_failed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
stream.c:pstream_open_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
stream.c:stream_open_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-native-tnl.c:native_tnl_l3csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-native-tnl.c:native_tnl_l3csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-native-tnl.c:native_tnl_l4csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev-native-tnl.c:native_tnl_l4csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netlink-notifier.c:nln_changed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_full_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_l3csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_l3csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_l4csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_l4csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_lookup_natted_miss_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack.c:conntrack_zone_full_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_meter_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_upcall_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_lock_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_userspace_action_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_tunnel_push_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_tunnel_pop_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_recirc_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_invalid_port_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_invalid_bond_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_invalid_tnl_port_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_rx_invalid_packet_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_hw_post_process_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:datapath_drop_hw_post_process_consumed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:dpif_netdev_output_grow_queues_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
dpif-netdev.c:dpif_netdev_recirc_big_batch_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_pathological_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_expand_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_shrink_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
hindex.c:hindex_reserve_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_stuck_frag_list_expired_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_stuck_frag_list_purged_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_l3csum_checked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ipf.c:ipf_l3csum_err_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_lock_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
lockfile.c:lockfile_unlock_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
process.c:process_start_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_tcp_seq_chk_bypass_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_tcp_seq_chk_failed_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
conntrack-tcp.c:conntrack_invalid_tcp_flags_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_uncommitted_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_unchanged_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_incomplete_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_aborted_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_success_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_try_again_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_not_locked_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
ovsdb-idl.c:txn_error_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }

dp_packet_use_const:
  113|  2.01k|{
  114|  2.01k|    dp_packet_use__(b, CONST_CAST(void *, data), size, DPBUF_STACK);
  ------------------
  |  |   85|  2.01k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.01k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.01k|     (TYPE) (POINTER))
  ------------------
  115|  2.01k|    dp_packet_set_size(b, size);
  116|  2.01k|}
dp-packet.c:dp_packet_use__:
   50|  2.01k|{
   51|  2.01k|    dp_packet_set_base(b, base);
   52|  2.01k|    dp_packet_set_data(b, base);
   53|  2.01k|    dp_packet_set_size(b, 0);
   54|       |
   55|  2.01k|    dp_packet_init__(b, allocated, source);
   56|  2.01k|}
dp-packet.c:dp_packet_init__:
   33|  2.01k|{
   34|  2.01k|    dp_packet_set_allocated(b, allocated);
   35|  2.01k|    b->source = source;
   36|  2.01k|    dp_packet_reset_offsets(b);
   37|  2.01k|    pkt_metadata_init(&b->md, 0);
   38|  2.01k|    dp_packet_reset_cutlen(b);
   39|  2.01k|    dp_packet_reset_offload(b);
   40|  2.01k|    dp_packet_set_tso_segsz(b, 0);
   41|       |    /* Initialize implementation-specific fields of dp_packet. */
   42|  2.01k|    dp_packet_init_specific(b);
   43|       |    /* By default assume the packet type to be Ethernet. */
   44|       |    b->packet_type = htonl(PT_ETH);
   45|  2.01k|}

dp-packet.c:dp_packet_reset_offsets:
  424|  2.01k|{
  425|  2.01k|    dp_packet_reset_outer_offsets(b);
  426|  2.01k|    b->inner_l3_ofs = UINT16_MAX;
  427|       |    b->inner_l4_ofs = UINT16_MAX;
  428|  2.01k|}
dp-packet.c:dp_packet_reset_outer_offsets:
  413|  2.01k|{
  414|  2.01k|    b->l2_pad_size = 0;
  415|  2.01k|    b->l2_5_ofs = UINT16_MAX;
  416|  2.01k|    b->l3_ofs = UINT16_MAX;
  417|       |    b->l4_ofs = UINT16_MAX;
  418|  2.01k|}
dp-packet.c:dp_packet_reset_cutlen:
  811|  2.01k|{
  812|  2.01k|    b->cutlen = 0;
  813|  2.01k|}
dp-packet.c:dp_packet_reset_offload:
 1069|  2.01k|{
 1070|       |    p->has_hash = p->has_mark = false;
 1071|  2.01k|    p->offloads = 0;
 1072|  2.01k|}
dp-packet.c:dp_packet_init_specific:
  744|  2.01k|{
  745|       |    /* There are no implementation-specific fields for initialization. */
  746|  2.01k|}
dp-packet.c:dp_packet_set_size:
  768|  4.03k|{
  769|  4.03k|    b->size_ = v;
  770|  4.03k|}
dp-packet.c:dp_packet_base:
  750|  2.01k|{
  751|  2.01k|    return b->base_;
  752|  2.01k|}
dp-packet.c:dp_packet_set_tso_segsz:
  804|  2.01k|{
  805|  2.01k|    p->tso_segsz = s;
  806|  2.01k|}
dp-packet.c:dp_packet_set_allocated:
  792|  2.01k|{
  793|  2.01k|    b->allocated_ = s;
  794|  2.01k|}
dp-packet.c:dp_packet_set_base:
  756|  2.01k|{
  757|  2.01k|    b->base_ = d;
  758|  2.01k|}
dp-packet.c:dp_packet_set_data:
  852|  2.01k|{
  853|  2.01k|    if (data) {
  ------------------
  |  Branch (853:9): [True: 2.01k, False: 0]
  ------------------
  854|  2.01k|        __packet_set_data(b, (char *) data - (char *) dp_packet_base(b));
  855|  2.01k|    } else {
  856|       |        __packet_set_data(b, UINT16_MAX);
  857|      0|    }
  858|  2.01k|}
dp-packet.c:__packet_set_data:
  780|  2.01k|{
  781|  2.01k|    b->data_ofs = v;
  782|  2.01k|}
flow.c:dp_packet_data:
  845|  2.62k|{
  846|  2.62k|    return __packet_data(b) != UINT16_MAX
  ------------------
  |  Branch (846:12): [True: 2.62k, False: 0]
  ------------------
  847|  2.62k|           ? (char *) dp_packet_base(b) + __packet_data(b) : NULL;
  848|  2.62k|}
flow.c:__packet_data:
  774|  5.24k|{
  775|  5.24k|    return b->data_ofs;
  776|  5.24k|}
flow.c:dp_packet_base:
  750|  2.62k|{
  751|  2.62k|    return b->base_;
  752|  2.62k|}
flow.c:dp_packet_size:
  762|  3.40k|{
  763|  3.40k|    return b->size_;
  764|  3.40k|}
flow.c:dp_packet_tunnel:
 1135|  2.01k|{
 1136|  2.01k|    return !!(b->offloads & DP_PACKET_OL_TUNNEL_MASK);
  ------------------
  |  |  102|  2.01k|#define DP_PACKET_OL_TUNNEL_MASK (DP_PACKET_OL_TUNNEL_GENEVE \
  |  |  103|  2.01k|                                  | DP_PACKET_OL_TUNNEL_VXLAN)
  ------------------
 1137|  2.01k|}
flow.c:dp_packet_reset_outer_offsets:
  413|  2.01k|{
  414|  2.01k|    b->l2_pad_size = 0;
  415|  2.01k|    b->l2_5_ofs = UINT16_MAX;
  416|  2.01k|    b->l3_ofs = UINT16_MAX;
  417|       |    b->l4_ofs = UINT16_MAX;
  418|  2.01k|}
flow.c:dp_packet_reset_offsets:
  424|  2.01k|{
  425|  2.01k|    dp_packet_reset_outer_offsets(b);
  426|  2.01k|    b->inner_l3_ofs = UINT16_MAX;
  427|       |    b->inner_l4_ofs = UINT16_MAX;
  428|  2.01k|}
flow.c:dp_packet_set_l2_pad_size:
  438|  1.38k|{
  439|  1.38k|    ovs_assert(pad_size <= dp_packet_size(b));
  ------------------
  |  |   62|  1.38k|#define ovs_assert ovs_ignore
  ------------------
  440|  1.38k|    b->l2_pad_size = pad_size;
  441|  1.38k|}
flow.c:dp_packet_update_rss_hash_ipv4_tcp_udp:
 1473|    229|{
 1474|    229|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1474:9): [True: 0, False: 229]
  ------------------
 1475|      0|        return;
 1476|      0|    }
 1477|       |
 1478|    229|    const uint8_t *pkt = dp_packet_data(packet);
 1479|    229|    const void *l4_ports = &pkt[packet->l4_ofs];
 1480|    229|    const uint16_t l3_ofs = packet->l3_ofs;
 1481|    229|    uint32_t hash = 0;
 1482|    229|    uint32_t ports;
 1483|       |
 1484|       |    /* IPv4 Src, Dst and proto. */
 1485|    229|    hash = dp_packet_calc_hash_ipv4(pkt, l3_ofs, hash);
 1486|       |
 1487|       |    /* L4 ports. */
 1488|    229|    memcpy(&ports,  l4_ports, sizeof ports);
 1489|    229|    hash = hash_add(hash, ports);
 1490|       |
 1491|    229|    hash = hash_finish(hash, 42);
 1492|    229|    dp_packet_set_rss_hash(packet, hash);
 1493|    229|}
flow.c:dp_packet_rss_valid:
 1063|    607|{
 1064|    607|    return p->has_hash;
 1065|    607|}
flow.c:dp_packet_calc_hash_ipv4:
 1435|    229|{
 1436|    229|    const void *ipv4_src = &pkt[l3_ofs + offsetof(struct ip_header, ip_src)];
 1437|    229|    const void *ipv4_dst = &pkt[l3_ofs + offsetof(struct ip_header, ip_dst)];
 1438|    229|    uint32_t ip_src, ip_dst;
 1439|       |
 1440|    229|    memcpy(&ip_src, ipv4_src, sizeof ip_src);
 1441|    229|    memcpy(&ip_dst, ipv4_dst, sizeof ip_dst);
 1442|       |
 1443|       |    /* IPv4 Src and Dst. */
 1444|    229|    hash = hash_add(hash, ip_src);
 1445|    229|    hash = hash_add(hash, ip_dst);
 1446|       |
 1447|       |    /* IPv4 proto. */
 1448|    229|    hash = hash_add(hash, pkt[l3_ofs + offsetof(struct ip_header, ip_proto)]);
 1449|       |
 1450|    229|    return hash;
 1451|    229|}
flow.c:dp_packet_set_rss_hash:
 1056|    607|{
 1057|    607|    *dp_packet_rss_ptr(p) = hash;
 1058|       |    p->has_hash = true;
 1059|    607|}
flow.c:dp_packet_rss_ptr:
  645|    607|{
  646|    607|    return CONST_CAST(uint32_t *, &b->rss_hash);
  ------------------
  |  |   85|    607|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    607|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    607|     (TYPE) (POINTER))
  ------------------
  647|    607|}
flow.c:dp_packet_update_rss_hash_ipv6_tcp_udp:
 1497|    378|{
 1498|    378|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1498:9): [True: 0, False: 378]
  ------------------
 1499|      0|        return;
 1500|      0|    }
 1501|       |
 1502|    378|    const uint8_t *pkt = dp_packet_data(packet);
 1503|    378|    const uint16_t l3_ofs = packet->l3_ofs;
 1504|    378|    uint32_t ipv6_src_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_src);
 1505|    378|    uint32_t ipv6_dst_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_dst);
 1506|    378|    uint32_t ipv6_proto_off = offsetof(struct ovs_16aligned_ip6_hdr,
 1507|    378|                                       ip6_ctlun.ip6_un1.ip6_un1_nxt);
 1508|    378|    const void *ipv6_src_l = &pkt[l3_ofs + ipv6_src_off];
 1509|    378|    const void *ipv6_src_h = &pkt[l3_ofs + ipv6_src_off + 8];
 1510|    378|    const void *ipv6_dst_l = &pkt[l3_ofs + ipv6_dst_off];
 1511|    378|    const void *ipv6_dst_h = &pkt[l3_ofs + ipv6_dst_off + 8];
 1512|    378|    const void *l4_ports = &pkt[packet->l4_ofs];
 1513|    378|    uint64_t ipv6_src_lo, ipv6_src_hi;
 1514|    378|    uint64_t ipv6_dst_lo, ipv6_dst_hi;
 1515|    378|    uint32_t ports;
 1516|    378|    uint32_t hash = 0;
 1517|       |
 1518|    378|    memcpy(&ipv6_src_lo, ipv6_src_l, sizeof ipv6_src_lo);
 1519|    378|    memcpy(&ipv6_src_hi, ipv6_src_h, sizeof ipv6_src_hi);
 1520|    378|    memcpy(&ipv6_dst_lo, ipv6_dst_l, sizeof ipv6_dst_lo);
 1521|    378|    memcpy(&ipv6_dst_hi, ipv6_dst_h, sizeof ipv6_dst_hi);
 1522|    378|    memcpy(&ports, l4_ports, sizeof ports);
 1523|       |
 1524|       |    /* IPv6 Src and Dst. */
 1525|    378|    hash = hash_add64(hash, ipv6_src_lo);
 1526|    378|    hash = hash_add64(hash, ipv6_src_hi);
 1527|    378|    hash = hash_add64(hash, ipv6_dst_lo);
 1528|    378|    hash = hash_add64(hash, ipv6_dst_hi);
 1529|       |    /* IPv6 proto. */
 1530|    378|    hash = hash_add(hash, pkt[l3_ofs + ipv6_proto_off]);
 1531|       |    /* L4 ports. */
 1532|    378|    hash = hash_add(hash, ports);
 1533|    378|    hash = hash_finish(hash, 42);
 1534|       |
 1535|    378|    dp_packet_set_rss_hash(packet, hash);
 1536|    378|}
flow.c:dp_packet_l4_proto_set_tcp:
 1266|    418|{
 1267|    418|    b->offloads &= ~DP_PACKET_OL_L4_PROTO_UDP;
 1268|    418|    b->offloads |= DP_PACKET_OL_L4_PROTO_TCP;
 1269|    418|}
flow.c:dp_packet_l4_proto_set_udp:
 1280|    189|{
 1281|    189|    b->offloads &= ~DP_PACKET_OL_L4_PROTO_TCP;
 1282|    189|    b->offloads |= DP_PACKET_OL_L4_PROTO_UDP;
 1283|    189|}
flow.c:dp_packet_l4_proto_set_sctp:
 1294|     18|{
 1295|     18|    b->offloads |= DP_PACKET_OL_L4_PROTO_MASK;
  ------------------
  |  |  105|     18|#define DP_PACKET_OL_L4_PROTO_MASK (DP_PACKET_OL_L4_PROTO_TCP \
  |  |  106|     18|                                    | DP_PACKET_OL_L4_PROTO_UDP)
  ------------------
 1296|     18|}

get_entropy:
   35|      1|{
   36|      1|    size_t bytes_read;
   37|      1|    int error;
   38|      1|    int fd;
   39|       |
   40|      1|    fd = open(urandom, O_RDONLY);
   41|      1|    if (fd < 0) {
  ------------------
  |  Branch (41:9): [True: 0, False: 1]
  ------------------
   42|      0|        VLOG_ERR("%s: open failed (%s)", urandom, ovs_strerror(errno));
  ------------------
  |  |  208|      0|#define VLOG_ERR(...) VLOG(VLL_ERR, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   43|      0|        return errno ? errno : EINVAL;
  ------------------
  |  Branch (43:16): [True: 0, False: 0]
  ------------------
   44|      0|    }
   45|       |
   46|      1|    error = read_fully(fd, buffer, n, &bytes_read);
   47|      1|    close(fd);
   48|       |
   49|      1|    if (error) {
  ------------------
  |  Branch (49:9): [True: 0, False: 1]
  ------------------
   50|      0|        VLOG_ERR("%s: read error (%s)", urandom, ovs_retval_to_string(error));
  ------------------
  |  |  208|      0|#define VLOG_ERR(...) VLOG(VLL_ERR, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   51|      0|    }
   52|      1|    return error;
   53|      1|}
get_entropy_or_die:
   59|      1|{
   60|      1|    int error = get_entropy(buffer, n);
   61|      1|    if (error) {
  ------------------
  |  Branch (61:9): [True: 0, False: 1]
  ------------------
   62|      0|        VLOG_FATAL("%s: read error (%s)",
  ------------------
  |  |  205|      0|#define VLOG_FATAL(...) vlog_fatal(&this_module, __VA_ARGS__)
  ------------------
   63|      0|                   urandom, ovs_retval_to_string(error));
   64|      0|    }
   65|      1|}

parse_ipv6_ext_hdrs:
  605|    713|{
  606|    713|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|    713|                                 frag_hdr, rt_hdr);
  608|    713|}
parse_nsh:
  612|     80|{
  613|     80|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  614|     80|    uint8_t version, length, flags, ttl;
  615|       |
  616|       |    /* Check if it is long enough for NSH header, doesn't support
  617|       |     * MD type 2 yet
  618|       |     */
  619|     80|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   66|     80|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 6, False: 74]
  |  |  ------------------
  ------------------
  620|      6|        return false;
  621|      6|    }
  622|       |
  623|     74|    version = nsh_get_ver(nsh);
  624|     74|    flags = nsh_get_flags(nsh);
  625|     74|    length = nsh_hdr_len(nsh);
  626|     74|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|     74|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|    141|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 28, False: 46]
  |  |  |  Branch (66:53): [True: 7, False: 67]
  |  |  |  Branch (66:53): [True: 21, False: 46]
  |  |  ------------------
  ------------------
  629|     28|        return false;
  630|     28|    }
  631|       |
  632|     46|    key->flags = flags;
  633|     46|    key->ttl = ttl;
  634|     46|    key->mdtype = nsh->md_type;
  635|     46|    key->np = nsh->next_proto;
  636|     46|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|     46|    switch (key->mdtype) {
  639|     16|        case NSH_M_TYPE1:
  ------------------
  |  |  251|     16|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 16, False: 30]
  ------------------
  640|     16|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|     16|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 15, False: 1]
  ------------------
  641|     15|                return false;
  642|     15|            }
  643|      5|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (643:32): [True: 4, False: 1]
  ------------------
  644|      4|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  645|      4|            }
  646|      1|            break;
  647|      7|        case NSH_M_TYPE2:
  ------------------
  |  |  252|      7|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 7, False: 39]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|      7|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|      7|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 2, False: 5]
  ------------------
  650|      2|                return false;
  651|      2|            }
  652|       |
  653|      5|            memset(key->context, 0, sizeof(key->context));
  654|      5|            break;
  655|     23|        default:
  ------------------
  |  Branch (655:9): [True: 23, False: 23]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|     23|            memset(key->context, 0, sizeof(key->context));
  658|     23|            break;
  659|     46|    }
  660|       |
  661|     29|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|     46|}
flow_extract:
  670|  2.01k|{
  671|  2.01k|    struct {
  672|  2.01k|        struct miniflow mf;
  673|  2.01k|        uint64_t buf[FLOW_U64S];
  674|  2.01k|    } m;
  675|       |
  676|  2.01k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|  2.01k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  2.01k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|  2.01k|    miniflow_extract(packet, &m.mf);
  679|  2.01k|    miniflow_expand(&m.mf, flow);
  680|  2.01k|}
miniflow_extract:
  797|  2.01k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|  2.01k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.01k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|  2.01k|    const struct pkt_metadata *md = &packet->md;
  802|  2.01k|    const void *data = dp_packet_data(packet);
  803|  2.01k|    size_t size = dp_packet_size(packet);
  804|  2.01k|    ovs_be32 packet_type = packet->packet_type;
  805|  2.01k|    uint64_t *values = miniflow_values(dst);
  806|  2.01k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|  2.01k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|  2.01k|                         values + FLOW_U64S };
  ------------------
  |  |  165|  2.01k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|  2.01k|    const char *frame;
  809|  2.01k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.01k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|  2.01k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|  2.01k|    uint8_t *ct_nw_proto_p = NULL;
  812|  2.01k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|  2.01k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 2.01k]
  ------------------
  816|      0|        miniflow_push_words(mf, tunnel, &md->tunnel,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  817|      0|                            offsetof(struct flow_tnl, metadata) /
  818|      0|                            sizeof(uint64_t));
  819|       |
  820|      0|        if (!(md->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (820:13): [True: 0, False: 0]
  ------------------
  821|      0|            if (md->tunnel.metadata.present.map) {
  ------------------
  |  Branch (821:17): [True: 0, False: 0]
  ------------------
  822|      0|                miniflow_push_words(mf, tunnel.metadata, &md->tunnel.metadata,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  823|      0|                                    sizeof md->tunnel.metadata /
  824|      0|                                    sizeof(uint64_t));
  825|      0|            }
  826|      0|        } else {
  827|      0|            if (md->tunnel.metadata.present.len) {
  ------------------
  |  Branch (827:17): [True: 0, False: 0]
  ------------------
  828|      0|                miniflow_push_words(mf, tunnel.metadata.present,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  829|      0|                                    &md->tunnel.metadata.present, 1);
  830|      0|                miniflow_push_words(mf, tunnel.metadata.opts.gnv,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  831|      0|                                    md->tunnel.metadata.opts.gnv,
  832|      0|                                    DIV_ROUND_UP(md->tunnel.metadata.present.len,
  833|      0|                                                 sizeof(uint64_t)));
  834|      0|            }
  835|      0|        }
  836|      0|    }
  837|  2.01k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 2.01k]
  |  Branch (837:29): [True: 0, False: 2.01k]
  ------------------
  838|      0|        miniflow_push_uint32(mf, skb_priority, md->skb_priority);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  839|      0|        miniflow_push_uint32(mf, pkt_mark, md->pkt_mark);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  840|      0|    }
  841|  2.01k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|  2.01k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  2.01k|    {                                           \
  |  |  |  |  180|  2.01k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  2.01k|                                                \
  |  |  |  |  182|  2.01k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 2.01k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|  2.01k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  2.01k|    {                                        \
  |  |  |  |  |  |  160|  2.01k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.01k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.01k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.01k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.01k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.03k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.01k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.03k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.03k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.01k, False: 2.01k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.01k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.01k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.01k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  2.01k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  2.01k|}
  |  |  |  |  ------------------
  |  |  |  |  184|  2.01k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  2.01k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|  2.01k|}
  |  |  ------------------
  ------------------
  842|  2.01k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|  2.01k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  2.01k|    {                                           \
  |  |  |  |  180|  2.01k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  2.01k|                                                \
  |  |  |  |  182|  2.01k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 2.01k]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  2.01k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 2.01k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|  2.01k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.01k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.01k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.01k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.01k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.01k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.01k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.03k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.01k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.03k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.03k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.01k, False: 2.01k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.01k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.01k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.01k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  2.01k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|  2.01k|        MF.data++;                              \
  |  |  |  |  189|  2.01k|    }                                           \
  |  |  |  |  190|  2.01k|}
  |  |  ------------------
  ------------------
  843|  2.01k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 2.01k]
  ------------------
  844|      0|        miniflow_push_uint32(mf, recirc_id, md->recirc_id);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  845|      0|        miniflow_push_uint8(mf, ct_state, md->ct_state);
  ------------------
  |  |  309|      0|    miniflow_push_uint8_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  215|      0|#define miniflow_push_uint8_(MF, OFS, VALUE)            \
  |  |  |  |  216|      0|{                                                       \
  |  |  |  |  217|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                  \
  |  |  |  |  218|      0|                                                        \
  |  |  |  |  219|      0|    if ((OFS) % 8 == 0) {                               \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (219:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  220|      0|        miniflow_set_map(MF, OFS / 8);                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  221|      0|        *(uint8_t *)MF.data = VALUE;                    \
  |  |  |  |  222|      0|    } else if ((OFS) % 8 == 7) {                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (222:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  223|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  224|      0|        *((uint8_t *)MF.data + 7) = VALUE;              \
  |  |  |  |  225|      0|        MF.data++;                                      \
  |  |  |  |  226|      0|    } else {                                            \
  |  |  |  |  227|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  228|      0|        *((uint8_t *)MF.data + ((OFS) % 8)) = VALUE;    \
  |  |  |  |  229|      0|    }                                                   \
  |  |  |  |  230|      0|}
  |  |  ------------------
  ------------------
  846|      0|        ct_nw_proto_p = miniflow_pointer(mf, ct_nw_proto);
  ------------------
  |  |  329|      0|    (void *)((uint8_t *)MF.data + ((offsetof(struct flow, FIELD)) % 8))
  ------------------
  847|      0|        miniflow_push_uint8(mf, ct_nw_proto, 0);
  ------------------
  |  |  309|      0|    miniflow_push_uint8_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  215|      0|#define miniflow_push_uint8_(MF, OFS, VALUE)            \
  |  |  |  |  216|      0|{                                                       \
  |  |  |  |  217|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                  \
  |  |  |  |  218|      0|                                                        \
  |  |  |  |  219|      0|    if ((OFS) % 8 == 0) {                               \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (219:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  220|      0|        miniflow_set_map(MF, OFS / 8);                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  221|      0|        *(uint8_t *)MF.data = VALUE;                    \
  |  |  |  |  222|      0|    } else if ((OFS) % 8 == 7) {                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (222:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  223|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  224|      0|        *((uint8_t *)MF.data + 7) = VALUE;              \
  |  |  |  |  225|      0|        MF.data++;                                      \
  |  |  |  |  226|      0|    } else {                                            \
  |  |  |  |  227|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  228|      0|        *((uint8_t *)MF.data + ((OFS) % 8)) = VALUE;    \
  |  |  |  |  229|      0|    }                                                   \
  |  |  |  |  230|      0|}
  |  |  ------------------
  ------------------
  848|      0|        miniflow_push_uint16(mf, ct_zone, md->ct_zone);
  ------------------
  |  |  303|      0|    miniflow_push_uint16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  196|      0|{                                               \
  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  198|      0|                                                \
  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:16): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  213|      0|}
  |  |  ------------------
  ------------------
  849|      0|        miniflow_push_uint32(mf, ct_mark, md->ct_mark);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  850|      0|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|      0|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      0|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      0|                                                \
  |  |  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|      0|        if (!ovs_u128_is_zero(md->ct_label)) {
  ------------------
  |  Branch (851:13): [True: 0, False: 0]
  ------------------
  852|      0|            miniflow_push_words(mf, ct_label, &md->ct_label,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  853|      0|                                sizeof md->ct_label / sizeof(uint64_t));
  854|      0|        }
  855|  2.01k|    } else {
  856|  2.01k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 2.01k]
  ------------------
  857|      0|            miniflow_push_uint32(mf, recirc_id, md->recirc_id);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  858|      0|            miniflow_pad_to_64(mf, recirc_id);
  ------------------
  |  |  312|      0|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|      0|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|      0|{                                                               \
  |  |  |  |  234|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|      0|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|      0|                                                                \
  |  |  |  |  237|      0|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|      0|    MF.data++;                                                  \
  |  |  |  |  239|      0|}
  |  |  ------------------
  ------------------
  859|      0|        }
  860|  2.01k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|  2.01k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  2.01k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  2.01k|{                                                               \
  |  |  |  |  243|  2.01k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  2.01k|                                                                \
  |  |  |  |  245|  2.01k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  2.01k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  2.01k|    {                                        \
  |  |  |  |  |  |  160|  2.01k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.01k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.01k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.01k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.01k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.03k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.01k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.03k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.03k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.01k, False: 2.01k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.01k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.01k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.01k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  2.01k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  2.01k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  2.01k|                                                                \
  |  |  |  |  248|  2.01k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  2.01k|}
  |  |  ------------------
  ------------------
  861|  2.01k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|  2.01k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  2.01k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  2.01k|    {                                           \
  |  |  |  |  |  |  180|  2.01k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  2.01k|                                                \
  |  |  |  |  |  |  182|  2.01k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 2.01k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  2.01k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 2.01k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  2.01k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.01k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.01k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.01k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.01k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.01k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.01k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.01k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.01k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.01k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.01k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.01k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.01k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  2.01k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  2.01k|        MF.data++;                              \
  |  |  |  |  |  |  189|  2.01k|    }                                           \
  |  |  |  |  |  |  190|  2.01k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|  2.01k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|  2.01k|    frame = data;
  866|  2.01k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 2.01k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|  2.01k|    } else {
  870|  2.01k|        dp_packet_reset_offsets(packet);
  871|  2.01k|    }
  872|       |
  873|  2.01k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 2.01k, False: 0]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  2.01k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  2.01k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 26, False: 1.98k]
  |  |  ------------------
  ------------------
  876|     26|            goto out;
  877|  1.98k|        } else {
  878|       |            /* Link layer. */
  879|  1.98k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  1.98k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  1.98k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  1.98k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  1.98k|                      == offsetof(struct flow, f1))
  ------------------
  880|  1.98k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  1.98k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  1.98k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  1.98k|{                                                               \
  |  |  |  |  291|  1.98k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  1.98k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  1.98k|{                                                               \
  |  |  |  |  |  |  259|  1.98k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  1.98k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  1.98k|                                                                \
  |  |  |  |  |  |  262|  1.98k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  1.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.98k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.98k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.98k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.98k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  1.98k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  1.98k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  1.98k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  1.98k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  1.98k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  1.98k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  1.98k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  1.98k|            dl_type = parse_ethertype(&data, &size);
  887|  1.98k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  1.98k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.98k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.98k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.98k|{                                               \
  |  |  |  |  |  |  197|  1.98k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.98k|                                                \
  |  |  |  |  |  |  199|  1.98k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.98k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 1.98k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.98k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 1.98k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  1.98k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.98k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.98k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.98k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.98k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  1.98k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.98k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.98k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  1.98k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  1.98k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  1.98k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  1.98k|{                                                               \
  |  |  |  |  234|  1.98k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  1.98k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  1.98k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  1.98k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.98k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.98k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.98k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.98k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.98k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.98k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.98k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.98k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.98k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  1.98k|                                                                \
  |  |  |  |  237|  1.98k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  1.98k|    MF.data++;                                                  \
  |  |  |  |  239|  1.98k|}
  |  |  ------------------
  ------------------
  889|  1.98k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 29, False: 1.96k]
  ------------------
  890|     29|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|     29|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|     29|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|     29|{                                                                       \
  |  |  |  |  279|     29|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     29|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     29|{                                                               \
  |  |  |  |  |  |  259|     29|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     29|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     29|                                                                \
  |  |  |  |  |  |  262|     29|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     29|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     29|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     29|{                                                                       \
  |  |  |  |  |  |  |  |  151|     29|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     29|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     29|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     29|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     29|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     29|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 29]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     29|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     29|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     29|}
  |  |  |  |  ------------------
  |  |  |  |  280|     29|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|     29|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|     29|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|     29|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 26, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  283|     26|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|     26|    }                                                                   \
  |  |  |  |  285|     29|}
  |  |  ------------------
  ------------------
  891|     29|            }
  892|       |
  893|  1.98k|        }
  894|  2.01k|    } else {
  895|       |        /* Take dl_type from packet_type. */
  896|      0|        dl_type = pt_ns_type_be(packet_type);
  897|      0|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|      0|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|      0|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|      0|{                                                               \
  |  |  |  |  243|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|      0|                                                                \
  |  |  |  |  245|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|      0|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  247|      0|                                                                \
  |  |  |  |  248|      0|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|      0|}
  |  |  ------------------
  ------------------
  898|      0|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|      0|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|      0|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|      0|{                                               \
  |  |  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|      0|                                                \
  |  |  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|       |        /* Do not push vlan_tci, pad instead */
  900|      0|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|      0|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|      0|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|      0|{                                                               \
  |  |  |  |  234|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|      0|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|      0|                                                                \
  |  |  |  |  237|      0|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|      0|    MF.data++;                                                  \
  |  |  |  |  239|      0|}
  |  |  ------------------
  ------------------
  901|      0|    }
  902|       |
  903|       |    /* Parse mpls. */
  904|  1.98k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  1.98k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 36, False: 1.95k]
  |  |  ------------------
  ------------------
  905|     36|        int count;
  906|     36|        const void *mpls = data;
  907|       |
  908|     36|        packet->l2_5_ofs = (char *)data - frame;
  909|     36|        count = parse_mpls(&data, &size);
  910|     36|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|     36|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|     36|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|     36|{                                                                       \
  |  |  |  |  279|     36|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     36|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     36|{                                                               \
  |  |  |  |  |  |  259|     36|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     36|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     36|                                                                \
  |  |  |  |  |  |  262|     36|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     36|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     36|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     36|{                                                                       \
  |  |  |  |  |  |  |  |  151|     36|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     36|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     36|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     36|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     36|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 36]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     36|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     36|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     36|}
  |  |  |  |  ------------------
  |  |  |  |  280|     36|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|     36|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|     36|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|     36|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 28, False: 8]
  |  |  |  |  ------------------
  |  |  |  |  283|     28|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|     28|    }                                                                   \
  |  |  |  |  285|     36|}
  |  |  ------------------
  ------------------
  911|     36|    }
  912|       |
  913|       |    /* Network layer. */
  914|  1.98k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  1.98k|    nw_frag = 0;
  917|  1.98k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  1.98k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 748, False: 1.24k]
  |  |  ------------------
  ------------------
  918|    748|        const struct ip_header *nh = data;
  919|    748|        int ip_len;
  920|    748|        uint16_t tot_len;
  921|       |
  922|    748|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|    748|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 72, False: 676]
  |  |  ------------------
  ------------------
  923|     72|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|     72|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 72]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|     72|            goto out;
  927|     72|        }
  928|    676|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|    676|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|    676|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|    676|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    676|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    676|{                                                               \
  |  |  |  |  270|    676|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    676|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    676|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    676|{                                                               \
  |  |  |  |  |  |  259|    676|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    676|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    676|                                                                \
  |  |  |  |  |  |  262|    676|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    676|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    676|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    676|{                                                                       \
  |  |  |  |  |  |  |  |  151|    676|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    676|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    676|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    676|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    676|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    676|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 676]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    676|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    676|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    676|}
  |  |  |  |  ------------------
  |  |  |  |  272|    676|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    676|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    676|}
  |  |  ------------------
  ------------------
  933|    676|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 676]
  |  Branch (933:30): [True: 0, False: 0]
  ------------------
  934|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv4.ipv4_proto;
  935|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (935:17): [True: 0, False: 0]
  ------------------
  936|      0|                miniflow_push_words(mf, ct_nw_src,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  937|      0|                                    &md->ct_orig_tuple.ipv4.ipv4_src, 1);
  938|      0|                ct_tp_src = md->ct_orig_tuple.ipv4.src_port;
  939|      0|                ct_tp_dst = md->ct_orig_tuple.ipv4.dst_port;
  940|      0|            }
  941|      0|        }
  942|       |
  943|    676|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|    676|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    676|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    676|    {                                           \
  |  |  |  |  |  |  180|    676|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    676|                                                \
  |  |  |  |  |  |  182|    676|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 676, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    676|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    676|    {                                        \
  |  |  |  |  |  |  |  |  160|    676|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    676|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    676|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    676|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    676|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    676|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    676|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    676|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    676|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 676]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    676|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    676|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    676|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    676|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    676|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|    676|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|    676|        nw_tos = nh->ip_tos;
  946|    676|        nw_ttl = nh->ip_ttl;
  947|    676|        nw_proto = nh->ip_proto;
  948|    676|        nw_frag = ipv4_get_nw_frag(nh);
  949|    676|        data_pull(&data, &size, ip_len);
  950|  1.24k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 756, False: 485]
  ------------------
  951|    756|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|    756|        ovs_be32 tc_flow;
  953|    756|        uint16_t plen;
  954|       |
  955|    756|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|    756|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 43, False: 713]
  |  |  ------------------
  ------------------
  956|     43|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|     43|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 43]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|     43|            goto out;
  960|     43|        }
  961|    713|        data_pull(&data, &size, sizeof *nh);
  962|    713|        plen = ntohs(nh->ip6_plen);
  963|    713|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|    713|        size = plen;   /* Never pull padding. */
  965|       |
  966|    713|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|    713|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    713|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    713|{                                                               \
  |  |  |  |  270|    713|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    713|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    713|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    713|{                                                               \
  |  |  |  |  |  |  259|    713|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    713|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    713|                                                                \
  |  |  |  |  |  |  262|    713|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    713|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    713|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    713|{                                                                       \
  |  |  |  |  |  |  |  |  151|    713|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    713|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    713|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    713|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    713|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    713|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 713]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    713|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    713|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    713|}
  |  |  |  |  ------------------
  |  |  |  |  272|    713|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    713|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    713|}
  |  |  ------------------
  ------------------
  967|    713|                            sizeof nh->ip6_src / 8);
  968|    713|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|    713|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    713|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    713|{                                                               \
  |  |  |  |  270|    713|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    713|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    713|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    713|{                                                               \
  |  |  |  |  |  |  259|    713|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    713|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    713|                                                                \
  |  |  |  |  |  |  262|    713|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    713|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    713|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    713|{                                                                       \
  |  |  |  |  |  |  |  |  151|    713|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    713|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    713|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    713|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    713|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    713|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 713]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    713|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    713|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    713|}
  |  |  |  |  ------------------
  |  |  |  |  272|    713|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    713|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    713|}
  |  |  ------------------
  ------------------
  969|    713|                            sizeof nh->ip6_dst / 8);
  970|    713|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 713]
  |  Branch (970:30): [True: 0, False: 0]
  ------------------
  971|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv6.ipv6_proto;
  972|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (972:17): [True: 0, False: 0]
  ------------------
  973|      0|                miniflow_push_words(mf, ct_ipv6_src,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  974|      0|                                    &md->ct_orig_tuple.ipv6.ipv6_src,
  975|      0|                                    2 *
  976|      0|                                    sizeof md->ct_orig_tuple.ipv6.ipv6_src / 8);
  977|      0|                ct_tp_src = md->ct_orig_tuple.ipv6.src_port;
  978|      0|                ct_tp_dst = md->ct_orig_tuple.ipv6.dst_port;
  979|      0|            }
  980|      0|        }
  981|       |
  982|    713|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|    713|        nw_tos = ntohl(tc_flow) >> 20;
  984|    713|        nw_ttl = nh->ip6_hlim;
  985|    713|        nw_proto = nh->ip6_nxt;
  986|       |
  987|    713|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 147, False: 566]
  ------------------
  988|    713|                                 NULL, NULL)) {
  989|    147|            goto out;
  990|    147|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|    566|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|    566|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|    566|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|    566|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|    566|                      == offsetof(struct flow, f1))
  ------------------
  995|    566|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|    566|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|    566|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    566|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    566|    {                                           \
  |  |  |  |  |  |  180|    566|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    566|                                                \
  |  |  |  |  |  |  182|    566|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 566, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    566|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    566|    {                                        \
  |  |  |  |  |  |  |  |  160|    566|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    566|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    566|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    566|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    566|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    566|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    566|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    566|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    566|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 566]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    566|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    566|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    566|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    566|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    566|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|    566|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|    566|    } else {
  998|    485|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 55, False: 430]
  ------------------
  999|    430|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 5, False: 425]
  ------------------
 1000|     60|            struct eth_addr arp_buf[2];
 1001|     60|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|     60|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|     60|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|     60|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|    120|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 50, False: 10]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|    110|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 41, False: 9]
  |  |  ------------------
  ------------------
 1005|     41|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|    101|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 18, False: 23]
  |  |  ------------------
  ------------------
 1006|     18|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|     78|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 15, False: 3]
  |  |  ------------------
  ------------------
 1007|     15|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|     15|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 12, False: 3]
  |  |  ------------------
  ------------------
 1008|     12|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|     12|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     12|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     12|    {                                           \
  |  |  |  |  |  |  180|     12|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     12|                                                \
  |  |  |  |  |  |  182|     12|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 12, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     12|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     12|    {                                        \
  |  |  |  |  |  |  |  |  160|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     12|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     12|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     12|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     12|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|     12|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|     12|                                   get_16aligned_be32(&arp->ar_spa));
 1010|     12|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|     12|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     12|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     12|    {                                           \
  |  |  |  |  |  |  180|     12|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     12|                                                \
  |  |  |  |  |  |  182|     12|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     12|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 12, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     12|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     12|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     12|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     12|        MF.data++;                              \
  |  |  |  |  |  |  189|     12|    }                                           \
  |  |  |  |  |  |  190|     12|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|     12|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|     12|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|     12|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2, False: 10]
  |  |  ------------------
  ------------------
 1015|      2|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|      2|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      2|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      2|    {                                           \
  |  |  |  |  |  |  180|      2|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      2|                                                \
  |  |  |  |  |  |  182|      2|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 2, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      2|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      2|    {                                        \
  |  |  |  |  |  |  |  |  160|      2|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      2|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      2|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      2|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      2|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      2|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      2|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      2|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      2|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      2|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      2|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      2|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      2|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|      2|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|      2|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|      2|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|      2|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      2|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      2|    {                                           \
  |  |  |  |  |  |  180|      2|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      2|                                                \
  |  |  |  |  |  |  182|      2|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 2]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|      2|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 2, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      2|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      2|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      2|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      2|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      2|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      2|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      2|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      2|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      2|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      2|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      2|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      2|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      2|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      2|        MF.data++;                              \
  |  |  |  |  |  |  189|      2|    }                                           \
  |  |  |  |  |  |  190|      2|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|      2|                }
 1018|       |
 1019|       |                /* Must be adjacent. */
 1020|     12|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|     12|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|     12|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|     12|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|     12|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|     12|                arp_buf[0] = arp->ar_sha;
 1023|     12|                arp_buf[1] = arp->ar_tha;
 1024|     12|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|     12|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|     12|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|     12|{                                                               \
  |  |  |  |  291|     12|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     12|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     12|{                                                               \
  |  |  |  |  |  |  259|     12|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     12|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     12|                                                                \
  |  |  |  |  |  |  262|     12|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     12|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     12|}
  |  |  |  |  ------------------
  |  |  |  |  292|     12|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|     12|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|     12|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|     12|}
  |  |  ------------------
  ------------------
 1025|     12|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|     12|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     12|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     12|{                                                               \
  |  |  |  |  234|     12|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     12|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     12|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     12|                                                                \
  |  |  |  |  237|     12|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     12|    MF.data++;                                                  \
  |  |  |  |  239|     12|}
  |  |  ------------------
  ------------------
 1026|     12|            }
 1027|    425|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 80, False: 345]
  ------------------
 1028|     80|            struct ovs_key_nsh nsh;
 1029|       |
 1030|     80|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   65|     80|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 29, False: 51]
  |  |  ------------------
  ------------------
 1031|     29|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|     29|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|     29|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|     29|{                                                               \
  |  |  |  |  270|     29|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|     29|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     29|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     29|{                                                               \
  |  |  |  |  |  |  259|     29|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     29|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     29|                                                                \
  |  |  |  |  |  |  262|     29|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     29|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     29|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     29|{                                                                       \
  |  |  |  |  |  |  |  |  151|     29|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     29|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     29|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     29|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     29|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     29|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 29]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     29|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     29|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     29|}
  |  |  |  |  ------------------
  |  |  |  |  272|     29|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|     29|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|     29|}
  |  |  ------------------
  ------------------
 1032|     29|                                    sizeof(struct ovs_key_nsh) /
 1033|     29|                                    sizeof(uint64_t));
 1034|     29|            }
 1035|     80|        }
 1036|    485|        goto out;
 1037|    485|    }
 1038|       |
 1039|  1.24k|    packet->l4_ofs = (char *)data - frame;
 1040|  1.24k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  1.24k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.24k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.24k|    {                                           \
  |  |  |  |  |  |  180|  1.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.24k|                                                \
  |  |  |  |  |  |  182|  1.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 1.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  1.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 1.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  1.24k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.24k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  1.24k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  1.24k|        MF.data++;                              \
  |  |  |  |  |  |  189|  1.24k|    }                                           \
  |  |  |  |  |  |  190|  1.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  1.24k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  1.24k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  1.24k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.11k, False: 130]
  |  |  ------------------
  ------------------
 1044|  1.11k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  1.11k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 455, False: 657]
  |  |  ------------------
  ------------------
 1045|    455|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|    455|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 444, False: 11]
  |  |  ------------------
  ------------------
 1046|    444|                const struct tcp_header *tcp = data;
 1047|    444|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|    444|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|    444|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|    888|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 426, False: 18]
  |  |  ------------------
  ------------------
 1050|    426|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|    426|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 418, False: 8]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|    418|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|    418|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|    418|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|    418|{                                                               \
  |  |  |  |  243|    418|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|    418|                                                                \
  |  |  |  |  245|    418|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|    418|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|    418|    {                                        \
  |  |  |  |  |  |  160|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|    418|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|    418|}
  |  |  |  |  ------------------
  |  |  |  |  247|    418|                                                                \
  |  |  |  |  248|    418|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|    418|}
  |  |  ------------------
  ------------------
 1053|    418|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|    418|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    418|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    418|    {                                           \
  |  |  |  |  |  |  180|    418|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    418|                                                \
  |  |  |  |  |  |  182|    418|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    418|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 418, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|    418|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    418|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    418|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|    418|        MF.data++;                              \
  |  |  |  |  |  |  189|    418|    }                                           \
  |  |  |  |  |  |  190|    418|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|    418|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|    418|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|    418|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    418|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    418|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    418|{                                               \
  |  |  |  |  |  |  197|    418|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    418|                                                \
  |  |  |  |  |  |  199|    418|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 418, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    418|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    418|    {                                        \
  |  |  |  |  |  |  |  |  160|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    418|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    418|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    418|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    418|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    418|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|    418|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|    418|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    418|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    418|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    418|{                                               \
  |  |  |  |  |  |  197|    418|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    418|                                                \
  |  |  |  |  |  |  199|    418|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    418|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 418, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    418|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    418|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    418|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    418|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    418|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    418|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    418|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    418|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    418|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    418|{                                               \
  |  |  |  |  |  |  197|    418|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    418|                                                \
  |  |  |  |  |  |  199|    418|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    418|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    418|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 418, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    418|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    418|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    418|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    418|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    418|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|    418|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    418|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    418|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    418|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    418|{                                               \
  |  |  |  |  |  |  197|    418|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    418|                                                \
  |  |  |  |  |  |  199|    418|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    418|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    418|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 418]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    418|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 418, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    418|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    418|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    418|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    418|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    418|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    418|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    418|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    418|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    418|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    418|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    418|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 418]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    418|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    418|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    418|        MF.data++;                              \
  |  |  |  |  |  |  212|    418|    }                                           \
  |  |  |  |  |  |  213|    418|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|    418|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 143, False: 275]
  ------------------
 1060|    143|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|    275|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 275, False: 0]
  ------------------
 1062|    275|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|    275|                    }
 1064|    418|                    dp_packet_l4_proto_set_tcp(packet);
 1065|    418|                }
 1066|    444|            }
 1067|    657|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|    657|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 203, False: 454]
  |  |  ------------------
  ------------------
 1068|    203|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|    203|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 189, False: 14]
  |  |  ------------------
  ------------------
 1069|    189|                const struct udp_header *udp = data;
 1070|       |
 1071|    189|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|    189|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    189|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    189|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    189|{                                               \
  |  |  |  |  |  |  197|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    189|                                                \
  |  |  |  |  |  |  199|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    189|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    189|    {                                        \
  |  |  |  |  |  |  |  |  160|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    189|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    189|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    189|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    189|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|    189|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|    189|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    189|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    189|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    189|{                                               \
  |  |  |  |  |  |  197|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    189|                                                \
  |  |  |  |  |  |  199|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    189|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    189|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    189|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    189|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    189|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    189|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    189|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    189|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    189|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    189|{                                               \
  |  |  |  |  |  |  197|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    189|                                                \
  |  |  |  |  |  |  199|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    189|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    189|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    189|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    189|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    189|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    189|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    189|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    189|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    189|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    189|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    189|{                                               \
  |  |  |  |  |  |  197|    189|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    189|                                                \
  |  |  |  |  |  |  199|    189|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    189|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    189|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 189]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    189|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 189, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    189|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    189|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    189|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    189|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    189|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    189|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    189|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    189|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    189|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    189|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    189|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 189]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    189|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    189|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    189|        MF.data++;                              \
  |  |  |  |  |  |  212|    189|    }                                           \
  |  |  |  |  |  |  213|    189|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|    189|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 86, False: 103]
  ------------------
 1076|     86|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|    103|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 103, False: 0]
  ------------------
 1078|    103|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|    103|                }
 1080|    189|                dp_packet_l4_proto_set_udp(packet);
 1081|    189|            }
 1082|    454|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|    454|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 30, False: 424]
  |  |  ------------------
  ------------------
 1083|     30|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|     30|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 18, False: 12]
  |  |  ------------------
  ------------------
 1084|     18|                const struct sctp_header *sctp = data;
 1085|       |
 1086|     18|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|     18|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     18|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     18|{                                               \
  |  |  |  |  |  |  197|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     18|                                                \
  |  |  |  |  |  |  199|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     18|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     18|    {                                        \
  |  |  |  |  |  |  |  |  160|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     18|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     18|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     18|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     18|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|     18|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|     18|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     18|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     18|{                                               \
  |  |  |  |  |  |  197|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     18|                                                \
  |  |  |  |  |  |  199|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     18|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     18|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     18|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     18|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     18|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|     18|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     18|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     18|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     18|{                                               \
  |  |  |  |  |  |  197|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     18|                                                \
  |  |  |  |  |  |  199|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     18|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     18|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     18|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     18|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     18|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     18|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|     18|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     18|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     18|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     18|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     18|{                                               \
  |  |  |  |  |  |  197|     18|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     18|                                                \
  |  |  |  |  |  |  199|     18|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     18|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     18|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 18]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     18|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 18, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     18|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     18|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     18|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     18|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     18|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     18|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     18|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     18|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     18|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     18|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     18|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 18]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     18|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     18|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     18|        MF.data++;                              \
  |  |  |  |  |  |  212|     18|    }                                           \
  |  |  |  |  |  |  213|     18|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|     18|                dp_packet_l4_proto_set_sctp(packet);
 1091|     18|            }
 1092|    424|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|    424|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 36, False: 388]
  |  |  ------------------
  ------------------
 1093|     36|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|     36|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 23, False: 13]
  |  |  ------------------
  ------------------
 1094|     23|                const struct icmp_header *icmp = data;
 1095|       |
 1096|     23|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|     23|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     23|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     23|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     23|{                                               \
  |  |  |  |  |  |  197|     23|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     23|                                                \
  |  |  |  |  |  |  199|     23|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 23, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     23|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     23|    {                                        \
  |  |  |  |  |  |  |  |  160|     23|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     23|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     23|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     23|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     23|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     23|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     23|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     23|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     23|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 23]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     23|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     23|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     23|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     23|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     23|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     23|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|     23|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|     23|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     23|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     23|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     23|{                                               \
  |  |  |  |  |  |  197|     23|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     23|                                                \
  |  |  |  |  |  |  199|     23|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     23|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 23, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     23|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     23|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     23|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     23|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     23|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     23|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     23|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     23|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     23|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     23|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     23|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 23]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     23|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     23|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     23|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     23|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|     23|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     23|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     23|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     23|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     23|{                                               \
  |  |  |  |  |  |  197|     23|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     23|                                                \
  |  |  |  |  |  |  199|     23|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     23|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     23|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 23, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     23|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     23|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     23|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     23|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     23|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     23|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     23|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     23|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     23|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     23|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     23|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 23]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     23|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     23|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     23|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     23|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|     23|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     23|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     23|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     23|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     23|{                                               \
  |  |  |  |  |  |  197|     23|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     23|                                                \
  |  |  |  |  |  |  199|     23|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     23|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     23|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 23]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     23|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 23, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     23|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     23|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     23|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     23|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     23|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     23|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     23|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     23|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     23|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     23|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     23|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 23]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     23|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     23|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     23|        MF.data++;                              \
  |  |  |  |  |  |  212|     23|    }                                           \
  |  |  |  |  |  |  213|     23|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|     23|            }
 1101|    388|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|    388|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 42, False: 346]
  |  |  ------------------
  ------------------
 1102|     42|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|     42|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 22, False: 20]
  |  |  ------------------
  ------------------
 1103|     22|                const struct igmp_header *igmp = data;
 1104|       |
 1105|     22|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|     22|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     22|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     22|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     22|{                                               \
  |  |  |  |  |  |  197|     22|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     22|                                                \
  |  |  |  |  |  |  199|     22|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 22, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     22|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     22|    {                                        \
  |  |  |  |  |  |  |  |  160|     22|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     22|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     22|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     22|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     22|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     22|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     22|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     22|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     22|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     22|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     22|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     22|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     22|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     22|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     22|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|     22|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|     22|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     22|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     22|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     22|{                                               \
  |  |  |  |  |  |  197|     22|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     22|                                                \
  |  |  |  |  |  |  199|     22|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 22]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     22|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 22, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     22|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     22|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     22|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     22|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     22|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     22|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     22|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     22|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     22|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     22|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     22|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     22|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     22|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     22|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     22|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|     22|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|     22|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     22|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     22|{                                                               \
  |  |  |  |  234|     22|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     22|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     22|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     22|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     22|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     22|{                                                                       \
  |  |  |  |  |  |  |  |  151|     22|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     22|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     22|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     22|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     22|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     22|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     22|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     22|                                                                \
  |  |  |  |  237|     22|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     22|    MF.data++;                                                  \
  |  |  |  |  239|     22|}
  |  |  ------------------
  ------------------
 1109|     22|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|     22|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     22|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     22|    {                                           \
  |  |  |  |  |  |  180|     22|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     22|                                                \
  |  |  |  |  |  |  182|     22|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 22, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     22|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     22|    {                                        \
  |  |  |  |  |  |  |  |  160|     22|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     22|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     22|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     22|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     22|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     22|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     22|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     22|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     22|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     22|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     22|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     22|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     22|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     22|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|     22|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|     22|                                   get_16aligned_be32(&igmp->group));
 1111|     22|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|     22|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     22|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     22|{                                                               \
  |  |  |  |  234|     22|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     22|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     22|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     22|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     22|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     22|{                                                                       \
  |  |  |  |  |  |  |  |  151|     22|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     22|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     22|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     22|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     22|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     22|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 22]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     22|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     22|                                                                \
  |  |  |  |  237|     22|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     22|    MF.data++;                                                  \
  |  |  |  |  239|     22|}
  |  |  ------------------
  ------------------
 1112|     22|            }
 1113|    346|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|    346|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 221, False: 125]
  |  |  ------------------
  ------------------
 1114|    221|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|    221|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 211, False: 10]
  |  |  ------------------
  ------------------
 1115|    211|                const union ovs_16aligned_in6_addr *nd_target;
 1116|    211|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|    211|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|    211|                ovs_be32 rso_flags;
 1122|    211|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|    211|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|    211|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 171, False: 40]
  ------------------
 1126|    211|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    171|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 120, False: 51]
  ------------------
 1128|    120|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    120|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    120|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    120|{                                                               \
  |  |  |  |  270|    120|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    120|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    120|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    120|{                                                               \
  |  |  |  |  |  |  259|    120|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    120|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    120|                                                                \
  |  |  |  |  |  |  262|    120|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    120|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    120|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    120|{                                                                       \
  |  |  |  |  |  |  |  |  151|    120|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    120|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    120|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    120|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    120|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    120|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 120]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    120|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    120|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    120|}
  |  |  |  |  ------------------
  |  |  |  |  272|    120|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    120|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    120|}
  |  |  ------------------
  ------------------
 1129|    120|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    120|                    }
 1131|    171|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    171|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    171|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    171|{                                                               \
  |  |  |  |  291|    171|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    171|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    171|{                                                               \
  |  |  |  |  |  |  259|    171|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    171|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    171|                                                                \
  |  |  |  |  |  |  262|    171|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    171|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    171|}
  |  |  |  |  ------------------
  |  |  |  |  292|    171|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    171|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    171|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    171|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    171|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 71, False: 100]
  ------------------
 1135|     71|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|     71|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     71|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     71|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     71|{                                               \
  |  |  |  |  |  |  197|     71|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     71|                                                \
  |  |  |  |  |  |  199|     71|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 71]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     71|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 71]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     71|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 71, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     71|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     71|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     71|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     71|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     71|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     71|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     71|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     71|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     71|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     71|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     71|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     71|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     71|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     71|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     71|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|     71|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|     71|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     71|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     71|{                                                               \
  |  |  |  |  234|     71|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     71|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     71|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     71|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     71|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     71|{                                                                       \
  |  |  |  |  |  |  |  |  151|     71|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     71|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     71|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     71|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     71|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     71|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 71]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     71|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     71|                                                                \
  |  |  |  |  237|     71|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     71|    MF.data++;                                                  \
  |  |  |  |  239|     71|}
  |  |  ------------------
  ------------------
 1139|    100|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    100|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    100|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    100|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    100|{                                                               \
  |  |  |  |  234|    100|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    100|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    100|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    100|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    100|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    100|{                                                                       \
  |  |  |  |  |  |  |  |  151|    100|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    100|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    100|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    100|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    100|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    100|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 100]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    100|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    100|                                                                \
  |  |  |  |  237|    100|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    100|    MF.data++;                                                  \
  |  |  |  |  239|    100|}
  |  |  ------------------
  ------------------
 1143|    100|                    }
 1144|    171|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    171|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    171|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    171|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    171|{                                               \
  |  |  |  |  |  |  197|    171|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    171|                                                \
  |  |  |  |  |  |  199|    171|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 171, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    171|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    171|    {                                        \
  |  |  |  |  |  |  |  |  160|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    171|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    171|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    171|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    171|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    171|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    171|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    171|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    171|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    171|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    171|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    171|{                                               \
  |  |  |  |  |  |  197|    171|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    171|                                                \
  |  |  |  |  |  |  199|    171|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 171]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    171|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 171, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    171|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    171|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    171|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    171|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    171|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    171|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    171|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    171|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    171|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    171|{                                                               \
  |  |  |  |  234|    171|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    171|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    171|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    171|                                                                \
  |  |  |  |  237|    171|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    171|    MF.data++;                                                  \
  |  |  |  |  239|    171|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    171|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    171|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    171|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    171|    {                                           \
  |  |  |  |  |  |  180|    171|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    171|                                                \
  |  |  |  |  |  |  182|    171|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 171, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    171|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    171|    {                                        \
  |  |  |  |  |  |  |  |  160|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    171|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    171|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    171|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    171|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|    171|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    171|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    171|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    171|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    171|{                                                               \
  |  |  |  |  234|    171|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    171|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    171|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    171|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    171|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    171|{                                                                       \
  |  |  |  |  |  |  |  |  151|    171|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    171|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    171|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    171|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    171|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    171|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 171]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    171|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    171|                                                                \
  |  |  |  |  237|    171|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    171|    MF.data++;                                                  \
  |  |  |  |  239|    171|}
  |  |  ------------------
  ------------------
 1152|    171|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|     40|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|     40|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     40|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     40|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     40|{                                               \
  |  |  |  |  |  |  197|     40|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     40|                                                \
  |  |  |  |  |  |  199|     40|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 40, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     40|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     40|    {                                        \
  |  |  |  |  |  |  |  |  160|     40|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     40|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     40|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     40|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     40|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     40|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     40|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     40|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     40|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     40|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     40|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     40|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     40|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     40|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     40|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|     40|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|     40|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|     40|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     40|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     40|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     40|{                                               \
  |  |  |  |  |  |  197|     40|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     40|                                                \
  |  |  |  |  |  |  199|     40|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     40|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 40, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     40|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     40|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     40|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     40|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     40|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     40|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     40|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     40|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     40|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     40|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     40|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     40|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     40|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     40|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     40|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|     40|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|     40|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     40|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     40|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     40|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     40|{                                               \
  |  |  |  |  |  |  197|     40|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     40|                                                \
  |  |  |  |  |  |  199|     40|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     40|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     40|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 40, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     40|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     40|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     40|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     40|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     40|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     40|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     40|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     40|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     40|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     40|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     40|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     40|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     40|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     40|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|     40|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|     40|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     40|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     40|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     40|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     40|{                                               \
  |  |  |  |  |  |  197|     40|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     40|                                                \
  |  |  |  |  |  |  199|     40|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     40|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     40|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 40]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     40|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 40, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     40|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     40|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     40|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     40|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     40|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     40|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     40|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     40|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     40|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     40|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     40|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 40]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     40|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     40|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     40|        MF.data++;                              \
  |  |  |  |  |  |  212|     40|    }                                           \
  |  |  |  |  |  |  213|     40|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|     40|                }
 1161|    211|            }
 1162|    221|        }
 1163|  1.11k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 130]
  ------------------
 1164|      0|               (*ct_nw_proto_p == IPPROTO_TCP ||
  ------------------
  |  Branch (1164:17): [True: 0, False: 0]
  ------------------
 1165|      0|                *ct_nw_proto_p == IPPROTO_UDP ||
  ------------------
  |  Branch (1165:17): [True: 0, False: 0]
  ------------------
 1166|      0|                *ct_nw_proto_p == IPPROTO_SCTP ||
  ------------------
  |  Branch (1166:17): [True: 0, False: 0]
  ------------------
 1167|      0|                *ct_nw_proto_p == IPPROTO_ICMP ||
  ------------------
  |  Branch (1167:17): [True: 0, False: 0]
  ------------------
 1168|      0|                (*ct_nw_proto_p == IPPROTO_ICMPV6 && !icmp6_is_nd(data)))) {
  ------------------
  |  Branch (1168:18): [True: 0, False: 0]
  |  Branch (1168:54): [True: 0, False: 0]
  ------------------
 1169|      0|        miniflow_pad_from_64(mf, ct_tp_src);
  ------------------
  |  |  315|      0|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|      0|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|      0|{                                                               \
  |  |  |  |  243|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|      0|                                                                \
  |  |  |  |  245|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|      0|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  247|      0|                                                                \
  |  |  |  |  248|      0|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|      0|}
  |  |  ------------------
  ------------------
 1170|      0|        miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|      0|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|      0|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|      0|{                                               \
  |  |  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|      0|                                                \
  |  |  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1171|      0|        miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|      0|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|      0|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|      0|{                                               \
  |  |  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|      0|                                                \
  |  |  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1172|      0|    }
 1173|  2.01k| out:
 1174|  2.01k|    dst->map = mf.map;
 1175|  2.01k|}
flow_wildcards_init_catchall:
 1885|  4.03k|{
 1886|  4.03k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|  4.03k|}
flow_wildcards_init_for_packet:
 1896|  2.01k|{
 1897|  2.01k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.01k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|  2.01k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|  2.01k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.01k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|  2.01k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 2.01k]
  ------------------
 1905|      0|        if (flow->tunnel.flags & FLOW_TNL_F_KEY) {
  ------------------
  |  |   63|      0|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1905:13): [True: 0, False: 0]
  ------------------
 1906|      0|            WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1907|      0|        }
 1908|      0|        WC_MASK_FIELD(wc, tunnel.ip_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1909|      0|        WC_MASK_FIELD(wc, tunnel.ip_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1910|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1911|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1912|      0|        WC_MASK_FIELD(wc, tunnel.flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1913|      0|        WC_MASK_FIELD(wc, tunnel.ip_tos);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1914|      0|        WC_MASK_FIELD(wc, tunnel.ip_ttl);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1915|      0|        WC_MASK_FIELD(wc, tunnel.tp_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1916|      0|        WC_MASK_FIELD(wc, tunnel.tp_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1917|      0|        WC_MASK_FIELD(wc, tunnel.gbp_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1918|      0|        WC_MASK_FIELD(wc, tunnel.gbp_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1919|      0|        WC_MASK_FIELD(wc, tunnel.erspan_ver);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1920|      0|        WC_MASK_FIELD(wc, tunnel.erspan_idx);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1921|      0|        WC_MASK_FIELD(wc, tunnel.erspan_dir);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1922|      0|        WC_MASK_FIELD(wc, tunnel.erspan_hwid);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1923|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1924|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_msgtype);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1925|       |
 1926|      0|        if (!(flow->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (1926:13): [True: 0, False: 0]
  ------------------
 1927|      0|            if (flow->tunnel.metadata.present.map) {
  ------------------
  |  Branch (1927:17): [True: 0, False: 0]
  ------------------
 1928|      0|                wc->masks.tunnel.metadata.present.map =
 1929|      0|                                              flow->tunnel.metadata.present.map;
 1930|      0|                WC_MASK_FIELD(wc, tunnel.metadata.opts.u8);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1931|      0|                WC_MASK_FIELD(wc, tunnel.metadata.tab);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1932|      0|            }
 1933|      0|        } else {
 1934|      0|            WC_MASK_FIELD(wc, tunnel.metadata.present.len);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1935|      0|            memset(wc->masks.tunnel.metadata.opts.gnv, 0xff,
 1936|      0|                   flow->tunnel.metadata.present.len);
 1937|      0|        }
 1938|  2.01k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 2.01k]
  ------------------
 1939|      0|        WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1940|      0|    }
 1941|       |
 1942|       |    /* metadata, regs, and conj_id wildcarded. */
 1943|       |
 1944|  2.01k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|  2.01k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  2.01k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|  2.01k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|  2.01k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|  2.01k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|  2.01k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|  2.01k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|  2.01k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|  2.01k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  2.01k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 2.01k, False: 0]
  ------------------
 1958|  2.01k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  2.01k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  2.01k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  2.01k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  2.04k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  2.04k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 2.04k, False: 3]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  2.04k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  2.04k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 2.01k, False: 32]
  ------------------
 1966|  2.01k|                break;
 1967|  2.01k|            }
 1968|  2.04k|        }
 1969|  2.01k|        dl_type = flow->dl_type;
 1970|  2.01k|    } else {
 1971|      0|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|      0|    }
 1973|       |
 1974|  2.01k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 748, False: 1.26k]
  ------------------
 1975|    748|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|    748|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|    748|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|    748|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|    748|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|    748|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|    748|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|    748|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  1.26k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 756, False: 511]
  ------------------
 1980|    756|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|    756|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|    756|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|    756|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|    756|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|    756|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|    756|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 12, False: 744]
  ------------------
 1984|     12|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|     12|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1985|     12|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|     12|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|     12|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|     12|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1987|    744|        } else {
 1988|    744|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|    744|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|    744|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|    744|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|    744|        }
 1991|    756|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 55, False: 456]
  ------------------
 1992|    456|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 5, False: 451]
  ------------------
 1993|     60|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|     60|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|     60|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|     60|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|     60|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|     60|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|     60|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|     60|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|     60|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|     60|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|     60|        return;
 1999|    451|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 36, False: 415]
  ------------------
 2000|    114|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|    114|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 89, False: 25]
  ------------------
 2001|     89|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|     89|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|     89|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 11, False: 78]
  ------------------
 2003|     11|                break;
 2004|     11|            }
 2005|     89|        }
 2006|     36|        return;
 2007|    415|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 80, False: 335]
  ------------------
 2008|     80|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2009|     80|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2010|     80|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2011|     80|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2012|     80|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2013|     80|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|     80|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2014|    335|    } else {
 2015|    335|        return; /* Unknown ethertype. */
 2016|    335|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  1.58k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  1.58k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  1.58k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  1.58k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  1.58k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  1.58k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  1.58k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  1.58k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  1.58k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  1.58k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  1.58k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 1.45k, False: 130]
  ------------------
 2029|  1.45k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 36, False: 1.41k]
  ------------------
 2030|  1.41k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 221, False: 1.19k]
  ------------------
 2031|  1.19k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 455, False: 742]
  ------------------
 2032|    742|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 203, False: 539]
  ------------------
 2033|    539|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 30, False: 509]
  ------------------
 2034|    987|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 42, False: 467]
  ------------------
 2035|    987|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|    987|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|    987|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|    987|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|    987|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 455, False: 532]
  ------------------
 2039|    455|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|    455|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|    532|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 42, False: 490]
  ------------------
 2041|     42|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|     42|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|     42|        }
 2043|    987|    }
 2044|  1.58k|}
flow_wildcards_is_catchall:
 2170|  2.01k|{
 2171|  2.01k|    const uint64_t *wc_u64 = (const uint64_t *) &wc->masks;
 2172|  2.01k|    size_t i;
 2173|       |
 2174|  2.01k|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  2.01k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (2174:17): [True: 2.01k, False: 0]
  ------------------
 2175|  2.01k|        if (wc_u64[i]) {
  ------------------
  |  Branch (2175:13): [True: 2.01k, False: 0]
  ------------------
 2176|  2.01k|            return false;
 2177|  2.01k|        }
 2178|  2.01k|    }
 2179|      0|    return true;
 2180|  2.01k|}
flow_wildcards_and:
 2189|  2.01k|{
 2190|  2.01k|    uint64_t *dst_u64 = (uint64_t *) &dst->masks;
 2191|  2.01k|    const uint64_t *src1_u64 = (const uint64_t *) &src1->masks;
 2192|  2.01k|    const uint64_t *src2_u64 = (const uint64_t *) &src2->masks;
 2193|  2.01k|    size_t i;
 2194|       |
 2195|   187k|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|   187k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (2195:17): [True: 185k, False: 2.01k]
  ------------------
 2196|   185k|        dst_u64[i] = src1_u64[i] & src2_u64[i];
 2197|   185k|    }
 2198|  2.01k|}
flow_wildcards_equal:
 2230|  2.01k|{
 2231|  2.01k|    return flow_equal(&a->masks, &b->masks);
 2232|  2.01k|}
miniflow_hash_5tuple:
 2301|  2.01k|{
 2302|  2.01k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.01k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 2303|  2.01k|    uint32_t hash = basis;
 2304|       |
 2305|  2.01k|    if (flow) {
  ------------------
  |  Branch (2305:9): [True: 2.01k, False: 0]
  ------------------
 2306|  2.01k|        ovs_be16 dl_type = MINIFLOW_GET_BE16(flow, dl_type);
  ------------------
  |  |  719|  2.01k|    MINIFLOW_GET_TYPE(FLOW, ovs_be16, FIELD)
  |  |  ------------------
  |  |  |  |  694|  2.01k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  2.01k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  2.01k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  2.01k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  2.01k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  2.01k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  2.01k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  2.01k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 1.98k, False: 26]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  2.01k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.98k|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|  1.98k|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|  1.98k|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  2.01k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2307|  2.01k|        uint8_t nw_proto;
 2308|       |
 2309|  2.01k|        if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (2309:13): [True: 756, False: 1.25k]
  ------------------
 2310|    756|            struct flowmap map = FLOWMAP_EMPTY_INITIALIZER;
  ------------------
  |  |  286|    756|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
 2311|    756|            uint64_t value;
 2312|       |
 2313|    756|            FLOWMAP_SET(&map, ipv6_src);
  ------------------
  |  |  306|    756|    flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   62|    756|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |                   flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   68|    756|    DIV_ROUND_UP(FLOW_U64_OFFREM(FIELD) + MEMBER_SIZEOF(struct flow, FIELD), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    756|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |   69|    756|                 sizeof(uint64_t))
  |  |  ------------------
  ------------------
 2314|    756|            FLOWMAP_SET(&map, ipv6_dst);
  ------------------
  |  |  306|    756|    flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   62|    756|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |                   flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   68|    756|    DIV_ROUND_UP(FLOW_U64_OFFREM(FIELD) + MEMBER_SIZEOF(struct flow, FIELD), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    756|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |   69|    756|                 sizeof(uint64_t))
  |  |  ------------------
  ------------------
 2315|       |
 2316|  3.02k|            MINIFLOW_FOR_EACH_IN_FLOWMAP(value, flow, map) {
  ------------------
  |  |  663|    756|    for (struct mf_for_each_in_map_aux aux__ =                      \
  |  |  664|    756|        { 0, (FLOW)->map, (FLOWMAP), miniflow_get_values(FLOW) };   \
  |  |  665|  3.78k|         mf_get_next_in_map(&aux__, &(VALUE));)
  |  |  ------------------
  |  |  |  Branch (665:10): [True: 3.02k, False: 756]
  |  |  ------------------
  ------------------
 2317|  3.02k|                hash = hash_add64(hash, value);
 2318|  3.02k|            }
 2319|  1.25k|        } else if (dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (2319:20): [True: 748, False: 511]
  ------------------
 2320|    803|                   || dl_type == htons(ETH_TYPE_ARP)) {
  ------------------
  |  Branch (2320:23): [True: 55, False: 456]
  ------------------
 2321|    803|            hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_src));
  ------------------
  |  |  721|    803|    MINIFLOW_GET_TYPE(FLOW, uint32_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|    803|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|    803|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|    803|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|    803|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|    803|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|    803|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|    803|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|    803|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 676, False: 127]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|    803|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    676|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|    676|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|    676|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|    803|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2322|    803|            hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_dst));
  ------------------
  |  |  721|    803|    MINIFLOW_GET_TYPE(FLOW, uint32_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|    803|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|    803|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|    803|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|    803|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|    803|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|    803|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|    803|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|    803|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 676, False: 127]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|    803|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    676|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|    676|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|    676|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|    803|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2323|    803|        } else {
 2324|    456|            goto out;
 2325|    456|        }
 2326|       |
 2327|  1.55k|        nw_proto = MINIFLOW_GET_U8(flow, nw_proto);
  ------------------
  |  |  715|  1.55k|    MINIFLOW_GET_TYPE(FLOW, uint8_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|  1.55k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  1.55k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  1.55k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  1.55k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  1.55k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  1.55k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  1.55k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  1.55k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 1.24k, False: 316]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  1.55k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.24k|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|  1.24k|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|  1.24k|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  1.55k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2328|  1.55k|        hash = hash_add(hash, nw_proto);
 2329|  1.55k|        if (nw_proto != IPPROTO_TCP && nw_proto != IPPROTO_UDP
  ------------------
  |  Branch (2329:13): [True: 1.10k, False: 456]
  |  Branch (2329:40): [True: 898, False: 205]
  ------------------
 2330|    898|            && nw_proto != IPPROTO_SCTP && nw_proto != IPPROTO_ICMP
  ------------------
  |  Branch (2330:16): [True: 867, False: 31]
  |  Branch (2330:44): [True: 827, False: 40]
  ------------------
 2331|    827|            && nw_proto != IPPROTO_ICMPV6) {
  ------------------
  |  Branch (2331:16): [True: 606, False: 221]
  ------------------
 2332|    606|            goto out;
 2333|    606|        }
 2334|       |
 2335|       |        /* Add both ports at once. */
 2336|    953|        hash = hash_add(hash, (OVS_FORCE uint32_t) miniflow_get_ports(flow));
 2337|    953|    }
 2338|  2.01k|out:
 2339|  2.01k|    return hash_finish(hash, 42);
 2340|  2.01k|}
miniflow_init:
 3474|  18.1k|{
 3475|  18.1k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|  18.1k|    size_t idx;
 3477|       |
 3478|   106k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|  18.1k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  18.1k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   124k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 106k, False: 18.1k]
  |  |  ------------------
  ------------------
 3479|   106k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   106k|    }
 3481|  18.1k|}
miniflow_map_init:
 3486|  18.1k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  18.1k|    flowmap_init(&flow->map);
 3489|  1.68M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  1.68M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 1.66M, False: 18.1k]
  ------------------
 3490|  1.66M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 106k, False: 1.55M]
  ------------------
 3491|   106k|            flowmap_set(&flow->map, i, 1);
 3492|   106k|        }
 3493|  1.66M|    }
 3494|  18.1k|}
miniflow_alloc:
 3501|  20.1k|{
 3502|  20.1k|    size_t n_values = miniflow_n_values(src);
 3503|  20.1k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  20.1k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  20.1k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  20.1k|    size_t i;
 3506|       |
 3507|  20.1k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  20.1k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  20.1k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|  40.2k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 20.1k, False: 20.1k]
  ------------------
 3510|  20.1k|        *dst = *src;   /* Copy maps. */
 3511|  20.1k|        dsts[i] = dst;
 3512|  20.1k|        dst += 1;      /* Just past the maps. */
 3513|  20.1k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|  20.1k|    }
 3515|  20.1k|    return data_size;
 3516|  20.1k|}
miniflow_create:
 3522|  18.1k|{
 3523|  18.1k|    struct miniflow tmp;
 3524|  18.1k|    struct miniflow *dst;
 3525|       |
 3526|  18.1k|    miniflow_map_init(&tmp, src);
 3527|       |
 3528|  18.1k|    miniflow_alloc(&dst, 1, &tmp);
 3529|  18.1k|    miniflow_init(dst, src);
 3530|  18.1k|    return dst;
 3531|  18.1k|}
miniflow_clone:
 3538|  2.01k|{
 3539|  2.01k|    *dst = *src;   /* Copy maps. */
 3540|  2.01k|    memcpy(miniflow_values(dst), miniflow_get_values(src),
 3541|  2.01k|           MINIFLOW_VALUES_SIZE(n_values));
  ------------------
  |  |  527|  2.01k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3542|  2.01k|}
miniflow_expand:
 3547|  8.06k|{
 3548|  8.06k|    memset(dst, 0, sizeof *dst);
 3549|  8.06k|    flow_union_with_miniflow(dst, src);
 3550|  8.06k|}
miniflow_equal:
 3555|  4.03k|{
 3556|  4.03k|    const uint64_t *ap = miniflow_get_values(a);
 3557|  4.03k|    const uint64_t *bp = miniflow_get_values(b);
 3558|       |
 3559|       |    /* This is mostly called after a matching hash, so it is highly likely that
 3560|       |     * the maps are equal as well. */
 3561|  4.03k|    if (OVS_LIKELY(flowmap_equal(a->map, b->map))) {
  ------------------
  |  |   65|  4.03k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.03k, False: 0]
  |  |  ------------------
  ------------------
 3562|  4.03k|        return !memcmp(ap, bp, miniflow_n_values(a) * sizeof *ap);
 3563|  4.03k|    } else {
 3564|      0|        size_t idx;
 3565|       |
 3566|      0|        FLOWMAP_FOR_EACH_INDEX (idx, flowmap_or(a->map, b->map)) {
  ------------------
  |  |  337|      0|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|      0|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|      0|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 3567|      0|            if ((flowmap_is_set(&a->map, idx) ? *ap++ : 0)
  ------------------
  |  Branch (3567:17): [True: 0, False: 0]
  |  Branch (3567:18): [True: 0, False: 0]
  ------------------
 3568|      0|                != (flowmap_is_set(&b->map, idx) ? *bp++ : 0)) {
  ------------------
  |  Branch (3568:21): [True: 0, False: 0]
  ------------------
 3569|      0|                return false;
 3570|      0|            }
 3571|      0|        }
 3572|      0|    }
 3573|       |
 3574|      0|    return true;
 3575|  4.03k|}
miniflow_equal_in_minimask:
 3582|  4.03k|{
 3583|  4.03k|    const uint64_t *p = miniflow_get_values(&mask->masks);
 3584|  4.03k|    size_t idx;
 3585|       |
 3586|  33.9k|    FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
  ------------------
  |  |  337|  4.03k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.03k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  35.9k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 33.9k, False: 2.01k]
  |  |  ------------------
  ------------------
 3587|  33.9k|        if ((miniflow_get(a, idx) ^ miniflow_get(b, idx)) & *p++) {
  ------------------
  |  Branch (3587:13): [True: 2.01k, False: 31.9k]
  ------------------
 3588|  2.01k|            return false;
 3589|  2.01k|        }
 3590|  33.9k|    }
 3591|       |
 3592|  2.01k|    return true;
 3593|  4.03k|}
miniflow_equal_flow_in_minimask:
 3600|  4.03k|{
 3601|  4.03k|    const uint64_t *p = miniflow_get_values(&mask->masks);
 3602|  4.03k|    size_t idx;
 3603|       |
 3604|  33.9k|    FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
  ------------------
  |  |  337|  4.03k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.03k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  35.9k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 33.9k, False: 2.01k]
  |  |  ------------------
  ------------------
 3605|  33.9k|        if ((miniflow_get(a, idx) ^ flow_u64_value(b, idx)) & *p++) {
  ------------------
  |  Branch (3605:13): [True: 2.01k, False: 31.9k]
  ------------------
 3606|  2.01k|            return false;
 3607|  2.01k|        }
 3608|  33.9k|    }
 3609|       |
 3610|  2.01k|    return true;
 3611|  4.03k|}
minimask_create:
 3624|  14.0k|{
 3625|  14.0k|    return (struct minimask *)miniflow_create(&wc->masks);
 3626|  14.0k|}
minimask_combine:
 3637|  4.03k|{
 3638|  4.03k|    struct miniflow *dst = &dst_->masks;
 3639|  4.03k|    uint64_t *dst_values = storage;
 3640|  4.03k|    const struct miniflow *a = &a_->masks;
 3641|  4.03k|    const struct miniflow *b = &b_->masks;
 3642|  4.03k|    size_t idx;
 3643|       |
 3644|  4.03k|    flowmap_init(&dst->map);
 3645|       |
 3646|  4.03k|    FLOWMAP_FOR_EACH_INDEX(idx, flowmap_and(a->map, b->map)) {
  ------------------
  |  |  337|  4.03k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.03k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  4.03k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 0, False: 4.03k]
  |  |  ------------------
  ------------------
 3647|       |        /* Both 'a' and 'b' have non-zero data at 'idx'. */
 3648|      0|        uint64_t mask = *miniflow_get__(a, idx) & *miniflow_get__(b, idx);
 3649|       |
 3650|      0|        if (mask) {
  ------------------
  |  Branch (3650:13): [True: 0, False: 0]
  ------------------
 3651|      0|            flowmap_set(&dst->map, idx, 1);
 3652|      0|            *dst_values++ = mask;
 3653|      0|        }
 3654|      0|    }
 3655|  4.03k|}
minimask_expand:
 3660|  2.01k|{
 3661|  2.01k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  2.01k|}
minimask_has_extra:
 3691|  8.00k|{
 3692|  8.00k|    const uint64_t *bp = miniflow_get_values(&b->masks);
 3693|  8.00k|    size_t idx;
 3694|       |
 3695|  24.7k|    FLOWMAP_FOR_EACH_INDEX(idx, b->masks.map) {
  ------------------
  |  |  337|  8.00k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  8.00k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  28.8k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 24.7k, False: 4.03k]
  |  |  ------------------
  ------------------
 3696|  24.7k|        uint64_t b_u64 = *bp++;
 3697|       |
 3698|       |        /* 'b_u64' is non-zero, check if the data in 'a' is either zero
 3699|       |         * or misses some of the bits in 'b_u64'. */
 3700|  24.7k|        if (!MINIFLOW_IN_MAP(&a->masks, idx)
  ------------------
  |  |  689|  49.5k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  ------------------
  |  Branch (3700:13): [True: 2.01k, False: 22.7k]
  ------------------
 3701|  22.7k|            || ((*miniflow_get__(&a->masks, idx) & b_u64) != b_u64)) {
  ------------------
  |  Branch (3701:16): [True: 1.96k, False: 20.8k]
  ------------------
 3702|  3.97k|            return true; /* 'a' wildcards some bits 'b' doesn't. */
 3703|  3.97k|        }
 3704|  24.7k|    }
 3705|       |
 3706|  4.03k|    return false;
 3707|  8.00k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|    713|{
  492|    713|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 713]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|    713|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 713]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  3.37k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 3.37k, Folded]
  ------------------
  501|  3.37k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|  20.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 543, False: 2.82k]
  |  |  |  Branch (65:51): [True: 2.30k, False: 1.06k]
  |  |  |  Branch (65:51): [True: 1.94k, False: 362]
  |  |  |  Branch (65:51): [True: 1.54k, False: 398]
  |  |  |  Branch (65:51): [True: 1.23k, False: 310]
  |  |  |  Branch (65:51): [True: 543, False: 696]
  |  |  ------------------
  ------------------
  502|  3.37k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  3.37k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  3.37k|                       && (*nw_proto != IPPROTO_AH)
  505|  3.37k|                       && (*nw_proto != IPPROTO_FRAGMENT))) {
  506|       |            /* It's either a terminal header (e.g., TCP, UDP) or one we
  507|       |             * don't understand.  In either case, we're done with the
  508|       |             * packet, so use it to fill in 'nw_proto'. */
  509|    543|            return true;
  510|    543|        }
  511|       |
  512|       |        /* We only verify that at least 8 bytes of the next header are
  513|       |         * available, but many of these headers are longer.  Ensure that
  514|       |         * accesses within the extension header are within those first 8
  515|       |         * bytes. All extension headers are required to be at least 8
  516|       |         * bytes. */
  517|  2.82k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  2.82k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 109, False: 2.71k]
  |  |  ------------------
  ------------------
  518|    109|            return false;
  519|    109|        }
  520|       |
  521|  2.71k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 995, False: 1.72k]
  ------------------
  522|  1.72k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 385, False: 1.33k]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  1.38k|            const struct ip6_ext *ext_hdr = *datap;
  527|  1.38k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  1.38k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  1.38k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 14, False: 1.36k]
  |  |  ------------------
  ------------------
  529|  1.38k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|     14|                return false;
  531|     14|            }
  532|  1.38k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 353, False: 985]
  ------------------
  533|    353|            const struct ip6_rt_hdr *tmp;
  534|    353|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 41, False: 312]
  ------------------
  535|     41|                rt_hdr = &tmp;
  536|     41|            }
  537|       |
  538|    353|            *rt_hdr = *datap;
  539|    353|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    353|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    353|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 14, False: 339]
  |  |  ------------------
  ------------------
  541|    353|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     14|                return false;
  543|     14|            }
  544|    985|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 300, False: 685]
  ------------------
  545|       |            /* A standard AH definition isn't available, but the fields
  546|       |             * we care about are in the same location as the generic
  547|       |             * option header--only the header length is calculated
  548|       |             * differently. */
  549|    300|            const struct ip6_ext *ext_hdr = *datap;
  550|    300|            *nw_proto = ext_hdr->ip6e_nxt;
  551|    300|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    300|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 10, False: 290]
  |  |  ------------------
  ------------------
  552|    300|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  553|     10|                return false;
  554|     10|            }
  555|    685|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 685, False: 0]
  ------------------
  556|    685|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    685|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 66, False: 619]
  ------------------
  558|     66|                frag_hdr = &tmp;
  559|     66|            }
  560|       |
  561|    685|            *frag_hdr = *datap;
  562|       |
  563|    685|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    685|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 685]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    685|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 311, False: 374]
  ------------------
  570|    311|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    311|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    311|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 23, False: 288]
  ------------------
  572|     23|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     23|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|     23|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|     23|                }
  576|    311|            }
  577|    685|        }
  578|  2.71k|    }
  579|    713|}
flow.c:data_pull:
  110|  27.7k|{
  111|  27.7k|    const char *data = *datap;
  112|  27.7k|    *datap = data + size;
  113|  27.7k|    *sizep -= size;
  114|  27.7k|    return data;
  115|  27.7k|}
flow.c:parse_vlan:
  350|  1.98k|{
  351|  1.98k|    const ovs_be16 *eth_type;
  352|       |
  353|  1.98k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  1.98k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  1.98k|    eth_type = *datap;
  356|       |
  357|  1.98k|    size_t n;
  358|  2.02k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 37, False: 1.98k]
  |  Branch (358:45): [True: 36, False: 1]
  ------------------
  359|     36|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|     36|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 4, False: 32]
  |  |  ------------------
  ------------------
  360|      4|            break;
  361|      4|        }
  362|       |
  363|     32|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|     32|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|     32|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|     32|        eth_type = *datap;
  368|     32|    }
  369|  1.98k|    return n;
  370|  1.98k|}
flow.c:parse_ethertype:
  374|  1.98k|{
  375|  1.98k|    const struct llc_snap_header *llc;
  376|  1.98k|    ovs_be16 proto;
  377|       |
  378|  1.98k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  1.98k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  1.98k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.88k, False: 108]
  |  |  ------------------
  ------------------
  380|  1.88k|        return proto;
  381|  1.88k|    }
  382|       |
  383|    108|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|    108|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 23, False: 85]
  |  |  ------------------
  ------------------
  384|     23|        return htons(FLOW_DL_TYPE_NONE);
  385|     23|    }
  386|       |
  387|     85|    llc = *datap;
  388|     85|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|    426|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 74, False: 11]
  |  |  |  Branch (66:53): [True: 18, False: 67]
  |  |  |  Branch (66:53): [True: 11, False: 56]
  |  |  |  Branch (66:53): [True: 8, False: 48]
  |  |  |  Branch (66:53): [True: 37, False: 11]
  |  |  ------------------
  ------------------
  389|     85|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|     85|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|     85|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|     85|                               sizeof llc->snap.snap_org))) {
  393|     74|        return htons(FLOW_DL_TYPE_NONE);
  394|     74|    }
  395|       |
  396|     11|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|     11|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|     11|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7, False: 4]
  |  |  ------------------
  ------------------
  399|      7|        return llc->snap.snap_type;
  400|      7|    }
  401|       |
  402|      4|    return htons(FLOW_DL_TYPE_NONE);
  403|     11|}
flow.c:parse_mpls:
  334|     36|{
  335|     36|    const struct mpls_hdr *mh;
  336|     36|    int count = 0;
  337|       |
  338|  17.5k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 17.4k, False: 17]
  ------------------
  339|  17.4k|        count++;
  340|  17.4k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 19, False: 17.4k]
  ------------------
  341|     19|            break;
  342|     19|        }
  343|  17.4k|    }
  344|     36|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|     36|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 18, False: 18]
  |  |  ------------------
  ------------------
  345|     36|}
flow.c:ipv4_sanity_check:
  685|    748|{
  686|    748|    int ip_len;
  687|    748|    uint16_t tot_len;
  688|       |
  689|    748|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|    748|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 12, False: 736]
  |  |  ------------------
  ------------------
  690|     12|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|     12|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     12|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  691|     12|        return false;
  692|     12|    }
  693|    736|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|    736|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|    736|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  1.46k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 5, False: 731]
  |  |  |  Branch (66:53): [True: 3, False: 733]
  |  |  |  Branch (66:53): [True: 2, False: 731]
  |  |  ------------------
  ------------------
  696|      5|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|      5|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      5|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|      5|        return false;
  698|      5|    }
  699|       |
  700|    731|    tot_len = ntohs(nh->ip_tot_len);
  701|    731|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  2.87k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 55, False: 676]
  |  |  |  Branch (66:53): [True: 14, False: 717]
  |  |  |  Branch (66:53): [True: 23, False: 694]
  |  |  |  Branch (66:53): [True: 18, False: 676]
  |  |  ------------------
  ------------------
  702|    731|                size - tot_len > UINT16_MAX)) {
  703|     55|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|     55|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     55|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|     55|        return false;
  705|     55|    }
  706|       |
  707|    676|    *ip_lenp = ip_len;
  708|    676|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|    731|}
flow.c:ipv4_get_nw_frag:
  715|    676|{
  716|    676|    uint8_t nw_frag = 0;
  717|       |
  718|    676|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|    676|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 299, False: 377]
  |  |  ------------------
  ------------------
  719|    299|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    299|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|    299|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 107, False: 192]
  ------------------
  721|    107|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    107|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|    107|        }
  723|    299|    }
  724|       |
  725|    676|    return nw_frag;
  726|    676|}
flow.c:ipv6_sanity_check:
  730|    756|{
  731|    756|    uint16_t plen;
  732|       |
  733|    756|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|    756|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 8, False: 748]
  |  |  ------------------
  ------------------
  734|      8|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|      8|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      8|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  735|      8|        return false;
  736|      8|    }
  737|       |
  738|    748|    plen = ntohs(nh->ip6_plen);
  739|    748|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|    748|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 27, False: 721]
  |  |  ------------------
  ------------------
  740|     27|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|     27|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     27|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|     27|        return false;
  742|     27|    }
  743|       |
  744|    721|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|    721|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 8, False: 713]
  |  |  ------------------
  ------------------
  745|      8|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|      8|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      8|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  746|      8|        return false;
  747|      8|    }
  748|       |
  749|    713|    return true;
  750|    721|}
flow.c:data_try_pull:
  122|  22.1k|{
  123|  22.1k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  22.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 22.0k, False: 77]
  |  |  ------------------
  ------------------
  124|  22.1k|}
flow.c:parse_icmpv6:
  422|    211|{
  423|    211|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 40, False: 171]
  ------------------
  424|     40|        return false;
  425|     40|    }
  426|       |
  427|    171|    arp_buf[0] = eth_addr_zero;
  428|    171|    arp_buf[1] = eth_addr_zero;
  429|    171|    *opt_type = 0;
  430|       |
  431|    171|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    171|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    171|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    171|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 12, False: 159]
  |  |  ------------------
  ------------------
  435|     12|        return true;
  436|     12|    }
  437|       |
  438|  1.85k|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 1.77k, False: 73]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|  1.77k|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|  1.77k|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|  1.77k|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|  1.77k|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 16, False: 1.76k]
  |  Branch (444:25): [True: 31, False: 1.73k]
  ------------------
  445|     47|            return true;
  446|     47|        }
  447|       |
  448|       |        /* Store the link layer address if the appropriate option is
  449|       |         * provided.  It is considered an error if the same link
  450|       |         * layer option is specified twice. */
  451|  1.73k|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 497, False: 1.23k]
  |  Branch (451:56): [True: 277, False: 220]
  ------------------
  452|    277|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|    277|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 257, False: 20]
  |  |  ------------------
  ------------------
  453|    257|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|    257|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 34, False: 223]
  ------------------
  456|     34|                    *opt_type = lla_opt->type;
  457|     34|                }
  458|    257|            } else {
  459|     20|                goto invalid;
  460|     20|            }
  461|  1.45k|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 593, False: 862]
  |  Branch (461:63): [True: 262, False: 331]
  ------------------
  462|    262|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|    262|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 243, False: 19]
  |  |  ------------------
  ------------------
  463|    243|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|    243|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 37, False: 206]
  ------------------
  466|     37|                    *opt_type = lla_opt->type;
  467|     37|                }
  468|    243|            } else {
  469|     19|                goto invalid;
  470|     19|            }
  471|    262|        }
  472|       |
  473|  1.69k|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|  1.69k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 1.69k]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|  1.69k|    }
  477|     73|    return true;
  478|       |
  479|     39|invalid:
  480|     39|    *nd_target = NULL;
  481|     39|    arp_buf[0] = eth_addr_zero;
  482|     39|    arp_buf[1] = eth_addr_zero;
  483|       |    return true;
  484|    159|}
flow.c:icmp6_is_nd:
  407|    211|{
  408|    211|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 196, False: 15]
  ------------------
  409|    196|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 127, False: 69]
  ------------------
  410|     69|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 44, False: 25]
  ------------------
  411|    211|}

miniflow_target.c:miniflow_get_vid:
  826|  4.03k|{
  827|  4.03k|    if (n < FLOW_MAX_VLAN_HEADERS) {
  ------------------
  |  |   75|  4.03k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (827:9): [True: 4.03k, False: 0]
  ------------------
  828|  4.03k|        union flow_vlan_hdr hdr = {
  829|  4.03k|            .qtag = MINIFLOW_GET_BE32(flow, vlans[n].qtag)
  ------------------
  |  |  723|  4.03k|    MINIFLOW_GET_TYPE(FLOW, ovs_be32, FIELD)
  |  |  ------------------
  |  |  |  |  694|  4.03k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  4.03k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  4.03k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  4.03k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  4.03k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  4.03k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  4.03k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  4.03k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 58, False: 3.97k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  4.03k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     58|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|     58|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|     58|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  4.03k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|  4.03k|        };
  831|  4.03k|        return vlan_tci_to_vid(hdr.tci);
  832|  4.03k|    }
  833|      0|    return 0;
  834|  4.03k|}
miniflow_target.c:flowmap_is_set:
  355|   189k|{
  356|   189k|    return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   189k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  271|   189k|#define MAP_1 (map_t)1
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   189k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  357|   189k|}
miniflow_target.c:miniflow_get__:
  678|  10.5k|{
  679|  10.5k|    const uint64_t *values = miniflow_get_values(mf);
  680|  10.5k|    const map_t *map = mf->map.bits;
  681|       |
  682|  21.1k|    while (idx >= MAP_T_BITS) {
  ------------------
  |  |  270|  21.1k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (682:12): [True: 10.5k, False: 10.5k]
  ------------------
  683|       |        idx -= MAP_T_BITS;
  ------------------
  |  |  270|  10.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  684|  10.5k|        values += count_1bits(*map++);
  685|  10.5k|    }
  686|  10.5k|    return miniflow_values_get__(values, *map, idx);
  687|  10.5k|}
miniflow_target.c:miniflow_get_values:
  535|  24.6k|{
  536|  24.6k|    return (const uint64_t *)(mf + 1);
  537|  24.6k|}
miniflow_target.c:miniflow_values_get__:
  670|  10.5k|{
  671|  10.5k|    return values + count_1bits(map & ((MAP_1 << idx) - 1));
  ------------------
  |  |  271|  10.5k|#define MAP_1 (map_t)1
  ------------------
  672|  10.5k|}
miniflow_target.c:miniflow_get:
  800|   185k|{
  801|   185k|    return MINIFLOW_IN_MAP(flow, u64_ofs) ? *miniflow_get__(flow, u64_ofs) : 0;
  ------------------
  |  |  689|   185k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  ------------------
  |  |  |  Branch (689:34): [True: 10.5k, False: 174k]
  |  |  ------------------
  ------------------
  802|   185k|}
miniflow_target.c:flow_equal:
  184|  4.03k|{
  185|  4.03k|    return !flow_compare_3way(a, b);
  186|  4.03k|}
miniflow_target.c:flow_compare_3way:
  178|  4.03k|{
  179|  4.03k|    return memcmp(a, b, sizeof *a);
  180|  4.03k|}
miniflow_target.c:miniflow_n_values:
  568|  8.06k|{
  569|  8.06k|    return flowmap_n_1bits(flow->map);
  570|  8.06k|}
miniflow_target.c:flowmap_n_1bits:
  462|  8.06k|{
  463|  8.06k|    unsigned int n_1bits = 0;
  464|  8.06k|    size_t unit;
  465|       |
  466|  16.1k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  24.1k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  24.1k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  24.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 16.1k, False: 8.06k]
  |  |  ------------------
  ------------------
  467|  16.1k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  16.1k|    }
  469|  8.06k|    return n_1bits;
  470|  8.06k|}
miniflow_target.c:flowmap_next_index:
  479|  58.9k|{
  480|  65.0k|    for (;;) {
  481|  65.0k|        map_t *map = &aux->map.bits[aux->unit];
  482|  65.0k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 52.9k, False: 12.0k]
  ------------------
  483|  52.9k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|  52.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|  52.9k|            *map = zero_rightmost_1bit(*map);
  485|  52.9k|            return true;
  486|  52.9k|        }
  487|  12.0k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|  12.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  12.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 6.04k, False: 6.04k]
  ------------------
  488|       |            return false;
  489|  6.04k|        }
  490|  12.0k|    }
  491|  58.9k|}
miniflow_target.c:flowmap_set:
  385|  52.9k|{
  386|  52.9k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|  52.9k|#define MAP_1 (map_t)1
  ------------------
  387|  52.9k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|  52.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|  52.9k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|  52.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|  52.9k|    fm->bits[unit] |= n_bits_mask << idx;
  392|       |    /* The seemingly unnecessary bounds check on 'unit' is a workaround for a
  393|       |     * false-positive array out of bounds error by GCC 4.9. */
  394|  52.9k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|  52.9k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   105k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|  10.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 10.0k, False: 42.8k]
  |  Branch (394:37): [True: 0, False: 10.0k]
  ------------------
  395|       |        /* 'MAP_T_BITS - idx' bits were set on 'unit', set the remaining
  396|       |         * bits from the next unit. */
  397|       |        fm->bits[unit + 1] |= n_bits_mask >> (MAP_T_BITS - idx);
  ------------------
  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  398|      0|    }
  399|  52.9k|}
miniflow_target.c:minimask_is_catchall:
  789|  12.0k|{
  790|       |    /* For every 1-bit in mask's map, the corresponding value is non-zero,
  791|       |     * so the only way the mask can not fix any bits or fields is for the
  792|       |     * map the be zero. */
  793|  12.0k|    return flowmap_is_empty(mask->masks.map);
  794|  12.0k|}
miniflow_target.c:flowmap_is_empty:
  449|  12.0k|{
  450|  12.0k|    map_t map;
  451|       |
  452|  22.1k|    FLOWMAP_FOR_EACH_MAP (map, fm) {
  ------------------
  |  |  324|  12.0k|    for (size_t unit__ = 0;                                       \
  |  |  325|  28.2k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  28.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  56.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 22.1k, False: 6.09k]
  |  |  |  Branch (325:36): [True: 22.1k, False: 0]
  |  |  ------------------
  |  |  326|  16.1k|         unit__++)
  ------------------
  453|  22.1k|        if (map) {
  ------------------
  |  Branch (453:13): [True: 5.99k, False: 16.1k]
  ------------------
  454|  5.99k|            return false;
  455|  5.99k|        }
  456|  22.1k|    }
  457|  6.09k|    return true;
  458|  12.0k|}
miniflow_target.c:mf_get_next_in_map:
  621|  33.9k|{
  622|  33.9k|    map_t *map, *fmap;
  623|  33.9k|    map_t rm1bit;
  624|       |
  625|       |    /* Skip empty map units. */
  626|  35.9k|    while (OVS_UNLIKELY(!*(map = &aux->map.bits[aux->unit]))) {
  ------------------
  |  |   66|  35.9k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 4.03k, False: 31.9k]
  |  |  ------------------
  ------------------
  627|       |        /* Skip remaining data in the current unit before advancing
  628|       |         * to the next. */
  629|  4.03k|        aux->values += count_1bits(aux->fmap.bits[aux->unit]);
  630|  4.03k|        if (++aux->unit == FLOWMAP_UNITS) {
  ------------------
  |  |  280|  4.03k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  4.03k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (630:13): [True: 2.01k, False: 2.01k]
  ------------------
  631|  2.01k|            return false;
  632|  2.01k|        }
  633|  4.03k|    }
  634|       |
  635|  31.9k|    rm1bit = rightmost_1bit(*map);
  636|  31.9k|    *map -= rm1bit;
  637|  31.9k|    fmap = &aux->fmap.bits[aux->unit];
  638|       |
  639|       |    /* If the rightmost 1-bit found from the current unit in 'aux->map'
  640|       |     * ('rm1bit') is also present in 'aux->fmap', store the corresponding
  641|       |     * value from 'aux->values' to '*value', otherwise store 0. */
  642|  31.9k|    if (OVS_LIKELY(*fmap & rm1bit)) {
  ------------------
  |  |   65|  31.9k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10.0k, False: 21.8k]
  |  |  ------------------
  ------------------
  643|       |        /* Skip all 64-bit words in 'values' preceding the one corresponding
  644|       |         * to 'rm1bit'. */
  645|  10.0k|        map_t trash = *fmap & (rm1bit - 1);
  646|       |
  647|       |        /* Avoid resetting 'fmap' and calling count_1bits() when trash is
  648|       |         * zero. */
  649|  10.0k|        if (trash) {
  ------------------
  |  Branch (649:13): [True: 8.06k, False: 1.98k]
  ------------------
  650|  8.06k|            *fmap -= trash;
  651|  8.06k|            aux->values += count_1bits(trash);
  652|  8.06k|        }
  653|       |
  654|  10.0k|        *value = *aux->values;
  655|  21.8k|    } else {
  656|  21.8k|        *value = 0;
  657|  21.8k|    }
  658|       |    return true;
  659|  33.9k|}
flow.c:miniflow_values:
  530|  22.1k|{
  531|  22.1k|    return (uint64_t *)(mf + 1);
  532|  22.1k|}
flow.c:flowmap_set:
  385|   118k|{
  386|   118k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   118k|#define MAP_1 (map_t)1
  ------------------
  387|   118k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   118k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   118k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   118k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   118k|    fm->bits[unit] |= n_bits_mask << idx;
  392|       |    /* The seemingly unnecessary bounds check on 'unit' is a workaround for a
  393|       |     * false-positive array out of bounds error by GCC 4.9. */
  394|   118k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   118k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   237k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|  24.1k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 24.1k, False: 94.7k]
  |  Branch (394:37): [True: 0, False: 24.1k]
  ------------------
  395|       |        /* 'MAP_T_BITS - idx' bits were set on 'unit', set the remaining
  396|       |         * bits from the next unit. */
  397|       |        fm->bits[unit + 1] |= n_bits_mask >> (MAP_T_BITS - idx);
  ------------------
  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  398|      0|    }
  399|   118k|}
flow.c:odp_to_u32:
  202|  2.01k|{
  203|  2.01k|    return (OVS_FORCE uint32_t) odp_port;
  204|  2.01k|}
flow.c:is_nd:
 1119|    756|{
 1120|    756|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 30, False: 726]
  ------------------
 1121|     30|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 30, False: 0]
  ------------------
 1122|     30|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|     30|        }
 1124|     30|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 2, False: 28]
  ------------------
 1125|      2|            return false;
 1126|      2|        }
 1127|       |
 1128|     28|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 28, False: 0]
  ------------------
 1129|     28|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|     28|        }
 1131|     28|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 4, False: 24]
  ------------------
 1132|     24|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 8, False: 16]
  ------------------
 1133|     30|    }
 1134|    726|    return false;
 1135|    756|}
flow.c:is_icmpv6:
 1107|    756|{
 1108|    756|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 756, False: 0]
  ------------------
 1109|    756|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 756, False: 0]
  ------------------
 1110|    756|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|    756|        }
 1112|    756|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|    756|    }
 1114|      0|    return false;
 1115|    756|}
flow.c:get_dl_type:
 1036|    756|{
 1037|    756|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 756, False: 0]
  ------------------
 1038|    756|        return flow->dl_type;
 1039|    756|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 0, False: 0]
  ------------------
 1040|      0|        return pt_ns_type_be(flow->packet_type);
 1041|      0|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|      0|    }
 1044|    756|}
flow.c:flowmap_init:
  343|  22.1k|{
  344|  22.1k|    memset(fm, 0, sizeof *fm);
  345|  22.1k|}
flow.c:flow_equal:
  184|  2.01k|{
  185|  2.01k|    return !flow_compare_3way(a, b);
  186|  2.01k|}
flow.c:flow_compare_3way:
  178|  2.01k|{
  179|  2.01k|    return memcmp(a, b, sizeof *a);
  180|  2.01k|}
flow.c:flowmap_is_set:
  355|   132k|{
  356|   132k|    return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   132k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  271|   132k|#define MAP_1 (map_t)1
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   132k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  357|   132k|}
flow.c:miniflow_get__:
  678|  60.3k|{
  679|  60.3k|    const uint64_t *values = miniflow_get_values(mf);
  680|  60.3k|    const map_t *map = mf->map.bits;
  681|       |
  682|   118k|    while (idx >= MAP_T_BITS) {
  ------------------
  |  |  270|   118k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (682:12): [True: 58.3k, False: 60.3k]
  ------------------
  683|       |        idx -= MAP_T_BITS;
  ------------------
  |  |  270|  58.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  684|  58.3k|        values += count_1bits(*map++);
  685|  58.3k|    }
  686|  60.3k|    return miniflow_values_get__(values, *map, idx);
  687|  60.3k|}
flow.c:miniflow_values_get__:
  670|  60.3k|{
  671|  60.3k|    return values + count_1bits(map & ((MAP_1 << idx) - 1));
  ------------------
  |  |  271|  60.3k|#define MAP_1 (map_t)1
  ------------------
  672|  60.3k|}
flow.c:miniflow_get_values:
  535|  95.2k|{
  536|  95.2k|    return (const uint64_t *)(mf + 1);
  537|  95.2k|}
flow.c:mf_get_next_in_map:
  621|  3.78k|{
  622|  3.78k|    map_t *map, *fmap;
  623|  3.78k|    map_t rm1bit;
  624|       |
  625|       |    /* Skip empty map units. */
  626|  4.53k|    while (OVS_UNLIKELY(!*(map = &aux->map.bits[aux->unit]))) {
  ------------------
  |  |   66|  4.53k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.51k, False: 3.02k]
  |  |  ------------------
  ------------------
  627|       |        /* Skip remaining data in the current unit before advancing
  628|       |         * to the next. */
  629|  1.51k|        aux->values += count_1bits(aux->fmap.bits[aux->unit]);
  630|  1.51k|        if (++aux->unit == FLOWMAP_UNITS) {
  ------------------
  |  |  280|  1.51k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  1.51k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (630:13): [True: 756, False: 756]
  ------------------
  631|    756|            return false;
  632|    756|        }
  633|  1.51k|    }
  634|       |
  635|  3.02k|    rm1bit = rightmost_1bit(*map);
  636|  3.02k|    *map -= rm1bit;
  637|  3.02k|    fmap = &aux->fmap.bits[aux->unit];
  638|       |
  639|       |    /* If the rightmost 1-bit found from the current unit in 'aux->map'
  640|       |     * ('rm1bit') is also present in 'aux->fmap', store the corresponding
  641|       |     * value from 'aux->values' to '*value', otherwise store 0. */
  642|  3.02k|    if (OVS_LIKELY(*fmap & rm1bit)) {
  ------------------
  |  |   65|  3.02k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.74k, False: 277]
  |  |  ------------------
  ------------------
  643|       |        /* Skip all 64-bit words in 'values' preceding the one corresponding
  644|       |         * to 'rm1bit'. */
  645|  2.74k|        map_t trash = *fmap & (rm1bit - 1);
  646|       |
  647|       |        /* Avoid resetting 'fmap' and calling count_1bits() when trash is
  648|       |         * zero. */
  649|  2.74k|        if (trash) {
  ------------------
  |  Branch (649:13): [True: 2.74k, False: 0]
  ------------------
  650|  2.74k|            *fmap -= trash;
  651|  2.74k|            aux->values += count_1bits(trash);
  652|  2.74k|        }
  653|       |
  654|  2.74k|        *value = *aux->values;
  655|  2.74k|    } else {
  656|    277|        *value = 0;
  657|    277|    }
  658|       |    return true;
  659|  3.78k|}
flow.c:miniflow_get_ports:
  897|    953|{
  898|       |    return MINIFLOW_GET_TYPE__(flow, ovs_be32, tp_src);
  ------------------
  |  |  702|    953|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  ------------------
  |  |  |  |  689|    953|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (689:34): [True: 812, False: 141]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  703|    953|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  ------------------
  |  |  |  |   62|    812|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |  704|    812|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  ------------------
  |  |  |  |   64|    812|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  ------------------
  |  |  705|    953|     : 0)
  ------------------
  899|    953|}
flow.c:flowmap_next_index:
  479|   228k|{
  480|   263k|    for (;;) {
  481|   263k|        map_t *map = &aux->map.bits[aux->unit];
  482|   263k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 198k, False: 64.3k]
  ------------------
  483|   198k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   198k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   198k|            *map = zero_rightmost_1bit(*map);
  485|   198k|            return true;
  486|   198k|        }
  487|  64.3k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|  64.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  64.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 30.1k, False: 34.1k]
  ------------------
  488|       |            return false;
  489|  30.1k|        }
  490|  64.3k|    }
  491|   228k|}
flow.c:flow_u64_value:
  557|  1.80M|{
  558|  1.80M|    return ((uint64_t *)flow)[index];
  559|  1.80M|}
flow.c:miniflow_n_values:
  568|  24.1k|{
  569|  24.1k|    return flowmap_n_1bits(flow->map);
  570|  24.1k|}
flow.c:flowmap_n_1bits:
  462|  24.1k|{
  463|  24.1k|    unsigned int n_1bits = 0;
  464|  24.1k|    size_t unit;
  465|       |
  466|  48.3k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  72.4k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  72.4k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  72.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 48.3k, False: 24.1k]
  |  |  ------------------
  ------------------
  467|  48.3k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  48.3k|    }
  469|  24.1k|    return n_1bits;
  470|  24.1k|}
flow.c:flow_union_with_miniflow:
  938|  8.06k|{
  939|  8.06k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|  8.06k|}
flow.c:flow_union_with_miniflow_subset:
  919|  8.06k|{
  920|  8.06k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|  8.06k|    const uint64_t *p = miniflow_get_values(src);
  922|  8.06k|    map_t map;
  923|       |
  924|  16.1k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|  8.06k|    for (size_t unit__ = 0;                                       \
  |  |  325|  24.1k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  24.1k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  48.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 16.1k, False: 8.06k]
  |  |  |  Branch (325:36): [True: 16.1k, False: 0]
  |  |  ------------------
  |  |  326|  16.1k|         unit__++)
  ------------------
  925|  16.1k|        size_t idx;
  926|       |
  927|  36.1k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|  16.1k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|  16.1k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|  52.2k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 36.1k, False: 16.1k]
  |  |  |  |  |  Branch (286:19): [True: 36.1k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|  36.1k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|  36.1k|            dst_u64[idx] |= *p++;
  929|  36.1k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|  16.1k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|  16.1k|    }
  932|  8.06k|}
flow.c:flowmap_equal:
  349|  4.03k|{
  350|  4.03k|    return !memcmp(&a, &b, sizeof a);
  351|  4.03k|}
flow.c:miniflow_get:
  800|   101k|{
  801|   101k|    return MINIFLOW_IN_MAP(flow, u64_ofs) ? *miniflow_get__(flow, u64_ofs) : 0;
  ------------------
  |  |  689|   101k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  ------------------
  |  |  |  Branch (689:34): [True: 32.1k, False: 69.5k]
  |  |  ------------------
  ------------------
  802|   101k|}
flow.c:flowmap_and:
  437|  4.03k|{
  438|  4.03k|    struct flowmap map;
  439|  4.03k|    size_t unit;
  440|       |
  441|  8.06k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  12.0k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  12.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  12.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 8.06k, False: 4.03k]
  |  |  ------------------
  ------------------
  442|  8.06k|        map.bits[unit] = a.bits[unit] & b.bits[unit];
  443|  8.06k|    }
  444|  4.03k|    return map;
  445|  4.03k|}

hash_bytes:
   31|      1|{
   32|      1|    const uint8_t *p = p_;
   33|      1|    size_t orig_n = n;
   34|      1|    uint32_t hash;
   35|       |
   36|      1|    hash = basis;
   37|      3|    while (n >= 4) {
  ------------------
  |  Branch (37:12): [True: 2, False: 1]
  ------------------
   38|      2|        hash = hash_add(hash,
   39|      2|                        get_unaligned_u32(ALIGNED_CAST(const uint32_t *, p)));
  ------------------
  |  |  434|      2|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   40|      2|        n -= 4;
   41|      2|        p += 4;
   42|      2|    }
   43|       |
   44|      1|    if (n) {
  ------------------
  |  Branch (44:9): [True: 0, False: 1]
  ------------------
   45|      0|        uint32_t tmp = 0;
   46|       |
   47|      0|        memcpy(&tmp, p, n);
   48|      0|        hash = hash_add(hash, tmp);
   49|      0|    }
   50|       |
   51|      1|    return hash_finish(hash, orig_n);
   52|      1|}

miniflow_target.c:hash_add64:
  113|   164k|{
  114|   164k|    return hash_add(hash_add(hash, data), data >> 32);
  115|   164k|}
miniflow_target.c:hash_add:
  108|   329k|{
  109|   329k|    return mhash_add(hash, data);
  110|   329k|}
miniflow_target.c:mhash_add:
   77|   329k|{
   78|   329k|    hash = mhash_add__(hash, data);
   79|   329k|    hash = hash_rot(hash, 13);
   80|   329k|    return hash * 5 + 0xe6546b64;
   81|   329k|}
miniflow_target.c:mhash_add__:
   64|   329k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   329k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 127k, False: 202k]
  ------------------
   67|   127k|        return hash;
   68|   127k|    }
   69|       |
   70|   202k|    data *= 0xcc9e2d51;
   71|   202k|    data = hash_rot(data, 15);
   72|   202k|    data *= 0x1b873593;
   73|   202k|    return hash ^ data;
   74|   329k|}
miniflow_target.c:hash_rot:
   31|   531k|{
   32|   531k|    return (x << k) | (x >> (32 - k));
   33|   531k|}
miniflow_target.c:hash_finish:
  118|  12.0k|{
  119|  12.0k|    return mhash_finish(hash ^ final);
  120|  12.0k|}
miniflow_target.c:mhash_finish:
   84|  12.0k|{
   85|  12.0k|    hash ^= hash >> 16;
   86|  12.0k|    hash *= 0x85ebca6b;
   87|  12.0k|    hash ^= hash >> 13;
   88|  12.0k|    hash *= 0xc2b2ae35;
   89|  12.0k|    hash ^= hash >> 16;
   90|  12.0k|    return hash;
   91|  12.0k|}
flow.c:hash_add64:
  113|  4.53k|{
  114|  4.53k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  4.53k|}
flow.c:hash_add:
  108|  14.8k|{
  109|  14.8k|    return mhash_add(hash, data);
  110|  14.8k|}
flow.c:mhash_add:
   77|  14.8k|{
   78|  14.8k|    hash = mhash_add__(hash, data);
   79|  14.8k|    hash = hash_rot(hash, 13);
   80|  14.8k|    return hash * 5 + 0xe6546b64;
   81|  14.8k|}
flow.c:mhash_add__:
   64|  14.8k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  14.8k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 2.27k, False: 12.5k]
  ------------------
   67|  2.27k|        return hash;
   68|  2.27k|    }
   69|       |
   70|  12.5k|    data *= 0xcc9e2d51;
   71|  12.5k|    data = hash_rot(data, 15);
   72|  12.5k|    data *= 0x1b873593;
   73|  12.5k|    return hash ^ data;
   74|  14.8k|}
flow.c:hash_rot:
   31|  27.4k|{
   32|  27.4k|    return (x << k) | (x >> (32 - k));
   33|  27.4k|}
flow.c:hash_finish:
  118|  2.62k|{
  119|  2.62k|    return mhash_finish(hash ^ final);
  120|  2.62k|}
flow.c:mhash_finish:
   84|  2.62k|{
   85|  2.62k|    hash ^= hash >> 16;
   86|  2.62k|    hash *= 0x85ebca6b;
   87|  2.62k|    hash ^= hash >> 13;
   88|  2.62k|    hash *= 0xc2b2ae35;
   89|  2.62k|    hash ^= hash >> 16;
   90|  2.62k|    return hash;
   91|  2.62k|}
hash.c:hash_finish:
  118|      1|{
  119|      1|    return mhash_finish(hash ^ final);
  120|      1|}
hash.c:mhash_finish:
   84|      1|{
   85|      1|    hash ^= hash >> 16;
   86|      1|    hash *= 0x85ebca6b;
   87|      1|    hash ^= hash >> 13;
   88|      1|    hash *= 0xc2b2ae35;
   89|      1|    hash ^= hash >> 16;
   90|      1|    return hash;
   91|      1|}
hash.c:hash_add:
  108|      2|{
  109|      2|    return mhash_add(hash, data);
  110|      2|}
hash.c:mhash_add:
   77|      2|{
   78|      2|    hash = mhash_add__(hash, data);
   79|      2|    hash = hash_rot(hash, 13);
   80|      2|    return hash * 5 + 0xe6546b64;
   81|      2|}
hash.c:mhash_add__:
   64|      2|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|      2|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 0, False: 2]
  ------------------
   67|      0|        return hash;
   68|      0|    }
   69|       |
   70|      2|    data *= 0xcc9e2d51;
   71|      2|    data = hash_rot(data, 15);
   72|      2|    data *= 0x1b873593;
   73|      2|    return hash ^ data;
   74|      2|}
hash.c:hash_rot:
   31|      4|{
   32|      4|    return (x << k) | (x >> (32 - k));
   33|      4|}

ovs_mutex_lock_at:
   58|    182|    { \
   59|    182|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   85|    182|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    182|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    182|     (TYPE) (POINTER))
  ------------------
   60|    182|        int error; \
   61|    182| \
   62|    182|        /* Verify that 'l' was initialized. */ \
   63|    182|        if (OVS_UNLIKELY(!l->where)) { \
  ------------------
  |  |   66|    182|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 182]
  |  |  ------------------
  ------------------
   64|      0|            VLOG_ABORT("%s: %s() passed uninitialized ovs_"#TYPE, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
   65|      0|                       where, __func__); \
   66|      0|        } \
   67|    182| \
   68|    182|        error = pthread_##TYPE##_##FUN(&l->lock); \
   69|    182|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   66|    182|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 182]
  |  |  ------------------
  ------------------
   70|      0|            VLOG_ABORT("%s: pthread_%s_%s failed: %s", where, #TYPE, #FUN, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
   71|      0|                       ovs_strerror(error)); \
   72|      0|        } \
   73|    182|        l->where = where; \
   74|    182| }
ovs_mutex_unlock:
  118|    182|    { \
  119|    182|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   85|    182|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    182|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    182|     (TYPE) (POINTER))
  ------------------
  120|    182|        int error; \
  121|    182| \
  122|    182|        /* Verify that 'l' was initialized. */ \
  123|    182|        ovs_assert(l->where); \
  ------------------
  |  |   62|    182|#define ovs_assert ovs_ignore
  ------------------
  124|    182| \
  125|    182|        l->where = WHERE; \
  126|    182|        error = pthread_##TYPE##_##FUN(&l->lock); \
  127|    182|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   66|    182|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 182]
  |  |  ------------------
  ------------------
  128|      0|            VLOG_ABORT("%s: pthread_%s_%s failed: %s", l->where, #TYPE, #FUN, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
  129|      0|                       ovs_strerror(error)); \
  130|      0|        } \
  131|    182|    }

flow.c:counter_flow_extract_get:
  246|  2.01k|    {                                                                   \
  247|  2.01k|        return NAME##_get_unsafe();                                     \
  248|  2.01k|    }
flow.c:counter_flow_extract_get_unsafe:
  239|  2.01k|    {                                                                   \
  240|  2.01k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  2.01k|        return &var;                                                    \
  242|  2.01k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  246|     60|    {                                                                   \
  247|     60|        return NAME##_get_unsafe();                                     \
  248|     60|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  239|     60|    {                                                                   \
  240|     60|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     60|        return &var;                                                    \
  242|     60|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get:
  246|     12|    {                                                                   \
  247|     12|        return NAME##_get_unsafe();                                     \
  248|     12|    }
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get_unsafe:
  239|     12|    {                                                                   \
  240|     12|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     12|        return &var;                                                    \
  242|     12|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get:
  246|     35|    {                                                                   \
  247|     35|        return NAME##_get_unsafe();                                     \
  248|     35|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  239|     35|    {                                                                   \
  240|     35|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     35|        return &var;                                                    \
  242|     35|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get:
  246|      8|    {                                                                   \
  247|      8|        return NAME##_get_unsafe();                                     \
  248|      8|    }
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get_unsafe:
  239|      8|    {                                                                   \
  240|      8|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|      8|        return &var;                                                    \
  242|      8|    }                                                                   \
flow.c:counter_miniflow_malloc_get:
  246|  20.1k|    {                                                                   \
  247|  20.1k|        return NAME##_get_unsafe();                                     \
  248|  20.1k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  239|  20.1k|    {                                                                   \
  240|  20.1k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  20.1k|        return &var;                                                    \
  242|  20.1k|    }                                                                   \
random.c:seed_get:
  246|   225k|    {                                                                   \
  247|   225k|        return NAME##_get_unsafe();                                     \
  248|   225k|    }
random.c:seed_get_unsafe:
  239|   450k|    {                                                                   \
  240|   450k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|   450k|        return &var;                                                    \
  242|   450k|    }                                                                   \
util.c:counter_util_xalloc_get:
  246|  20.1k|    {                                                                   \
  247|  20.1k|        return NAME##_get_unsafe();                                     \
  248|  20.1k|    }
util.c:counter_util_xalloc_get_unsafe:
  239|  20.1k|    {                                                                   \
  240|  20.1k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  20.1k|        return &var;                                                    \
  242|  20.1k|    }                                                                   \

miniflow_target.c:vlan_tci_to_vid:
  507|  8.06k|{
  508|  8.06k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  8.06k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  8.06k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  8.06k|}
dp-packet.c:pkt_metadata_init:
  165|  2.01k|{
  166|       |    /* This is called for every packet in userspace datapath and affects
  167|       |     * performance if all the metadata is initialized. Hence, fields should
  168|       |     * only be zeroed out when necessary.
  169|       |     *
  170|       |     * Initialize only till ct_state. Once the ct_state is zeroed out rest
  171|       |     * of ct fields will not be looked at unless ct_state != 0.
  172|       |     */
  173|  2.01k|    memset(md, 0, offsetof(struct pkt_metadata, ct_orig_tuple_ipv6));
  174|       |
  175|       |    /* It can be expensive to zero out all of the tunnel metadata. However,
  176|       |     * we can just zero out ip_dst and the rest of the data will never be
  177|       |     * looked at. */
  178|  2.01k|    md->tunnel.ip_dst = 0;
  179|  2.01k|    md->tunnel.ipv6_dst = in6addr_any;
  180|  2.01k|    md->in_port.odp_port = port;
  181|  2.01k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|  2.01k|}
flow.c:flow_tnl_dst_is_set:
   51|  4.03k|{
   52|  4.03k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 4.03k]
  |  Branch (52:27): [True: 0, False: 4.03k]
  ------------------
   53|  4.03k|}
flow.c:eth_type_vlan:
  429|  2.02k|{
  430|  2.02k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 23, False: 1.99k]
  ------------------
  431|  1.99k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 14, False: 1.98k]
  ------------------
  432|  2.02k|}
flow.c:eth_type_mpls:
  423|  2.44k|{
  424|  2.44k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 36, False: 2.40k]
  ------------------
  425|  2.40k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 36, False: 2.36k]
  ------------------
  426|  2.44k|}
flow.c:eth_addr_is_zero:
  246|    539|{
  247|    539|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    539|}
flow.c:ipv6_addr_is_set:
 1205|  4.03k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|  4.03k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|  4.03k|}
flow.c:ipv6_addr_equals:
 1184|  4.03k|{
 1185|  4.03k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  4.03k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  4.03k|}

random_init:
   48|   225k|{
   49|   225k|    uint32_t *seedp = seed_get();
   50|   225k|    while (!*seedp) {
  ------------------
  |  Branch (50:12): [True: 1, False: 225k]
  ------------------
   51|      1|        struct timeval tv;
   52|      1|        uint32_t entropy;
   53|      1|        pthread_t self;
   54|       |
   55|      1|        xgettimeofday(&tv);
   56|      1|        get_entropy_or_die(&entropy, 4);
   57|      1|        self = pthread_self();
   58|       |
   59|      1|        *seedp = (tv.tv_sec ^ tv.tv_usec ^ entropy
   60|      1|                  ^ hash_bytes(&self, sizeof self, 0));
   61|      1|    }
   62|   225k|}
random_uint32:
   92|   225k|{
   93|   225k|    random_init();
   94|   225k|    return random_next();
   95|   225k|}
random.c:random_next:
  111|   225k|{
  112|   225k|    uint32_t *seedp = seed_get_unsafe();
  113|       |
  114|   225k|    *seedp ^= *seedp << 13;
  115|   225k|    *seedp ^= *seedp >> 17;
  116|   225k|    *seedp ^= *seedp << 5;
  117|       |
  118|   225k|    return *seedp;
  119|   225k|}

miniflow_target.c:random_range:
   32|   225k|{
   33|   225k|    return random_uint32() % max;
   34|   225k|}

read_fully:
  787|      1|{
  788|      1|    uint8_t *p = p_;
  789|       |
  790|      1|    *bytes_read = 0;
  791|      2|    while (size > 0) {
  ------------------
  |  Branch (791:12): [True: 1, False: 1]
  ------------------
  792|      1|        ssize_t retval = read(fd, p, size);
  793|      1|        if (retval > 0) {
  ------------------
  |  Branch (793:13): [True: 1, False: 0]
  ------------------
  794|      1|            *bytes_read += retval;
  795|      1|            size -= retval;
  796|      1|            p += retval;
  797|      1|        } else if (retval == 0) {
  ------------------
  |  Branch (797:20): [True: 0, False: 0]
  ------------------
  798|      0|            return EOF;
  799|      0|        } else if (errno != EINTR) {
  ------------------
  |  Branch (799:20): [True: 0, False: 0]
  ------------------
  800|      0|            return errno;
  801|      0|        }
  802|      1|    }
  803|      1|    return 0;
  804|      1|}

xgettimeofday:
  414|      1|{
  415|      1|    if (gettimeofday(tv, NULL) == -1) {
  ------------------
  |  Branch (415:9): [True: 0, False: 1]
  ------------------
  416|      0|        VLOG_FATAL("gettimeofday failed (%s)", ovs_strerror(errno));
  ------------------
  |  |  205|      0|#define VLOG_FATAL(...) vlog_fatal(&this_module, __VA_ARGS__)
  ------------------
  417|      0|    }
  418|      1|}

flow.c:get_16aligned_be32:
  246|    966|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    966|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    966|#endif
  252|    966|}
hash.c:get_unaligned_u32:
   74|      2|get_unaligned_##ABBREV(const TYPE *p)           \
   75|      2|{                                               \
   76|      2|    return unaligned_##ABBREV(p)->x;            \
   77|      2|}                                               \
hash.c:unaligned_u32:
   68|      2|unaligned_##ABBREV(const TYPE *p)               \
   69|      2|{                                               \
   70|      2|    return (struct unaligned_##ABBREV *) p;     \
   71|      2|}                                               \

xmalloc__:
  137|  20.1k|{
  138|  20.1k|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 20.1k, False: 0]
  ------------------
  139|  20.1k|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 20.1k]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|  20.1k|    return p;
  143|  20.1k|}
xrealloc__:
  147|     18|{
  148|     18|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (148:20): [True: 18, False: 0]
  ------------------
  149|     18|    if (p == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 18]
  ------------------
  150|      0|        out_of_memory();
  151|      0|    }
  152|     18|    return p;
  153|     18|}
xmalloc:
  171|  20.1k|{
  172|  20.1k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  20.1k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  20.1k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|  20.1k|    return xmalloc__(size);
  174|  20.1k|}
xrealloc:
  178|     18|{
  179|     18|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|     18|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     18|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  180|     18|    return xrealloc__(p, size);
  181|     18|}
x2nrealloc:
  240|     18|{
  241|     18|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 2, False: 16]
  ------------------
  242|     18|    return xrealloc(p, *n * s);
  243|     18|}
ovs_ignore:
 1265|   235k|void ovs_ignore(bool x OVS_UNUSED) { }

miniflow_target.c:count_1bits:
  332|  49.3k|{
  333|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  334|       |    return __builtin_popcountll(x);
  335|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  336|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  337|       |#else
  338|       |    /* This portable implementation is the fastest one we know of for 64
  339|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  340|  49.3k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  49.3k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  49.3k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  49.3k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  49.3k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  49.3k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  49.3k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  49.3k|#endif
  349|  49.3k|}
miniflow_target.c:raw_ctz:
  261|  84.8k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  84.8k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 84.8k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  84.8k|            ? __builtin_ctz(n)
  267|  84.8k|            : __builtin_ctzll(n));
  268|  84.8k|}
miniflow_target.c:zero_rightmost_1bit:
  390|  84.8k|{
  391|  84.8k|    return x & (x - 1);
  392|  84.8k|}
miniflow_target.c:rightmost_1bit:
  382|  31.9k|{
  383|  31.9k|    return x & -x;
  384|  31.9k|}
flow.c:rightmost_1bit:
  382|  3.02k|{
  383|  3.02k|    return x & -x;
  384|  3.02k|}
flow.c:count_1bits:
  332|   171k|{
  333|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  334|       |    return __builtin_popcountll(x);
  335|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  336|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  337|       |#else
  338|       |    /* This portable implementation is the fastest one we know of for 64
  339|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  340|   171k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|   171k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|   171k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|   171k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|   171k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|   171k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|   171k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|   171k|#endif
  349|   171k|}
flow.c:raw_ctz:
  261|   234k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|   234k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 234k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   234k|            ? __builtin_ctz(n)
  267|   234k|            : __builtin_ctzll(n));
  268|   234k|}
flow.c:zero_rightmost_1bit:
  390|   234k|{
  391|   234k|    return x & (x - 1);
  392|   234k|}

vlog_insert_module:
  218|    182|{
  219|    182|    ovs_mutex_lock(&log_file_mutex);
  ------------------
  |  |   71|    182|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    182|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    182|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    182|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|    182|    ovs_list_insert(&vlog_modules, vlog);
  221|    182|    ovs_mutex_unlock(&log_file_mutex);
  222|    182|}
vlog_is_enabled:
 1000|    115|{
 1001|    115|    return module->min_level >= level;
 1002|    115|}

LLVMFuzzerTestOneInput:
  235|  2.01k|{
  236|  2.01k|    struct dp_packet packet;
  237|  2.01k|    struct flow flow;
  238|  2.01k|    dp_packet_use_const(&packet, data, size);
  239|  2.01k|    flow_extract(&packet, &flow);
  240|       |
  241|       |    /* Do miniflow tests. */
  242|  2.01k|    test_miniflow(&flow);
  243|  2.01k|    test_minimask_has_extra(&flow);
  244|  2.01k|    test_minimask_combine(&flow);
  245|       |
  246|  2.01k|    return 0;
  247|  2.01k|}
miniflow_target.c:test_miniflow:
   92|  2.01k|{
   93|  2.01k|    struct miniflow *miniflow, *miniflow2, *miniflow3;
   94|  2.01k|    struct flow flow2, flow3;
   95|  2.01k|    struct flow_wildcards mask;
   96|  2.01k|    struct minimask *minimask;
   97|  2.01k|    int i;
   98|       |
   99|  2.01k|    const uint64_t *flow_u64 = (const uint64_t *) flow;
  100|       |
  101|       |    /* Convert flow to miniflow. */
  102|  2.01k|    miniflow = miniflow_create(flow);
  103|       |
  104|       |    /* Obtain miniflow hash. */
  105|  2.01k|    uint32_t hash = miniflow_hash_5tuple(miniflow, 0);
  106|  2.01k|    ovs_ignore(hash);
  107|       |
  108|       |    /* Check that the flow equals its miniflow. */
  109|  6.04k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  6.04k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (109:17): [True: 4.03k, False: 2.01k]
  ------------------
  110|  4.03k|        ovs_assert(miniflow_get_vid(miniflow, i) ==
  ------------------
  |  |   62|  4.03k|#define ovs_assert ovs_ignore
  ------------------
  111|  4.03k|               vlan_tci_to_vid(flow->vlans[i].tci));
  112|  4.03k|    }
  113|   187k|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|   187k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (113:17): [True: 185k, False: 2.01k]
  ------------------
  114|   185k|        ovs_assert(miniflow_get(miniflow, i) == flow_u64[i]);
  ------------------
  |  |   62|   185k|#define ovs_assert ovs_ignore
  ------------------
  115|   185k|    }
  116|       |
  117|       |    /* Check that the miniflow equals itself. */
  118|  2.01k|    ovs_assert(miniflow_equal(miniflow, miniflow));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  119|       |
  120|       |    /* Convert miniflow back to flow and verify that it's the same. */
  121|  2.01k|    miniflow_expand(miniflow, &flow2);
  122|  2.01k|    ovs_assert(flow_equal(flow, &flow2));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  123|       |    /* Check that copying a miniflow works properly. */
  124|  2.01k|    miniflow2 = miniflow_clone__(miniflow);
  125|  2.01k|    ovs_assert(miniflow_equal(miniflow, miniflow2));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  126|  2.01k|    ovs_assert(miniflow_hash__(miniflow, 0) == miniflow_hash__(miniflow2, 0));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  127|  2.01k|    miniflow_expand(miniflow2, &flow3);
  128|  2.01k|    ovs_assert(flow_equal(flow, &flow3));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  129|       |
  130|       |    /* Check that masked matches work as expected for identical flows and
  131|       |         * miniflows. */
  132|  2.01k|    flow_wildcards_init_for_packet(&mask, flow);
  133|       |    /* Ensure that mask is not catchall just in case
  134|       |     * flow_wildcards_init_for_packet returns a catchall mask
  135|       |     */
  136|  2.01k|    uint64_t *mask_u64 = (uint64_t *) &mask.masks;
  137|  2.01k|    mask_u64[0] = 1;
  138|  2.01k|    ovs_assert(!flow_wildcards_is_catchall(&mask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  139|  2.01k|    minimask = minimask_create(&mask);
  140|  2.01k|    ovs_assert(!minimask_is_catchall(minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  141|  2.01k|    ovs_assert(miniflow_equal_in_minimask(miniflow, miniflow2, minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  142|  2.01k|    ovs_assert(miniflow_equal_flow_in_minimask(miniflow, &flow2, minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  143|  2.01k|    ovs_assert(miniflow_hash_in_minimask(miniflow, minimask, 0x12345678) ==
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  144|  2.01k|           flow_hash_in_minimask(flow, minimask, 0x12345678));
  145|  2.01k|    ovs_assert(minimask_hash(minimask, 0) ==
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  146|  2.01k|           miniflow_hash__(&minimask->masks, 0));
  147|       |
  148|       |    /* Check that masked matches work as expected for differing flows and
  149|       |     * miniflows. */
  150|  2.01k|    toggle_masked_flow_bits(&flow2, &mask);
  151|  2.01k|    ovs_assert(!miniflow_equal_flow_in_minimask(miniflow, &flow2, minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  152|  2.01k|    miniflow3 = miniflow_create(&flow2);
  153|  2.01k|    ovs_assert(!miniflow_equal_in_minimask(miniflow, miniflow3, minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  154|       |
  155|  2.01k|    free(miniflow);
  156|  2.01k|    free(miniflow2);
  157|  2.01k|    free(miniflow3);
  158|  2.01k|    free(minimask);
  159|  2.01k|}
miniflow_target.c:miniflow_clone__:
   16|  2.01k|{
   17|  2.01k|    struct miniflow *dst;
   18|  2.01k|    size_t data_size;
   19|       |
   20|  2.01k|    data_size = miniflow_alloc(&dst, 1, src);
   21|  2.01k|    miniflow_clone(dst, src, data_size / sizeof(uint64_t));
   22|  2.01k|    return dst;
   23|  2.01k|}
miniflow_target.c:miniflow_hash__:
   28|  6.04k|{
   29|  6.04k|    const uint64_t *p = miniflow_get_values(flow);
   30|  6.04k|    size_t n_values = miniflow_n_values(flow);
   31|  6.04k|    struct flowmap hash_map = FLOWMAP_EMPTY_INITIALIZER;
  ------------------
  |  |  286|  6.04k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
   32|  6.04k|    uint32_t hash = basis;
   33|  6.04k|    size_t idx;
   34|       |
   35|  52.9k|    FLOWMAP_FOR_EACH_INDEX (idx, flow->map) {
  ------------------
  |  |  337|  6.04k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  6.04k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  58.9k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 52.9k, False: 6.04k]
  |  |  ------------------
  ------------------
   36|  52.9k|        uint64_t value = *p++;
   37|       |
   38|  52.9k|        if (value) {
  ------------------
  |  Branch (38:13): [True: 52.9k, False: 0]
  ------------------
   39|  52.9k|            hash = hash_add64(hash, value);
   40|  52.9k|            flowmap_set(&hash_map, idx, 1);
   41|  52.9k|        }
   42|  52.9k|    }
   43|  6.04k|    map_t map;
   44|  12.0k|    FLOWMAP_FOR_EACH_MAP (map, hash_map) {
  ------------------
  |  |  324|  6.04k|    for (size_t unit__ = 0;                                       \
  |  |  325|  18.1k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  18.1k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  36.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 12.0k, False: 6.04k]
  |  |  |  Branch (325:36): [True: 12.0k, False: 0]
  |  |  ------------------
  |  |  326|  12.0k|         unit__++)
  ------------------
   45|  12.0k|        hash = hash_add64(hash, map);
   46|  12.0k|    }
   47|       |
   48|  6.04k|    return hash_finish(hash, n_values);
   49|  6.04k|}
miniflow_target.c:toggle_masked_flow_bits:
   55|  2.01k|{
   56|  2.01k|    const uint32_t *mask_u32 = (const uint32_t *) &mask->masks;
   57|  2.01k|    uint32_t *flow_u32 = (uint32_t *) flow;
   58|  2.01k|    int i;
   59|       |
   60|   372k|    for (i = 0; i < FLOW_U32S; i++) {
  ------------------
  |  |   51|   372k|#define FLOW_U32S (FLOW_U64S * 2)
  |  |  ------------------
  |  |  |  |  165|   372k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  |  |  ------------------
  ------------------
  |  Branch (60:17): [True: 370k, False: 2.01k]
  ------------------
   61|   370k|        if (mask_u32[i] != 0) {
  ------------------
  |  Branch (61:13): [True: 57.7k, False: 313k]
  ------------------
   62|  57.7k|            uint32_t bit;
   63|       |
   64|   124k|            do {
   65|   124k|                bit = 1u << random_range(32);
   66|   124k|            } while (!(bit & mask_u32[i]));
  ------------------
  |  Branch (66:22): [True: 66.4k, False: 57.7k]
  ------------------
   67|  57.7k|            flow_u32[i] ^= bit;
   68|  57.7k|        }
   69|   370k|    }
   70|  2.01k|}
miniflow_target.c:test_minimask_has_extra:
  163|  2.01k|{
  164|  2.01k|    struct flow_wildcards catchall;
  165|  2.01k|    struct minimask *minicatchall;
  166|       |
  167|  2.01k|    flow_wildcards_init_catchall(&catchall);
  168|  2.01k|    minicatchall = minimask_create(&catchall);
  169|  2.01k|    ovs_assert(minimask_is_catchall(minicatchall));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  170|       |
  171|  2.01k|    struct flow_wildcards mask;
  172|  2.01k|    struct minimask *minimask;
  173|       |
  174|  2.01k|    mask.masks = *flow;
  175|  2.01k|    minimask = minimask_create(&mask);
  176|  2.01k|    ovs_assert(!minimask_has_extra(minimask, minimask));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  177|  2.01k|    ovs_assert(minimask_has_extra(minicatchall, minimask)
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  178|  2.01k|           == !minimask_is_catchall(minimask));
  179|  2.01k|    if (!minimask_is_catchall(minimask)) {
  ------------------
  |  Branch (179:9): [True: 1.98k, False: 26]
  ------------------
  180|  1.98k|        struct minimask *minimask2;
  181|       |
  182|  1.98k|        wildcard_extra_bits(&mask);
  183|  1.98k|        minimask2 = minimask_create(&mask);
  184|  1.98k|        ovs_assert(minimask_has_extra(minimask2, minimask));
  ------------------
  |  |   62|  1.98k|#define ovs_assert ovs_ignore
  ------------------
  185|  1.98k|        ovs_assert(!minimask_has_extra(minimask, minimask2));
  ------------------
  |  |   62|  1.98k|#define ovs_assert ovs_ignore
  ------------------
  186|  1.98k|        free(minimask2);
  187|  1.98k|    }
  188|       |
  189|  2.01k|    free(minimask);
  190|  2.01k|    free(minicatchall);
  191|  2.01k|}
miniflow_target.c:wildcard_extra_bits:
   74|  1.98k|{
   75|  1.98k|    uint32_t *mask_u32 = (uint32_t *) &mask->masks;
   76|  1.98k|    int i;
   77|       |
   78|   367k|    for (i = 0; i < FLOW_U32S; i++) {
  ------------------
  |  |   51|   367k|#define FLOW_U32S (FLOW_U64S * 2)
  |  |  ------------------
  |  |  |  |  165|   367k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  |  |  ------------------
  ------------------
  |  Branch (78:17): [True: 365k, False: 1.98k]
  ------------------
   79|   365k|        if (mask_u32[i] != 0) {
  ------------------
  |  Branch (79:13): [True: 18.0k, False: 347k]
  ------------------
   80|  18.0k|            uint32_t bit;
   81|       |
   82|   101k|            do {
   83|   101k|                bit = 1u << random_range(32);
   84|   101k|            } while (!(bit & mask_u32[i]));
  ------------------
  |  Branch (84:22): [True: 83.2k, False: 18.0k]
  ------------------
   85|  18.0k|            mask_u32[i] &= ~bit;
   86|  18.0k|        }
   87|   365k|    }
   88|  1.98k|}
miniflow_target.c:test_minimask_combine:
  195|  2.01k|{
  196|  2.01k|    struct flow_wildcards catchall;
  197|  2.01k|    struct minimask *minicatchall;
  198|       |
  199|  2.01k|    flow_wildcards_init_catchall(&catchall);
  200|  2.01k|    minicatchall = minimask_create(&catchall);
  201|  2.01k|    ovs_assert(minimask_is_catchall(minicatchall));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  202|       |
  203|  2.01k|    struct minimask *minimask, *minimask2;
  204|  2.01k|    struct flow_wildcards mask, mask2, combined, combined2;
  205|  2.01k|    struct {
  206|  2.01k|        struct minimask minicombined;
  207|  2.01k|        uint64_t storage[FLOW_U64S];
  208|  2.01k|    } m;
  209|  2.01k|    struct flow flow2;
  210|       |
  211|  2.01k|    memset(&flow2, 0, sizeof flow2);
  212|  2.01k|    mask.masks = *flow;
  213|  2.01k|    minimask = minimask_create(&mask);
  214|       |
  215|  2.01k|    minimask_combine(&m.minicombined, minimask, minicatchall, m.storage);
  216|  2.01k|    ovs_assert(minimask_is_catchall(&m.minicombined));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  217|       |
  218|       |    /* Create mask based on zero flow */
  219|  2.01k|    mask2.masks = flow2;
  220|  2.01k|    minimask2 = minimask_create(&mask2);
  221|       |
  222|  2.01k|    minimask_combine(&m.minicombined, minimask, minimask2, m.storage);
  223|  2.01k|    flow_wildcards_and(&combined, &mask, &mask2);
  224|  2.01k|    minimask_expand(&m.minicombined, &combined2);
  225|  2.01k|    ovs_assert(flow_wildcards_equal(&combined, &combined2));
  ------------------
  |  |   62|  2.01k|#define ovs_assert ovs_ignore
  ------------------
  226|       |
  227|  2.01k|    free(minimask);
  228|  2.01k|    free(minimask2);
  229|       |
  230|  2.01k|    free(minicatchall);
  231|  2.01k|}

