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

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.25k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  1.25k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  1.25k|#endif
  116|  1.25k|    return (OVS_FORCE ovs_be32) x;
  117|  1.25k|}

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

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

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.04k|        {                                                               \
   73|  2.04k|            *counter_##COUNTER##_get() += n;                            \
   74|  2.04k|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_too_short_add:
   72|     11|        {                                                               \
   73|     11|            *counter_##COUNTER##_get() += n;                            \
   74|     11|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_len_error_add:
   72|     64|        {                                                               \
   73|     64|            *counter_##COUNTER##_get() += n;                            \
   74|     64|        }                                                               \
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|     37|        {                                                               \
   73|     37|            *counter_##COUNTER##_get() += n;                            \
   74|     37|        }                                                               \
flow.c:miniflow_malloc_add:
   72|  20.4k|        {                                                               \
   73|  20.4k|            *counter_##COUNTER##_get() += n;                            \
   74|  20.4k|        }                                                               \
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|        }
netdev.c:netdev_soft_seg_good_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_partial_seg_good_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.4k|        {                                                               \
   73|  20.4k|            *counter_##COUNTER##_get() += n;                            \
   74|  20.4k|        }                                                               \
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|        }
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|        }
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:
  110|  2.04k|{
  111|  2.04k|    dp_packet_use__(b, CONST_CAST(void *, data), size, DPBUF_STACK);
  ------------------
  |  |   85|  2.04k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.04k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.04k|     (TYPE) (POINTER))
  ------------------
  112|  2.04k|    dp_packet_set_size(b, size);
  113|  2.04k|}
dp-packet.c:dp_packet_use__:
   47|  2.04k|{
   48|  2.04k|    dp_packet_set_base(b, base);
   49|  2.04k|    dp_packet_set_data(b, base);
   50|  2.04k|    dp_packet_set_size(b, 0);
   51|       |
   52|  2.04k|    dp_packet_init__(b, allocated, source);
   53|  2.04k|}
dp-packet.c:dp_packet_init__:
   30|  2.04k|{
   31|  2.04k|    dp_packet_set_allocated(b, allocated);
   32|  2.04k|    b->source = source;
   33|  2.04k|    dp_packet_reset_offsets(b);
   34|  2.04k|    pkt_metadata_init(&b->md, 0);
   35|  2.04k|    dp_packet_reset_cutlen(b);
   36|  2.04k|    dp_packet_reset_offload(b);
   37|  2.04k|    dp_packet_set_tso_segsz(b, 0);
   38|       |    /* Initialize implementation-specific fields of dp_packet. */
   39|  2.04k|    dp_packet_init_specific(b);
   40|       |    /* By default assume the packet type to be Ethernet. */
   41|       |    b->packet_type = htonl(PT_ETH);
   42|  2.04k|}

dp-packet.c:dp_packet_reset_offsets:
  424|  2.04k|{
  425|  2.04k|    dp_packet_reset_outer_offsets(b);
  426|  2.04k|    b->inner_l3_ofs = UINT16_MAX;
  427|       |    b->inner_l4_ofs = UINT16_MAX;
  428|  2.04k|}
dp-packet.c:dp_packet_reset_outer_offsets:
  413|  2.04k|{
  414|  2.04k|    b->l2_pad_size = 0;
  415|  2.04k|    b->l2_5_ofs = UINT16_MAX;
  416|  2.04k|    b->l3_ofs = UINT16_MAX;
  417|       |    b->l4_ofs = UINT16_MAX;
  418|  2.04k|}
dp-packet.c:dp_packet_reset_cutlen:
  811|  2.04k|{
  812|  2.04k|    b->cutlen = 0;
  813|  2.04k|}
dp-packet.c:dp_packet_reset_offload:
 1037|  2.04k|{
 1038|       |    p->has_hash = p->has_mark = false;
 1039|  2.04k|    p->offloads = 0;
 1040|  2.04k|}
dp-packet.c:dp_packet_init_specific:
  744|  2.04k|{
  745|       |    /* There are no implementation-specific fields for initialization. */
  746|  2.04k|}
dp-packet.c:dp_packet_set_size:
  768|  4.09k|{
  769|  4.09k|    b->size_ = v;
  770|  4.09k|}
dp-packet.c:dp_packet_base:
  750|  2.04k|{
  751|  2.04k|    return b->base_;
  752|  2.04k|}
dp-packet.c:dp_packet_set_tso_segsz:
  804|  2.04k|{
  805|  2.04k|    p->tso_segsz = s;
  806|  2.04k|}
dp-packet.c:dp_packet_set_allocated:
  792|  2.04k|{
  793|  2.04k|    b->allocated_ = s;
  794|  2.04k|}
dp-packet.c:dp_packet_set_base:
  756|  2.04k|{
  757|  2.04k|    b->base_ = d;
  758|  2.04k|}
dp-packet.c:dp_packet_set_data:
  852|  2.04k|{
  853|  2.04k|    if (data) {
  ------------------
  |  Branch (853:9): [True: 2.04k, False: 0]
  ------------------
  854|  2.04k|        __packet_set_data(b, (char *) data - (char *) dp_packet_base(b));
  855|  2.04k|    } else {
  856|       |        __packet_set_data(b, UINT16_MAX);
  857|      0|    }
  858|  2.04k|}
dp-packet.c:__packet_set_data:
  780|  2.04k|{
  781|  2.04k|    b->data_ofs = v;
  782|  2.04k|}
flow.c:dp_packet_data:
  845|  2.65k|{
  846|  2.65k|    return __packet_data(b) != UINT16_MAX
  ------------------
  |  Branch (846:12): [True: 2.65k, False: 0]
  ------------------
  847|  2.65k|           ? (char *) dp_packet_base(b) + __packet_data(b) : NULL;
  848|  2.65k|}
flow.c:__packet_data:
  774|  5.30k|{
  775|  5.30k|    return b->data_ofs;
  776|  5.30k|}
flow.c:dp_packet_base:
  750|  2.65k|{
  751|  2.65k|    return b->base_;
  752|  2.65k|}
flow.c:dp_packet_size:
  762|  3.45k|{
  763|  3.45k|    return b->size_;
  764|  3.45k|}
flow.c:dp_packet_tunnel:
 1103|  2.04k|{
 1104|  2.04k|    return !!(b->offloads & DP_PACKET_OL_TUNNEL_MASK);
  ------------------
  |  |  102|  2.04k|#define DP_PACKET_OL_TUNNEL_MASK (DP_PACKET_OL_TUNNEL_GENEVE \
  |  |  103|  2.04k|                                  | DP_PACKET_OL_TUNNEL_VXLAN)
  ------------------
 1105|  2.04k|}
flow.c:dp_packet_reset_outer_offsets:
  413|  2.04k|{
  414|  2.04k|    b->l2_pad_size = 0;
  415|  2.04k|    b->l2_5_ofs = UINT16_MAX;
  416|  2.04k|    b->l3_ofs = UINT16_MAX;
  417|       |    b->l4_ofs = UINT16_MAX;
  418|  2.04k|}
flow.c:dp_packet_reset_offsets:
  424|  2.04k|{
  425|  2.04k|    dp_packet_reset_outer_offsets(b);
  426|  2.04k|    b->inner_l3_ofs = UINT16_MAX;
  427|       |    b->inner_l4_ofs = UINT16_MAX;
  428|  2.04k|}
flow.c:dp_packet_set_l2_pad_size:
  438|  1.40k|{
  439|  1.40k|    ovs_assert(pad_size <= dp_packet_size(b));
  ------------------
  |  |   62|  1.40k|#define ovs_assert ovs_ignore
  ------------------
  440|  1.40k|    b->l2_pad_size = pad_size;
  441|  1.40k|}
flow.c:dp_packet_update_rss_hash_ipv4_tcp_udp:
 1441|    239|{
 1442|    239|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1442:9): [True: 0, False: 239]
  ------------------
 1443|      0|        return;
 1444|      0|    }
 1445|       |
 1446|    239|    const uint8_t *pkt = dp_packet_data(packet);
 1447|    239|    const void *l4_ports = &pkt[packet->l4_ofs];
 1448|    239|    const uint16_t l3_ofs = packet->l3_ofs;
 1449|    239|    uint32_t hash = 0;
 1450|    239|    uint32_t ports;
 1451|       |
 1452|       |    /* IPv4 Src, Dst and proto. */
 1453|    239|    hash = dp_packet_calc_hash_ipv4(pkt, l3_ofs, hash);
 1454|       |
 1455|       |    /* L4 ports. */
 1456|    239|    memcpy(&ports,  l4_ports, sizeof ports);
 1457|    239|    hash = hash_add(hash, ports);
 1458|       |
 1459|    239|    hash = hash_finish(hash, 42);
 1460|    239|    dp_packet_set_rss_hash(packet, hash);
 1461|    239|}
flow.c:dp_packet_rss_valid:
 1031|    603|{
 1032|    603|    return p->has_hash;
 1033|    603|}
flow.c:dp_packet_calc_hash_ipv4:
 1403|    239|{
 1404|    239|    const void *ipv4_src = &pkt[l3_ofs + offsetof(struct ip_header, ip_src)];
 1405|    239|    const void *ipv4_dst = &pkt[l3_ofs + offsetof(struct ip_header, ip_dst)];
 1406|    239|    uint32_t ip_src, ip_dst;
 1407|       |
 1408|    239|    memcpy(&ip_src, ipv4_src, sizeof ip_src);
 1409|    239|    memcpy(&ip_dst, ipv4_dst, sizeof ip_dst);
 1410|       |
 1411|       |    /* IPv4 Src and Dst. */
 1412|    239|    hash = hash_add(hash, ip_src);
 1413|    239|    hash = hash_add(hash, ip_dst);
 1414|       |
 1415|       |    /* IPv4 proto. */
 1416|    239|    hash = hash_add(hash, pkt[l3_ofs + offsetof(struct ip_header, ip_proto)]);
 1417|       |
 1418|    239|    return hash;
 1419|    239|}
flow.c:dp_packet_set_rss_hash:
 1024|    603|{
 1025|    603|    *dp_packet_rss_ptr(p) = hash;
 1026|       |    p->has_hash = true;
 1027|    603|}
flow.c:dp_packet_rss_ptr:
  645|    603|{
  646|    603|    return CONST_CAST(uint32_t *, &b->rss_hash);
  ------------------
  |  |   85|    603|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    603|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    603|     (TYPE) (POINTER))
  ------------------
  647|    603|}
flow.c:dp_packet_update_rss_hash_ipv6_tcp_udp:
 1465|    364|{
 1466|    364|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1466:9): [True: 0, False: 364]
  ------------------
 1467|      0|        return;
 1468|      0|    }
 1469|       |
 1470|    364|    const uint8_t *pkt = dp_packet_data(packet);
 1471|    364|    const uint16_t l3_ofs = packet->l3_ofs;
 1472|    364|    uint32_t ipv6_src_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_src);
 1473|    364|    uint32_t ipv6_dst_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_dst);
 1474|    364|    uint32_t ipv6_proto_off = offsetof(struct ovs_16aligned_ip6_hdr,
 1475|    364|                                       ip6_ctlun.ip6_un1.ip6_un1_nxt);
 1476|    364|    const void *ipv6_src_l = &pkt[l3_ofs + ipv6_src_off];
 1477|    364|    const void *ipv6_src_h = &pkt[l3_ofs + ipv6_src_off + 8];
 1478|    364|    const void *ipv6_dst_l = &pkt[l3_ofs + ipv6_dst_off];
 1479|    364|    const void *ipv6_dst_h = &pkt[l3_ofs + ipv6_dst_off + 8];
 1480|    364|    const void *l4_ports = &pkt[packet->l4_ofs];
 1481|    364|    uint64_t ipv6_src_lo, ipv6_src_hi;
 1482|    364|    uint64_t ipv6_dst_lo, ipv6_dst_hi;
 1483|    364|    uint32_t ports;
 1484|    364|    uint32_t hash = 0;
 1485|       |
 1486|    364|    memcpy(&ipv6_src_lo, ipv6_src_l, sizeof ipv6_src_lo);
 1487|    364|    memcpy(&ipv6_src_hi, ipv6_src_h, sizeof ipv6_src_hi);
 1488|    364|    memcpy(&ipv6_dst_lo, ipv6_dst_l, sizeof ipv6_dst_lo);
 1489|    364|    memcpy(&ipv6_dst_hi, ipv6_dst_h, sizeof ipv6_dst_hi);
 1490|    364|    memcpy(&ports, l4_ports, sizeof ports);
 1491|       |
 1492|       |    /* IPv6 Src and Dst. */
 1493|    364|    hash = hash_add64(hash, ipv6_src_lo);
 1494|    364|    hash = hash_add64(hash, ipv6_src_hi);
 1495|    364|    hash = hash_add64(hash, ipv6_dst_lo);
 1496|    364|    hash = hash_add64(hash, ipv6_dst_hi);
 1497|       |    /* IPv6 proto. */
 1498|    364|    hash = hash_add(hash, pkt[l3_ofs + ipv6_proto_off]);
 1499|       |    /* L4 ports. */
 1500|    364|    hash = hash_add(hash, ports);
 1501|    364|    hash = hash_finish(hash, 42);
 1502|       |
 1503|    364|    dp_packet_set_rss_hash(packet, hash);
 1504|    364|}
flow.c:dp_packet_l4_proto_set_tcp:
 1234|    421|{
 1235|    421|    b->offloads &= ~DP_PACKET_OL_L4_PROTO_UDP;
 1236|    421|    b->offloads |= DP_PACKET_OL_L4_PROTO_TCP;
 1237|    421|}
flow.c:dp_packet_l4_proto_set_udp:
 1248|    182|{
 1249|    182|    b->offloads &= ~DP_PACKET_OL_L4_PROTO_TCP;
 1250|    182|    b->offloads |= DP_PACKET_OL_L4_PROTO_UDP;
 1251|    182|}
flow.c:dp_packet_l4_proto_set_sctp:
 1262|     17|{
 1263|     17|    b->offloads |= DP_PACKET_OL_L4_PROTO_MASK;
  ------------------
  |  |  105|     17|#define DP_PACKET_OL_L4_PROTO_MASK (DP_PACKET_OL_L4_PROTO_TCP \
  |  |  106|     17|                                    | DP_PACKET_OL_L4_PROTO_UDP)
  ------------------
 1264|     17|}

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|    691|{
  606|    691|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|    691|                                 frag_hdr, rt_hdr);
  608|    691|}
parse_nsh:
  612|     86|{
  613|     86|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  614|     86|    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|     86|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   66|     86|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 8, False: 78]
  |  |  ------------------
  ------------------
  620|      8|        return false;
  621|      8|    }
  622|       |
  623|     78|    version = nsh_get_ver(nsh);
  624|     78|    flags = nsh_get_flags(nsh);
  625|     78|    length = nsh_hdr_len(nsh);
  626|     78|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|     78|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|    148|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 35, False: 43]
  |  |  |  Branch (66:53): [True: 8, False: 70]
  |  |  |  Branch (66:53): [True: 27, False: 43]
  |  |  ------------------
  ------------------
  629|     35|        return false;
  630|     35|    }
  631|       |
  632|     43|    key->flags = flags;
  633|     43|    key->ttl = ttl;
  634|     43|    key->mdtype = nsh->md_type;
  635|     43|    key->np = nsh->next_proto;
  636|     43|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|     43|    switch (key->mdtype) {
  639|     18|        case NSH_M_TYPE1:
  ------------------
  |  |  251|     18|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 18, False: 25]
  ------------------
  640|     18|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|     18|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 17, False: 1]
  ------------------
  641|     17|                return false;
  642|     17|            }
  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|     11|        case NSH_M_TYPE2:
  ------------------
  |  |  252|     11|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 11, False: 32]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|     11|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|     11|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 5, False: 6]
  ------------------
  650|      5|                return false;
  651|      5|            }
  652|       |
  653|      6|            memset(key->context, 0, sizeof(key->context));
  654|      6|            break;
  655|     14|        default:
  ------------------
  |  Branch (655:9): [True: 14, False: 29]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|     14|            memset(key->context, 0, sizeof(key->context));
  658|     14|            break;
  659|     43|    }
  660|       |
  661|     21|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|     43|}
flow_extract:
  670|  2.04k|{
  671|  2.04k|    struct {
  672|  2.04k|        struct miniflow mf;
  673|  2.04k|        uint64_t buf[FLOW_U64S];
  674|  2.04k|    } m;
  675|       |
  676|  2.04k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|  2.04k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  2.04k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|  2.04k|    miniflow_extract(packet, &m.mf);
  679|  2.04k|    miniflow_expand(&m.mf, flow);
  680|  2.04k|}
miniflow_extract:
  797|  2.04k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|  2.04k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.04k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|  2.04k|    const struct pkt_metadata *md = &packet->md;
  802|  2.04k|    const void *data = dp_packet_data(packet);
  803|  2.04k|    size_t size = dp_packet_size(packet);
  804|  2.04k|    ovs_be32 packet_type = packet->packet_type;
  805|  2.04k|    uint64_t *values = miniflow_values(dst);
  806|  2.04k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|  2.04k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|  2.04k|                         values + FLOW_U64S };
  ------------------
  |  |  165|  2.04k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|  2.04k|    const char *frame;
  809|  2.04k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.04k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|  2.04k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|  2.04k|    uint8_t *ct_nw_proto_p = NULL;
  812|  2.04k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|  2.04k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 2.04k]
  ------------------
  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.04k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 2.04k]
  |  Branch (837:29): [True: 0, False: 2.04k]
  ------------------
  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.04k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|  2.04k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  2.04k|    {                                           \
  |  |  |  |  180|  2.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  2.04k|                                                \
  |  |  |  |  182|  2.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 2.04k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|  2.04k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  2.04k|    {                                        \
  |  |  |  |  |  |  160|  2.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.04k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.09k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.09k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.09k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.04k, False: 2.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.04k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.04k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  2.04k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  2.04k|}
  |  |  |  |  ------------------
  |  |  |  |  184|  2.04k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  2.04k|    } 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.04k|}
  |  |  ------------------
  ------------------
  842|  2.04k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|  2.04k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  2.04k|    {                                           \
  |  |  |  |  180|  2.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  2.04k|                                                \
  |  |  |  |  182|  2.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 2.04k]
  |  |  |  |  ------------------
  |  |  |  |  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.04k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 2.04k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|  2.04k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.04k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.04k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.09k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.09k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.09k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.04k, False: 2.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.04k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.04k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  2.04k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|  2.04k|        MF.data++;                              \
  |  |  |  |  189|  2.04k|    }                                           \
  |  |  |  |  190|  2.04k|}
  |  |  ------------------
  ------------------
  843|  2.04k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 2.04k]
  ------------------
  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.04k|    } else {
  856|  2.04k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 2.04k]
  ------------------
  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.04k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|  2.04k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  2.04k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  2.04k|{                                                               \
  |  |  |  |  243|  2.04k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  2.04k|                                                                \
  |  |  |  |  245|  2.04k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  2.04k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  2.04k|    {                                        \
  |  |  |  |  |  |  160|  2.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.04k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.09k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.09k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.09k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 2.04k, False: 2.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  2.04k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  2.04k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  2.04k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  2.04k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  2.04k|                                                                \
  |  |  |  |  248|  2.04k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  2.04k|}
  |  |  ------------------
  ------------------
  861|  2.04k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|  2.04k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  2.04k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  2.04k|    {                                           \
  |  |  |  |  |  |  180|  2.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  2.04k|                                                \
  |  |  |  |  |  |  182|  2.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 2.04k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.04k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 2.04k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  2.04k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.04k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.04k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.04k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.04k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  2.04k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  2.04k|        MF.data++;                              \
  |  |  |  |  |  |  189|  2.04k|    }                                           \
  |  |  |  |  |  |  190|  2.04k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|  2.04k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|  2.04k|    frame = data;
  866|  2.04k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 2.04k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|  2.04k|    } else {
  870|  2.04k|        dp_packet_reset_offsets(packet);
  871|  2.04k|    }
  872|       |
  873|  2.04k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 2.04k, False: 0]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  2.04k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  2.04k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 24, False: 2.02k]
  |  |  ------------------
  ------------------
  876|     24|            goto out;
  877|  2.02k|        } else {
  878|       |            /* Link layer. */
  879|  2.02k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  2.02k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  2.02k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  2.02k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  2.02k|                      == offsetof(struct flow, f1))
  ------------------
  880|  2.02k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  2.02k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  2.02k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  2.02k|{                                                               \
  |  |  |  |  291|  2.02k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  2.02k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  2.02k|{                                                               \
  |  |  |  |  |  |  259|  2.02k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  2.02k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  2.02k|                                                                \
  |  |  |  |  |  |  262|  2.02k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  2.02k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  2.02k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  2.02k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  2.02k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  2.02k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  2.02k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  2.02k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  2.02k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  2.02k|            dl_type = parse_ethertype(&data, &size);
  887|  2.02k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  2.02k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.02k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.02k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.02k|{                                               \
  |  |  |  |  |  |  197|  2.02k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.02k|                                                \
  |  |  |  |  |  |  199|  2.02k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  2.02k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 2.02k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|  2.02k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 2.02k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  2.02k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.02k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  2.02k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  2.02k|    } 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|  2.02k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  2.02k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  2.02k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.02k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.02k|{                                                               \
  |  |  |  |  234|  2.02k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.02k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.02k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.02k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.02k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.02k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.02k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.02k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.02k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  2.02k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  2.02k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  2.02k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.02k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.02k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.02k|                                                                \
  |  |  |  |  237|  2.02k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.02k|    MF.data++;                                                  \
  |  |  |  |  239|  2.02k|}
  |  |  ------------------
  ------------------
  889|  2.02k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 33, False: 1.99k]
  ------------------
  890|     33|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|     33|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|     33|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|     33|{                                                                       \
  |  |  |  |  279|     33|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     33|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     33|{                                                               \
  |  |  |  |  |  |  259|     33|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     33|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     33|                                                                \
  |  |  |  |  |  |  262|     33|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     33|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     33|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     33|{                                                                       \
  |  |  |  |  |  |  |  |  151|     33|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     33|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     33|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     33|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     33|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     33|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 33]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     33|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     33|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     33|}
  |  |  |  |  ------------------
  |  |  |  |  280|     33|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|     33|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|     33|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|     33|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 28, False: 5]
  |  |  |  |  ------------------
  |  |  |  |  283|     28|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|     28|    }                                                                   \
  |  |  |  |  285|     33|}
  |  |  ------------------
  ------------------
  891|     33|            }
  892|       |
  893|  2.02k|        }
  894|  2.04k|    } 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|  2.02k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  2.02k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 36, False: 1.98k]
  |  |  ------------------
  ------------------
  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: 30, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  283|     30|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|     30|    }                                                                   \
  |  |  |  |  285|     36|}
  |  |  ------------------
  ------------------
  911|     36|    }
  912|       |
  913|       |    /* Network layer. */
  914|  2.02k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  2.02k|    nw_frag = 0;
  917|  2.02k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  2.02k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 786, False: 1.23k]
  |  |  ------------------
  ------------------
  918|    786|        const struct ip_header *nh = data;
  919|    786|        int ip_len;
  920|    786|        uint16_t tot_len;
  921|       |
  922|    786|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|    786|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 75, False: 711]
  |  |  ------------------
  ------------------
  923|     75|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|     75|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 75]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|     75|            goto out;
  927|     75|        }
  928|    711|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|    711|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|    711|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|    711|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    711|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    711|{                                                               \
  |  |  |  |  270|    711|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    711|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    711|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    711|{                                                               \
  |  |  |  |  |  |  259|    711|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    711|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    711|                                                                \
  |  |  |  |  |  |  262|    711|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    711|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    711|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    711|{                                                                       \
  |  |  |  |  |  |  |  |  151|    711|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    711|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    711|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    711|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    711|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    711|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 711]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    711|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    711|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    711|}
  |  |  |  |  ------------------
  |  |  |  |  272|    711|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    711|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    711|}
  |  |  ------------------
  ------------------
  933|    711|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 711]
  |  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|    711|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|    711|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    711|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    711|    {                                           \
  |  |  |  |  |  |  180|    711|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    711|                                                \
  |  |  |  |  |  |  182|    711|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 711, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    711|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    711|    {                                        \
  |  |  |  |  |  |  |  |  160|    711|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    711|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    711|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    711|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    711|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    711|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    711|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    711|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    711|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 711]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    711|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    711|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    711|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    711|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    711|    } 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|    711|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|    711|        nw_tos = nh->ip_tos;
  946|    711|        nw_ttl = nh->ip_ttl;
  947|    711|        nw_proto = nh->ip_proto;
  948|    711|        nw_frag = ipv4_get_nw_frag(nh);
  949|    711|        data_pull(&data, &size, ip_len);
  950|  1.23k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 736, False: 502]
  ------------------
  951|    736|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|    736|        ovs_be32 tc_flow;
  953|    736|        uint16_t plen;
  954|       |
  955|    736|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|    736|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 45, False: 691]
  |  |  ------------------
  ------------------
  956|     45|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|     45|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 45]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|     45|            goto out;
  960|     45|        }
  961|    691|        data_pull(&data, &size, sizeof *nh);
  962|    691|        plen = ntohs(nh->ip6_plen);
  963|    691|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|    691|        size = plen;   /* Never pull padding. */
  965|       |
  966|    691|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|    691|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    691|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    691|{                                                               \
  |  |  |  |  270|    691|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    691|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    691|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    691|{                                                               \
  |  |  |  |  |  |  259|    691|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    691|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    691|                                                                \
  |  |  |  |  |  |  262|    691|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    691|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    691|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    691|{                                                                       \
  |  |  |  |  |  |  |  |  151|    691|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    691|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    691|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    691|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    691|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    691|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 691]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    691|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    691|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    691|}
  |  |  |  |  ------------------
  |  |  |  |  272|    691|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    691|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    691|}
  |  |  ------------------
  ------------------
  967|    691|                            sizeof nh->ip6_src / 8);
  968|    691|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|    691|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    691|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    691|{                                                               \
  |  |  |  |  270|    691|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    691|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    691|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    691|{                                                               \
  |  |  |  |  |  |  259|    691|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    691|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    691|                                                                \
  |  |  |  |  |  |  262|    691|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    691|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    691|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    691|{                                                                       \
  |  |  |  |  |  |  |  |  151|    691|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    691|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    691|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    691|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    691|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    691|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 691]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    691|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    691|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    691|}
  |  |  |  |  ------------------
  |  |  |  |  272|    691|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    691|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    691|}
  |  |  ------------------
  ------------------
  969|    691|                            sizeof nh->ip6_dst / 8);
  970|    691|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 691]
  |  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|    691|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|    691|        nw_tos = ntohl(tc_flow) >> 20;
  984|    691|        nw_ttl = nh->ip6_hlim;
  985|    691|        nw_proto = nh->ip6_nxt;
  986|       |
  987|    691|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 144, False: 547]
  ------------------
  988|    691|                                 NULL, NULL)) {
  989|    144|            goto out;
  990|    144|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|    547|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|    547|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|    547|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|    547|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|    547|                      == offsetof(struct flow, f1))
  ------------------
  995|    547|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|    547|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|    547|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    547|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    547|    {                                           \
  |  |  |  |  |  |  180|    547|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    547|                                                \
  |  |  |  |  |  |  182|    547|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 547, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    547|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    547|    {                                        \
  |  |  |  |  |  |  |  |  160|    547|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    547|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    547|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    547|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    547|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    547|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    547|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    547|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    547|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 547]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    547|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    547|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    547|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    547|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    547|    } 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|    547|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|    547|    } else {
  998|    502|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 46, False: 456]
  ------------------
  999|    456|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 11, False: 445]
  ------------------
 1000|     57|            struct eth_addr arp_buf[2];
 1001|     57|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|     57|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|     57|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|     57|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|    114|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 46, False: 11]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|    103|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 36, False: 10]
  |  |  ------------------
  ------------------
 1005|     36|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|     93|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 17, False: 19]
  |  |  ------------------
  ------------------
 1006|     17|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|     74|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 16, False: 1]
  |  |  ------------------
  ------------------
 1007|     16|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|     16|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14, False: 2]
  |  |  ------------------
  ------------------
 1008|     14|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|     14|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     14|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     14|    {                                           \
  |  |  |  |  |  |  180|     14|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     14|                                                \
  |  |  |  |  |  |  182|     14|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 14, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     14|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     14|    {                                        \
  |  |  |  |  |  |  |  |  160|     14|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     14|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     14|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     14|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     14|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     14|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     14|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     14|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     14|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     14|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     14|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     14|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     14|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     14|    } 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|     14|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|     14|                                   get_16aligned_be32(&arp->ar_spa));
 1010|     14|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|     14|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     14|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     14|    {                                           \
  |  |  |  |  |  |  180|     14|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     14|                                                \
  |  |  |  |  |  |  182|     14|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 14]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     14|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 14, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     14|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     14|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     14|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     14|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     14|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     14|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     14|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     14|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     14|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     14|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     14|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     14|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     14|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     14|        MF.data++;                              \
  |  |  |  |  |  |  189|     14|    }                                           \
  |  |  |  |  |  |  190|     14|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|     14|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|     14|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|     14|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3, False: 11]
  |  |  ------------------
  ------------------
 1015|      3|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|      3|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      3|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      3|    {                                           \
  |  |  |  |  |  |  180|      3|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      3|                                                \
  |  |  |  |  |  |  182|      3|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 3, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      3|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      3|    {                                        \
  |  |  |  |  |  |  |  |  160|      3|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      3|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      3|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      3|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      3|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      3|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      3|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      3|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      3|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      3|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      3|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      3|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      3|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|      3|    } 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|      3|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|      3|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|      3|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      3|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      3|    {                                           \
  |  |  |  |  |  |  180|      3|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      3|                                                \
  |  |  |  |  |  |  182|      3|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 3]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|      3|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 3, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      3|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      3|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      3|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      3|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      3|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      3|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      3|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      3|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      3|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      3|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      3|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      3|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      3|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      3|        MF.data++;                              \
  |  |  |  |  |  |  189|      3|    }                                           \
  |  |  |  |  |  |  190|      3|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|      3|                }
 1018|       |
 1019|       |                /* Must be adjacent. */
 1020|     14|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|     14|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|     14|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|     14|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|     14|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|     14|                arp_buf[0] = arp->ar_sha;
 1023|     14|                arp_buf[1] = arp->ar_tha;
 1024|     14|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|     14|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|     14|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|     14|{                                                               \
  |  |  |  |  291|     14|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     14|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     14|{                                                               \
  |  |  |  |  |  |  259|     14|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     14|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     14|                                                                \
  |  |  |  |  |  |  262|     14|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     14|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     14|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     14|{                                                                       \
  |  |  |  |  |  |  |  |  151|     14|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     14|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     14|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     14|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     14|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     14|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     14|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     14|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     14|}
  |  |  |  |  ------------------
  |  |  |  |  292|     14|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|     14|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|     14|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|     14|}
  |  |  ------------------
  ------------------
 1025|     14|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|     14|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     14|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     14|{                                                               \
  |  |  |  |  234|     14|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     14|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     14|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     14|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     14|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     14|{                                                                       \
  |  |  |  |  |  |  |  |  151|     14|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     14|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     14|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     14|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     14|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     14|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 14]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     14|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     14|                                                                \
  |  |  |  |  237|     14|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     14|    MF.data++;                                                  \
  |  |  |  |  239|     14|}
  |  |  ------------------
  ------------------
 1026|     14|            }
 1027|    445|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 86, False: 359]
  ------------------
 1028|     86|            struct ovs_key_nsh nsh;
 1029|       |
 1030|     86|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   65|     86|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 21, False: 65]
  |  |  ------------------
  ------------------
 1031|     21|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|     21|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|     21|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|     21|{                                                               \
  |  |  |  |  270|     21|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|     21|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     21|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     21|{                                                               \
  |  |  |  |  |  |  259|     21|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     21|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     21|                                                                \
  |  |  |  |  |  |  262|     21|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     21|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     21|}
  |  |  |  |  ------------------
  |  |  |  |  272|     21|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|     21|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|     21|}
  |  |  ------------------
  ------------------
 1032|     21|                                    sizeof(struct ovs_key_nsh) /
 1033|     21|                                    sizeof(uint64_t));
 1034|     21|            }
 1035|     86|        }
 1036|    502|        goto out;
 1037|    502|    }
 1038|       |
 1039|  1.25k|    packet->l4_ofs = (char *)data - frame;
 1040|  1.25k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  1.25k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.25k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.25k|    {                                           \
  |  |  |  |  |  |  180|  1.25k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.25k|                                                \
  |  |  |  |  |  |  182|  1.25k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 1.25k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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.25k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 1.25k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  1.25k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.25k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.25k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.25k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.25k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.25k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.25k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.25k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.25k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.25k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.25k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.25k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.25k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  1.25k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  1.25k|        MF.data++;                              \
  |  |  |  |  |  |  189|  1.25k|    }                                           \
  |  |  |  |  |  |  190|  1.25k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  1.25k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  1.25k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  1.25k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.09k, False: 162]
  |  |  ------------------
  ------------------
 1044|  1.09k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  1.09k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 460, False: 636]
  |  |  ------------------
  ------------------
 1045|    460|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|    460|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 448, False: 12]
  |  |  ------------------
  ------------------
 1046|    448|                const struct tcp_header *tcp = data;
 1047|    448|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|    448|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|    448|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|    896|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 430, False: 18]
  |  |  ------------------
  ------------------
 1050|    430|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|    430|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 421, False: 9]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|    421|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|    421|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|    421|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|    421|{                                                               \
  |  |  |  |  243|    421|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|    421|                                                                \
  |  |  |  |  245|    421|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|    421|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|    421|    {                                        \
  |  |  |  |  |  |  160|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|    421|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|    421|}
  |  |  |  |  ------------------
  |  |  |  |  247|    421|                                                                \
  |  |  |  |  248|    421|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|    421|}
  |  |  ------------------
  ------------------
 1053|    421|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|    421|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    421|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    421|    {                                           \
  |  |  |  |  |  |  180|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    421|                                                \
  |  |  |  |  |  |  182|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|    421|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    421|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|    421|        MF.data++;                              \
  |  |  |  |  |  |  189|    421|    }                                           \
  |  |  |  |  |  |  190|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|    421|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|    421|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|    421|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    421|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    421|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    421|{                                               \
  |  |  |  |  |  |  197|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    421|                                                \
  |  |  |  |  |  |  199|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    421|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    421|    {                                        \
  |  |  |  |  |  |  |  |  160|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    421|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    421|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    421|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    421|    } 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|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|    421|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|    421|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    421|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    421|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    421|{                                               \
  |  |  |  |  |  |  197|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    421|                                                \
  |  |  |  |  |  |  199|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    421|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    421|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    421|    } 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|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    421|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    421|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    421|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    421|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    421|{                                               \
  |  |  |  |  |  |  197|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    421|                                                \
  |  |  |  |  |  |  199|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    421|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    421|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    421|    } 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|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|    421|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    421|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    421|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    421|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    421|{                                               \
  |  |  |  |  |  |  197|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    421|                                                \
  |  |  |  |  |  |  199|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    421|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    421|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    421|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    421|        MF.data++;                              \
  |  |  |  |  |  |  212|    421|    }                                           \
  |  |  |  |  |  |  213|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|    421|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 145, False: 276]
  ------------------
 1060|    145|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|    276|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 276, False: 0]
  ------------------
 1062|    276|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|    276|                    }
 1064|    421|                    dp_packet_l4_proto_set_tcp(packet);
 1065|    421|                }
 1066|    448|            }
 1067|    636|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|    636|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 195, False: 441]
  |  |  ------------------
  ------------------
 1068|    195|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|    195|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 182, False: 13]
  |  |  ------------------
  ------------------
 1069|    182|                const struct udp_header *udp = data;
 1070|       |
 1071|    182|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|    182|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    182|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    182|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    182|{                                               \
  |  |  |  |  |  |  197|    182|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    182|                                                \
  |  |  |  |  |  |  199|    182|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 182, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    182|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    182|    {                                        \
  |  |  |  |  |  |  |  |  160|    182|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    182|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    182|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    182|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    182|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    182|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    182|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    182|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    182|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 182]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    182|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    182|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    182|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    182|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    182|    } 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|    182|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|    182|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|    182|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    182|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    182|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    182|{                                               \
  |  |  |  |  |  |  197|    182|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    182|                                                \
  |  |  |  |  |  |  199|    182|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 182, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    182|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    182|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    182|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    182|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    182|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    182|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    182|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    182|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    182|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    182|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    182|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 182]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    182|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    182|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    182|    } 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|    182|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    182|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    182|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    182|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    182|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    182|{                                               \
  |  |  |  |  |  |  197|    182|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    182|                                                \
  |  |  |  |  |  |  199|    182|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 182, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    182|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    182|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    182|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    182|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    182|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    182|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    182|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    182|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    182|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    182|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    182|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 182]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    182|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    182|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    182|    } 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|    182|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    182|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    182|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    182|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    182|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    182|{                                               \
  |  |  |  |  |  |  197|    182|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    182|                                                \
  |  |  |  |  |  |  199|    182|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 182]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    182|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 182, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    182|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    182|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    182|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    182|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    182|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    182|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    182|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    182|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    182|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    182|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    182|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 182]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    182|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    182|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    182|        MF.data++;                              \
  |  |  |  |  |  |  212|    182|    }                                           \
  |  |  |  |  |  |  213|    182|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|    182|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 94, False: 88]
  ------------------
 1076|     94|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|     94|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 88, False: 0]
  ------------------
 1078|     88|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|     88|                }
 1080|    182|                dp_packet_l4_proto_set_udp(packet);
 1081|    182|            }
 1082|    441|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|    441|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 26, False: 415]
  |  |  ------------------
  ------------------
 1083|     26|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|     26|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 17, False: 9]
  |  |  ------------------
  ------------------
 1084|     17|                const struct sctp_header *sctp = data;
 1085|       |
 1086|     17|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|     17|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     17|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     17|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     17|{                                               \
  |  |  |  |  |  |  197|     17|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     17|                                                \
  |  |  |  |  |  |  199|     17|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 17, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     17|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     17|    {                                        \
  |  |  |  |  |  |  |  |  160|     17|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     17|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     17|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     17|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     17|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     17|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     17|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     17|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     17|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     17|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     17|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     17|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     17|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     17|    } 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|     17|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|     17|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|     17|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     17|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     17|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     17|{                                               \
  |  |  |  |  |  |  197|     17|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     17|                                                \
  |  |  |  |  |  |  199|     17|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 17, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     17|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     17|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     17|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     17|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     17|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     17|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     17|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     17|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     17|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     17|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     17|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     17|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     17|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     17|    } 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|     17|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|     17|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     17|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     17|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     17|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     17|{                                               \
  |  |  |  |  |  |  197|     17|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     17|                                                \
  |  |  |  |  |  |  199|     17|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 17, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     17|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     17|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     17|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     17|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     17|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     17|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     17|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     17|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     17|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     17|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     17|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     17|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     17|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     17|    } 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|     17|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|     17|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     17|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     17|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     17|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     17|{                                               \
  |  |  |  |  |  |  197|     17|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     17|                                                \
  |  |  |  |  |  |  199|     17|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 17]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     17|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 17, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     17|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     17|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     17|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     17|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     17|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     17|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     17|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     17|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     17|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     17|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     17|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     17|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     17|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     17|        MF.data++;                              \
  |  |  |  |  |  |  212|     17|    }                                           \
  |  |  |  |  |  |  213|     17|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|     17|                dp_packet_l4_proto_set_sctp(packet);
 1091|     17|            }
 1092|    415|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|    415|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 34, False: 381]
  |  |  ------------------
  ------------------
 1093|     34|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|     34|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 20, False: 14]
  |  |  ------------------
  ------------------
 1094|     20|                const struct icmp_header *icmp = data;
 1095|       |
 1096|     20|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|     20|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     20|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     20|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     20|{                                               \
  |  |  |  |  |  |  197|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     20|                                                \
  |  |  |  |  |  |  199|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 20, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     20|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     20|    {                                        \
  |  |  |  |  |  |  |  |  160|     20|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     20|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     20|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     20|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     20|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     20|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     20|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 20]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     20|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     20|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     20|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     20|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     20|    } 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|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|     20|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|     20|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     20|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     20|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     20|{                                               \
  |  |  |  |  |  |  197|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     20|                                                \
  |  |  |  |  |  |  199|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 20, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     20|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     20|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     20|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     20|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     20|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     20|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     20|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     20|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     20|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 20]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     20|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     20|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     20|    } 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|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|     20|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     20|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     20|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     20|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     20|{                                               \
  |  |  |  |  |  |  197|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     20|                                                \
  |  |  |  |  |  |  199|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 20, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     20|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     20|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     20|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     20|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     20|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     20|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     20|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     20|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     20|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 20]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     20|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     20|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     20|    } 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|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|     20|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     20|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     20|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     20|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     20|{                                               \
  |  |  |  |  |  |  197|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     20|                                                \
  |  |  |  |  |  |  199|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 20]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     20|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 20, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     20|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     20|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     20|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     20|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     20|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     20|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     20|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     20|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     20|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 20]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     20|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     20|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     20|        MF.data++;                              \
  |  |  |  |  |  |  212|     20|    }                                           \
  |  |  |  |  |  |  213|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|     20|            }
 1101|    381|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|    381|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 34, False: 347]
  |  |  ------------------
  ------------------
 1102|     34|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|     34|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 21, False: 13]
  |  |  ------------------
  ------------------
 1103|     21|                const struct igmp_header *igmp = data;
 1104|       |
 1105|     21|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|     21|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     21|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     21|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     21|{                                               \
  |  |  |  |  |  |  197|     21|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     21|                                                \
  |  |  |  |  |  |  199|     21|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 21, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     21|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     21|    {                                        \
  |  |  |  |  |  |  |  |  160|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     21|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     21|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     21|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     21|    } 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|     21|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|     21|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|     21|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     21|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     21|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     21|{                                               \
  |  |  |  |  |  |  197|     21|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     21|                                                \
  |  |  |  |  |  |  199|     21|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 21]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     21|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 21, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     21|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     21|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     21|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     21|    } 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|     21|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|     21|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|     21|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     21|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     21|{                                                               \
  |  |  |  |  234|     21|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     21|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     21|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     21|                                                                \
  |  |  |  |  237|     21|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     21|    MF.data++;                                                  \
  |  |  |  |  239|     21|}
  |  |  ------------------
  ------------------
 1109|     21|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|     21|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     21|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     21|    {                                           \
  |  |  |  |  |  |  180|     21|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     21|                                                \
  |  |  |  |  |  |  182|     21|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 21, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     21|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     21|    {                                        \
  |  |  |  |  |  |  |  |  160|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     21|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     21|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     21|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     21|    } 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|     21|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|     21|                                   get_16aligned_be32(&igmp->group));
 1111|     21|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|     21|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     21|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     21|{                                                               \
  |  |  |  |  234|     21|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     21|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     21|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     21|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     21|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     21|{                                                                       \
  |  |  |  |  |  |  |  |  151|     21|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     21|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     21|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     21|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     21|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     21|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 21]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     21|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     21|                                                                \
  |  |  |  |  237|     21|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     21|    MF.data++;                                                  \
  |  |  |  |  239|     21|}
  |  |  ------------------
  ------------------
 1112|     21|            }
 1113|    347|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|    347|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 222, False: 125]
  |  |  ------------------
  ------------------
 1114|    222|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|    222|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 213, False: 9]
  |  |  ------------------
  ------------------
 1115|    213|                const union ovs_16aligned_in6_addr *nd_target;
 1116|    213|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|    213|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|    213|                ovs_be32 rso_flags;
 1122|    213|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|    213|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|    213|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 176, False: 37]
  ------------------
 1126|    213|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    176|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 130, False: 46]
  ------------------
 1128|    130|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    130|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    130|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    130|{                                                               \
  |  |  |  |  270|    130|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    130|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    130|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    130|{                                                               \
  |  |  |  |  |  |  259|    130|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    130|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    130|                                                                \
  |  |  |  |  |  |  262|    130|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    130|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    130|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    130|{                                                                       \
  |  |  |  |  |  |  |  |  151|    130|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    130|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    130|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    130|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    130|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    130|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 130]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    130|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    130|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    130|}
  |  |  |  |  ------------------
  |  |  |  |  272|    130|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    130|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    130|}
  |  |  ------------------
  ------------------
 1129|    130|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    130|                    }
 1131|    176|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    176|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    176|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    176|{                                                               \
  |  |  |  |  291|    176|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    176|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    176|{                                                               \
  |  |  |  |  |  |  259|    176|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    176|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    176|                                                                \
  |  |  |  |  |  |  262|    176|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    176|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    176|}
  |  |  |  |  ------------------
  |  |  |  |  292|    176|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    176|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    176|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    176|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    176|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 73, False: 103]
  ------------------
 1135|     73|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|     73|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     73|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     73|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     73|{                                               \
  |  |  |  |  |  |  197|     73|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     73|                                                \
  |  |  |  |  |  |  199|     73|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 73]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     73|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 73]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     73|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 73, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     73|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     73|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     73|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     73|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     73|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     73|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     73|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     73|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     73|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     73|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     73|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 73]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     73|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     73|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     73|    } 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|     73|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|     73|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|     73|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     73|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     73|{                                                               \
  |  |  |  |  234|     73|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     73|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|     73|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|     73|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|     73|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|     73|{                                                                       \
  |  |  |  |  |  |  |  |  151|     73|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|     73|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|     73|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|     73|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|     73|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|     73|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 73]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|     73|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     73|                                                                \
  |  |  |  |  237|     73|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     73|    MF.data++;                                                  \
  |  |  |  |  239|     73|}
  |  |  ------------------
  ------------------
 1139|    103|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    103|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    103|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    103|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    103|{                                                               \
  |  |  |  |  234|    103|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    103|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    103|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    103|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    103|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    103|{                                                                       \
  |  |  |  |  |  |  |  |  151|    103|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    103|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    103|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    103|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    103|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    103|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 103]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    103|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    103|                                                                \
  |  |  |  |  237|    103|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    103|    MF.data++;                                                  \
  |  |  |  |  239|    103|}
  |  |  ------------------
  ------------------
 1143|    103|                    }
 1144|    176|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    176|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    176|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    176|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    176|{                                               \
  |  |  |  |  |  |  197|    176|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    176|                                                \
  |  |  |  |  |  |  199|    176|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 176, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    176|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    176|    {                                        \
  |  |  |  |  |  |  |  |  160|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    176|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    176|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    176|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    176|    } 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|    176|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    176|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    176|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    176|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    176|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    176|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    176|{                                               \
  |  |  |  |  |  |  197|    176|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    176|                                                \
  |  |  |  |  |  |  199|    176|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 176]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|    176|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 176, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    176|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    176|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    176|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    176|    } 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|    176|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    176|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    176|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    176|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    176|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    176|{                                                               \
  |  |  |  |  234|    176|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    176|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    176|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    176|                                                                \
  |  |  |  |  237|    176|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    176|    MF.data++;                                                  \
  |  |  |  |  239|    176|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    176|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    176|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    176|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    176|    {                                           \
  |  |  |  |  |  |  180|    176|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    176|                                                \
  |  |  |  |  |  |  182|    176|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 176, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    176|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    176|    {                                        \
  |  |  |  |  |  |  |  |  160|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    176|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    176|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    176|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    176|    } 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|    176|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    176|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    176|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    176|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    176|{                                                               \
  |  |  |  |  234|    176|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    176|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    176|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    176|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    176|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    176|{                                                                       \
  |  |  |  |  |  |  |  |  151|    176|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    176|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    176|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    176|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    176|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    176|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 176]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    176|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    176|                                                                \
  |  |  |  |  237|    176|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    176|    MF.data++;                                                  \
  |  |  |  |  239|    176|}
  |  |  ------------------
  ------------------
 1152|    176|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|     37|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|     37|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     37|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     37|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     37|{                                               \
  |  |  |  |  |  |  197|     37|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     37|                                                \
  |  |  |  |  |  |  199|     37|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 37, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|     37|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     37|    {                                        \
  |  |  |  |  |  |  |  |  160|     37|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     37|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     37|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     37|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     37|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     37|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     37|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     37|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     37|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 37]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     37|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     37|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     37|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|     37|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|     37|    } 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|     37|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|     37|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|     37|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|     37|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     37|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     37|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     37|{                                               \
  |  |  |  |  |  |  197|     37|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     37|                                                \
  |  |  |  |  |  |  199|     37|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 37, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|     37|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     37|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     37|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     37|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     37|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     37|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     37|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     37|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     37|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     37|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     37|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 37]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     37|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|     37|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|     37|    } 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|     37|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|     37|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|     37|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|     37|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     37|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     37|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     37|{                                               \
  |  |  |  |  |  |  197|     37|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     37|                                                \
  |  |  |  |  |  |  199|     37|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 37, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|     37|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     37|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     37|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     37|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     37|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     37|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     37|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     37|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     37|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     37|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     37|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 37]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     37|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|     37|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|     37|    } 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|     37|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|     37|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|     37|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|     37|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|     37|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|     37|{                                               \
  |  |  |  |  |  |  197|     37|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|     37|                                                \
  |  |  |  |  |  |  199|     37|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 37]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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|     37|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 37, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|     37|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     37|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     37|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     37|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     37|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     37|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     37|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     37|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     37|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     37|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     37|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 37]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     37|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|     37|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|     37|        MF.data++;                              \
  |  |  |  |  |  |  212|     37|    }                                           \
  |  |  |  |  |  |  213|     37|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|     37|                }
 1161|    213|            }
 1162|    222|        }
 1163|  1.09k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 162]
  ------------------
 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.04k| out:
 1174|  2.04k|    dst->map = mf.map;
 1175|  2.04k|}
flow_wildcards_init_catchall:
 1885|  4.09k|{
 1886|  4.09k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|  4.09k|}
flow_wildcards_init_for_packet:
 1896|  2.04k|{
 1897|  2.04k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.04k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|  2.04k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|  2.04k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.04k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|  2.04k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 2.04k]
  ------------------
 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.04k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 2.04k]
  ------------------
 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.04k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|  2.04k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  2.04k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|  2.04k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|  2.04k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|  2.04k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|  2.04k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|  2.04k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|  2.04k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|  2.04k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  2.04k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 2.04k, False: 0]
  ------------------
 1958|  2.04k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  2.04k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  2.04k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  2.08k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  2.08k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 2.08k, False: 5]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  2.08k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  2.08k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  2.08k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 2.04k, False: 38]
  ------------------
 1966|  2.04k|                break;
 1967|  2.04k|            }
 1968|  2.08k|        }
 1969|  2.04k|        dl_type = flow->dl_type;
 1970|  2.04k|    } else {
 1971|      0|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|      0|    }
 1973|       |
 1974|  2.04k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 786, False: 1.26k]
  ------------------
 1975|    786|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|    786|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|    786|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|    786|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|    786|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|    786|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|    786|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|    786|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  1.26k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 736, False: 526]
  ------------------
 1980|    736|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|    736|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|    736|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|    736|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|    736|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|    736|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|    736|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 12, False: 724]
  ------------------
 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|    724|        } else {
 1988|    724|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|    724|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|    724|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|    724|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|    724|        }
 1991|    736|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 46, False: 480]
  ------------------
 1992|    480|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 11, False: 469]
  ------------------
 1993|     57|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|     57|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|     57|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|     57|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|     57|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|     57|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|     57|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|     57|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|     57|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|     57|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|     57|        return;
 1999|    469|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 36, False: 433]
  ------------------
 2000|    128|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|    128|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 99, False: 29]
  ------------------
 2001|     99|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|     99|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|     99|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 7, False: 92]
  ------------------
 2003|      7|                break;
 2004|      7|            }
 2005|     99|        }
 2006|     36|        return;
 2007|    433|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 86, False: 347]
  ------------------
 2008|     86|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2009|     86|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2010|     86|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2011|     86|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2012|     86|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2013|     86|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|     86|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2014|    347|    } else {
 2015|    347|        return; /* Unknown ethertype. */
 2016|    347|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  1.60k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  1.60k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  1.60k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  1.60k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  1.60k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  1.60k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  1.60k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  1.60k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  1.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  1.60k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  1.60k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 1.44k, False: 162]
  ------------------
 2029|  1.44k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 34, False: 1.41k]
  ------------------
 2030|  1.41k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 222, False: 1.19k]
  ------------------
 2031|  1.19k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 460, False: 730]
  ------------------
 2032|    730|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 195, False: 535]
  ------------------
 2033|    535|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 26, False: 509]
  ------------------
 2034|    971|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 34, False: 475]
  ------------------
 2035|    971|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|    971|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|    971|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|    971|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|    971|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 460, False: 511]
  ------------------
 2039|    460|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|    460|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|    511|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 34, False: 477]
  ------------------
 2041|     34|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|     34|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|     34|        }
 2043|    971|    }
 2044|  1.60k|}
flow_wildcards_is_catchall:
 2170|  2.04k|{
 2171|  2.04k|    const uint64_t *wc_u64 = (const uint64_t *) &wc->masks;
 2172|  2.04k|    size_t i;
 2173|       |
 2174|  2.04k|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  2.04k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (2174:17): [True: 2.04k, False: 0]
  ------------------
 2175|  2.04k|        if (wc_u64[i]) {
  ------------------
  |  Branch (2175:13): [True: 2.04k, False: 0]
  ------------------
 2176|  2.04k|            return false;
 2177|  2.04k|        }
 2178|  2.04k|    }
 2179|      0|    return true;
 2180|  2.04k|}
flow_wildcards_and:
 2189|  2.04k|{
 2190|  2.04k|    uint64_t *dst_u64 = (uint64_t *) &dst->masks;
 2191|  2.04k|    const uint64_t *src1_u64 = (const uint64_t *) &src1->masks;
 2192|  2.04k|    const uint64_t *src2_u64 = (const uint64_t *) &src2->masks;
 2193|  2.04k|    size_t i;
 2194|       |
 2195|   190k|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|   190k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (2195:17): [True: 188k, False: 2.04k]
  ------------------
 2196|   188k|        dst_u64[i] = src1_u64[i] & src2_u64[i];
 2197|   188k|    }
 2198|  2.04k|}
flow_wildcards_equal:
 2230|  2.04k|{
 2231|  2.04k|    return flow_equal(&a->masks, &b->masks);
 2232|  2.04k|}
miniflow_hash_5tuple:
 2301|  2.04k|{
 2302|  2.04k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  2.04k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 2303|  2.04k|    uint32_t hash = basis;
 2304|       |
 2305|  2.04k|    if (flow) {
  ------------------
  |  Branch (2305:9): [True: 2.04k, False: 0]
  ------------------
 2306|  2.04k|        ovs_be16 dl_type = MINIFLOW_GET_BE16(flow, dl_type);
  ------------------
  |  |  719|  2.04k|    MINIFLOW_GET_TYPE(FLOW, ovs_be16, FIELD)
  |  |  ------------------
  |  |  |  |  694|  2.04k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  2.04k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  2.04k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  2.04k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  2.04k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  2.04k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  2.04k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  2.04k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 2.02k, False: 24]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  2.04k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  2.02k|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|  2.02k|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|  2.02k|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  2.04k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2307|  2.04k|        uint8_t nw_proto;
 2308|       |
 2309|  2.04k|        if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (2309:13): [True: 736, False: 1.31k]
  ------------------
 2310|    736|            struct flowmap map = FLOWMAP_EMPTY_INITIALIZER;
  ------------------
  |  |  286|    736|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
 2311|    736|            uint64_t value;
 2312|       |
 2313|    736|            FLOWMAP_SET(&map, ipv6_src);
  ------------------
  |  |  306|    736|    flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   62|    736|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |                   flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   68|    736|    DIV_ROUND_UP(FLOW_U64_OFFREM(FIELD) + MEMBER_SIZEOF(struct flow, FIELD), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    736|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |   69|    736|                 sizeof(uint64_t))
  |  |  ------------------
  ------------------
 2314|    736|            FLOWMAP_SET(&map, ipv6_dst);
  ------------------
  |  |  306|    736|    flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   62|    736|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |                   flowmap_set(FM, FLOW_U64_OFFSET(FIELD), FLOW_U64_SIZE(FIELD))
  |  |  ------------------
  |  |  |  |   68|    736|    DIV_ROUND_UP(FLOW_U64_OFFREM(FIELD) + MEMBER_SIZEOF(struct flow, FIELD), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    736|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |   69|    736|                 sizeof(uint64_t))
  |  |  ------------------
  ------------------
 2315|       |
 2316|  2.94k|            MINIFLOW_FOR_EACH_IN_FLOWMAP(value, flow, map) {
  ------------------
  |  |  663|    736|    for (struct mf_for_each_in_map_aux aux__ =                      \
  |  |  664|    736|        { 0, (FLOW)->map, (FLOWMAP), miniflow_get_values(FLOW) };   \
  |  |  665|  3.68k|         mf_get_next_in_map(&aux__, &(VALUE));)
  |  |  ------------------
  |  |  |  Branch (665:10): [True: 2.94k, False: 736]
  |  |  ------------------
  ------------------
 2317|  2.94k|                hash = hash_add64(hash, value);
 2318|  2.94k|            }
 2319|  1.31k|        } else if (dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (2319:20): [True: 786, False: 526]
  ------------------
 2320|    832|                   || dl_type == htons(ETH_TYPE_ARP)) {
  ------------------
  |  Branch (2320:23): [True: 46, False: 480]
  ------------------
 2321|    832|            hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_src));
  ------------------
  |  |  721|    832|    MINIFLOW_GET_TYPE(FLOW, uint32_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|    832|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|    832|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|    832|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|    832|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|    832|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|    832|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|    832|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|    832|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 714, False: 118]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|    832|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    714|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|    714|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|    714|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|    832|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2322|    832|            hash = hash_add(hash, MINIFLOW_GET_U32(flow, nw_dst));
  ------------------
  |  |  721|    832|    MINIFLOW_GET_TYPE(FLOW, uint32_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|    832|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|    832|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|    832|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|    832|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|    832|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|    832|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|    832|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|    832|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 714, False: 118]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|    832|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|    714|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|    714|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|    714|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|    832|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2323|    832|        } else {
 2324|    480|            goto out;
 2325|    480|        }
 2326|       |
 2327|  1.56k|        nw_proto = MINIFLOW_GET_U8(flow, nw_proto);
  ------------------
  |  |  715|  1.56k|    MINIFLOW_GET_TYPE(FLOW, uint8_t, FIELD)
  |  |  ------------------
  |  |  |  |  694|  1.56k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  1.56k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  1.56k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  1.56k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  1.56k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  1.56k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  1.56k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  1.56k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 1.26k, False: 308]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  1.56k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|  1.26k|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|  1.26k|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|  1.26k|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  1.56k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2328|  1.56k|        hash = hash_add(hash, nw_proto);
 2329|  1.56k|        if (nw_proto != IPPROTO_TCP && nw_proto != IPPROTO_UDP
  ------------------
  |  Branch (2329:13): [True: 1.10k, False: 461]
  |  Branch (2329:40): [True: 910, False: 197]
  ------------------
 2330|    910|            && nw_proto != IPPROTO_SCTP && nw_proto != IPPROTO_ICMP
  ------------------
  |  Branch (2330:16): [True: 884, False: 26]
  |  Branch (2330:44): [True: 843, False: 41]
  ------------------
 2331|    843|            && nw_proto != IPPROTO_ICMPV6) {
  ------------------
  |  Branch (2331:16): [True: 619, False: 224]
  ------------------
 2332|    619|            goto out;
 2333|    619|        }
 2334|       |
 2335|       |        /* Add both ports at once. */
 2336|    949|        hash = hash_add(hash, (OVS_FORCE uint32_t) miniflow_get_ports(flow));
 2337|    949|    }
 2338|  2.04k|out:
 2339|  2.04k|    return hash_finish(hash, 42);
 2340|  2.04k|}
miniflow_init:
 3474|  18.4k|{
 3475|  18.4k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|  18.4k|    size_t idx;
 3477|       |
 3478|   107k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|  18.4k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  18.4k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   125k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 107k, False: 18.4k]
  |  |  ------------------
  ------------------
 3479|   107k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   107k|    }
 3481|  18.4k|}
miniflow_map_init:
 3486|  18.4k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  18.4k|    flowmap_init(&flow->map);
 3489|  1.71M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  1.71M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 1.69M, False: 18.4k]
  ------------------
 3490|  1.69M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 107k, False: 1.58M]
  ------------------
 3491|   107k|            flowmap_set(&flow->map, i, 1);
 3492|   107k|        }
 3493|  1.69M|    }
 3494|  18.4k|}
miniflow_alloc:
 3501|  20.4k|{
 3502|  20.4k|    size_t n_values = miniflow_n_values(src);
 3503|  20.4k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  20.4k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  20.4k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  20.4k|    size_t i;
 3506|       |
 3507|  20.4k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  20.4k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  20.4k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|  40.9k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 20.4k, False: 20.4k]
  ------------------
 3510|  20.4k|        *dst = *src;   /* Copy maps. */
 3511|  20.4k|        dsts[i] = dst;
 3512|  20.4k|        dst += 1;      /* Just past the maps. */
 3513|  20.4k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|  20.4k|    }
 3515|  20.4k|    return data_size;
 3516|  20.4k|}
miniflow_create:
 3522|  18.4k|{
 3523|  18.4k|    struct miniflow tmp;
 3524|  18.4k|    struct miniflow *dst;
 3525|       |
 3526|  18.4k|    miniflow_map_init(&tmp, src);
 3527|       |
 3528|  18.4k|    miniflow_alloc(&dst, 1, &tmp);
 3529|  18.4k|    miniflow_init(dst, src);
 3530|  18.4k|    return dst;
 3531|  18.4k|}
miniflow_clone:
 3538|  2.04k|{
 3539|  2.04k|    *dst = *src;   /* Copy maps. */
 3540|  2.04k|    memcpy(miniflow_values(dst), miniflow_get_values(src),
 3541|  2.04k|           MINIFLOW_VALUES_SIZE(n_values));
  ------------------
  |  |  527|  2.04k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3542|  2.04k|}
miniflow_expand:
 3547|  8.19k|{
 3548|  8.19k|    memset(dst, 0, sizeof *dst);
 3549|  8.19k|    flow_union_with_miniflow(dst, src);
 3550|  8.19k|}
miniflow_equal:
 3555|  4.09k|{
 3556|  4.09k|    const uint64_t *ap = miniflow_get_values(a);
 3557|  4.09k|    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.09k|    if (OVS_LIKELY(flowmap_equal(a->map, b->map))) {
  ------------------
  |  |   65|  4.09k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.09k, False: 0]
  |  |  ------------------
  ------------------
 3562|  4.09k|        return !memcmp(ap, bp, miniflow_n_values(a) * sizeof *ap);
 3563|  4.09k|    } 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.09k|}
miniflow_equal_in_minimask:
 3582|  4.09k|{
 3583|  4.09k|    const uint64_t *p = miniflow_get_values(&mask->masks);
 3584|  4.09k|    size_t idx;
 3585|       |
 3586|  34.2k|    FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
  ------------------
  |  |  337|  4.09k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.09k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  36.2k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 34.2k, False: 2.04k]
  |  |  ------------------
  ------------------
 3587|  34.2k|        if ((miniflow_get(a, idx) ^ miniflow_get(b, idx)) & *p++) {
  ------------------
  |  Branch (3587:13): [True: 2.04k, False: 32.2k]
  ------------------
 3588|  2.04k|            return false;
 3589|  2.04k|        }
 3590|  34.2k|    }
 3591|       |
 3592|  2.04k|    return true;
 3593|  4.09k|}
miniflow_equal_flow_in_minimask:
 3600|  4.09k|{
 3601|  4.09k|    const uint64_t *p = miniflow_get_values(&mask->masks);
 3602|  4.09k|    size_t idx;
 3603|       |
 3604|  34.2k|    FLOWMAP_FOR_EACH_INDEX(idx, mask->masks.map) {
  ------------------
  |  |  337|  4.09k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.09k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  36.2k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 34.2k, False: 2.04k]
  |  |  ------------------
  ------------------
 3605|  34.2k|        if ((miniflow_get(a, idx) ^ flow_u64_value(b, idx)) & *p++) {
  ------------------
  |  Branch (3605:13): [True: 2.04k, False: 32.2k]
  ------------------
 3606|  2.04k|            return false;
 3607|  2.04k|        }
 3608|  34.2k|    }
 3609|       |
 3610|  2.04k|    return true;
 3611|  4.09k|}
minimask_create:
 3624|  14.3k|{
 3625|  14.3k|    return (struct minimask *)miniflow_create(&wc->masks);
 3626|  14.3k|}
minimask_combine:
 3637|  4.09k|{
 3638|  4.09k|    struct miniflow *dst = &dst_->masks;
 3639|  4.09k|    uint64_t *dst_values = storage;
 3640|  4.09k|    const struct miniflow *a = &a_->masks;
 3641|  4.09k|    const struct miniflow *b = &b_->masks;
 3642|  4.09k|    size_t idx;
 3643|       |
 3644|  4.09k|    flowmap_init(&dst->map);
 3645|       |
 3646|  4.09k|    FLOWMAP_FOR_EACH_INDEX(idx, flowmap_and(a->map, b->map)) {
  ------------------
  |  |  337|  4.09k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  4.09k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  4.09k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 0, False: 4.09k]
  |  |  ------------------
  ------------------
 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.09k|}
minimask_expand:
 3660|  2.04k|{
 3661|  2.04k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  2.04k|}
minimask_has_extra:
 3691|  8.14k|{
 3692|  8.14k|    const uint64_t *bp = miniflow_get_values(&b->masks);
 3693|  8.14k|    size_t idx;
 3694|       |
 3695|  25.1k|    FLOWMAP_FOR_EACH_INDEX(idx, b->masks.map) {
  ------------------
  |  |  337|  8.14k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  8.14k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|  29.2k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 25.1k, False: 4.09k]
  |  |  ------------------
  ------------------
 3696|  25.1k|        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|  25.1k|        if (!MINIFLOW_IN_MAP(&a->masks, idx)
  ------------------
  |  |  689|  50.2k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  ------------------
  |  Branch (3700:13): [True: 2.04k, False: 23.0k]
  ------------------
 3701|  23.0k|            || ((*miniflow_get__(&a->masks, idx) & b_u64) != b_u64)) {
  ------------------
  |  Branch (3701:16): [True: 2.00k, False: 21.0k]
  ------------------
 3702|  4.04k|            return true; /* 'a' wildcards some bits 'b' doesn't. */
 3703|  4.04k|        }
 3704|  25.1k|    }
 3705|       |
 3706|  4.09k|    return false;
 3707|  8.14k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|    691|{
  492|    691|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 691]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|    691|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 691]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  3.54k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 3.54k, Folded]
  ------------------
  501|  3.54k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|  21.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 514, False: 3.03k]
  |  |  |  Branch (65:51): [True: 2.28k, False: 1.26k]
  |  |  |  Branch (65:51): [True: 1.91k, False: 368]
  |  |  |  Branch (65:51): [True: 1.51k, False: 394]
  |  |  |  Branch (65:51): [True: 1.20k, False: 311]
  |  |  |  Branch (65:51): [True: 514, False: 694]
  |  |  ------------------
  ------------------
  502|  3.54k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  3.54k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  3.54k|                       && (*nw_proto != IPPROTO_AH)
  505|  3.54k|                       && (*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|    514|            return true;
  510|    514|        }
  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|  3.03k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  3.03k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 109, False: 2.92k]
  |  |  ------------------
  ------------------
  518|    109|            return false;
  519|    109|        }
  520|       |
  521|  2.92k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 1.20k, False: 1.72k]
  ------------------
  522|  1.72k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 384, False: 1.34k]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  1.58k|            const struct ip6_ext *ext_hdr = *datap;
  527|  1.58k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  1.58k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  1.58k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 15, False: 1.56k]
  |  |  ------------------
  ------------------
  529|  1.58k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|     15|                return false;
  531|     15|            }
  532|  1.58k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 358, False: 984]
  ------------------
  533|    358|            const struct ip6_rt_hdr *tmp;
  534|    358|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 38, False: 320]
  ------------------
  535|     38|                rt_hdr = &tmp;
  536|     38|            }
  537|       |
  538|    358|            *rt_hdr = *datap;
  539|    358|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    358|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    358|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 10, False: 348]
  |  |  ------------------
  ------------------
  541|    358|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     10|                return false;
  543|     10|            }
  544|    984|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 300, False: 684]
  ------------------
  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|    684|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 684, False: 0]
  ------------------
  556|    684|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    684|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 64, False: 620]
  ------------------
  558|     64|                frag_hdr = &tmp;
  559|     64|            }
  560|       |
  561|    684|            *frag_hdr = *datap;
  562|       |
  563|    684|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    684|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 684]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    684|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 283, False: 401]
  ------------------
  570|    283|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    283|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    283|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 33, False: 250]
  ------------------
  572|     33|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     33|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|     33|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|     33|                }
  576|    283|            }
  577|    684|        }
  578|  2.92k|    }
  579|    691|}
flow.c:data_pull:
  110|  13.2k|{
  111|  13.2k|    const char *data = *datap;
  112|  13.2k|    *datap = data + size;
  113|  13.2k|    *sizep -= size;
  114|  13.2k|    return data;
  115|  13.2k|}
flow.c:parse_vlan:
  350|  2.02k|{
  351|  2.02k|    const ovs_be16 *eth_type;
  352|       |
  353|  2.02k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  2.02k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  2.02k|    eth_type = *datap;
  356|       |
  357|  2.02k|    size_t n;
  358|  2.06k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 42, False: 2.02k]
  |  Branch (358:45): [True: 40, False: 2]
  ------------------
  359|     40|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|     40|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 2, False: 38]
  |  |  ------------------
  ------------------
  360|      2|            break;
  361|      2|        }
  362|       |
  363|     38|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|     38|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|     38|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|     38|        eth_type = *datap;
  368|     38|    }
  369|  2.02k|    return n;
  370|  2.02k|}
flow.c:parse_ethertype:
  374|  2.02k|{
  375|  2.02k|    const struct llc_snap_header *llc;
  376|  2.02k|    ovs_be16 proto;
  377|       |
  378|  2.02k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  2.02k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  2.02k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.89k, False: 126]
  |  |  ------------------
  ------------------
  380|  1.89k|        return proto;
  381|  1.89k|    }
  382|       |
  383|    126|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|    126|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 33, False: 93]
  |  |  ------------------
  ------------------
  384|     33|        return htons(FLOW_DL_TYPE_NONE);
  385|     33|    }
  386|       |
  387|     93|    llc = *datap;
  388|     93|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|    465|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 83, False: 10]
  |  |  |  Branch (66:53): [True: 20, False: 73]
  |  |  |  Branch (66:53): [True: 12, False: 61]
  |  |  |  Branch (66:53): [True: 9, False: 52]
  |  |  |  Branch (66:53): [True: 42, False: 10]
  |  |  ------------------
  ------------------
  389|     93|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|     93|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|     93|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|     93|                               sizeof llc->snap.snap_org))) {
  393|     83|        return htons(FLOW_DL_TYPE_NONE);
  394|     83|    }
  395|       |
  396|     10|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|     10|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|     10|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 6, False: 4]
  |  |  ------------------
  ------------------
  399|      6|        return llc->snap.snap_type;
  400|      6|    }
  401|       |
  402|      4|    return htons(FLOW_DL_TYPE_NONE);
  403|     10|}
flow.c:parse_mpls:
  334|     36|{
  335|     36|    const struct mpls_hdr *mh;
  336|     36|    int count = 0;
  337|       |
  338|  2.66k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 2.65k, False: 15]
  ------------------
  339|  2.65k|        count++;
  340|  2.65k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 21, False: 2.63k]
  ------------------
  341|     21|            break;
  342|     21|        }
  343|  2.65k|    }
  344|     36|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|     36|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 12, False: 24]
  |  |  ------------------
  ------------------
  345|     36|}
flow.c:ipv4_sanity_check:
  685|    786|{
  686|    786|    int ip_len;
  687|    786|    uint16_t tot_len;
  688|       |
  689|    786|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|    786|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 11, False: 775]
  |  |  ------------------
  ------------------
  690|     11|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|     11|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     11|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  691|     11|        return false;
  692|     11|    }
  693|    775|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|    775|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|    775|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  1.54k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 7, False: 768]
  |  |  |  Branch (66:53): [True: 4, False: 771]
  |  |  |  Branch (66:53): [True: 3, False: 768]
  |  |  ------------------
  ------------------
  696|      7|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|      7|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      7|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|      7|        return false;
  698|      7|    }
  699|       |
  700|    768|    tot_len = ntohs(nh->ip_tot_len);
  701|    768|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  3.01k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 57, False: 711]
  |  |  |  Branch (66:53): [True: 16, False: 752]
  |  |  |  Branch (66:53): [True: 22, False: 730]
  |  |  |  Branch (66:53): [True: 19, False: 711]
  |  |  ------------------
  ------------------
  702|    768|                size - tot_len > UINT16_MAX)) {
  703|     57|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|     57|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     57|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|     57|        return false;
  705|     57|    }
  706|       |
  707|    711|    *ip_lenp = ip_len;
  708|    711|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|    768|}
flow.c:ipv4_get_nw_frag:
  715|    711|{
  716|    711|    uint8_t nw_frag = 0;
  717|       |
  718|    711|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|    711|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 322, False: 389]
  |  |  ------------------
  ------------------
  719|    322|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    322|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|    322|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 129, False: 193]
  ------------------
  721|    129|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    129|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|    129|        }
  723|    322|    }
  724|       |
  725|    711|    return nw_frag;
  726|    711|}
flow.c:ipv6_sanity_check:
  730|    736|{
  731|    736|    uint16_t plen;
  732|       |
  733|    736|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|    736|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 8, False: 728]
  |  |  ------------------
  ------------------
  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|    728|    plen = ntohs(nh->ip6_plen);
  739|    728|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|    728|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 28, False: 700]
  |  |  ------------------
  ------------------
  740|     28|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|     28|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     28|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|     28|        return false;
  742|     28|    }
  743|       |
  744|    700|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|    700|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 9, False: 691]
  |  |  ------------------
  ------------------
  745|      9|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|      9|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      9|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  746|      9|        return false;
  747|      9|    }
  748|       |
  749|    691|    return true;
  750|    700|}
flow.c:data_try_pull:
  122|  7.56k|{
  123|  7.56k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  7.56k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 7.49k, False: 73]
  |  |  ------------------
  ------------------
  124|  7.56k|}
flow.c:parse_icmpv6:
  422|    213|{
  423|    213|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 37, False: 176]
  ------------------
  424|     37|        return false;
  425|     37|    }
  426|       |
  427|    176|    arp_buf[0] = eth_addr_zero;
  428|    176|    arp_buf[1] = eth_addr_zero;
  429|    176|    *opt_type = 0;
  430|       |
  431|    176|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    176|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    176|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    176|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 12, False: 164]
  |  |  ------------------
  ------------------
  435|     12|        return true;
  436|     12|    }
  437|       |
  438|  1.90k|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 1.82k, False: 76]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|  1.82k|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|  1.82k|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|  1.82k|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|  1.82k|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 21, False: 1.80k]
  |  Branch (444:25): [True: 33, False: 1.77k]
  ------------------
  445|     54|            return true;
  446|     54|        }
  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.77k|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 685, False: 1.08k]
  |  Branch (451:56): [True: 462, False: 223]
  ------------------
  452|    462|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|    462|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 444, False: 18]
  |  |  ------------------
  ------------------
  453|    444|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|    444|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 40, False: 404]
  ------------------
  456|     40|                    *opt_type = lla_opt->type;
  457|     40|                }
  458|    444|            } else {
  459|     18|                goto invalid;
  460|     18|            }
  461|  1.31k|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 526, False: 785]
  |  Branch (461:63): [True: 255, False: 271]
  ------------------
  462|    255|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|    255|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 239, False: 16]
  |  |  ------------------
  ------------------
  463|    239|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|    239|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 33, False: 206]
  ------------------
  466|     33|                    *opt_type = lla_opt->type;
  467|     33|                }
  468|    239|            } else {
  469|     16|                goto invalid;
  470|     16|            }
  471|    255|        }
  472|       |
  473|  1.73k|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|  1.73k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 1.73k]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|  1.73k|    }
  477|     76|    return true;
  478|       |
  479|     34|invalid:
  480|     34|    *nd_target = NULL;
  481|     34|    arp_buf[0] = eth_addr_zero;
  482|     34|    arp_buf[1] = eth_addr_zero;
  483|       |    return true;
  484|    164|}
flow.c:icmp6_is_nd:
  407|    213|{
  408|    213|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 201, False: 12]
  ------------------
  409|    201|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 129, False: 72]
  ------------------
  410|     72|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 47, False: 25]
  ------------------
  411|    213|}

miniflow_target.c:miniflow_get_vid:
  826|  4.09k|{
  827|  4.09k|    if (n < FLOW_MAX_VLAN_HEADERS) {
  ------------------
  |  |   75|  4.09k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (827:9): [True: 4.09k, False: 0]
  ------------------
  828|  4.09k|        union flow_vlan_hdr hdr = {
  829|  4.09k|            .qtag = MINIFLOW_GET_BE32(flow, vlans[n].qtag)
  ------------------
  |  |  723|  4.09k|    MINIFLOW_GET_TYPE(FLOW, ovs_be32, FIELD)
  |  |  ------------------
  |  |  |  |  694|  4.09k|    (BUILD_ASSERT(sizeof(TYPE) == sizeof(((struct flow *)0)->FIELD)),   \
  |  |  |  |  ------------------
  |  |  |  |  |  |  271|  4.09k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  ------------------
  |  |  |  |  695|  4.09k|     BUILD_ASSERT_GCCONLY(__builtin_types_compatible_p(TYPE, typeof(((struct flow *)0)->FIELD))), \
  |  |  |  |  ------------------
  |  |  |  |  |  |  281|  4.09k|#define BUILD_ASSERT_GCCONLY(EXPR) BUILD_ASSERT(EXPR)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  271|  4.09k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  696|  4.09k|     MINIFLOW_GET_TYPE__(MF, TYPE, FIELD))
  |  |  |  |  ------------------
  |  |  |  |  |  |  702|  4.09k|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  689|  4.09k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (689:34): [True: 66, False: 4.03k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  703|  4.09k|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   62|     66|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  704|     66|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   64|     66|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  705|  4.09k|     : 0)
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  830|  4.09k|        };
  831|  4.09k|        return vlan_tci_to_vid(hdr.tci);
  832|  4.09k|    }
  833|      0|    return 0;
  834|  4.09k|}
miniflow_target.c:flowmap_is_set:
  355|   192k|{
  356|   192k|    return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   192k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  271|   192k|#define MAP_1 (map_t)1
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   192k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  357|   192k|}
miniflow_target.c:miniflow_get__:
  678|  10.6k|{
  679|  10.6k|    const uint64_t *values = miniflow_get_values(mf);
  680|  10.6k|    const map_t *map = mf->map.bits;
  681|       |
  682|  21.3k|    while (idx >= MAP_T_BITS) {
  ------------------
  |  |  270|  21.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (682:12): [True: 10.6k, False: 10.6k]
  ------------------
  683|       |        idx -= MAP_T_BITS;
  ------------------
  |  |  270|  10.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  684|  10.6k|        values += count_1bits(*map++);
  685|  10.6k|    }
  686|  10.6k|    return miniflow_values_get__(values, *map, idx);
  687|  10.6k|}
miniflow_target.c:miniflow_get_values:
  535|  25.0k|{
  536|  25.0k|    return (const uint64_t *)(mf + 1);
  537|  25.0k|}
miniflow_target.c:miniflow_values_get__:
  670|  10.6k|{
  671|  10.6k|    return values + count_1bits(map & ((MAP_1 << idx) - 1));
  ------------------
  |  |  271|  10.6k|#define MAP_1 (map_t)1
  ------------------
  672|  10.6k|}
miniflow_target.c:miniflow_get:
  800|   188k|{
  801|   188k|    return MINIFLOW_IN_MAP(flow, u64_ofs) ? *miniflow_get__(flow, u64_ofs) : 0;
  ------------------
  |  |  689|   188k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  ------------------
  |  |  |  Branch (689:34): [True: 10.6k, False: 177k]
  |  |  ------------------
  ------------------
  802|   188k|}
miniflow_target.c:flow_equal:
  184|  4.09k|{
  185|  4.09k|    return !flow_compare_3way(a, b);
  186|  4.09k|}
miniflow_target.c:flow_compare_3way:
  178|  4.09k|{
  179|  4.09k|    return memcmp(a, b, sizeof *a);
  180|  4.09k|}
miniflow_target.c:miniflow_n_values:
  568|  8.19k|{
  569|  8.19k|    return flowmap_n_1bits(flow->map);
  570|  8.19k|}
miniflow_target.c:flowmap_n_1bits:
  462|  8.19k|{
  463|  8.19k|    unsigned int n_1bits = 0;
  464|  8.19k|    size_t unit;
  465|       |
  466|  16.3k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  24.5k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  24.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  24.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 16.3k, False: 8.19k]
  |  |  ------------------
  ------------------
  467|  16.3k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  16.3k|    }
  469|  8.19k|    return n_1bits;
  470|  8.19k|}
miniflow_target.c:flowmap_next_index:
  479|  59.5k|{
  480|  65.7k|    for (;;) {
  481|  65.7k|        map_t *map = &aux->map.bits[aux->unit];
  482|  65.7k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 53.4k, False: 12.2k]
  ------------------
  483|  53.4k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|  53.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|  53.4k|            *map = zero_rightmost_1bit(*map);
  485|  53.4k|            return true;
  486|  53.4k|        }
  487|  12.2k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|  12.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  12.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 6.14k, False: 6.14k]
  ------------------
  488|       |            return false;
  489|  6.14k|        }
  490|  12.2k|    }
  491|  59.5k|}
miniflow_target.c:flowmap_set:
  385|  53.4k|{
  386|  53.4k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|  53.4k|#define MAP_1 (map_t)1
  ------------------
  387|  53.4k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|  53.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|  53.4k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|  53.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|  53.4k|    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|  53.4k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|  53.4k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   106k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|  10.2k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 10.2k, False: 43.2k]
  |  Branch (394:37): [True: 0, False: 10.2k]
  ------------------
  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|  53.4k|}
miniflow_target.c:minimask_is_catchall:
  789|  12.2k|{
  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.2k|    return flowmap_is_empty(mask->masks.map);
  794|  12.2k|}
miniflow_target.c:flowmap_is_empty:
  449|  12.2k|{
  450|  12.2k|    map_t map;
  451|       |
  452|  22.5k|    FLOWMAP_FOR_EACH_MAP (map, fm) {
  ------------------
  |  |  324|  12.2k|    for (size_t unit__ = 0;                                       \
  |  |  325|  28.7k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  28.7k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  57.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 22.5k, False: 6.19k]
  |  |  |  Branch (325:36): [True: 22.5k, False: 0]
  |  |  ------------------
  |  |  326|  16.4k|         unit__++)
  ------------------
  453|  22.5k|        if (map) {
  ------------------
  |  Branch (453:13): [True: 6.09k, False: 16.4k]
  ------------------
  454|  6.09k|            return false;
  455|  6.09k|        }
  456|  22.5k|    }
  457|  6.19k|    return true;
  458|  12.2k|}
miniflow_target.c:mf_get_next_in_map:
  621|  34.2k|{
  622|  34.2k|    map_t *map, *fmap;
  623|  34.2k|    map_t rm1bit;
  624|       |
  625|       |    /* Skip empty map units. */
  626|  36.2k|    while (OVS_UNLIKELY(!*(map = &aux->map.bits[aux->unit]))) {
  ------------------
  |  |   66|  36.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 4.09k, False: 32.2k]
  |  |  ------------------
  ------------------
  627|       |        /* Skip remaining data in the current unit before advancing
  628|       |         * to the next. */
  629|  4.09k|        aux->values += count_1bits(aux->fmap.bits[aux->unit]);
  630|  4.09k|        if (++aux->unit == FLOWMAP_UNITS) {
  ------------------
  |  |  280|  4.09k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  4.09k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (630:13): [True: 2.04k, False: 2.04k]
  ------------------
  631|  2.04k|            return false;
  632|  2.04k|        }
  633|  4.09k|    }
  634|       |
  635|  32.2k|    rm1bit = rightmost_1bit(*map);
  636|  32.2k|    *map -= rm1bit;
  637|  32.2k|    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|  32.2k|    if (OVS_LIKELY(*fmap & rm1bit)) {
  ------------------
  |  |   65|  32.2k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 10.1k, False: 22.0k]
  |  |  ------------------
  ------------------
  643|       |        /* Skip all 64-bit words in 'values' preceding the one corresponding
  644|       |         * to 'rm1bit'. */
  645|  10.1k|        map_t trash = *fmap & (rm1bit - 1);
  646|       |
  647|       |        /* Avoid resetting 'fmap' and calling count_1bits() when trash is
  648|       |         * zero. */
  649|  10.1k|        if (trash) {
  ------------------
  |  Branch (649:13): [True: 8.09k, False: 2.02k]
  ------------------
  650|  8.09k|            *fmap -= trash;
  651|  8.09k|            aux->values += count_1bits(trash);
  652|  8.09k|        }
  653|       |
  654|  10.1k|        *value = *aux->values;
  655|  22.0k|    } else {
  656|  22.0k|        *value = 0;
  657|  22.0k|    }
  658|       |    return true;
  659|  34.2k|}
flow.c:miniflow_values:
  530|  22.5k|{
  531|  22.5k|    return (uint64_t *)(mf + 1);
  532|  22.5k|}
flow.c:flowmap_set:
  385|   120k|{
  386|   120k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   120k|#define MAP_1 (map_t)1
  ------------------
  387|   120k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   120k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   120k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   120k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   120k|    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|   120k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   120k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   240k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|  24.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 24.5k, False: 95.4k]
  |  Branch (394:37): [True: 0, False: 24.5k]
  ------------------
  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|   120k|}
flow.c:odp_to_u32:
  202|  2.04k|{
  203|  2.04k|    return (OVS_FORCE uint32_t) odp_port;
  204|  2.04k|}
flow.c:is_nd:
 1119|    736|{
 1120|    736|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 26, False: 710]
  ------------------
 1121|     26|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 26, False: 0]
  ------------------
 1122|     26|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|     26|        }
 1124|     26|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 2, False: 24]
  ------------------
 1125|      2|            return false;
 1126|      2|        }
 1127|       |
 1128|     24|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 24, False: 0]
  ------------------
 1129|     24|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|     24|        }
 1131|     24|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 5, False: 19]
  ------------------
 1132|     19|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 7, False: 12]
  ------------------
 1133|     26|    }
 1134|    710|    return false;
 1135|    736|}
flow.c:is_icmpv6:
 1107|    736|{
 1108|    736|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 736, False: 0]
  ------------------
 1109|    736|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 736, False: 0]
  ------------------
 1110|    736|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|    736|        }
 1112|    736|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|    736|    }
 1114|      0|    return false;
 1115|    736|}
flow.c:get_dl_type:
 1036|    736|{
 1037|    736|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 736, False: 0]
  ------------------
 1038|    736|        return flow->dl_type;
 1039|    736|    } 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|    736|}
flow.c:flowmap_init:
  343|  22.5k|{
  344|  22.5k|    memset(fm, 0, sizeof *fm);
  345|  22.5k|}
flow.c:flow_equal:
  184|  2.04k|{
  185|  2.04k|    return !flow_compare_3way(a, b);
  186|  2.04k|}
flow.c:flow_compare_3way:
  178|  2.04k|{
  179|  2.04k|    return memcmp(a, b, sizeof *a);
  180|  2.04k|}
flow.c:flowmap_is_set:
  355|   134k|{
  356|   134k|    return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   134k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  271|   134k|#define MAP_1 (map_t)1
  ------------------
                  return (fm->bits[idx / MAP_T_BITS] & (MAP_1 << (idx % MAP_T_BITS))) != 0;
  ------------------
  |  |  270|   134k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  357|   134k|}
flow.c:miniflow_get__:
  678|  60.9k|{
  679|  60.9k|    const uint64_t *values = miniflow_get_values(mf);
  680|  60.9k|    const map_t *map = mf->map.bits;
  681|       |
  682|   119k|    while (idx >= MAP_T_BITS) {
  ------------------
  |  |  270|   119k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (682:12): [True: 58.9k, False: 60.9k]
  ------------------
  683|       |        idx -= MAP_T_BITS;
  ------------------
  |  |  270|  58.9k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  684|  58.9k|        values += count_1bits(*map++);
  685|  58.9k|    }
  686|  60.9k|    return miniflow_values_get__(values, *map, idx);
  687|  60.9k|}
flow.c:miniflow_values_get__:
  670|  60.9k|{
  671|  60.9k|    return values + count_1bits(map & ((MAP_1 << idx) - 1));
  ------------------
  |  |  271|  60.9k|#define MAP_1 (map_t)1
  ------------------
  672|  60.9k|}
flow.c:miniflow_get_values:
  535|  96.4k|{
  536|  96.4k|    return (const uint64_t *)(mf + 1);
  537|  96.4k|}
flow.c:mf_get_next_in_map:
  621|  3.68k|{
  622|  3.68k|    map_t *map, *fmap;
  623|  3.68k|    map_t rm1bit;
  624|       |
  625|       |    /* Skip empty map units. */
  626|  4.41k|    while (OVS_UNLIKELY(!*(map = &aux->map.bits[aux->unit]))) {
  ------------------
  |  |   66|  4.41k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 1.47k, False: 2.94k]
  |  |  ------------------
  ------------------
  627|       |        /* Skip remaining data in the current unit before advancing
  628|       |         * to the next. */
  629|  1.47k|        aux->values += count_1bits(aux->fmap.bits[aux->unit]);
  630|  1.47k|        if (++aux->unit == FLOWMAP_UNITS) {
  ------------------
  |  |  280|  1.47k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  1.47k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (630:13): [True: 736, False: 736]
  ------------------
  631|    736|            return false;
  632|    736|        }
  633|  1.47k|    }
  634|       |
  635|  2.94k|    rm1bit = rightmost_1bit(*map);
  636|  2.94k|    *map -= rm1bit;
  637|  2.94k|    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|  2.94k|    if (OVS_LIKELY(*fmap & rm1bit)) {
  ------------------
  |  |   65|  2.94k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 2.68k, False: 256]
  |  |  ------------------
  ------------------
  643|       |        /* Skip all 64-bit words in 'values' preceding the one corresponding
  644|       |         * to 'rm1bit'. */
  645|  2.68k|        map_t trash = *fmap & (rm1bit - 1);
  646|       |
  647|       |        /* Avoid resetting 'fmap' and calling count_1bits() when trash is
  648|       |         * zero. */
  649|  2.68k|        if (trash) {
  ------------------
  |  Branch (649:13): [True: 2.68k, False: 0]
  ------------------
  650|  2.68k|            *fmap -= trash;
  651|  2.68k|            aux->values += count_1bits(trash);
  652|  2.68k|        }
  653|       |
  654|  2.68k|        *value = *aux->values;
  655|  2.68k|    } else {
  656|    256|        *value = 0;
  657|    256|    }
  658|       |    return true;
  659|  3.68k|}
flow.c:miniflow_get_ports:
  897|    949|{
  898|       |    return MINIFLOW_GET_TYPE__(flow, ovs_be32, tp_src);
  ------------------
  |  |  702|    949|    (MINIFLOW_IN_MAP(MF, FLOW_U64_OFFSET(FIELD))                        \
  |  |  ------------------
  |  |  |  |  689|    949|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (689:34): [True: 810, False: 139]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  703|    949|     ? ((OVS_FORCE const TYPE *)miniflow_get__(MF, FLOW_U64_OFFSET(FIELD))) \
  |  |  ------------------
  |  |  |  |   62|    810|    (offsetof(struct flow, FIELD) / sizeof(uint64_t))
  |  |  ------------------
  |  |  704|    810|     [FLOW_U64_OFFREM(FIELD) / sizeof(TYPE)]                            \
  |  |  ------------------
  |  |  |  |   64|    810|    (offsetof(struct flow, FIELD) % sizeof(uint64_t))
  |  |  ------------------
  |  |  705|    949|     : 0)
  ------------------
  899|    949|}
flow.c:flowmap_next_index:
  479|   231k|{
  480|   266k|    for (;;) {
  481|   266k|        map_t *map = &aux->map.bits[aux->unit];
  482|   266k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 200k, False: 65.4k]
  ------------------
  483|   200k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   200k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   200k|            *map = zero_rightmost_1bit(*map);
  485|   200k|            return true;
  486|   200k|        }
  487|  65.4k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|  65.4k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|  65.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 30.6k, False: 34.7k]
  ------------------
  488|       |            return false;
  489|  30.6k|        }
  490|  65.4k|    }
  491|   231k|}
flow.c:flow_u64_value:
  557|  1.83M|{
  558|  1.83M|    return ((uint64_t *)flow)[index];
  559|  1.83M|}
flow.c:miniflow_n_values:
  568|  24.5k|{
  569|  24.5k|    return flowmap_n_1bits(flow->map);
  570|  24.5k|}
flow.c:flowmap_n_1bits:
  462|  24.5k|{
  463|  24.5k|    unsigned int n_1bits = 0;
  464|  24.5k|    size_t unit;
  465|       |
  466|  49.1k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  73.6k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  73.6k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  73.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 49.1k, False: 24.5k]
  |  |  ------------------
  ------------------
  467|  49.1k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  49.1k|    }
  469|  24.5k|    return n_1bits;
  470|  24.5k|}
flow.c:flow_union_with_miniflow:
  938|  8.19k|{
  939|  8.19k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|  8.19k|}
flow.c:flow_union_with_miniflow_subset:
  919|  8.19k|{
  920|  8.19k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|  8.19k|    const uint64_t *p = miniflow_get_values(src);
  922|  8.19k|    map_t map;
  923|       |
  924|  16.3k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|  8.19k|    for (size_t unit__ = 0;                                       \
  |  |  325|  24.5k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|  24.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  49.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 16.3k, False: 8.19k]
  |  |  |  Branch (325:36): [True: 16.3k, False: 0]
  |  |  ------------------
  |  |  326|  16.3k|         unit__++)
  ------------------
  925|  16.3k|        size_t idx;
  926|       |
  927|  36.4k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|  16.3k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|  16.3k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|  52.8k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 36.4k, False: 16.3k]
  |  |  |  |  |  Branch (286:19): [True: 36.4k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|  36.4k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|  36.4k|            dst_u64[idx] |= *p++;
  929|  36.4k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|  16.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|  16.3k|    }
  932|  8.19k|}
flow.c:flowmap_equal:
  349|  4.09k|{
  350|  4.09k|    return !memcmp(&a, &b, sizeof a);
  351|  4.09k|}
flow.c:miniflow_get:
  800|   102k|{
  801|   102k|    return MINIFLOW_IN_MAP(flow, u64_ofs) ? *miniflow_get__(flow, u64_ofs) : 0;
  ------------------
  |  |  689|   102k|#define MINIFLOW_IN_MAP(MF, IDX) flowmap_is_set(&(MF)->map, IDX)
  |  |  ------------------
  |  |  |  Branch (689:34): [True: 32.4k, False: 70.3k]
  |  |  ------------------
  ------------------
  802|   102k|}
flow.c:flowmap_and:
  437|  4.09k|{
  438|  4.09k|    struct flowmap map;
  439|  4.09k|    size_t unit;
  440|       |
  441|  8.19k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|  12.2k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|  12.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  12.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 8.19k, False: 4.09k]
  |  |  ------------------
  ------------------
  442|  8.19k|        map.bits[unit] = a.bits[unit] & b.bits[unit];
  443|  8.19k|    }
  444|  4.09k|    return map;
  445|  4.09k|}

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|   166k|{
  114|   166k|    return hash_add(hash_add(hash, data), data >> 32);
  115|   166k|}
miniflow_target.c:hash_add:
  108|   332k|{
  109|   332k|    return mhash_add(hash, data);
  110|   332k|}
miniflow_target.c:mhash_add:
   77|   332k|{
   78|   332k|    hash = mhash_add__(hash, data);
   79|   332k|    hash = hash_rot(hash, 13);
   80|   332k|    return hash * 5 + 0xe6546b64;
   81|   332k|}
miniflow_target.c:mhash_add__:
   64|   332k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   332k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 128k, False: 203k]
  ------------------
   67|   128k|        return hash;
   68|   128k|    }
   69|       |
   70|   203k|    data *= 0xcc9e2d51;
   71|   203k|    data = hash_rot(data, 15);
   72|   203k|    data *= 0x1b873593;
   73|   203k|    return hash ^ data;
   74|   332k|}
miniflow_target.c:hash_rot:
   31|   536k|{
   32|   536k|    return (x << k) | (x >> (32 - k));
   33|   536k|}
miniflow_target.c:hash_finish:
  118|  12.2k|{
  119|  12.2k|    return mhash_finish(hash ^ final);
  120|  12.2k|}
miniflow_target.c:mhash_finish:
   84|  12.2k|{
   85|  12.2k|    hash ^= hash >> 16;
   86|  12.2k|    hash *= 0x85ebca6b;
   87|  12.2k|    hash ^= hash >> 13;
   88|  12.2k|    hash *= 0xc2b2ae35;
   89|  12.2k|    hash ^= hash >> 16;
   90|  12.2k|    return hash;
   91|  12.2k|}
flow.c:hash_add64:
  113|  4.40k|{
  114|  4.40k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  4.40k|}
flow.c:hash_add:
  108|  14.6k|{
  109|  14.6k|    return mhash_add(hash, data);
  110|  14.6k|}
flow.c:mhash_add:
   77|  14.6k|{
   78|  14.6k|    hash = mhash_add__(hash, data);
   79|  14.6k|    hash = hash_rot(hash, 13);
   80|  14.6k|    return hash * 5 + 0xe6546b64;
   81|  14.6k|}
flow.c:mhash_add__:
   64|  14.6k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  14.6k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 2.22k, False: 12.4k]
  ------------------
   67|  2.22k|        return hash;
   68|  2.22k|    }
   69|       |
   70|  12.4k|    data *= 0xcc9e2d51;
   71|  12.4k|    data = hash_rot(data, 15);
   72|  12.4k|    data *= 0x1b873593;
   73|  12.4k|    return hash ^ data;
   74|  14.6k|}
flow.c:hash_rot:
   31|  27.1k|{
   32|  27.1k|    return (x << k) | (x >> (32 - k));
   33|  27.1k|}
flow.c:hash_finish:
  118|  2.65k|{
  119|  2.65k|    return mhash_finish(hash ^ final);
  120|  2.65k|}
flow.c:mhash_finish:
   84|  2.65k|{
   85|  2.65k|    hash ^= hash >> 16;
   86|  2.65k|    hash *= 0x85ebca6b;
   87|  2.65k|    hash ^= hash >> 13;
   88|  2.65k|    hash *= 0xc2b2ae35;
   89|  2.65k|    hash ^= hash >> 16;
   90|  2.65k|    return hash;
   91|  2.65k|}
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.04k|    {                                                                   \
  247|  2.04k|        return NAME##_get_unsafe();                                     \
  248|  2.04k|    }
flow.c:counter_flow_extract_get_unsafe:
  239|  2.04k|    {                                                                   \
  240|  2.04k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  2.04k|        return &var;                                                    \
  242|  2.04k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  246|     64|    {                                                                   \
  247|     64|        return NAME##_get_unsafe();                                     \
  248|     64|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  239|     64|    {                                                                   \
  240|     64|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     64|        return &var;                                                    \
  242|     64|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get:
  246|     11|    {                                                                   \
  247|     11|        return NAME##_get_unsafe();                                     \
  248|     11|    }
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get_unsafe:
  239|     11|    {                                                                   \
  240|     11|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     11|        return &var;                                                    \
  242|     11|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get:
  246|     37|    {                                                                   \
  247|     37|        return NAME##_get_unsafe();                                     \
  248|     37|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  239|     37|    {                                                                   \
  240|     37|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     37|        return &var;                                                    \
  242|     37|    }                                                                   \
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.4k|    {                                                                   \
  247|  20.4k|        return NAME##_get_unsafe();                                     \
  248|  20.4k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  239|  20.4k|    {                                                                   \
  240|  20.4k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  20.4k|        return &var;                                                    \
  242|  20.4k|    }                                                                   \
random.c:seed_get:
  246|   221k|    {                                                                   \
  247|   221k|        return NAME##_get_unsafe();                                     \
  248|   221k|    }
random.c:seed_get_unsafe:
  239|   443k|    {                                                                   \
  240|   443k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|   443k|        return &var;                                                    \
  242|   443k|    }                                                                   \
util.c:counter_util_xalloc_get:
  246|  20.4k|    {                                                                   \
  247|  20.4k|        return NAME##_get_unsafe();                                     \
  248|  20.4k|    }
util.c:counter_util_xalloc_get_unsafe:
  239|  20.4k|    {                                                                   \
  240|  20.4k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  20.4k|        return &var;                                                    \
  242|  20.4k|    }                                                                   \

miniflow_target.c:vlan_tci_to_vid:
  507|  8.19k|{
  508|  8.19k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  8.19k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  8.19k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  8.19k|}
dp-packet.c:pkt_metadata_init:
  165|  2.04k|{
  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.04k|    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.04k|    md->tunnel.ip_dst = 0;
  179|  2.04k|    md->tunnel.ipv6_dst = in6addr_any;
  180|  2.04k|    md->in_port.odp_port = port;
  181|  2.04k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|  2.04k|}
flow.c:flow_tnl_dst_is_set:
   51|  4.09k|{
   52|  4.09k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 4.09k]
  |  Branch (52:27): [True: 0, False: 4.09k]
  ------------------
   53|  4.09k|}
flow.c:eth_type_vlan:
  429|  2.06k|{
  430|  2.06k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 28, False: 2.03k]
  ------------------
  431|  2.03k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 14, False: 2.02k]
  ------------------
  432|  2.06k|}
flow.c:eth_type_mpls:
  423|  2.49k|{
  424|  2.49k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 28, False: 2.46k]
  ------------------
  425|  2.46k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 44, False: 2.42k]
  ------------------
  426|  2.49k|}
flow.c:eth_addr_is_zero:
  246|    717|{
  247|    717|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    717|}
flow.c:ipv6_addr_is_set:
 1205|  4.09k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|  4.09k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|  4.09k|}
flow.c:ipv6_addr_equals:
 1184|  4.09k|{
 1185|  4.09k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  4.09k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  4.09k|}

random_init:
   48|   221k|{
   49|   221k|    uint32_t *seedp = seed_get();
   50|   221k|    while (!*seedp) {
  ------------------
  |  Branch (50:12): [True: 1, False: 221k]
  ------------------
   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|   221k|}
random_uint32:
   92|   221k|{
   93|   221k|    random_init();
   94|   221k|    return random_next();
   95|   221k|}
random.c:random_next:
  111|   221k|{
  112|   221k|    uint32_t *seedp = seed_get_unsafe();
  113|       |
  114|   221k|    *seedp ^= *seedp << 13;
  115|   221k|    *seedp ^= *seedp >> 17;
  116|   221k|    *seedp ^= *seedp << 5;
  117|       |
  118|   221k|    return *seedp;
  119|   221k|}

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

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|    958|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    958|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    958|#endif
  252|    958|}
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.4k|{
  138|  20.4k|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 20.4k, False: 0]
  ------------------
  139|  20.4k|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 20.4k]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|  20.4k|    return p;
  143|  20.4k|}
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.4k|{
  172|  20.4k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  20.4k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  20.4k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|  20.4k|    return xmalloc__(size);
  174|  20.4k|}
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|   239k|void ovs_ignore(bool x OVS_UNUSED) { }

miniflow_target.c:count_1bits:
  332|  49.9k|{
  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.9k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  49.9k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  49.9k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  49.9k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  49.9k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  49.9k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  49.9k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  49.9k|#endif
  349|  49.9k|}
miniflow_target.c:raw_ctz:
  261|  85.6k|{
  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|  85.6k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 85.6k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  85.6k|            ? __builtin_ctz(n)
  267|  85.6k|            : __builtin_ctzll(n));
  268|  85.6k|}
miniflow_target.c:zero_rightmost_1bit:
  390|  85.6k|{
  391|  85.6k|    return x & (x - 1);
  392|  85.6k|}
miniflow_target.c:rightmost_1bit:
  382|  32.2k|{
  383|  32.2k|    return x & -x;
  384|  32.2k|}
flow.c:rightmost_1bit:
  382|  2.94k|{
  383|  2.94k|    return x & -x;
  384|  2.94k|}
flow.c:count_1bits:
  332|   173k|{
  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|   173k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|   173k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|   173k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|   173k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|   173k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|   173k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|   173k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|   173k|#endif
  349|   173k|}
flow.c:raw_ctz:
  261|   237k|{
  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|   237k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 237k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   237k|            ? __builtin_ctz(n)
  267|   237k|            : __builtin_ctzll(n));
  268|   237k|}
flow.c:zero_rightmost_1bit:
  390|   237k|{
  391|   237k|    return x & (x - 1);
  392|   237k|}

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|    120|{
 1001|    120|    return module->min_level >= level;
 1002|    120|}

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

