ofp-print.c:ds_put_char:
   90|  2.80M|{
   91|  2.80M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 2.75M, False: 46.1k]
  ------------------
   92|  2.75M|        ds->string[ds->length++] = c;
   93|  2.75M|        ds->string[ds->length] = '\0';
   94|  2.75M|    } else {
   95|  46.1k|        ds_put_char__(ds, c);
   96|  46.1k|    }
   97|  2.80M|}
ofp-queue.c:ds_put_char:
   90|  55.0k|{
   91|  55.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 52.6k, False: 2.40k]
  ------------------
   92|  52.6k|        ds->string[ds->length++] = c;
   93|  52.6k|        ds->string[ds->length] = '\0';
   94|  52.6k|    } else {
   95|  2.40k|        ds_put_char__(ds, c);
   96|  2.40k|    }
   97|  55.0k|}
ofp-switch.c:ds_put_char:
   90|  20.6k|{
   91|  20.6k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 19.1k, False: 1.50k]
  ------------------
   92|  19.1k|        ds->string[ds->length++] = c;
   93|  19.1k|        ds->string[ds->length] = '\0';
   94|  19.1k|    } else {
   95|  1.50k|        ds_put_char__(ds, c);
   96|  1.50k|    }
   97|  20.6k|}
ofp-table.c:ds_put_char:
   90|  1.05M|{
   91|  1.05M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 1.05M, False: 3.05k]
  ------------------
   92|  1.05M|        ds->string[ds->length++] = c;
   93|  1.05M|        ds->string[ds->length] = '\0';
   94|  1.05M|    } else {
   95|  3.05k|        ds_put_char__(ds, c);
   96|  3.05k|    }
   97|  1.05M|}
dynamic-string.c:ds_put_char:
   90|   170M|{
   91|   170M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 169M, False: 1.06M]
  ------------------
   92|   169M|        ds->string[ds->length++] = c;
   93|   169M|        ds->string[ds->length] = '\0';
   94|   169M|    } else {
   95|  1.06M|        ds_put_char__(ds, c);
   96|  1.06M|    }
   97|   170M|}
flow.c:ds_put_char:
   90|  33.3k|{
   91|  33.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 33.0k, False: 227]
  ------------------
   92|  33.0k|        ds->string[ds->length++] = c;
   93|  33.0k|        ds->string[ds->length] = '\0';
   94|  33.0k|    } else {
   95|    227|        ds_put_char__(ds, c);
   96|    227|    }
   97|  33.3k|}
match.c:ds_put_char:
   90|   834k|{
   91|   834k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 827k, False: 6.43k]
  ------------------
   92|   827k|        ds->string[ds->length++] = c;
   93|   827k|        ds->string[ds->length] = '\0';
   94|   827k|    } else {
   95|  6.43k|        ds_put_char__(ds, c);
   96|  6.43k|    }
   97|   834k|}
meta-flow.c:ds_put_char:
   90|  1.85k|{
   91|  1.85k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 1.83k, False: 18]
  ------------------
   92|  1.83k|        ds->string[ds->length++] = c;
   93|  1.83k|        ds->string[ds->length] = '\0';
   94|  1.83k|    } else {
   95|     18|        ds_put_char__(ds, c);
   96|     18|    }
   97|  1.85k|}
netdev.c:ds_put_char:
   90|   123k|{
   91|   123k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 122k, False: 1.12k]
  ------------------
   92|   122k|        ds->string[ds->length++] = c;
   93|   122k|        ds->string[ds->length] = '\0';
   94|   122k|    } else {
   95|  1.12k|        ds_put_char__(ds, c);
   96|  1.12k|    }
   97|   123k|}
nx-match.c:ds_put_char:
   90|  76.5k|{
   91|  76.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 74.3k, False: 2.22k]
  ------------------
   92|  74.3k|        ds->string[ds->length++] = c;
   93|  74.3k|        ds->string[ds->length] = '\0';
   94|  74.3k|    } else {
   95|  2.22k|        ds_put_char__(ds, c);
   96|  2.22k|    }
   97|  76.5k|}
ofp-actions.c:ds_put_char:
   90|   360k|{
   91|   360k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 344k, False: 16.2k]
  ------------------
   92|   344k|        ds->string[ds->length++] = c;
   93|   344k|        ds->string[ds->length] = '\0';
   94|   344k|    } else {
   95|  16.2k|        ds_put_char__(ds, c);
   96|  16.2k|    }
   97|   360k|}
ofp-bundle.c:ds_put_char:
   90|  30.3k|{
   91|  30.3k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 30.3k, False: 0]
  ------------------
   92|  30.3k|        ds->string[ds->length++] = c;
   93|  30.3k|        ds->string[ds->length] = '\0';
   94|  30.3k|    } else {
   95|      0|        ds_put_char__(ds, c);
   96|      0|    }
   97|  30.3k|}
ofp-connection.c:ds_put_char:
   90|   107k|{
   91|   107k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 106k, False: 405]
  ------------------
   92|   106k|        ds->string[ds->length++] = c;
   93|   106k|        ds->string[ds->length] = '\0';
   94|   106k|    } else {
   95|    405|        ds_put_char__(ds, c);
   96|    405|    }
   97|   107k|}
ofp-flow.c:ds_put_char:
   90|   363k|{
   91|   363k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 342k, False: 21.2k]
  ------------------
   92|   342k|        ds->string[ds->length++] = c;
   93|   342k|        ds->string[ds->length] = '\0';
   94|   342k|    } else {
   95|  21.2k|        ds_put_char__(ds, c);
   96|  21.2k|    }
   97|   363k|}
ofp-group.c:ds_put_char:
   90|   149k|{
   91|   149k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 140k, False: 9.32k]
  ------------------
   92|   140k|        ds->string[ds->length++] = c;
   93|   140k|        ds->string[ds->length] = '\0';
   94|   140k|    } else {
   95|  9.32k|        ds_put_char__(ds, c);
   96|  9.32k|    }
   97|   149k|}
ofp-ipfix.c:ds_put_char:
   90|  15.0k|{
   91|  15.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 14.9k, False: 159]
  ------------------
   92|  14.9k|        ds->string[ds->length++] = c;
   93|  14.9k|        ds->string[ds->length] = '\0';
   94|  14.9k|    } else {
   95|    159|        ds_put_char__(ds, c);
   96|    159|    }
   97|  15.0k|}
ofp-match.c:ds_put_char:
   90|  1.72k|{
   91|  1.72k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 1.72k, False: 0]
  ------------------
   92|  1.72k|        ds->string[ds->length++] = c;
   93|  1.72k|        ds->string[ds->length] = '\0';
   94|  1.72k|    } else {
   95|      0|        ds_put_char__(ds, c);
   96|      0|    }
   97|  1.72k|}
ofp-meter.c:ds_put_char:
   90|  13.5k|{
   91|  13.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 12.2k, False: 1.32k]
  ------------------
   92|  12.2k|        ds->string[ds->length++] = c;
   93|  12.2k|        ds->string[ds->length] = '\0';
   94|  12.2k|    } else {
   95|  1.32k|        ds_put_char__(ds, c);
   96|  1.32k|    }
   97|  13.5k|}
ofp-monitor.c:ds_put_char:
   90|  34.7k|{
   91|  34.7k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 31.9k, False: 2.82k]
  ------------------
   92|  31.9k|        ds->string[ds->length++] = c;
   93|  31.9k|        ds->string[ds->length] = '\0';
   94|  31.9k|    } else {
   95|  2.82k|        ds_put_char__(ds, c);
   96|  2.82k|    }
   97|  34.7k|}
ofp-packet.c:ds_put_char:
   90|   199k|{
   91|   199k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 185k, False: 13.7k]
  ------------------
   92|   185k|        ds->string[ds->length++] = c;
   93|   185k|        ds->string[ds->length] = '\0';
   94|   185k|    } else {
   95|  13.7k|        ds_put_char__(ds, c);
   96|  13.7k|    }
   97|   199k|}
ofp-port.c:ds_put_char:
   90|   189k|{
   91|   189k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 184k, False: 5.37k]
  ------------------
   92|   184k|        ds->string[ds->length++] = c;
   93|   184k|        ds->string[ds->length] = '\0';
   94|   184k|    } else {
   95|  5.37k|        ds_put_char__(ds, c);
   96|  5.37k|    }
   97|   189k|}
packets.c:ds_put_char:
   90|    747|{
   91|    747|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 747, False: 0]
  ------------------
   92|    747|        ds->string[ds->length++] = c;
   93|    747|        ds->string[ds->length] = '\0';
   94|    747|    } else {
   95|      0|        ds_put_char__(ds, c);
   96|      0|    }
   97|    747|}
tun-metadata.c:ds_put_char:
   90|  76.0k|{
   91|  76.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 71.9k, False: 4.08k]
  ------------------
   92|  71.9k|        ds->string[ds->length++] = c;
   93|  71.9k|        ds->string[ds->length] = '\0';
   94|  71.9k|    } else {
   95|  4.08k|        ds_put_char__(ds, c);
   96|  4.08k|    }
   97|  76.0k|}
bundle.c:ds_put_char:
   90|  34.7k|{
   91|  34.7k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 32.2k, False: 2.46k]
  ------------------
   92|  32.2k|        ds->string[ds->length++] = c;
   93|  32.2k|        ds->string[ds->length] = '\0';
   94|  32.2k|    } else {
   95|  2.46k|        ds_put_char__(ds, c);
   96|  2.46k|    }
   97|  34.7k|}
learn.c:ds_put_char:
   90|  49.2k|{
   91|  49.2k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (91:9): [True: 47.9k, False: 1.33k]
  ------------------
   92|  47.9k|        ds->string[ds->length++] = c;
   93|  47.9k|        ds->string[ds->length] = '\0';
   94|  47.9k|    } else {
   95|  1.33k|        ds_put_char__(ds, c);
   96|  1.33k|    }
   97|  49.2k|}

nx-match.c:hmap_insert_at:
  306|    418|{
  307|    418|    hmap_insert_fast(hmap, node, hash);
  308|    418|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 12, False: 406]
  ------------------
  309|     12|        hmap_expand_at(hmap, where);
  310|     12|    }
  311|    418|}
nx-match.c:hmap_insert_fast:
  289|    418|{
  290|    418|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|    418|    node->hash = hash;
  292|    418|    node->next = *bucket;
  293|    418|    *bucket = node;
  294|    418|    hmap->n++;
  295|    418|}
nx-match.c:hmap_first_in_bucket:
  367|  14.4M|{
  368|  14.4M|    return hmap->buckets[hash & hmap->mask];
  369|  14.4M|}
nx-match.c:hmap_next_in_bucket:
  381|  11.8M|{
  382|  11.8M|    return node->next;
  383|  11.8M|}
ofp-actions.c:hmap_first_with_hash:
  359|   664k|{
  360|   664k|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|   664k|}
ofp-actions.c:hmap_next_with_hash__:
  348|   664k|{
  349|  1.21M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 1.17M, False: 34.5k]
  |  Branch (349:28): [True: 548k, False: 629k]
  ------------------
  350|   548k|        node = node->next;
  351|   548k|    }
  352|   664k|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   81|   664k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   664k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   664k|     (TYPE) (POINTER))
  ------------------
  353|   664k|}
ofp-actions.c:hmap_insert_at:
  306|    378|{
  307|    378|    hmap_insert_fast(hmap, node, hash);
  308|    378|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 7, False: 371]
  ------------------
  309|      7|        hmap_expand_at(hmap, where);
  310|      7|    }
  311|    378|}
ofp-actions.c:hmap_insert_fast:
  289|    378|{
  290|    378|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|    378|    node->hash = hash;
  292|    378|    node->next = *bucket;
  293|    378|    *bucket = node;
  294|    378|    hmap->n++;
  295|    378|}
ofp-msgs.c:hmap_insert_at:
  306|  1.46k|{
  307|  1.46k|    hmap_insert_fast(hmap, node, hash);
  308|  1.46k|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 9, False: 1.45k]
  ------------------
  309|      9|        hmap_expand_at(hmap, where);
  310|      9|    }
  311|  1.46k|}
ofp-msgs.c:hmap_insert_fast:
  289|  1.46k|{
  290|  1.46k|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|  1.46k|    node->hash = hash;
  292|  1.46k|    node->next = *bucket;
  293|  1.46k|    *bucket = node;
  294|  1.46k|    hmap->n++;
  295|  1.46k|}
ofp-msgs.c:hmap_first_with_hash:
  359|  8.45M|{
  360|  8.45M|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|  8.45M|}
ofp-msgs.c:hmap_next_with_hash__:
  348|  8.45M|{
  349|  13.3M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 11.9M, False: 1.32M]
  |  Branch (349:28): [True: 4.86M, False: 7.13M]
  ------------------
  350|  4.86M|        node = node->next;
  351|  4.86M|    }
  352|  8.45M|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   81|  8.45M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  8.45M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  8.45M|     (TYPE) (POINTER))
  ------------------
  353|  8.45M|}
ofp-msgs.c:hmap_next_with_hash:
  395|     76|{
  396|     76|    return hmap_next_with_hash__(node->next, node->hash);
  397|     76|}
hmap.c:hmap_insert_fast:
  289|  3.04k|{
  290|  3.04k|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|  3.04k|    node->hash = hash;
  292|  3.04k|    node->next = *bucket;
  293|  3.04k|    *bucket = node;
  294|  3.04k|    hmap->n++;
  295|  3.04k|}

ofpbuf.c:ovs_list_poison:
  157|  3.25M|{
  158|  3.25M|    *list = OVS_LIST_POISON;
  159|  3.25M|}
vlog.c:ovs_list_insert:
  164|    170|{
  165|    170|    elem->prev = before->prev;
  166|    170|    elem->next = before;
  167|    170|    before->prev->next = elem;
  168|    170|    before->prev = elem;
  169|    170|}
nx-match.c:ovs_list_init:
  149|    183|{
  150|    183|    list->next = list->prev = list;
  151|    183|}
nx-match.c:ovs_list_push_back:
  204|    209|{
  205|    209|    ovs_list_insert(list, elem);
  206|    209|}
nx-match.c:ovs_list_insert:
  164|    209|{
  165|    209|    elem->prev = before->prev;
  166|    209|    elem->next = before;
  167|    209|    before->prev->next = elem;
  168|    209|    before->prev = elem;
  169|    209|}
ofp-group.c:ovs_list_is_empty:
  320|   125k|{
  321|   125k|    return list->next == list;
  322|   125k|}
ofp-group.c:ovs_list_pop_front:
  261|  12.3k|{
  262|  12.3k|    struct ovs_list *front = list->next;
  263|       |
  264|  12.3k|    ovs_list_remove(front);
  265|  12.3k|    return front;
  266|  12.3k|}
ofp-group.c:ovs_list_remove:
  251|  12.3k|{
  252|  12.3k|    elem->prev->next = elem->next;
  253|  12.3k|    elem->next->prev = elem->prev;
  254|  12.3k|    return elem->next;
  255|  12.3k|}
ofp-group.c:ovs_list_push_back:
  204|  12.3k|{
  205|  12.3k|    ovs_list_insert(list, elem);
  206|  12.3k|}
ofp-group.c:ovs_list_insert:
  164|  12.3k|{
  165|  12.3k|    elem->prev = before->prev;
  166|  12.3k|    elem->next = before;
  167|  12.3k|    before->prev->next = elem;
  168|  12.3k|    before->prev = elem;
  169|  12.3k|}
ofp-group.c:ovs_list_init:
  149|   102k|{
  150|   102k|    list->next = list->prev = list;
  151|   102k|}
ofp-group.c:ovs_list_is_short:
  334|  1.89k|{
  335|  1.89k|    return list->next == list->prev;
  336|  1.89k|}
ofp-group.c:ovs_list_is_singleton:
  327|  1.89k|{
  328|  1.89k|    return ovs_list_is_short(list) && !ovs_list_is_empty(list);
  ------------------
  |  Branch (328:12): [True: 1.87k, False: 11]
  |  Branch (328:39): [True: 1.44k, False: 434]
  ------------------
  329|  1.89k|}
ofp-match.c:ovs_list_init:
  149|  5.00k|{
  150|  5.00k|    list->next = list->prev = list;
  151|  5.00k|}
ofp-match.c:ovs_list_push_back:
  204|  8.00k|{
  205|  8.00k|    ovs_list_insert(list, elem);
  206|  8.00k|}
ofp-match.c:ovs_list_insert:
  164|  8.00k|{
  165|  8.00k|    elem->prev = before->prev;
  166|  8.00k|    elem->next = before;
  167|  8.00k|    before->prev->next = elem;
  168|  8.00k|    before->prev = elem;
  169|  8.00k|}
ofp-match.c:ovs_list_is_empty:
  320|  13.0k|{
  321|  13.0k|    return list->next == list;
  322|  13.0k|}
ofp-match.c:ovs_list_pop_front:
  261|  8.00k|{
  262|  8.00k|    struct ovs_list *front = list->next;
  263|       |
  264|  8.00k|    ovs_list_remove(front);
  265|  8.00k|    return front;
  266|  8.00k|}
ofp-match.c:ovs_list_remove:
  251|  8.00k|{
  252|  8.00k|    elem->prev->next = elem->next;
  253|  8.00k|    elem->next->prev = elem->prev;
  254|  8.00k|    return elem->next;
  255|  8.00k|}

ofp-table.c:mf_from_id:
 2270|   657k|{
 2271|   657k|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2272|   657k|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   58|   657k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 2273|   657k|    return &mf_fields[id];
 2274|   657k|}
meta-flow.c:mf_from_id:
 2270|  63.4k|{
 2271|  63.4k|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2272|  63.4k|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   58|  63.4k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 2273|  63.4k|    return &mf_fields[id];
 2274|  63.4k|}
nx-match.c:mf_from_id:
 2270|  1.10M|{
 2271|  1.10M|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2272|  1.10M|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   58|  1.10M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 2273|  1.10M|    return &mf_fields[id];
 2274|  1.10M|}

flow.c:nsh_get_ver:
  286|  7.50k|{
  287|  7.50k|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_VER_MASK) >> NSH_VER_SHIFT;
  ------------------
  |  |  226|  7.50k|#define NSH_VER_MASK       0xc000
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_VER_MASK) >> NSH_VER_SHIFT;
  ------------------
  |  |  227|  7.50k|#define NSH_VER_SHIFT      14
  ------------------
  288|  7.50k|}
flow.c:nsh_get_flags:
  292|  7.50k|{
  293|  7.50k|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_FLAGS_MASK) >> NSH_FLAGS_SHIFT;
  ------------------
  |  |  228|  7.50k|#define NSH_FLAGS_MASK     0x3000
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_FLAGS_MASK) >> NSH_FLAGS_SHIFT;
  ------------------
  |  |  229|  7.50k|#define NSH_FLAGS_SHIFT    12
  ------------------
  294|  7.50k|}
flow.c:nsh_hdr_len:
  273|  7.50k|{
  274|  7.50k|    return ((ntohs(nsh->ver_flags_ttl_len) & NSH_LEN_MASK)
  ------------------
  |  |  232|  7.50k|#define NSH_LEN_MASK       0x003f
  ------------------
  275|  7.50k|            >> NSH_LEN_SHIFT) << 2;
  ------------------
  |  |  233|  7.50k|#define NSH_LEN_SHIFT      0
  ------------------
  276|  7.50k|}
flow.c:nsh_get_ttl:
  304|  7.50k|{
  305|  7.50k|    return (ntohs(nsh->ver_flags_ttl_len) & NSH_TTL_MASK) >> NSH_TTL_SHIFT;
  ------------------
  |  |  230|  7.50k|#define NSH_TTL_MASK       0x0fc0
  ------------------
                  return (ntohs(nsh->ver_flags_ttl_len) & NSH_TTL_MASK) >> NSH_TTL_SHIFT;
  ------------------
  |  |  231|  7.50k|#define NSH_TTL_SHIFT      6
  ------------------
  306|  7.50k|}
flow.c:nsh_get_path_hdr:
  326|  4.56k|{
  327|  4.56k|    return nsh_16aligned_be32(&nsh->path_hdr);
  328|  4.56k|}
flow.c:nsh_16aligned_be32:
  311|  4.56k|{
  312|       |#ifdef WORDS_BIGENDIAN
  313|       |    return ((ovs_be32) x->hi << 16) | (ovs_be32) x->lo;
  314|       |#else
  315|  4.56k|    return ((ovs_be32) x->lo << 16) | (ovs_be32) x->hi;
  316|  4.56k|#endif
  317|  4.56k|}
match.c:nsh_path_hdr_to_spi:
  346|  26.0k|{
  347|  26.0k|    uint32_t hv = (ntohl(path_hdr) & NSH_SPI_MASK) >> NSH_SPI_SHIFT;
  ------------------
  |  |  238|  26.0k|#define NSH_SPI_MASK       0xffffff00
  ------------------
                  uint32_t hv = (ntohl(path_hdr) & NSH_SPI_MASK) >> NSH_SPI_SHIFT;
  ------------------
  |  |  239|  26.0k|#define NSH_SPI_SHIFT      8
  ------------------
  348|  26.0k|    return htonl(hv);
  349|  26.0k|}
match.c:nsh_path_hdr_to_si:
  359|  26.0k|{
  360|  26.0k|    return (ntohl(path_hdr) & NSH_SI_MASK) >> NSH_SI_SHIFT;
  ------------------
  |  |  240|  26.0k|#define NSH_SI_MASK        0x000000ff
  ------------------
                  return (ntohl(path_hdr) & NSH_SI_MASK) >> NSH_SI_SHIFT;
  ------------------
  |  |  241|  26.0k|#define NSH_SI_SHIFT       0
  ------------------
  361|  26.0k|}
meta-flow.c:nsh_path_hdr_set_spi:
  395|     28|{
  396|     28|    uint32_t hvph  = ntohl(*path_hdr);
  397|     28|    uint32_t hvspi = ntohl(spi);
  398|     28|    *path_hdr = htonl(( hvph & ~NSH_SPI_MASK) |
  399|     28|                      ((hvspi << NSH_SPI_SHIFT) & NSH_SPI_MASK));
  400|     28|}
meta-flow.c:nsh_path_hdr_set_si:
  404|     89|{
  405|     89|    uint32_t hvph  = ntohl(*path_hdr);
  406|     89|    *path_hdr = htonl((hvph & ~NSH_SI_MASK) |
  407|     89|                      ((si << NSH_SI_SHIFT) & NSH_SI_MASK));
  408|     89|}

ofp-actions.c:ofpact_next:
  212|  1.11M|{
  213|  1.11M|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  430|  1.11M|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|  1.11M|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|  1.11M|}
ofp-actions.c:ofpact_get_CLONE:
 1287|    110|    {                                                                   \
 1288|    110|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    110|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    110|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    110|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    110|    }                                                                   \
ofp-actions.c:ofpact_get_CT:
 1287|  13.2k|    {                                                                   \
 1288|  13.2k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  13.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  13.2k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  13.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  13.2k|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_ACTIONS:
 1287|  16.7k|    {                                                                   \
 1288|  16.7k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  16.7k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  16.7k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  16.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  16.7k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_FIELD:
 1301|  26.1k|    {                                                                   \
 1302|  26.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  26.1k|                                            sizeof(struct STRUCT));     \
 1304|  26.1k|    }                                                                   \
ofp-actions.c:ofpact_finish_SET_FIELD:
 1315|  26.1k|    {                                                                   \
 1316|  26.1k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  26.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  26.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  26.1k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  26.1k|    }
ofp-actions.c:ofpact_end:
  221|  1.78M|{
  222|  1.78M|    return ofpacts
  ------------------
  |  Branch (222:12): [True: 1.75M, False: 23.5k]
  ------------------
  223|  1.78M|           ? ALIGNED_CAST(struct ofpact *, (uint8_t *) ofpacts + ofpacts_len)
  ------------------
  |  |  430|  1.75M|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  224|  1.78M|           : NULL;
  225|  1.78M|}
ofp-actions.c:ofpact_put_METER:
 1301|  12.1k|    {                                                                   \
 1302|  12.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  12.1k|                                            sizeof(struct STRUCT));     \
 1304|  12.1k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT:
 1301|  51.0k|    {                                                                   \
 1302|  51.0k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  51.0k|                                            sizeof(struct STRUCT));     \
 1304|  51.0k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_VID:
 1301|  10.9k|    {                                                                   \
 1302|  10.9k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  10.9k|                                            sizeof(struct STRUCT));     \
 1304|  10.9k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_PCP:
 1301|  2.11k|    {                                                                   \
 1302|  2.11k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  2.11k|                                            sizeof(struct STRUCT));     \
 1304|  2.11k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_VLAN:
 1301|  4.43k|    {                                                                   \
 1302|  4.43k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  4.43k|                                            sizeof(struct STRUCT));     \
 1304|  4.43k|    }                                                                   \
ofp-actions.c:ofpact_put_STRIP_VLAN:
 1301|  20.4k|    {                                                                   \
 1302|  20.4k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  20.4k|                                            sizeof(struct STRUCT));     \
 1304|  20.4k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_SRC:
 1301|     54|    {                                                                   \
 1302|     54|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|     54|                                            sizeof(struct STRUCT));     \
 1304|     54|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_DST:
 1301|     71|    {                                                                   \
 1302|     71|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|     71|                                            sizeof(struct STRUCT));     \
 1304|     71|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_SRC:
 1301|  5.78k|    {                                                                   \
 1302|  5.78k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  5.78k|                                            sizeof(struct STRUCT));     \
 1304|  5.78k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_DST:
 1301|  10.1k|    {                                                                   \
 1302|  10.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  10.1k|                                            sizeof(struct STRUCT));     \
 1304|  10.1k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_DSCP:
 1301|  17.7k|    {                                                                   \
 1302|  17.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  17.7k|                                            sizeof(struct STRUCT));     \
 1304|  17.7k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_ECN:
 1301|  9.41k|    {                                                                   \
 1302|  9.41k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  9.41k|                                            sizeof(struct STRUCT));     \
 1304|  9.41k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_SRC_PORT:
 1301|  37.2k|    {                                                                   \
 1302|  37.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  37.2k|                                            sizeof(struct STRUCT));     \
 1304|  37.2k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_DST_PORT:
 1301|  24.5k|    {                                                                   \
 1302|  24.5k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  24.5k|                                            sizeof(struct STRUCT));     \
 1304|  24.5k|    }                                                                   \
ofp-actions.c:ofpact_put_ENQUEUE:
 1301|  1.95k|    {                                                                   \
 1302|  1.95k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  1.95k|                                            sizeof(struct STRUCT));     \
 1304|  1.95k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_LABEL:
 1301|  4.25k|    {                                                                   \
 1302|  4.25k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  4.25k|                                            sizeof(struct STRUCT));     \
 1304|  4.25k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TC:
 1301|  3.23k|    {                                                                   \
 1302|  3.23k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  3.23k|                                            sizeof(struct STRUCT));     \
 1304|  3.23k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TTL:
 1301|  7.62k|    {                                                                   \
 1302|  7.62k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  7.62k|                                            sizeof(struct STRUCT));     \
 1304|  7.62k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_MPLS_TTL:
 1301|  21.2k|    {                                                                   \
 1302|  21.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  21.2k|                                            sizeof(struct STRUCT));     \
 1304|  21.2k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_MPLS:
 1301|  4.64k|    {                                                                   \
 1302|  4.64k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  4.64k|                                            sizeof(struct STRUCT));     \
 1304|  4.64k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_MPLS:
 1301|  15.1k|    {                                                                   \
 1302|  15.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  15.1k|                                            sizeof(struct STRUCT));     \
 1304|  15.1k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_QUEUE:
 1301|  8.12k|    {                                                                   \
 1302|  8.12k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  8.12k|                                            sizeof(struct STRUCT));     \
 1304|  8.12k|    }                                                                   \
ofp-actions.c:ofpact_put_GROUP:
 1301|  5.24k|    {                                                                   \
 1302|  5.24k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  5.24k|                                            sizeof(struct STRUCT));     \
 1304|  5.24k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_TTL:
 1301|  1.82k|    {                                                                   \
 1302|  1.82k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  1.82k|                                            sizeof(struct STRUCT));     \
 1304|  1.82k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_TTL:
 1301|  4.31k|    {                                                                   \
 1302|  4.31k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  4.31k|                                            sizeof(struct STRUCT));     \
 1304|  4.31k|    }                                                                   \
ofp-actions.c:ofpact_finish_DEC_TTL:
 1315|  3.34k|    {                                                                   \
 1316|  3.34k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  3.34k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  3.34k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  3.34k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  3.34k|    }
ofp-actions.c:ofpact_put_REG_MOVE:
 1301|  2.13k|    {                                                                   \
 1302|  2.13k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  2.13k|                                            sizeof(struct STRUCT));     \
 1304|  2.13k|    }                                                                   \
ofp-actions.c:ofpact_put_RESUBMIT:
 1301|  4.13k|    {                                                                   \
 1302|  4.13k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  4.13k|                                            sizeof(struct STRUCT));     \
 1304|  4.13k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_TUNNEL:
 1301|  6.58k|    {                                                                   \
 1302|  6.58k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  6.58k|                                            sizeof(struct STRUCT));     \
 1304|  6.58k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_QUEUE:
 1301|  15.1k|    {                                                                   \
 1302|  15.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  15.1k|                                            sizeof(struct STRUCT));     \
 1304|  15.1k|    }                                                                   \
ofp-actions.c:ofpact_put_NOTE:
 1301|  24.1k|    {                                                                   \
 1302|  24.1k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  24.1k|                                            sizeof(struct STRUCT));     \
 1304|  24.1k|    }                                                                   \
ofp-actions.c:ofpact_finish_NOTE:
 1315|  24.1k|    {                                                                   \
 1316|  24.1k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  24.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  24.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  24.1k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  24.1k|    }
ofp-actions.c:ofpact_put_MULTIPATH:
 1301|  6.18k|    {                                                                   \
 1302|  6.18k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  6.18k|                                            sizeof(struct STRUCT));     \
 1304|  6.18k|    }                                                                   \
ofp-actions.c:ofpact_put_BUNDLE:
 1301|  14.2k|    {                                                                   \
 1302|  14.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  14.2k|                                            sizeof(struct STRUCT));     \
 1304|  14.2k|    }                                                                   \
ofp-actions.c:ofpact_finish_BUNDLE:
 1315|  13.3k|    {                                                                   \
 1316|  13.3k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  13.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  13.3k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  13.3k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  13.3k|    }
ofp-actions.c:ofpact_put_OUTPUT_REG:
 1301|    299|    {                                                                   \
 1302|    299|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    299|                                            sizeof(struct STRUCT));     \
 1304|    299|    }                                                                   \
ofp-actions.c:ofpact_put_LEARN:
 1301|  49.5k|    {                                                                   \
 1302|  49.5k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  49.5k|                                            sizeof(struct STRUCT));     \
 1304|  49.5k|    }                                                                   \
ofp-actions.c:ofpact_finish_LEARN:
 1315|  32.9k|    {                                                                   \
 1316|  32.9k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  32.9k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  32.9k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  32.9k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  32.9k|    }
ofp-actions.c:ofpact_put_EXIT:
 1301|    668|    {                                                                   \
 1302|    668|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    668|                                            sizeof(struct STRUCT));     \
 1304|    668|    }                                                                   \
ofp-actions.c:ofpact_put_FIN_TIMEOUT:
 1301|  2.07k|    {                                                                   \
 1302|  2.07k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  2.07k|                                            sizeof(struct STRUCT));     \
 1304|  2.07k|    }                                                                   \
ofp-actions.c:ofpact_put_CONTROLLER:
 1301|  13.7k|    {                                                                   \
 1302|  13.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  13.7k|                                            sizeof(struct STRUCT));     \
 1304|  13.7k|    }                                                                   \
ofp-actions.c:ofpact_finish_CONTROLLER:
 1315|  8.03k|    {                                                                   \
 1316|  8.03k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  8.03k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  8.03k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  8.03k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  8.03k|    }
ofp-actions.c:ofpact_put_STACK_PUSH:
 1301|  9.99k|    {                                                                   \
 1302|  9.99k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  9.99k|                                            sizeof(struct STRUCT));     \
 1304|  9.99k|    }                                                                   \
ofp-actions.c:ofpact_put_STACK_POP:
 1301|    942|    {                                                                   \
 1302|    942|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    942|                                            sizeof(struct STRUCT));     \
 1304|    942|    }                                                                   \
ofp-actions.c:ofpact_put_SAMPLE:
 1301|  7.74k|    {                                                                   \
 1302|  7.74k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  7.74k|                                            sizeof(struct STRUCT));     \
 1304|  7.74k|    }                                                                   \
ofp-actions.c:ofpact_put_CONJUNCTION:
 1301|  10.3k|    {                                                                   \
 1302|  10.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  10.3k|                                            sizeof(struct STRUCT));     \
 1304|  10.3k|    }                                                                   \
ofp-actions.c:ofpact_put_CT:
 1301|  44.8k|    {                                                                   \
 1302|  44.8k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  44.8k|                                            sizeof(struct STRUCT));     \
 1304|  44.8k|    }                                                                   \
ofp-actions.c:ofpact_finish_CT:
 1315|  27.8k|    {                                                                   \
 1316|  27.8k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  27.8k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  27.8k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  27.8k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  27.8k|    }
ofp-actions.c:ofpact_get_NAT:
 1287|  24.3k|    {                                                                   \
 1288|  24.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  24.3k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  24.3k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  24.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  24.3k|    }                                                                   \
ofp-actions.c:ofpact_put_NAT:
 1301|  33.9k|    {                                                                   \
 1302|  33.9k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  33.9k|                                            sizeof(struct STRUCT));     \
 1304|  33.9k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT_TRUNC:
 1301|    513|    {                                                                   \
 1302|    513|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    513|                                            sizeof(struct STRUCT));     \
 1304|    513|    }                                                                   \
ofp-actions.c:ofpact_put_CLONE:
 1301|  2.04k|    {                                                                   \
 1302|  2.04k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  2.04k|                                            sizeof(struct STRUCT));     \
 1304|  2.04k|    }                                                                   \
ofp-actions.c:ofpact_finish_CLONE:
 1315|    860|    {                                                                   \
 1316|    860|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|    860|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    860|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|    860|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|    860|    }
ofp-actions.c:ofpact_put_CT_CLEAR:
 1301|    468|    {                                                                   \
 1302|    468|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    468|                                            sizeof(struct STRUCT));     \
 1304|    468|    }                                                                   \
ofp-actions.c:ofpact_put_ENCAP:
 1301|  7.66k|    {                                                                   \
 1302|  7.66k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  7.66k|                                            sizeof(struct STRUCT));     \
 1304|  7.66k|    }                                                                   \
ofp-actions.c:ofpact_finish_ENCAP:
 1315|  4.51k|    {                                                                   \
 1316|  4.51k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1317|  4.51k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  4.51k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1318|  4.51k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1319|  4.51k|    }
ofp-actions.c:ofpact_put_DECAP:
 1301|  14.2k|    {                                                                   \
 1302|  14.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  14.2k|                                            sizeof(struct STRUCT));     \
 1304|  14.2k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_NSH_TTL:
 1301|    477|    {                                                                   \
 1302|    477|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    477|                                            sizeof(struct STRUCT));     \
 1304|    477|    }                                                                   \
ofp-actions.c:ofpact_put_CHECK_PKT_LARGER:
 1301|    979|    {                                                                   \
 1302|    979|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    979|                                            sizeof(struct STRUCT));     \
 1304|    979|    }                                                                   \
ofp-actions.c:ofpact_put_DELETE_FIELD:
 1301|  1.56k|    {                                                                   \
 1302|  1.56k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  1.56k|                                            sizeof(struct STRUCT));     \
 1304|  1.56k|    }                                                                   \
ofp-actions.c:ofpact_put_CLEAR_ACTIONS:
 1301|    348|    {                                                                   \
 1302|    348|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|    348|                                            sizeof(struct STRUCT));     \
 1304|    348|    }                                                                   \
ofp-actions.c:ofpact_put_WRITE_METADATA:
 1301|  1.19k|    {                                                                   \
 1302|  1.19k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  1.19k|                                            sizeof(struct STRUCT));     \
 1304|  1.19k|    }                                                                   \
ofp-actions.c:ofpact_put_GOTO_TABLE:
 1301|  1.88k|    {                                                                   \
 1302|  1.88k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  1.88k|                                            sizeof(struct STRUCT));     \
 1304|  1.88k|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT:
 1287|  34.1k|    {                                                                   \
 1288|  34.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  34.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  34.1k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  34.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  34.1k|    }                                                                   \
ofp-actions.c:ofpact_get_CONTROLLER:
 1287|     10|    {                                                                   \
 1288|     10|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     10|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     10|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     10|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     10|    }                                                                   \
ofp-actions.c:ofpact_get_ENQUEUE:
 1287|  1.62k|    {                                                                   \
 1288|  1.62k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.62k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.62k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.62k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.62k|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_REG:
 1287|      1|    {                                                                   \
 1288|      1|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|      1|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|      1|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|      1|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|      1|    }                                                                   \
ofp-actions.c:ofpact_get_BUNDLE:
 1287|  5.17k|    {                                                                   \
 1288|  5.17k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  5.17k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  5.17k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  5.17k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  5.17k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_FIELD:
 1287|  5.07k|    {                                                                   \
 1288|  5.07k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  5.07k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  5.07k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  5.07k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  5.07k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_VID:
 1287|  4.40k|    {                                                                   \
 1288|  4.40k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  4.40k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  4.40k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  4.40k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  4.40k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_PCP:
 1287|  1.25k|    {                                                                   \
 1288|  1.25k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.25k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.25k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.25k|    }                                                                   \
ofp-actions.c:ofpact_get_STRIP_VLAN:
 1287|  15.1k|    {                                                                   \
 1288|  15.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  15.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  15.1k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  15.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  15.1k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_VLAN:
 1287|  1.46k|    {                                                                   \
 1288|  1.46k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.46k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.46k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.46k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.46k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_SRC:
 1287|     36|    {                                                                   \
 1288|     36|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     36|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     36|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     36|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     36|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_DST:
 1287|     24|    {                                                                   \
 1288|     24|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     24|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     24|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     24|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     24|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_SRC:
 1287|  2.56k|    {                                                                   \
 1288|  2.56k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  2.56k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  2.56k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  2.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  2.56k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_DST:
 1287|  8.24k|    {                                                                   \
 1288|  8.24k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  8.24k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  8.24k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  8.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  8.24k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_DSCP:
 1287|  12.5k|    {                                                                   \
 1288|  12.5k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  12.5k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  12.5k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  12.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  12.5k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_ECN:
 1287|  9.05k|    {                                                                   \
 1288|  9.05k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  9.05k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  9.05k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  9.05k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  9.05k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_TTL:
 1287|    934|    {                                                                   \
 1288|    934|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    934|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    934|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    934|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    934|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_SRC_PORT:
 1287|  20.2k|    {                                                                   \
 1288|  20.2k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  20.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  20.2k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  20.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  20.2k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_DST_PORT:
 1287|  20.0k|    {                                                                   \
 1288|  20.0k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  20.0k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  20.0k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  20.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  20.0k|    }                                                                   \
ofp-actions.c:ofpact_get_REG_MOVE:
 1287|    584|    {                                                                   \
 1288|    584|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    584|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    584|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    584|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    584|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_PUSH:
 1287|  4.83k|    {                                                                   \
 1288|  4.83k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  4.83k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  4.83k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  4.83k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  4.83k|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_POP:
 1287|    510|    {                                                                   \
 1288|    510|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    510|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    510|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    510|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    510|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_TTL:
 1287|    207|    {                                                                   \
 1288|    207|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    207|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    207|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    207|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    207|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_LABEL:
 1287|  2.83k|    {                                                                   \
 1288|  2.83k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  2.83k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  2.83k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  2.83k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  2.83k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TC:
 1287|  3.16k|    {                                                                   \
 1288|  3.16k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  3.16k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  3.16k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  3.16k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  3.16k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TTL:
 1287|  5.51k|    {                                                                   \
 1288|  5.51k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  5.51k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  5.51k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  5.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  5.51k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_MPLS_TTL:
 1287|  19.2k|    {                                                                   \
 1288|  19.2k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  19.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  19.2k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  19.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  19.2k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_MPLS:
 1287|  4.43k|    {                                                                   \
 1288|  4.43k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  4.43k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  4.43k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  4.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  4.43k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_MPLS:
 1287|  13.1k|    {                                                                   \
 1288|  13.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  13.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  13.1k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  13.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  13.1k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_NSH_TTL:
 1287|    297|    {                                                                   \
 1288|    297|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    297|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    297|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    297|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    297|    }                                                                   \
ofp-actions.c:ofpact_get_DELETE_FIELD:
 1287|  1.25k|    {                                                                   \
 1288|  1.25k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.25k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.25k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.25k|    }                                                                   \
ofp-actions.c:ofpact_get_ENCAP:
 1287|  3.48k|    {                                                                   \
 1288|  3.48k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  3.48k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  3.48k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  3.48k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  3.48k|    }                                                                   \
ofp-actions.c:ofpact_get_DECAP:
 1287|  11.8k|    {                                                                   \
 1288|  11.8k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  11.8k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  11.8k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  11.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  11.8k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_TUNNEL:
 1287|  1.25k|    {                                                                   \
 1288|  1.25k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.25k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.25k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.25k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_QUEUE:
 1287|  6.92k|    {                                                                   \
 1288|  6.92k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  6.92k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  6.92k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  6.92k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  6.92k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_QUEUE:
 1287|  7.65k|    {                                                                   \
 1288|  7.65k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  7.65k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  7.65k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  7.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  7.65k|    }                                                                   \
ofp-actions.c:ofpact_get_FIN_TIMEOUT:
 1287|  1.79k|    {                                                                   \
 1288|  1.79k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.79k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.79k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.79k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.79k|    }                                                                   \
ofp-actions.c:ofpact_get_RESUBMIT:
 1287|    819|    {                                                                   \
 1288|    819|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    819|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    819|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    819|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    819|    }                                                                   \
ofp-actions.c:ofpact_get_LEARN:
 1287|  28.9k|    {                                                                   \
 1288|  28.9k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  28.9k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  28.9k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  28.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  28.9k|    }                                                                   \
ofp-actions.c:ofpact_get_CONJUNCTION:
 1287|      1|    {                                                                   \
 1288|      1|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|      1|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|      1|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|      1|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|      1|    }                                                                   \
ofp-actions.c:ofpact_get_MULTIPATH:
 1287|     18|    {                                                                   \
 1288|     18|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     18|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     18|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     18|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     18|    }                                                                   \
ofp-actions.c:ofpact_get_NOTE:
 1287|    267|    {                                                                   \
 1288|    267|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    267|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    267|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    267|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    267|    }                                                                   \
ofp-actions.c:ofpact_get_EXIT:
 1287|     11|    {                                                                   \
 1288|     11|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     11|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     11|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     11|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     11|    }                                                                   \
ofp-actions.c:ofpact_get_SAMPLE:
 1287|     11|    {                                                                   \
 1288|     11|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     11|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     11|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     11|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     11|    }                                                                   \
ofp-actions.c:ofpact_ct_get_action_len:
  723|  30.0k|{
  724|  30.0k|    return oc->ofpact.len - offsetof(struct ofpact_conntrack, actions);
  725|  30.0k|}
ofp-actions.c:ofpact_get_CT_CLEAR:
 1287|    446|    {                                                                   \
 1288|    446|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    446|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    446|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    446|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    446|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_TRUNC:
 1287|    466|    {                                                                   \
 1288|    466|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    466|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    466|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    466|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    466|    }                                                                   \
ofp-actions.c:ofpact_nest_get_action_len:
  673|  34.2k|{
  674|  34.2k|    return on->ofpact.len - offsetof(struct ofpact_nest, actions);
  675|  34.2k|}
ofp-actions.c:ofpact_get_CHECK_PKT_LARGER:
 1287|      1|    {                                                                   \
 1288|      1|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|      1|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|      1|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|      1|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|      1|    }                                                                   \
ofp-actions.c:ofpact_get_CLEAR_ACTIONS:
 1287|    103|    {                                                                   \
 1288|    103|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    103|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    103|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    103|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    103|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_METADATA:
 1287|    266|    {                                                                   \
 1288|    266|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    266|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    266|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    266|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    266|    }                                                                   \
ofp-actions.c:ofpact_get_GOTO_TABLE:
 1287|  1.87k|    {                                                                   \
 1288|  1.87k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|  1.87k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|  1.87k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|  1.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|  1.87k|    }                                                                   \
ofp-actions.c:ofpact_get_GROUP:
 1287|     30|    {                                                                   \
 1288|     30|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|     30|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|     30|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|     30|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|     30|    }                                                                   \
ofp-actions.c:ofpact_get_METER:
 1287|    123|    {                                                                   \
 1288|    123|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   58|    123|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1289|    123|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  430|    123|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1290|    123|    }                                                                   \
ofp-packet.c:ofpact_put_UNROLL_XLATE:
 1301|  10.3k|    {                                                                   \
 1302|  10.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1303|  10.3k|                                            sizeof(struct STRUCT));     \
 1304|  10.3k|    }                                                                   \
learn.c:ofpact_learn_spec_end:
  894|   155k|{
  895|   155k|    return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  430|   155k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  896|   155k|                        ofpact_next(&learn->ofpact));
  897|   155k|}
learn.c:ofpact_next:
  212|   155k|{
  213|   155k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  430|   155k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   155k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   155k|}
learn.c:ofpact_learn_spec_imm:
  850|  97.9k|{
  851|  97.9k|    return spec + 1;
  852|  97.9k|}
learn.c:ofpact_learn_spec_next:
  856|   100k|{
  857|   100k|    if (spec->src_type == NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|   100k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (857:9): [True: 98.2k, False: 2.10k]
  ------------------
  858|  98.2k|        unsigned int n_bytes = OFPACT_ALIGN(DIV_ROUND_UP(spec->n_bits, 8));
  ------------------
  |  |  205|  98.2k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  299|  98.2k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|  98.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  98.2k|        return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  430|  98.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  860|  98.2k|                            (const uint8_t *)(spec + 1) + n_bytes);
  861|  98.2k|    }
  862|  2.10k|    return spec + 1;
  863|   100k|}

ofp-group.c:ofputil_bucket_has_liveness:
   76|  2.29k|{
   77|  2.29k|    return (bucket->watch_port != OFPP_ANY ||
  ------------------
  |  |   80|  2.29k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  2.29k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  4.58k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (77:13): [True: 1.96k, False: 326]
  ------------------
   78|  2.29k|            bucket->watch_group != OFPG_ANY);
  ------------------
  |  Branch (78:13): [True: 196, False: 130]
  ------------------
   79|  2.29k|}

ofp-connection.c:ofpprop_is_experimenter:
   73|  5.69k|{
   74|  5.69k|    return type > UINT16_MAX;
   75|  5.69k|}
ofp-prop.c:ofpprop_is_experimenter:
   73|  43.2k|{
   74|  43.2k|    return type > UINT16_MAX;
   75|  43.2k|}

ofp_print_target.c:ofpbuf_at:
  183|  10.1M|{
  184|  10.1M|    if (offset + size <= b->size) {
  ------------------
  |  Branch (184:9): [True: 10.0M, False: 37.2k]
  ------------------
  185|  10.0M|        ovs_assert(b->data);
  ------------------
  |  |   58|  10.0M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  186|  10.0M|        return (char *) b->data + offset;
  187|  10.0M|    }
  188|  37.2k|    return NULL;
  189|  10.1M|}
ofp_print_target.c:ofpbuf_pull:
  258|  5.03M|{
  259|  5.03M|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  5.03M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  5.03M|    void *data = b->data;
  261|       |
  262|  5.03M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 5.03M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  5.03M|    b->data = (char*)b->data + size;
  267|  5.03M|    b->size = b->size - size;
  268|  5.03M|    return data;
  269|  5.03M|}
ofp-print.c:ofpbuf_const_initializer:
   97|   159k|{
   98|   159k|    return (struct ofpbuf) {
   99|   159k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   159k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   159k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   159k|     (TYPE) (POINTER))
  ------------------
  100|   159k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   159k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   159k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   159k|     (TYPE) (POINTER))
  ------------------
  101|   159k|        .size = size,
  102|   159k|        .allocated = size,
  103|   159k|        .header = NULL,
  104|   159k|        .msg = NULL,
  105|   159k|        .list_node = OVS_LIST_POISON,
  106|   159k|        .source = OFPBUF_STACK,
  107|   159k|    };
  108|   159k|}
ofp-protocol.c:ofpbuf_const_initializer:
   97|    487|{
   98|    487|    return (struct ofpbuf) {
   99|    487|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|    487|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|    487|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|    487|     (TYPE) (POINTER))
  ------------------
  100|    487|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|    487|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|    487|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|    487|     (TYPE) (POINTER))
  ------------------
  101|    487|        .size = size,
  102|    487|        .allocated = size,
  103|    487|        .header = NULL,
  104|    487|        .msg = NULL,
  105|    487|        .list_node = OVS_LIST_POISON,
  106|    487|        .source = OFPBUF_STACK,
  107|    487|    };
  108|    487|}
ofp-protocol.c:ofpbuf_pull:
  258|    487|{
  259|    487|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|    487|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|    487|    void *data = b->data;
  261|       |
  262|    487|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 487]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|    487|    b->data = (char*)b->data + size;
  267|    487|    b->size = b->size - size;
  268|    487|    return data;
  269|    487|}
ofp-queue.c:ofpbuf_const_initializer:
   97|  34.2k|{
   98|  34.2k|    return (struct ofpbuf) {
   99|  34.2k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  34.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  34.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  34.2k|     (TYPE) (POINTER))
  ------------------
  100|  34.2k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  34.2k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  34.2k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  34.2k|     (TYPE) (POINTER))
  ------------------
  101|  34.2k|        .size = size,
  102|  34.2k|        .allocated = size,
  103|  34.2k|        .header = NULL,
  104|  34.2k|        .msg = NULL,
  105|  34.2k|        .list_node = OVS_LIST_POISON,
  106|  34.2k|        .source = OFPBUF_STACK,
  107|  34.2k|    };
  108|  34.2k|}
ofp-queue.c:ofpbuf_pull:
  258|  73.4k|{
  259|  73.4k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  73.4k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  73.4k|    void *data = b->data;
  261|       |
  262|  73.4k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 6.72k, False: 66.6k]
  ------------------
  263|  6.72k|        return data;
  264|  6.72k|    }
  265|       |
  266|  66.6k|    b->data = (char*)b->data + size;
  267|  66.6k|    b->size = b->size - size;
  268|  66.6k|    return data;
  269|  73.4k|}
ofp-queue.c:ofpbuf_at_assert:
  195|  3.85k|{
  196|  3.85k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   58|  3.85k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  197|  3.85k|    ovs_assert(b->data);
  ------------------
  |  |   58|  3.85k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  198|  3.85k|    return (char *) b->data + offset;
  199|  3.85k|}
ofp-queue.c:ofpbuf_try_pull:
  275|  53.1k|{
  276|  53.1k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 52.6k, False: 510]
  ------------------
  277|  53.1k|}
ofp-switch.c:ofpbuf_pull:
  258|  24.7k|{
  259|  24.7k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  24.7k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  24.7k|    void *data = b->data;
  261|       |
  262|  24.7k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 24.7k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  24.7k|    b->data = (char*)b->data + size;
  267|  24.7k|    b->size = b->size - size;
  268|  24.7k|    return data;
  269|  24.7k|}
ofp-switch.c:ofpbuf_const_initializer:
   97|  15.4k|{
   98|  15.4k|    return (struct ofpbuf) {
   99|  15.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  15.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  15.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  15.4k|     (TYPE) (POINTER))
  ------------------
  100|  15.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  15.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  15.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  15.4k|     (TYPE) (POINTER))
  ------------------
  101|  15.4k|        .size = size,
  102|  15.4k|        .allocated = size,
  103|  15.4k|        .header = NULL,
  104|  15.4k|        .msg = NULL,
  105|  15.4k|        .list_node = OVS_LIST_POISON,
  106|  15.4k|        .source = OFPBUF_STACK,
  107|  15.4k|    };
  108|  15.4k|}
ofp-table.c:ofpbuf_const_initializer:
   97|  37.3k|{
   98|  37.3k|    return (struct ofpbuf) {
   99|  37.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  37.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  37.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  37.3k|     (TYPE) (POINTER))
  ------------------
  100|  37.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  37.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  37.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  37.3k|     (TYPE) (POINTER))
  ------------------
  101|  37.3k|        .size = size,
  102|  37.3k|        .allocated = size,
  103|  37.3k|        .header = NULL,
  104|  37.3k|        .msg = NULL,
  105|  37.3k|        .list_node = OVS_LIST_POISON,
  106|  37.3k|        .source = OFPBUF_STACK,
  107|  37.3k|    };
  108|  37.3k|}
ofp-table.c:ofpbuf_pull:
  258|   138k|{
  259|   138k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   138k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   138k|    void *data = b->data;
  261|       |
  262|   138k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 4.12k, False: 134k]
  ------------------
  263|  4.12k|        return data;
  264|  4.12k|    }
  265|       |
  266|   134k|    b->data = (char*)b->data + size;
  267|   134k|    b->size = b->size - size;
  268|   134k|    return data;
  269|   138k|}
ofp-table.c:ofpbuf_try_pull:
  275|  49.4k|{
  276|  49.4k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 49.4k, False: 0]
  ------------------
  277|  49.4k|}
ofp-util.c:ofpbuf_const_initializer:
   97|   150k|{
   98|   150k|    return (struct ofpbuf) {
   99|   150k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   150k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   150k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   150k|     (TYPE) (POINTER))
  ------------------
  100|   150k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   150k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   150k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   150k|     (TYPE) (POINTER))
  ------------------
  101|   150k|        .size = size,
  102|   150k|        .allocated = size,
  103|   150k|        .header = NULL,
  104|   150k|        .msg = NULL,
  105|   150k|        .list_node = OVS_LIST_POISON,
  106|   150k|        .source = OFPBUF_STACK,
  107|   150k|    };
  108|   150k|}
ofp-util.c:ofpbuf_pull:
  258|   177k|{
  259|   177k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   177k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   177k|    void *data = b->data;
  261|       |
  262|   177k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 177k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   177k|    b->data = (char*)b->data + size;
  267|   177k|    b->size = b->size - size;
  268|   177k|    return data;
  269|   177k|}
ofp-util.c:ofpbuf_try_pull:
  275|   111k|{
  276|   111k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 27.2k, False: 84.4k]
  ------------------
  277|   111k|}
ofpbuf.c:ofpbuf_tailroom:
  228|  2.69M|{
  229|  2.69M|    return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b);
  230|  2.69M|}
ofpbuf.c:ofpbuf_end:
  211|  2.69M|{
  212|  2.69M|    ovs_assert(b->base || !b->allocated);
  ------------------
  |  |   58|  3.65M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 1.73M, False: 960k]
  |  |  |  Branch (58:40): [True: 960k, False: 0]
  |  |  ------------------
  ------------------
  213|  2.69M|    return b->base ? (char *) b->base + b->allocated : NULL;
  ------------------
  |  Branch (213:12): [True: 1.73M, False: 960k]
  ------------------
  214|  2.69M|}
ofpbuf.c:ofpbuf_headroom:
  221|  2.46M|{
  222|  2.46M|    return (char*)b->data - (char*)b->base;
  223|  2.46M|}
ofpbuf.c:ofpbuf_tail:
  203|  3.91M|{
  204|  3.91M|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|  4.92M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 2.90M, False: 1.00M]
  |  |  |  Branch (58:40): [True: 1.00M, False: 0]
  |  |  ------------------
  ------------------
  205|  3.91M|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 2.90M, False: 1.00M]
  ------------------
  206|  3.91M|}
nx-match.c:ofpbuf_try_pull:
  275|  1.16M|{
  276|  1.16M|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 1.07M, False: 88.8k]
  ------------------
  277|  1.16M|}
nx-match.c:ofpbuf_pull:
  258|  2.00M|{
  259|  2.00M|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  2.00M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  2.00M|    void *data = b->data;
  261|       |
  262|  2.00M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 430k, False: 1.57M]
  ------------------
  263|   430k|        return data;
  264|   430k|    }
  265|       |
  266|  1.57M|    b->data = (char*)b->data + size;
  267|  1.57M|    b->size = b->size - size;
  268|  1.57M|    return data;
  269|  2.00M|}
nx-match.c:ofpbuf_const_initializer:
   97|   385k|{
   98|   385k|    return (struct ofpbuf) {
   99|   385k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   385k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   385k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   385k|     (TYPE) (POINTER))
  ------------------
  100|   385k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   385k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   385k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   385k|     (TYPE) (POINTER))
  ------------------
  101|   385k|        .size = size,
  102|   385k|        .allocated = size,
  103|   385k|        .header = NULL,
  104|   385k|        .msg = NULL,
  105|   385k|        .list_node = OVS_LIST_POISON,
  106|   385k|        .source = OFPBUF_STACK,
  107|   385k|    };
  108|   385k|}
nx-match.c:ofpbuf_tail:
  203|  3.93k|{
  204|  3.93k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|  3.93k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 3.93k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|  3.93k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 3.93k, False: 0]
  ------------------
  206|  3.93k|}
ofp-actions.c:ofpbuf_clear:
  250|   431k|{
  251|   431k|    b->data = b->base;
  252|   431k|    b->size = 0;
  253|   431k|}
ofp-actions.c:ofpbuf_try_pull:
  275|   484k|{
  276|   484k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 473k, False: 10.5k]
  ------------------
  277|   484k|}
ofp-actions.c:ofpbuf_pull:
  258|  1.23M|{
  259|  1.23M|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  1.23M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  1.23M|    void *data = b->data;
  261|       |
  262|  1.23M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 123k, False: 1.10M]
  ------------------
  263|   123k|        return data;
  264|   123k|    }
  265|       |
  266|  1.10M|    b->data = (char*)b->data + size;
  267|  1.10M|    b->size = b->size - size;
  268|  1.10M|    return data;
  269|  1.23M|}
ofp-actions.c:ofpbuf_const_initializer:
   97|  85.7k|{
   98|  85.7k|    return (struct ofpbuf) {
   99|  85.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  85.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  85.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  85.7k|     (TYPE) (POINTER))
  ------------------
  100|  85.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  85.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  85.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  85.7k|     (TYPE) (POINTER))
  ------------------
  101|  85.7k|        .size = size,
  102|  85.7k|        .allocated = size,
  103|  85.7k|        .header = NULL,
  104|  85.7k|        .msg = NULL,
  105|  85.7k|        .list_node = OVS_LIST_POISON,
  106|  85.7k|        .source = OFPBUF_STACK,
  107|  85.7k|    };
  108|  85.7k|}
ofp-actions.c:ofpbuf_msgsize:
  244|  11.1k|{
  245|  11.1k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  11.1k|}
ofp-actions.c:ofpbuf_at_assert:
  195|   220k|{
  196|   220k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   58|   220k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  197|   220k|    ovs_assert(b->data);
  ------------------
  |  |   58|   220k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  198|   220k|    return (char *) b->data + offset;
  199|   220k|}
ofp-actions.c:ofpbuf_tail:
  203|   152k|{
  204|   152k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|   152k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 152k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|   152k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 152k, False: 0]
  ------------------
  206|   152k|}
ofp-bundle.c:ofpbuf_const_initializer:
   97|  22.7k|{
   98|  22.7k|    return (struct ofpbuf) {
   99|  22.7k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  22.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  22.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  22.7k|     (TYPE) (POINTER))
  ------------------
  100|  22.7k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  22.7k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  22.7k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  22.7k|     (TYPE) (POINTER))
  ------------------
  101|  22.7k|        .size = size,
  102|  22.7k|        .allocated = size,
  103|  22.7k|        .header = NULL,
  104|  22.7k|        .msg = NULL,
  105|  22.7k|        .list_node = OVS_LIST_POISON,
  106|  22.7k|        .source = OFPBUF_STACK,
  107|  22.7k|    };
  108|  22.7k|}
ofp-bundle.c:ofpbuf_pull:
  258|  22.2k|{
  259|  22.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  22.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  22.2k|    void *data = b->data;
  261|       |
  262|  22.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 22.2k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  22.2k|    b->data = (char*)b->data + size;
  267|  22.2k|    b->size = b->size - size;
  268|  22.2k|    return data;
  269|  22.2k|}
ofp-connection.c:ofpbuf_const_initializer:
   97|  30.8k|{
   98|  30.8k|    return (struct ofpbuf) {
   99|  30.8k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  30.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  30.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  30.8k|     (TYPE) (POINTER))
  ------------------
  100|  30.8k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  30.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  30.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  30.8k|     (TYPE) (POINTER))
  ------------------
  101|  30.8k|        .size = size,
  102|  30.8k|        .allocated = size,
  103|  30.8k|        .header = NULL,
  104|  30.8k|        .msg = NULL,
  105|  30.8k|        .list_node = OVS_LIST_POISON,
  106|  30.8k|        .source = OFPBUF_STACK,
  107|  30.8k|    };
  108|  30.8k|}
ofp-ct.c:ofpbuf_const_initializer:
   97|  11.6k|{
   98|  11.6k|    return (struct ofpbuf) {
   99|  11.6k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  11.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  11.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  11.6k|     (TYPE) (POINTER))
  ------------------
  100|  11.6k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  11.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  11.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  11.6k|     (TYPE) (POINTER))
  ------------------
  101|  11.6k|        .size = size,
  102|  11.6k|        .allocated = size,
  103|  11.6k|        .header = NULL,
  104|  11.6k|        .msg = NULL,
  105|  11.6k|        .list_node = OVS_LIST_POISON,
  106|  11.6k|        .source = OFPBUF_STACK,
  107|  11.6k|    };
  108|  11.6k|}
ofp-ct.c:ofpbuf_pull:
  258|  11.6k|{
  259|  11.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  11.6k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  11.6k|    void *data = b->data;
  261|       |
  262|  11.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 11.6k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  11.6k|    b->data = (char*)b->data + size;
  267|  11.6k|    b->size = b->size - size;
  268|  11.6k|    return data;
  269|  11.6k|}
ofp-ct.c:ofpbuf_msgsize:
  244|  10.3k|{
  245|  10.3k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  10.3k|}
ofp-ct.c:ofpbuf_tail:
  203|  10.3k|{
  204|  10.3k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|  10.3k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 10.3k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|  10.3k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 10.3k, False: 0]
  ------------------
  206|  10.3k|}
ofp-errors.c:ofpbuf_const_initializer:
   97|  1.88M|{
   98|  1.88M|    return (struct ofpbuf) {
   99|  1.88M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  1.88M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  1.88M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  1.88M|     (TYPE) (POINTER))
  ------------------
  100|  1.88M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  1.88M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  1.88M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  1.88M|     (TYPE) (POINTER))
  ------------------
  101|  1.88M|        .size = size,
  102|  1.88M|        .allocated = size,
  103|  1.88M|        .header = NULL,
  104|  1.88M|        .msg = NULL,
  105|  1.88M|        .list_node = OVS_LIST_POISON,
  106|  1.88M|        .source = OFPBUF_STACK,
  107|  1.88M|    };
  108|  1.88M|}
ofp-errors.c:ofpbuf_pull:
  258|  2.22M|{
  259|  2.22M|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  2.22M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  2.22M|    void *data = b->data;
  261|       |
  262|  2.22M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.22M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.22M|    b->data = (char*)b->data + size;
  267|  2.22M|    b->size = b->size - size;
  268|  2.22M|    return data;
  269|  2.22M|}
ofp-errors.c:ofpbuf_try_pull:
  275|   379k|{
  276|   379k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 344k, False: 35.3k]
  ------------------
  277|   379k|}
ofp-flow.c:ofpbuf_const_initializer:
   97|   242k|{
   98|   242k|    return (struct ofpbuf) {
   99|   242k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   242k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   242k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   242k|     (TYPE) (POINTER))
  ------------------
  100|   242k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   242k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   242k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   242k|     (TYPE) (POINTER))
  ------------------
  101|   242k|        .size = size,
  102|   242k|        .allocated = size,
  103|   242k|        .header = NULL,
  104|   242k|        .msg = NULL,
  105|   242k|        .list_node = OVS_LIST_POISON,
  106|   242k|        .source = OFPBUF_STACK,
  107|   242k|    };
  108|   242k|}
ofp-flow.c:ofpbuf_pull:
  258|   276k|{
  259|   276k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   276k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   276k|    void *data = b->data;
  261|       |
  262|   276k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 276k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   276k|    b->data = (char*)b->data + size;
  267|   276k|    b->size = b->size - size;
  268|   276k|    return data;
  269|   276k|}
ofp-flow.c:ofpbuf_try_pull:
  275|  69.4k|{
  276|  69.4k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 43.8k, False: 25.6k]
  ------------------
  277|  69.4k|}
ofp-group.c:ofpbuf_const_initializer:
   97|   183k|{
   98|   183k|    return (struct ofpbuf) {
   99|   183k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   183k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   183k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   183k|     (TYPE) (POINTER))
  ------------------
  100|   183k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   183k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   183k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   183k|     (TYPE) (POINTER))
  ------------------
  101|   183k|        .size = size,
  102|   183k|        .allocated = size,
  103|   183k|        .header = NULL,
  104|   183k|        .msg = NULL,
  105|   183k|        .list_node = OVS_LIST_POISON,
  106|   183k|        .source = OFPBUF_STACK,
  107|   183k|    };
  108|   183k|}
ofp-group.c:ofpbuf_pull:
  258|   257k|{
  259|   257k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   257k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   257k|    void *data = b->data;
  261|       |
  262|   257k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 14.3k, False: 243k]
  ------------------
  263|  14.3k|        return data;
  264|  14.3k|    }
  265|       |
  266|   243k|    b->data = (char*)b->data + size;
  267|   243k|    b->size = b->size - size;
  268|   243k|    return data;
  269|   257k|}
ofp-group.c:ofpbuf_try_pull:
  275|  65.8k|{
  276|  65.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 61.3k, False: 4.51k]
  ------------------
  277|  65.8k|}
ofp-ipfix.c:ofpbuf_try_pull:
  275|  6.87k|{
  276|  6.87k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 6.87k, False: 0]
  ------------------
  277|  6.87k|}
ofp-ipfix.c:ofpbuf_pull:
  258|  6.87k|{
  259|  6.87k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  6.87k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  6.87k|    void *data = b->data;
  261|       |
  262|  6.87k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 6.87k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  6.87k|    b->data = (char*)b->data + size;
  267|  6.87k|    b->size = b->size - size;
  268|  6.87k|    return data;
  269|  6.87k|}
ofp-ipfix.c:ofpbuf_const_initializer:
   97|  1.42k|{
   98|  1.42k|    return (struct ofpbuf) {
   99|  1.42k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  1.42k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  1.42k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  1.42k|     (TYPE) (POINTER))
  ------------------
  100|  1.42k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  1.42k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  1.42k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  1.42k|     (TYPE) (POINTER))
  ------------------
  101|  1.42k|        .size = size,
  102|  1.42k|        .allocated = size,
  103|  1.42k|        .header = NULL,
  104|  1.42k|        .msg = NULL,
  105|  1.42k|        .list_node = OVS_LIST_POISON,
  106|  1.42k|        .source = OFPBUF_STACK,
  107|  1.42k|    };
  108|  1.42k|}
ofp-match.c:ofpbuf_pull:
  258|  34.3k|{
  259|  34.3k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  34.3k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  34.3k|    void *data = b->data;
  261|       |
  262|  34.3k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 34.3k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  34.3k|    b->data = (char*)b->data + size;
  267|  34.3k|    b->size = b->size - size;
  268|  34.3k|    return data;
  269|  34.3k|}
ofp-match.c:ofpbuf_const_initializer:
   97|  7.43k|{
   98|  7.43k|    return (struct ofpbuf) {
   99|  7.43k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  7.43k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  7.43k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  7.43k|     (TYPE) (POINTER))
  ------------------
  100|  7.43k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  7.43k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  7.43k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  7.43k|     (TYPE) (POINTER))
  ------------------
  101|  7.43k|        .size = size,
  102|  7.43k|        .allocated = size,
  103|  7.43k|        .header = NULL,
  104|  7.43k|        .msg = NULL,
  105|  7.43k|        .list_node = OVS_LIST_POISON,
  106|  7.43k|        .source = OFPBUF_STACK,
  107|  7.43k|    };
  108|  7.43k|}
ofp-meter.c:ofpbuf_const_initializer:
   97|  16.4k|{
   98|  16.4k|    return (struct ofpbuf) {
   99|  16.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  16.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  16.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  16.4k|     (TYPE) (POINTER))
  ------------------
  100|  16.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  16.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  16.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  16.4k|     (TYPE) (POINTER))
  ------------------
  101|  16.4k|        .size = size,
  102|  16.4k|        .allocated = size,
  103|  16.4k|        .header = NULL,
  104|  16.4k|        .msg = NULL,
  105|  16.4k|        .list_node = OVS_LIST_POISON,
  106|  16.4k|        .source = OFPBUF_STACK,
  107|  16.4k|    };
  108|  16.4k|}
ofp-meter.c:ofpbuf_pull:
  258|  32.7k|{
  259|  32.7k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  32.7k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  32.7k|    void *data = b->data;
  261|       |
  262|  32.7k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 5.22k, False: 27.4k]
  ------------------
  263|  5.22k|        return data;
  264|  5.22k|    }
  265|       |
  266|  27.4k|    b->data = (char*)b->data + size;
  267|  27.4k|    b->size = b->size - size;
  268|  27.4k|    return data;
  269|  32.7k|}
ofp-meter.c:ofpbuf_try_pull:
  275|  17.9k|{
  276|  17.9k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 16.2k, False: 1.67k]
  ------------------
  277|  17.9k|}
ofp-meter.c:ofpbuf_clear:
  250|  6.26k|{
  251|  6.26k|    b->data = b->base;
  252|  6.26k|    b->size = 0;
  253|  6.26k|}
ofp-monitor.c:ofpbuf_const_initializer:
   97|  44.1k|{
   98|  44.1k|    return (struct ofpbuf) {
   99|  44.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  44.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  44.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  44.1k|     (TYPE) (POINTER))
  ------------------
  100|  44.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  44.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  44.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  44.1k|     (TYPE) (POINTER))
  ------------------
  101|  44.1k|        .size = size,
  102|  44.1k|        .allocated = size,
  103|  44.1k|        .header = NULL,
  104|  44.1k|        .msg = NULL,
  105|  44.1k|        .list_node = OVS_LIST_POISON,
  106|  44.1k|        .source = OFPBUF_STACK,
  107|  44.1k|    };
  108|  44.1k|}
ofp-monitor.c:ofpbuf_pull:
  258|  69.4k|{
  259|  69.4k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  69.4k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  69.4k|    void *data = b->data;
  261|       |
  262|  69.4k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 69.4k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  69.4k|    b->data = (char*)b->data + size;
  267|  69.4k|    b->size = b->size - size;
  268|  69.4k|    return data;
  269|  69.4k|}
ofp-monitor.c:ofpbuf_try_pull:
  275|  13.0k|{
  276|  13.0k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 10.4k, False: 2.57k]
  ------------------
  277|  13.0k|}
ofp-monitor.c:ofpbuf_clear:
  250|  46.6k|{
  251|  46.6k|    b->data = b->base;
  252|  46.6k|    b->size = 0;
  253|  46.6k|}
ofp-msgs.c:ofpbuf_const_initializer:
   97|  5.32M|{
   98|  5.32M|    return (struct ofpbuf) {
   99|  5.32M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  5.32M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  5.32M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  5.32M|     (TYPE) (POINTER))
  ------------------
  100|  5.32M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  5.32M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  5.32M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  5.32M|     (TYPE) (POINTER))
  ------------------
  101|  5.32M|        .size = size,
  102|  5.32M|        .allocated = size,
  103|  5.32M|        .header = NULL,
  104|  5.32M|        .msg = NULL,
  105|  5.32M|        .list_node = OVS_LIST_POISON,
  106|  5.32M|        .source = OFPBUF_STACK,
  107|  5.32M|    };
  108|  5.32M|}
ofp-msgs.c:ofpbuf_pull:
  258|  6.88M|{
  259|  6.88M|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  6.88M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  6.88M|    void *data = b->data;
  261|       |
  262|  6.88M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 6.88M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  6.88M|    b->data = (char*)b->data + size;
  267|  6.88M|    b->size = b->size - size;
  268|  6.88M|    return data;
  269|  6.88M|}
ofp-packet.c:ofpbuf_const_initializer:
   97|   564k|{
   98|   564k|    return (struct ofpbuf) {
   99|   564k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|   564k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   564k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   564k|     (TYPE) (POINTER))
  ------------------
  100|   564k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|   564k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   564k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   564k|     (TYPE) (POINTER))
  ------------------
  101|   564k|        .size = size,
  102|   564k|        .allocated = size,
  103|   564k|        .header = NULL,
  104|   564k|        .msg = NULL,
  105|   564k|        .list_node = OVS_LIST_POISON,
  106|   564k|        .source = OFPBUF_STACK,
  107|   564k|    };
  108|   564k|}
ofp-packet.c:ofpbuf_pull:
  258|   589k|{
  259|   589k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   589k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   589k|    void *data = b->data;
  261|       |
  262|   589k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 589k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   589k|    b->data = (char*)b->data + size;
  267|   589k|    b->size = b->size - size;
  268|   589k|    return data;
  269|   589k|}
ofp-packet.c:ofpbuf_try_pull:
  275|  66.3k|{
  276|  66.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 57.3k, False: 9.01k]
  ------------------
  277|  66.3k|}
ofp-packet.c:ofpbuf_msgsize:
  244|  42.0k|{
  245|  42.0k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  42.0k|}
ofp-packet.c:ofpbuf_tail:
  203|  42.0k|{
  204|  42.0k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|  42.0k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 42.0k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|  42.0k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 42.0k, False: 0]
  ------------------
  206|  42.0k|}
ofp-packet.c:ofpbuf_headersize:
  236|  17.4k|{
  237|  17.4k|    return (char *)b->msg - (char *)b->header;
  238|  17.4k|}
ofp-packet.c:ofpbuf_clear:
  250|   330k|{
  251|   330k|    b->data = b->base;
  252|   330k|    b->size = 0;
  253|   330k|}
ofp-port.c:ofpbuf_const_initializer:
   97|  49.3k|{
   98|  49.3k|    return (struct ofpbuf) {
   99|  49.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  49.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  49.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  49.3k|     (TYPE) (POINTER))
  ------------------
  100|  49.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  49.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  49.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  49.3k|     (TYPE) (POINTER))
  ------------------
  101|  49.3k|        .size = size,
  102|  49.3k|        .allocated = size,
  103|  49.3k|        .header = NULL,
  104|  49.3k|        .msg = NULL,
  105|  49.3k|        .list_node = OVS_LIST_POISON,
  106|  49.3k|        .source = OFPBUF_STACK,
  107|  49.3k|    };
  108|  49.3k|}
ofp-port.c:ofpbuf_pull:
  258|   266k|{
  259|   266k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   266k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   266k|    void *data = b->data;
  261|       |
  262|   266k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 15.4k, False: 250k]
  ------------------
  263|  15.4k|        return data;
  264|  15.4k|    }
  265|       |
  266|   250k|    b->data = (char*)b->data + size;
  267|   250k|    b->size = b->size - size;
  268|   250k|    return data;
  269|   266k|}
ofp-port.c:ofpbuf_try_pull:
  275|   236k|{
  276|   236k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 230k, False: 6.49k]
  ------------------
  277|   236k|}
ofp-prop.c:ofpbuf_pull:
  258|   330k|{
  259|   330k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|   330k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|   330k|    void *data = b->data;
  261|       |
  262|   330k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 330k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   330k|    b->data = (char*)b->data + size;
  267|   330k|    b->size = b->size - size;
  268|   330k|    return data;
  269|   330k|}
ofp-prop.c:ofpbuf_msgsize:
  244|  66.9k|{
  245|  66.9k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  66.9k|}
ofp-prop.c:ofpbuf_tail:
  203|  66.9k|{
  204|  66.9k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   58|  66.9k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 66.9k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  205|  66.9k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 66.9k, False: 0]
  ------------------
  206|  66.9k|}
ofp-prop.c:ofpbuf_headersize:
  236|  26.2k|{
  237|  26.2k|    return (char *)b->msg - (char *)b->header;
  238|  26.2k|}
ox-stat.c:ofpbuf_try_pull:
  275|  53.9k|{
  276|  53.9k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 44.2k, False: 9.70k]
  ------------------
  277|  53.9k|}
ox-stat.c:ofpbuf_pull:
  258|  64.6k|{
  259|  64.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   58|  64.6k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  260|  64.6k|    void *data = b->data;
  261|       |
  262|  64.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 11.8k, False: 52.7k]
  ------------------
  263|  11.8k|        return data;
  264|  11.8k|    }
  265|       |
  266|  52.7k|    b->data = (char*)b->data + size;
  267|  52.7k|    b->size = b->size - size;
  268|  52.7k|    return data;
  269|  64.6k|}
ox-stat.c:ofpbuf_const_initializer:
   97|  27.6k|{
   98|  27.6k|    return (struct ofpbuf) {
   99|  27.6k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   81|  27.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  27.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  27.6k|     (TYPE) (POINTER))
  ------------------
  100|  27.6k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   81|  27.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  27.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  27.6k|     (TYPE) (POINTER))
  ------------------
  101|  27.6k|        .size = size,
  102|  27.6k|        .allocated = size,
  103|  27.6k|        .header = NULL,
  104|  27.6k|        .msg = NULL,
  105|  27.6k|        .list_node = OVS_LIST_POISON,
  106|  27.6k|        .source = OFPBUF_STACK,
  107|  27.6k|    };
  108|  27.6k|}

nx-match.c:ovsthread_once_start:
  156|  28.3M|{
  157|       |    /* We may be reading 'done' at the same time as the first thread
  158|       |     * is writing on it, or we can be using a stale copy of it.  The
  159|       |     * worst that can happen is that we call ovsthread_once_start__()
  160|       |     * once when strictly not necessary. */
  161|  28.3M|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   46|  28.3M|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:53): [True: 1, False: 28.3M]
  |  |  |  Branch (46:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|  28.3M|}
ofp-actions.c:ovsthread_once_start:
  156|   664k|{
  157|       |    /* We may be reading 'done' at the same time as the first thread
  158|       |     * is writing on it, or we can be using a stale copy of it.  The
  159|       |     * worst that can happen is that we call ovsthread_once_start__()
  160|       |     * once when strictly not necessary. */
  161|   664k|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   46|   664k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:53): [True: 1, False: 664k]
  |  |  |  Branch (46:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|   664k|}
ofp-msgs.c:ovsthread_once_start:
  156|  22.3M|{
  157|       |    /* We may be reading 'done' at the same time as the first thread
  158|       |     * is writing on it, or we can be using a stale copy of it.  The
  159|       |     * worst that can happen is that we call ovsthread_once_start__()
  160|       |     * once when strictly not necessary. */
  161|  22.3M|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   46|  22.3M|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:53): [True: 1, False: 22.3M]
  |  |  |  Branch (46:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|  22.3M|}

ofp-actions.c:is_pow2:
  395|  6.18k|{
  396|  6.18k|    return IS_POW2(x);
  ------------------
  |  |  308|  6.18k|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (308:21): [True: 6.18k, False: 0]
  |  |  |  Branch (308:28): [True: 4.56k, False: 1.62k]
  |  |  ------------------
  ------------------
  397|  6.18k|}
hmap.c:is_pow2:
  395|     28|{
  396|     28|    return IS_POW2(x);
  ------------------
  |  |  308|     28|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (308:21): [True: 28, False: 0]
  |  |  |  Branch (308:28): [True: 28, False: 0]
  |  |  ------------------
  ------------------
  397|     28|}

ofp-protocol.c:init_this_module_ofp_protocol:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-queue.c:init_this_module_ofp_queue:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-table.c:init_this_module_ofp_table:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-util.c:init_this_module_ofp_util:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
util.c:init_this_module_util:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
vlog.c:init_this_module_vlog:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
coverage.c:init_this_module_coverage:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
flow.c:init_this_module_flow:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
meta-flow.c:init_this_module_meta_flow:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev.c:init_this_module_netdev:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
nx-match.c:init_this_module_nx_match:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-actions.c:init_this_module_ofp_actions:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-bundle.c:init_this_module_ofp_bundle:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-connection.c:init_this_module_ofp_connection:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-errors.c:init_this_module_ofp_errors:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-flow.c:init_this_module_ofp_flow:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-group.c:init_this_module_ofp_group:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-match.c:init_this_module_ofp_match:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-meter.c:init_this_module_ofp_meter:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-monitor.c:init_this_module_ofp_monitor:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-msgs.c:init_this_module_ofp_msgs:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-packet.c:init_this_module_ofp_packet:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ofp-port.c:init_this_module_ofp_port:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovs-rcu.c:init_this_module_ovs_rcu:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovs-router.c:init_this_module_ovs_router:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovs-thread.c:init_this_module_ovs_thread:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ox-stat.c:init_this_module_ox_stat:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
poll-loop.c:init_this_module_poll_loop:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
socket-util.c:init_this_module_socket_util:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
svec.c:init_this_module_svec:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
timeval.c:init_this_module_timeval:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
unixctl.c:init_this_module_unixctl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
uuid.c:init_this_module_uuid:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
socket-util-unix.c:init_this_module_socket_util_unix:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev-linux.c:init_this_module_netdev_linux:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev-offload-tc.c:init_this_module_netdev_offload_tc:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netlink-socket.c:init_this_module_netlink_socket:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
route-table.c:init_this_module_route_table:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
tc.c:init_this_module_tc:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
bundle.c:init_this_module_bundle:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif.c:init_this_module_dpif:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
entropy.c:init_this_module_entropy:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
fatal-signal.c:init_this_module_fatal_signal:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
hmap.c:init_this_module_hmap:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
jsonrpc.c:init_this_module_jsonrpc:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev-offload.c:init_this_module_netdev_offload:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev-vport.c:init_this_module_netdev_vport:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netlink.c:init_this_module_netlink:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
odp-execute.c:init_this_module_odp_execute:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
odp-execute-private.c:init_this_module_odp_execute_impl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
odp-util.c:init_this_module_odp_util:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovs-replay.c:init_this_module_ovs_replay:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
reconnect.c:init_this_module_reconnect:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
sha1.c:init_this_module_sha1:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream.c:init_this_module_stream:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netdev-native-tnl.c:init_this_module_native_tnl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
userspace-tso.c:init_this_module_userspace_tso:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
signals.c:init_this_module_signals:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream-unix.c:init_this_module_stream_unix:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netlink.c:init_this_module_dpif_netlink:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netlink-rtnl.c:init_this_module_dpif_netlink_rtnl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netlink-conntrack.c:init_this_module_netlink_conntrack:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
netlink-notifier.c:init_this_module_netlink_notifier:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream-ssl.c:init_this_module_stream_ssl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
conntrack.c:init_this_module_conntrack:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ct-dpif.c:init_this_module_ct_dpif:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev.c:init_this_module_dpif_netdev:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-private-dpif.c:init_this_module_dpif_netdev_impl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-private-extract.c:init_this_module_dpif_netdev_extract:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-perf.c:init_this_module_pmd_perf:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ipf.c:init_this_module_ipf:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovs-numa.c:init_this_module_ovs_numa:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream-fd.c:init_this_module_stream_fd:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream-replay.c:init_this_module_stream_replay:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
stream-tcp.c:init_this_module_stream_tcp:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpdk-stub.c:init_this_module_dpdk:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
conntrack-tp.c:init_this_module_conntrack_tp:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-extract-study.c:init_this_module_dpif_mfex_extract_study:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-lookup.c:init_this_module_dpif_netdev_lookup:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-lookup-autovalidator.c:init_this_module_dpif_lookup_autovalidator:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
dpif-netdev-lookup-generic.c:init_this_module_dpif_lookup_generic:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovsdb-error.c:init_this_module_ovsdb_error:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovsdb-idl.c:init_this_module_ovsdb_idl:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
backtrace.c:init_this_module_backtrace:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \
ovsdb-cs.c:init_this_module_ovsdb_cs:
  190|      2|        OVS_CONSTRUCTOR(init_this_module_##MODULE) {                    \
  191|      2|            vlog_insert_module(&this_module.list);                      \
  192|      2|        }                                                               \

ofp-table.c:bitmap_n_bytes:
   44|  8.29k|{
   45|  8.29k|    return bitmap_n_longs(n_bits) * sizeof(unsigned long int);
   46|  8.29k|}
ofp-table.c:bitmap_n_longs:
   38|  8.29k|{
   39|  8.29k|    return BITMAP_N_LONGS(n_bits);
  ------------------
  |  |  420|  8.29k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|  8.29k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   40|  8.29k|}
ofp-table.c:bitmap_set1:
   96|   154k|{
   97|   154k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   154k|    return bitmap;
   99|   154k|}
ofp-table.c:bitmap_bit__:
   32|   156k|{
   33|   156k|    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|   156k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   156k|}
ofp-table.c:bitmap_unit__:
   26|  1.60M|{
   27|  1.60M|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   81|  1.60M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  1.60M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  1.60M|     (TYPE) (POINTER))
  ------------------
   28|  1.60M|}
ofp-table.c:bitmap_or:
  179|  28.5k|{
  180|  28.5k|    size_t i;
  181|       |
  182|   114k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  420|   114k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|   114k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (182:17): [True: 85.6k, False: 28.5k]
  ------------------
  183|  85.6k|        dst[i] |= arg[i];
  184|  85.6k|    }
  185|  28.5k|    return dst;
  186|  28.5k|}
ofp-table.c:bitmap_and:
  167|    736|{
  168|    736|    size_t i;
  169|       |
  170|  2.94k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  420|  2.94k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|  2.94k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 2.20k, False: 736]
  ------------------
  171|  2.20k|        dst[i] &= arg[i];
  172|  2.20k|    }
  173|    736|    return dst;
  174|    736|}
ofp-table.c:bitmap_scan:
  227|   979k|{
  228|   979k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|   979k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 979k, False: 0]
  |  |  ------------------
  ------------------
  229|   979k|        unsigned long *p, unit;
  230|       |
  231|   979k|        p = bitmap_unit__(bitmap, start);
  232|   979k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|   979k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 979k, False: 0]
  ------------------
  233|   979k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 417k, False: 561k]
  ------------------
  234|   417k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  419|   417k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|   417k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  419|   417k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|   878k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|   461k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 654k, False: 224k]
  ------------------
  238|   654k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 654k, False: 0]
  ------------------
  239|   654k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 193k, False: 461k]
  ------------------
  240|   193k|                    goto found;
  241|   193k|                }
  242|   654k|            }
  243|   224k|            return end;
  244|   417k|        }
  245|   754k|found:
  246|   754k|        start += raw_ctz(unit);  /* unit != 0 */
  247|   754k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|   754k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 754k, False: 0]
  |  |  ------------------
  ------------------
  248|   754k|            return start;
  249|   754k|        }
  250|   754k|    }
  251|      0|    return end;
  252|   979k|}
ofp-table.c:bitmap_is_set:
   90|  2.31k|{
   91|  2.31k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  2.31k|}
ofp-table.c:bitmap_is_all_zeros:
  273|   256k|{
  274|   256k|    return bitmap_scan(bitmap, true, 0, n) == n;
  275|   256k|}
ofp-table.c:bitmap_equal:
  207|   250k|{
  208|   250k|    if (memcmp(a, b, n / BITMAP_ULONG_BITS * sizeof(unsigned long))) {
  ------------------
  |  |  419|   250k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (208:9): [True: 15.9k, False: 234k]
  ------------------
  209|  15.9k|        return false;
  210|  15.9k|    }
  211|   234k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|   234k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (211:9): [True: 234k, False: 0]
  ------------------
  212|   234k|        unsigned long mask = (1UL << n % BITMAP_ULONG_BITS) - 1;
  ------------------
  |  |  419|   234k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  213|   234k|        unsigned long diff = *bitmap_unit__(a, n) ^ *bitmap_unit__(b, n);
  214|       |
  215|   234k|        return !(diff & mask);
  216|   234k|    }
  217|      0|    return true;
  218|   234k|}
meta-flow.c:bitmap_scan:
  227|  63.4k|{
  228|  63.4k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|  63.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 63.3k, False: 110]
  |  |  ------------------
  ------------------
  229|  63.3k|        unsigned long *p, unit;
  230|       |
  231|  63.3k|        p = bitmap_unit__(bitmap, start);
  232|  63.3k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|  63.3k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 63.3k, False: 0]
  ------------------
  233|  63.3k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 48.0k, False: 15.3k]
  ------------------
  234|  48.0k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  419|  48.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  48.0k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  419|  48.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  77.9k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|  29.9k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 37.5k, False: 40.4k]
  ------------------
  238|  37.5k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 37.5k, False: 0]
  ------------------
  239|  37.5k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 7.60k, False: 29.9k]
  ------------------
  240|  7.60k|                    goto found;
  241|  7.60k|                }
  242|  37.5k|            }
  243|  40.4k|            return end;
  244|  48.0k|        }
  245|  22.9k|found:
  246|  22.9k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  22.9k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|  22.9k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 16.8k, False: 6.09k]
  |  |  ------------------
  ------------------
  248|  16.8k|            return start;
  249|  16.8k|        }
  250|  22.9k|    }
  251|  6.20k|    return end;
  252|  63.4k|}
meta-flow.c:bitmap_unit__:
   26|   156k|{
   27|   156k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   81|   156k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   156k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   156k|     (TYPE) (POINTER))
  ------------------
   28|   156k|}
meta-flow.c:bitmap_is_set:
   90|  46.6k|{
   91|  46.6k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  46.6k|}
meta-flow.c:bitmap_bit__:
   32|  93.2k|{
   33|  93.2k|    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|  93.2k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|  93.2k|}
meta-flow.c:bitmap_set1:
   96|  46.6k|{
   97|  46.6k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|  46.6k|    return bitmap;
   99|  46.6k|}
meta-flow.c:bitmap_and:
  167|   137k|{
  168|   137k|    size_t i;
  169|       |
  170|   549k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  420|   549k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|   549k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 412k, False: 137k]
  ------------------
  171|   412k|        dst[i] &= arg[i];
  172|   412k|    }
  173|   137k|    return dst;
  174|   137k|}
meta-flow.c:bitmap_not:
  191|  68.6k|{
  192|  68.6k|    size_t i;
  193|       |
  194|   206k|    for (i = 0; i < n / BITMAP_ULONG_BITS; i++) {
  ------------------
  |  |  419|   206k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (194:17): [True: 137k, False: 68.6k]
  ------------------
  195|   137k|        dst[i] = ~dst[i];
  196|   137k|    }
  197|  68.6k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|  68.6k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (197:9): [True: 68.6k, False: 0]
  ------------------
  198|  68.6k|        dst[i] ^= (1UL << (n % BITMAP_ULONG_BITS)) - 1;
  ------------------
  |  |  419|  68.6k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  199|  68.6k|    }
  200|  68.6k|    return dst;
  201|  68.6k|}
nx-match.c:bitmap_is_set:
   90|  47.7k|{
   91|  47.7k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  47.7k|}
nx-match.c:bitmap_unit__:
   26|   977k|{
   27|   977k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   81|   977k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   977k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   977k|     (TYPE) (POINTER))
  ------------------
   28|   977k|}
nx-match.c:bitmap_bit__:
   32|   923k|{
   33|   923k|    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|   923k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   923k|}
nx-match.c:bitmap_scan:
  227|  53.8k|{
  228|  53.8k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|  53.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 53.8k, False: 0]
  |  |  ------------------
  ------------------
  229|  53.8k|        unsigned long *p, unit;
  230|       |
  231|  53.8k|        p = bitmap_unit__(bitmap, start);
  232|  53.8k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  419|  53.8k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 53.8k, False: 0]
  ------------------
  233|  53.8k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 36.5k, False: 17.3k]
  ------------------
  234|  36.5k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  419|  36.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  36.5k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  419|  36.5k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  46.0k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|  9.49k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 30.7k, False: 15.3k]
  ------------------
  238|  30.7k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 30.7k, False: 0]
  ------------------
  239|  30.7k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 21.2k, False: 9.49k]
  ------------------
  240|  21.2k|                    goto found;
  241|  21.2k|                }
  242|  30.7k|            }
  243|  15.3k|            return end;
  244|  36.5k|        }
  245|  38.5k|found:
  246|  38.5k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  38.5k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   45|  38.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 38.5k, False: 0]
  |  |  ------------------
  ------------------
  248|  38.5k|            return start;
  249|  38.5k|        }
  250|  38.5k|    }
  251|      0|    return end;
  252|  53.8k|}
nx-match.c:bitmap_set1:
   96|   875k|{
   97|   875k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   875k|    return bitmap;
   99|   875k|}
ofp-group.c:bitmap_count1:
  153|  15.4k|{
  154|  15.4k|    size_t i;
  155|  15.4k|    size_t count = 0;
  156|       |
  157|  15.4k|    BUILD_ASSERT(ULONG_MAX <= UINT64_MAX);
  ------------------
  |  |  270|  15.4k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
  158|  61.7k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  420|  61.7k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|  61.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (158:17): [True: 46.2k, False: 15.4k]
  ------------------
  159|  46.2k|        count += count_1bits(bitmap[i]);
  160|  46.2k|    }
  161|  15.4k|    return count;
  162|  15.4k|}

bundle_check:
  111|  13.4k|{
  112|  13.4k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  13.4k|        {                                                                 \
  |  |  111|  13.4k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  53.6k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  13.4k|            0,                              /* first_dropped */           \
  |  |  113|  13.4k|            0,                              /* last_dropped */            \
  |  |  114|  13.4k|            0,                              /* n_dropped */               \
  |  |  115|  13.4k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  13.4k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  13.4k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  13.4k|        }
  ------------------
  113|  13.4k|    size_t i;
  114|       |
  115|  13.4k|    if (bundle->dst.field) {
  ------------------
  |  Branch (115:9): [True: 9.67k, False: 3.74k]
  ------------------
  116|  9.67k|        enum ofperr error = mf_check_dst(&bundle->dst, match);
  117|  9.67k|        if (error) {
  ------------------
  |  Branch (117:13): [True: 18, False: 9.65k]
  ------------------
  118|     18|            return error;
  119|     18|        }
  120|  9.67k|    }
  121|       |
  122|  81.8k|    for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (122:17): [True: 70.4k, False: 11.4k]
  ------------------
  123|  70.4k|        ofp_port_t ofp_port = bundle->members[i];
  124|       |
  125|  70.4k|        if (ofp_port != OFPP_NONE) {
  ------------------
  |  |   47|  70.4k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  70.4k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (125:13): [True: 60.1k, False: 10.3k]
  ------------------
  126|  60.1k|            enum ofperr error = ofpact_check_output_port(ofp_port, max_ports);
  127|  60.1k|            if (error) {
  ------------------
  |  Branch (127:17): [True: 1.68k, False: 58.4k]
  ------------------
  128|  1.68k|                VLOG_WARN_RL(&rl, "invalid member %"PRIu32, ofp_port);
  ------------------
  |  |  223|  1.68k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.68k|    do {                                                                \
  |  |  |  |  287|  1.68k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.68k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.68k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|  1.68k|                return error;
  130|  1.68k|            }
  131|  60.1k|        }
  132|       |        /* Controller members are unsupported due to the lack of a max_len
  133|       |         * argument. This may or may not change in the future.  There doesn't
  134|       |         * seem to be a real-world use-case for supporting it. */
  135|  68.7k|        if (ofp_port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  68.7k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  68.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (135:13): [True: 300, False: 68.4k]
  ------------------
  136|    300|            VLOG_WARN_RL(&rl, "unsupported controller member");
  ------------------
  |  |  223|    300|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    300|    do {                                                                \
  |  |  |  |  287|    300|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    300|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 300]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    300|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|    300|            return OFPERR_OFPBAC_BAD_OUT_PORT;
  138|    300|        }
  139|  68.7k|    }
  140|       |
  141|  11.4k|    return 0;
  142|  13.4k|}
bundle_format:
  305|  6.24k|{
  306|  6.24k|    const char *action, *fields, *algorithm;
  307|  6.24k|    size_t i;
  308|       |
  309|  6.24k|    fields = flow_hash_fields_to_str(bundle->fields);
  310|       |
  311|  6.24k|    switch (bundle->algorithm) {
  312|      2|    case NX_BD_ALG_HRW:
  ------------------
  |  Branch (312:5): [True: 2, False: 6.24k]
  ------------------
  313|      2|        algorithm = "hrw";
  314|      2|        break;
  315|  2.62k|    case NX_BD_ALG_ACTIVE_BACKUP:
  ------------------
  |  Branch (315:5): [True: 2.62k, False: 3.62k]
  ------------------
  316|  2.62k|        algorithm = "active_backup";
  317|  2.62k|        break;
  318|  3.61k|    default:
  ------------------
  |  Branch (318:5): [True: 3.61k, False: 2.62k]
  ------------------
  319|  3.61k|        algorithm = "<unknown>";
  320|  6.24k|    }
  321|       |
  322|  6.24k|    action = bundle->dst.field ? "bundle_load" : "bundle";
  ------------------
  |  Branch (322:14): [True: 4.88k, False: 1.36k]
  ------------------
  323|       |
  324|  6.24k|    ds_put_format(s, "%s%s(%s%s,%"PRIu16",%s,%s,", colors.paren, action,
  325|  6.24k|                  colors.end, fields, bundle->basis, algorithm, "ofport");
  326|       |
  327|  6.24k|    if (bundle->dst.field) {
  ------------------
  |  Branch (327:9): [True: 4.88k, False: 1.36k]
  ------------------
  328|  4.88k|        mf_format_subfield(&bundle->dst, s);
  329|  4.88k|        ds_put_char(s, ',');
  330|  4.88k|    }
  331|       |
  332|  6.24k|    ds_put_format(s, "%smembers:%s", colors.param, colors.end);
  333|  42.1k|    for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (333:17): [True: 35.8k, False: 6.24k]
  ------------------
  334|  35.8k|        if (i) {
  ------------------
  |  Branch (334:13): [True: 29.8k, False: 6.03k]
  ------------------
  335|  29.8k|            ds_put_char(s, ',');
  336|  29.8k|        }
  337|       |
  338|  35.8k|        ofputil_format_port(bundle->members[i], port_map, s);
  339|  35.8k|    }
  340|       |
  341|  6.24k|    ds_put_format(s, "%s)%s", colors.paren, colors.end);
  342|  6.24k|}

ofp-queue.c:ntohll:
   35|  64.6k|{
   36|  64.6k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 64.6k]
  ------------------
   37|  64.6k|}
ofp-switch.c:ntohll:
   35|  9.32k|{
   36|  9.32k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 9.32k]
  ------------------
   37|  9.32k|}
ofp-table.c:ntohll:
   35|   115k|{
   36|   115k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 115k]
  ------------------
   37|   115k|}
util.c:htonll:
   29|  23.5k|{
   30|  23.5k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 23.5k]
  ------------------
   31|  23.5k|}
util.c:ntohll:
   35|  7.11k|{
   36|  7.11k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 7.11k]
  ------------------
   37|  7.11k|}
flow.c:be32_to_be16:
  135|  48.9k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
flow.c:bytes_to_be32:
  110|  42.3k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  42.3k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  42.3k|#endif
  116|  42.3k|    return (OVS_FORCE ovs_be32) x;
  117|  42.3k|}
match.c:hton128:
   48|    615|{
   49|    615|    ovs_be128 dst;
   50|       |
   51|    615|    dst.be64.hi = htonll(src.u64.hi);
   52|    615|    dst.be64.lo = htonll(src.u64.lo);
   53|    615|    return dst;
   54|    615|}
match.c:htonll:
   29|   827k|{
   30|   827k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 827k]
  ------------------
   31|   827k|}
match.c:be32_to_be16:
  135|  23.5k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
match.c:ntohll:
   35|  12.3k|{
   36|  12.3k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 12.3k]
  ------------------
   37|  12.3k|}
meta-flow.c:be32_to_be16:
  135|    420|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
meta-flow.c:hton128:
   48|  1.93k|{
   49|  1.93k|    ovs_be128 dst;
   50|       |
   51|  1.93k|    dst.be64.hi = htonll(src.u64.hi);
   52|  1.93k|    dst.be64.lo = htonll(src.u64.lo);
   53|  1.93k|    return dst;
   54|  1.93k|}
meta-flow.c:htonll:
   29|  14.3k|{
   30|  14.3k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 14.3k]
  ------------------
   31|  14.3k|}
meta-flow.c:ntoh128:
   58|  7.50k|{
   59|  7.50k|    ovs_u128 dst;
   60|       |
   61|  7.50k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  7.50k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  7.50k|    return dst;
   64|  7.50k|}
meta-flow.c:ntohll:
   35|  30.5k|{
   36|  30.5k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 30.5k]
  ------------------
   37|  30.5k|}
nx-match.c:ntohll:
   35|  30.1k|{
   36|  30.1k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 30.1k]
  ------------------
   37|  30.1k|}
nx-match.c:htonll:
   29|  2.64M|{
   30|  2.64M|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 2.64M]
  ------------------
   31|  2.64M|}
ofp-actions.c:ntohll:
   35|  27.0k|{
   36|  27.0k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 27.0k]
  ------------------
   37|  27.0k|}
ofp-actions.c:be32_to_be16:
  135|  26.2k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
ofp-connection.c:ntohll:
   35|  7.48k|{
   36|  7.48k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 7.48k]
  ------------------
   37|  7.48k|}
ofp-flow.c:htonll:
   29|   546k|{
   30|   546k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 546k]
  ------------------
   31|   546k|}
ofp-flow.c:ntohll:
   35|   116k|{
   36|   116k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 116k]
  ------------------
   37|   116k|}
ofp-group.c:ntohll:
   35|   153k|{
   36|   153k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 153k]
  ------------------
   37|   153k|}
ofp-ipfix.c:ntohll:
   35|  68.7k|{
   36|  68.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 68.7k]
  ------------------
   37|  68.7k|}
ofp-meter.c:ntohll:
   35|  8.28k|{
   36|  8.28k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 8.28k]
  ------------------
   37|  8.28k|}
ofp-monitor.c:ntohll:
   35|  28.6k|{
   36|  28.6k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 28.6k]
  ------------------
   37|  28.6k|}
ofp-monitor.c:htonll:
   29|  7.70k|{
   30|  7.70k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 7.70k]
  ------------------
   31|  7.70k|}
ofp-packet.c:ntohll:
   35|  2.66k|{
   36|  2.66k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 2.66k]
  ------------------
   37|  2.66k|}
ofp-port.c:ntohll:
   35|   372k|{
   36|   372k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 372k]
  ------------------
   37|   372k|}
ox-stat.c:ntohll:
   35|    624|{
   36|    624|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 624]
  ------------------
   37|    624|}
learn.c:ntohll:
   35|  25.5k|{
   36|  25.5k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 25.5k]
  ------------------
   37|  25.5k|}

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

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|  25.3M|        {                                                               \
   73|  25.3M|            *counter_##COUNTER##_get() += n;                            \
   74|  25.3M|        }                                                               \
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|   114k|        {                                                               \
   73|   114k|            *counter_##COUNTER##_get() += n;                            \
   74|   114k|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_too_short_add:
   72|    231|        {                                                               \
   73|    231|            *counter_##COUNTER##_get() += n;                            \
   74|    231|        }                                                               \
flow.c:miniflow_extract_ipv4_pkt_len_error_add:
   72|  1.64k|        {                                                               \
   73|  1.64k|            *counter_##COUNTER##_get() += n;                            \
   74|  1.64k|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_too_short_add:
   72|    281|        {                                                               \
   73|    281|            *counter_##COUNTER##_get() += n;                            \
   74|    281|        }                                                               \
flow.c:miniflow_extract_ipv6_pkt_len_error_add:
   72|  1.68k|        {                                                               \
   73|  1.68k|            *counter_##COUNTER##_get() += n;                            \
   74|  1.68k|        }                                                               \
flow.c:miniflow_malloc_add:
   72|  78.1k|        {                                                               \
   73|  78.1k|            *counter_##COUNTER##_get() += n;                            \
   74|  78.1k|        }                                                               \
netdev.c:netdev_received_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_sent_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_add_router_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_get_stats_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_send_prepare_drops_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
netdev.c:netdev_push_header_drops_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_create_node_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
poll-loop.c:poll_zero_timeout_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
seq.c:seq_change_init_coverage:
   78|      2|        OVS_CONSTRUCTOR(COUNTER##_init_coverage) {                      \
   79|      2|            coverage_counter_register(&counter_##COUNTER);              \
   80|      2|        }
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|        }
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|        }
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|        }
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_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_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_put_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_execute_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|        }
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_meter_set_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_del_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|        }
hmap.c:hmap_expand_add:
   72|     28|        {                                                               \
   73|     28|            *counter_##COUNTER##_get() += n;                            \
   74|     28|        }                                                               \
hmap.c:hmap_pathological_add:
   72|      6|        {                                                               \
   73|      6|            *counter_##COUNTER##_get() += n;                            \
   74|      6|        }                                                               \
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|        }
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|        }
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_err_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|        }
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|        }
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_purged_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|        }
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:
  108|   114k|{
  109|   114k|    dp_packet_use__(b, CONST_CAST(void *, data), size, DPBUF_STACK);
  ------------------
  |  |   81|   114k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   114k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   114k|     (TYPE) (POINTER))
  ------------------
  110|   114k|    dp_packet_set_size(b, size);
  111|   114k|}
dp-packet.c:dp_packet_use__:
   45|   114k|{
   46|   114k|    dp_packet_set_base(b, base);
   47|   114k|    dp_packet_set_data(b, base);
   48|   114k|    dp_packet_set_size(b, 0);
   49|       |
   50|   114k|    dp_packet_init__(b, allocated, source);
   51|   114k|}
dp-packet.c:dp_packet_init__:
   29|   114k|{
   30|   114k|    dp_packet_set_allocated(b, allocated);
   31|   114k|    b->source = source;
   32|   114k|    dp_packet_reset_offsets(b);
   33|   114k|    pkt_metadata_init(&b->md, 0);
   34|   114k|    dp_packet_reset_cutlen(b);
   35|   114k|    dp_packet_reset_offload(b);
   36|       |    /* Initialize implementation-specific fields of dp_packet. */
   37|   114k|    dp_packet_init_specific(b);
   38|       |    /* By default assume the packet type to be Ethernet. */
   39|   114k|    b->packet_type = htonl(PT_ETH);
   40|   114k|}

ofp-print.c:dp_packet_l4_size:
  467|   114k|{
  468|   114k|    return OVS_LIKELY(b->l4_ofs != UINT16_MAX)
  ------------------
  |  |   45|   114k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 42.3k, False: 72.4k]
  |  |  ------------------
  ------------------
  469|   114k|        ? (const char *)dp_packet_tail(b) - (const char *)dp_packet_l4(b)
  470|  42.3k|        - dp_packet_l2_pad_size(b)
  471|   114k|        : 0;
  472|   114k|}
ofp-print.c:dp_packet_tail:
  302|  42.3k|{
  303|  42.3k|    return (char *) dp_packet_data(b) + dp_packet_size(b);
  304|  42.3k|}
ofp-print.c:dp_packet_l2_pad_size:
  397|  42.3k|{
  398|  42.3k|    return b->l2_pad_size;
  399|  42.3k|}
ofp-print.c:dp_packet_l4:
  440|  80.4k|{
  441|  80.4k|    return b->l4_ofs != UINT16_MAX
  ------------------
  |  Branch (441:12): [True: 80.4k, False: 0]
  ------------------
  442|  80.4k|           ? (char *) dp_packet_data(b) + b->l4_ofs
  443|  80.4k|           : NULL;
  444|  80.4k|}
ofp-print.c:dp_packet_data:
  734|   122k|{
  735|   122k|    return __packet_data(b) != UINT16_MAX
  ------------------
  |  Branch (735:12): [True: 122k, False: 0]
  ------------------
  736|   122k|           ? (char *) dp_packet_base(b) + __packet_data(b) : NULL;
  737|   122k|}
ofp-print.c:__packet_data:
  674|   245k|{
  675|   245k|    return b->data_ofs;
  676|   245k|}
ofp-print.c:dp_packet_base:
  650|   122k|{
  651|   122k|    return b->base_;
  652|   122k|}
ofp-print.c:dp_packet_size:
  662|  42.3k|{
  663|  42.3k|    return b->size_;
  664|  42.3k|}
dp-packet.c:dp_packet_reset_offsets:
  388|   114k|{
  389|   114k|    b->l2_pad_size = 0;
  390|   114k|    b->l2_5_ofs = UINT16_MAX;
  391|   114k|    b->l3_ofs = UINT16_MAX;
  392|   114k|    b->l4_ofs = UINT16_MAX;
  393|   114k|}
dp-packet.c:dp_packet_reset_cutlen:
  700|   114k|{
  701|   114k|    b->cutlen = 0;
  702|   114k|}
dp-packet.c:dp_packet_reset_offload:
  945|   114k|{
  946|   114k|    *dp_packet_ol_flags_ptr(p) &= ~DP_PACKET_OL_SUPPORTED_MASK;
  ------------------
  |  |   89|   114k|#define DP_PACKET_OL_SUPPORTED_MASK (DP_PACKET_OL_RSS_HASH         | \
  |  |   90|   114k|                                     DP_PACKET_OL_FLOW_MARK        | \
  |  |   91|   114k|                                     DP_PACKET_OL_RX_L4_CKSUM_BAD  | \
  |  |   92|   114k|                                     DP_PACKET_OL_RX_IP_CKSUM_BAD  | \
  |  |   93|   114k|                                     DP_PACKET_OL_RX_L4_CKSUM_GOOD | \
  |  |   94|   114k|                                     DP_PACKET_OL_RX_IP_CKSUM_GOOD | \
  |  |   95|   114k|                                     DP_PACKET_OL_TX_TCP_SEG       | \
  |  |   96|   114k|                                     DP_PACKET_OL_TX_IPV4          | \
  |  |   97|   114k|                                     DP_PACKET_OL_TX_IPV6          | \
  |  |   98|   114k|                                     DP_PACKET_OL_TX_TCP_CKSUM     | \
  |  |   99|   114k|                                     DP_PACKET_OL_TX_UDP_CKSUM     | \
  |  |  100|   114k|                                     DP_PACKET_OL_TX_SCTP_CKSUM)
  ------------------
  947|   114k|}
dp-packet.c:dp_packet_init_specific:
  644|   114k|{
  645|       |    /* There are no implementation-specific fields for initialization. */
  646|   114k|}
dp-packet.c:dp_packet_set_size:
  668|   229k|{
  669|   229k|    b->size_ = v;
  670|   229k|}
dp-packet.c:dp_packet_base:
  650|   114k|{
  651|   114k|    return b->base_;
  652|   114k|}
dp-packet.c:dp_packet_ol_flags_ptr:
  552|   114k|{
  553|   114k|    return CONST_CAST(uint32_t *, &b->ol_flags);
  ------------------
  |  |   81|   114k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   114k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   114k|     (TYPE) (POINTER))
  ------------------
  554|   114k|}
dp-packet.c:dp_packet_set_allocated:
  692|   114k|{
  693|   114k|    b->allocated_ = s;
  694|   114k|}
dp-packet.c:dp_packet_set_base:
  656|   114k|{
  657|   114k|    b->base_ = d;
  658|   114k|}
dp-packet.c:dp_packet_set_data:
  741|   114k|{
  742|   114k|    if (data) {
  ------------------
  |  Branch (742:9): [True: 114k, False: 0]
  ------------------
  743|   114k|        __packet_set_data(b, (char *) data - (char *) dp_packet_base(b));
  744|   114k|    } else {
  745|      0|        __packet_set_data(b, UINT16_MAX);
  746|      0|    }
  747|   114k|}
dp-packet.c:__packet_set_data:
  680|   114k|{
  681|   114k|    b->data_ofs = v;
  682|   114k|}
flow.c:dp_packet_data:
  734|   141k|{
  735|   141k|    return __packet_data(b) != UINT16_MAX
  ------------------
  |  Branch (735:12): [True: 141k, False: 0]
  ------------------
  736|   141k|           ? (char *) dp_packet_base(b) + __packet_data(b) : NULL;
  737|   141k|}
flow.c:__packet_data:
  674|   283k|{
  675|   283k|    return b->data_ofs;
  676|   283k|}
flow.c:dp_packet_base:
  650|   141k|{
  651|   141k|    return b->base_;
  652|   141k|}
flow.c:dp_packet_size:
  662|   159k|{
  663|   159k|    return b->size_;
  664|   159k|}
flow.c:dp_packet_reset_offsets:
  388|   114k|{
  389|   114k|    b->l2_pad_size = 0;
  390|   114k|    b->l2_5_ofs = UINT16_MAX;
  391|   114k|    b->l3_ofs = UINT16_MAX;
  392|   114k|    b->l4_ofs = UINT16_MAX;
  393|   114k|}
flow.c:dp_packet_set_l2_pad_size:
  403|  44.6k|{
  404|  44.6k|    ovs_assert(pad_size <= dp_packet_size(b));
  ------------------
  |  |   58|  44.6k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  405|  44.6k|    b->l2_pad_size = pad_size;
  406|  44.6k|}
flow.c:dp_packet_update_rss_hash_ipv4_tcp_udp:
 1135|  7.05k|{
 1136|  7.05k|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1136:9): [True: 0, False: 7.05k]
  ------------------
 1137|      0|        return;
 1138|      0|    }
 1139|       |
 1140|  7.05k|    const uint8_t *pkt = dp_packet_data(packet);
 1141|  7.05k|    const void *l4_ports = &pkt[packet->l4_ofs];
 1142|  7.05k|    const uint16_t l3_ofs = packet->l3_ofs;
 1143|  7.05k|    uint32_t hash = 0;
 1144|  7.05k|    uint32_t ports;
 1145|       |
 1146|       |    /* IPv4 Src, Dst and proto. */
 1147|  7.05k|    hash = dp_packet_calc_hash_ipv4(pkt, l3_ofs, hash);
 1148|       |
 1149|       |    /* L4 ports. */
 1150|  7.05k|    memcpy(&ports,  l4_ports, sizeof ports);
 1151|  7.05k|    hash = hash_add(hash, ports);
 1152|       |
 1153|  7.05k|    hash = hash_finish(hash, 42);
 1154|  7.05k|    dp_packet_set_rss_hash(packet, hash);
 1155|  7.05k|}
flow.c:dp_packet_rss_valid:
  939|  27.0k|{
  940|  27.0k|    return *dp_packet_ol_flags_ptr(p) & DP_PACKET_OL_RSS_HASH;
  941|  27.0k|}
flow.c:dp_packet_ol_flags_ptr:
  552|  54.0k|{
  553|  54.0k|    return CONST_CAST(uint32_t *, &b->ol_flags);
  ------------------
  |  |   81|  54.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  54.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  54.0k|     (TYPE) (POINTER))
  ------------------
  554|  54.0k|}
flow.c:dp_packet_calc_hash_ipv4:
 1097|  7.05k|{
 1098|  7.05k|    const void *ipv4_src = &pkt[l3_ofs + offsetof(struct ip_header, ip_src)];
 1099|  7.05k|    const void *ipv4_dst = &pkt[l3_ofs + offsetof(struct ip_header, ip_dst)];
 1100|  7.05k|    uint32_t ip_src, ip_dst;
 1101|       |
 1102|  7.05k|    memcpy(&ip_src, ipv4_src, sizeof ip_src);
 1103|  7.05k|    memcpy(&ip_dst, ipv4_dst, sizeof ip_dst);
 1104|       |
 1105|       |    /* IPv4 Src and Dst. */
 1106|  7.05k|    hash = hash_add(hash, ip_src);
 1107|  7.05k|    hash = hash_add(hash, ip_dst);
 1108|       |
 1109|       |    /* IPv4 proto. */
 1110|  7.05k|    hash = hash_add(hash, pkt[l3_ofs + offsetof(struct ip_header, ip_proto)]);
 1111|       |
 1112|  7.05k|    return hash;
 1113|  7.05k|}
flow.c:dp_packet_set_rss_hash:
  932|  27.0k|{
  933|  27.0k|    *dp_packet_rss_ptr(p) = hash;
  934|  27.0k|    *dp_packet_ol_flags_ptr(p) |= DP_PACKET_OL_RSS_HASH;
  935|  27.0k|}
flow.c:dp_packet_rss_ptr:
  558|  27.0k|{
  559|  27.0k|    return CONST_CAST(uint32_t *, &b->rss_hash);
  ------------------
  |  |   81|  27.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  27.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  27.0k|     (TYPE) (POINTER))
  ------------------
  560|  27.0k|}
flow.c:dp_packet_update_rss_hash_ipv6_tcp_udp:
 1159|  19.9k|{
 1160|  19.9k|    if (dp_packet_rss_valid(packet)) {
  ------------------
  |  Branch (1160:9): [True: 0, False: 19.9k]
  ------------------
 1161|      0|        return;
 1162|      0|    }
 1163|       |
 1164|  19.9k|    const uint8_t *pkt = dp_packet_data(packet);
 1165|  19.9k|    const uint16_t l3_ofs = packet->l3_ofs;
 1166|  19.9k|    uint32_t ipv6_src_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_src);
 1167|  19.9k|    uint32_t ipv6_dst_off = offsetof(struct ovs_16aligned_ip6_hdr, ip6_dst);
 1168|  19.9k|    uint32_t ipv6_proto_off = offsetof(struct ovs_16aligned_ip6_hdr,
 1169|  19.9k|                                       ip6_ctlun.ip6_un1.ip6_un1_nxt);
 1170|  19.9k|    const void *ipv6_src_l = &pkt[l3_ofs + ipv6_src_off];
 1171|  19.9k|    const void *ipv6_src_h = &pkt[l3_ofs + ipv6_src_off + 8];
 1172|  19.9k|    const void *ipv6_dst_l = &pkt[l3_ofs + ipv6_dst_off];
 1173|  19.9k|    const void *ipv6_dst_h = &pkt[l3_ofs + ipv6_dst_off + 8];
 1174|  19.9k|    const void *l4_ports = &pkt[packet->l4_ofs];
 1175|  19.9k|    uint64_t ipv6_src_lo, ipv6_src_hi;
 1176|  19.9k|    uint64_t ipv6_dst_lo, ipv6_dst_hi;
 1177|  19.9k|    uint32_t ports;
 1178|  19.9k|    uint32_t hash = 0;
 1179|       |
 1180|  19.9k|    memcpy(&ipv6_src_lo, ipv6_src_l, sizeof ipv6_src_lo);
 1181|  19.9k|    memcpy(&ipv6_src_hi, ipv6_src_h, sizeof ipv6_src_hi);
 1182|  19.9k|    memcpy(&ipv6_dst_lo, ipv6_dst_l, sizeof ipv6_dst_lo);
 1183|  19.9k|    memcpy(&ipv6_dst_hi, ipv6_dst_h, sizeof ipv6_dst_hi);
 1184|  19.9k|    memcpy(&ports, l4_ports, sizeof ports);
 1185|       |
 1186|       |    /* IPv6 Src and Dst. */
 1187|  19.9k|    hash = hash_add64(hash, ipv6_src_lo);
 1188|  19.9k|    hash = hash_add64(hash, ipv6_src_hi);
 1189|  19.9k|    hash = hash_add64(hash, ipv6_dst_lo);
 1190|  19.9k|    hash = hash_add64(hash, ipv6_dst_hi);
 1191|       |    /* IPv6 proto. */
 1192|  19.9k|    hash = hash_add(hash, pkt[l3_ofs + ipv6_proto_off]);
 1193|       |    /* L4 ports. */
 1194|  19.9k|    hash = hash_add(hash, ports);
 1195|  19.9k|    hash = hash_finish(hash, 42);
 1196|       |
 1197|  19.9k|    dp_packet_set_rss_hash(packet, hash);
 1198|  19.9k|}

ds_init:
   29|  6.17M|{
   30|  6.17M|    ds->string = NULL;
   31|  6.17M|    ds->length = 0;
   32|  6.17M|    ds->allocated = 0;
   33|  6.17M|}
ds_reserve:
   59|  29.3M|{
   60|  29.3M|    if (min_length > ds->allocated || !ds->string) {
  ------------------
  |  Branch (60:9): [True: 23.5M, False: 5.80M]
  |  Branch (60:39): [True: 0, False: 5.80M]
  ------------------
   61|  23.5M|        ds->allocated += MAX(min_length, ds->allocated);
  ------------------
  |  |  100|  23.5M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 23.5M, False: 0]
  |  |  ------------------
  ------------------
   62|  23.5M|        ds->allocated = MAX(8, ds->allocated);
  ------------------
  |  |  100|  23.5M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 50.1k, False: 23.4M]
  |  |  ------------------
  ------------------
   63|  23.5M|        ds->string = xrealloc(ds->string, ds->allocated + 1);
   64|  23.5M|    }
   65|  29.3M|}
ds_put_uninit:
   72|  15.1M|{
   73|  15.1M|    ds_reserve(ds, ds->length + n);
   74|  15.1M|    ds->length += n;
   75|  15.1M|    ds->string[ds->length] = '\0';
   76|  15.1M|    return &ds->string[ds->length - n];
   77|  15.1M|}
ds_put_char__:
   81|  1.20M|{
   82|  1.20M|    *ds_put_uninit(ds, 1) = c;
   83|  1.20M|}
ds_put_char_multiple:
  112|  6.87k|{
  113|  6.87k|    memset(ds_put_uninit(ds, n), c, n);
  114|  6.87k|}
ds_put_cstr:
  124|  13.9M|{
  125|  13.9M|    size_t s_len = strlen(s);
  126|  13.9M|    memcpy(ds_put_uninit(ds, s_len), s, s_len);
  127|  13.9M|}
ds_put_and_free_cstr:
  131|  14.9k|{
  132|  14.9k|    ds_put_cstr(ds, s);
  133|  14.9k|    free(s);
  134|  14.9k|}
ds_put_format:
  138|   279M|{
  139|   279M|    va_list args;
  140|       |
  141|   279M|    va_start(args, format);
  142|   279M|    ds_put_format_valist(ds, format, args);
  143|   279M|    va_end(args);
  144|   279M|}
ds_put_format_valist:
  148|   279M|{
  149|   279M|    va_list args;
  150|   279M|    size_t available;
  151|   279M|    int needed;
  152|       |
  153|   279M|    va_copy(args, args_);
  154|   279M|    available = ds->string ? ds->allocated - ds->length + 1 : 0;
  ------------------
  |  Branch (154:17): [True: 277M, False: 1.93M]
  ------------------
  155|   279M|    needed = vsnprintf(ds->string
  ------------------
  |  Branch (155:24): [True: 277M, False: 1.93M]
  ------------------
  156|   279M|                       ? &ds->string[ds->length]
  157|   279M|                       : NULL,
  158|   279M|                       available, format, args);
  159|   279M|    va_end(args);
  160|       |
  161|   279M|    if (needed < available) {
  ------------------
  |  Branch (161:9): [True: 265M, False: 14.0M]
  ------------------
  162|   265M|        ds->length += needed;
  163|   265M|    } else {
  164|  14.0M|        ds_reserve(ds, ds->length + needed);
  165|       |
  166|  14.0M|        va_copy(args, args_);
  167|  14.0M|        available = ds->allocated - ds->length + 1;
  168|  14.0M|        needed = vsnprintf(&ds->string[ds->length],
  169|  14.0M|                           available, format, args);
  170|  14.0M|        va_end(args);
  171|       |
  172|  14.0M|        ovs_assert(needed < available);
  ------------------
  |  |   58|  14.0M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  173|  14.0M|        ds->length += needed;
  174|  14.0M|    }
  175|   279M|}
ds_put_printable:
  179|  34.5k|{
  180|  34.5k|    ds_reserve(ds, ds->length + n);
  181|   612k|    while (n-- > 0) {
  ------------------
  |  Branch (181:12): [True: 577k, False: 34.5k]
  ------------------
  182|   577k|        unsigned char c = *s++;
  183|   577k|        if (c < 0x20 || c > 0x7e || c == '\\' || c == '"') {
  ------------------
  |  Branch (183:13): [True: 418k, False: 158k]
  |  Branch (183:25): [True: 83.1k, False: 75.6k]
  |  Branch (183:37): [True: 432, False: 75.2k]
  |  Branch (183:50): [True: 348, False: 74.8k]
  ------------------
  184|   502k|            ds_put_format(ds, "\\%03o", (int) c);
  185|   502k|        } else {
  186|  74.8k|            ds_put_char(ds, c);
  187|  74.8k|        }
  188|   577k|    }
  189|  34.5k|}
ds_cstr:
  329|  6.26M|{
  330|  6.26M|    if (!ds->string) {
  ------------------
  |  Branch (330:9): [True: 0, False: 6.26M]
  ------------------
  331|      0|        ds_reserve(ds, 0);
  332|      0|    }
  333|  6.26M|    ds->string[ds->length] = '\0';
  334|  6.26M|    return ds->string;
  335|  6.26M|}
ds_steal_cstr:
  348|  6.15M|{
  349|  6.15M|    char *s = ds_cstr(ds);
  350|  6.15M|    ds_init(ds);
  351|  6.15M|    return s;
  352|  6.15M|}
ds_destroy:
  356|     36|{
  357|     36|    free(ds->string);
  358|     36|}
ds_put_hex:
  371|   112k|{
  372|   112k|    const uint8_t *buf = buf_;
  373|   112k|    bool printed = false;
  374|   112k|    int i;
  375|       |
  376|  4.34M|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (376:17): [True: 4.23M, False: 112k]
  ------------------
  377|  4.23M|        uint8_t val = buf[i];
  378|  4.23M|        if (val || printed) {
  ------------------
  |  Branch (378:13): [True: 99.6k, False: 4.13M]
  |  Branch (378:20): [True: 12.4k, False: 4.11M]
  ------------------
  379|   112k|            if (!printed) {
  ------------------
  |  Branch (379:17): [True: 55.1k, False: 56.9k]
  ------------------
  380|  55.1k|                ds_put_format(ds, "0x%"PRIx8, val);
  381|  56.9k|            } else {
  382|  56.9k|                ds_put_format(ds, "%02"PRIx8, val);
  383|  56.9k|            }
  384|   112k|            printed = true;
  385|   112k|        }
  386|  4.23M|    }
  387|   112k|    if (!printed) {
  ------------------
  |  Branch (387:9): [True: 57.5k, False: 55.1k]
  ------------------
  388|  57.5k|        ds_put_char(ds, '0');
  389|  57.5k|    }
  390|   112k|}
ds_put_hex_dump:
  455|  4.53M|{
  456|  4.53M|    ds_put_hex_dump__(ds, buf_, size, ofs, ascii, false);
  457|  4.53M|}
ds_last:
  470|  78.1k|{
  471|  78.1k|    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
  ------------------
  |  Branch (471:12): [True: 78.1k, False: 0]
  ------------------
  472|  78.1k|}
ds_chomp:
  476|  2.46M|{
  477|  2.46M|    if (ds->length > 0 && ds->string[ds->length - 1] == (char) c) {
  ------------------
  |  Branch (477:9): [True: 2.46M, False: 0]
  |  Branch (477:27): [True: 545k, False: 1.91M]
  ------------------
  478|   545k|        ds->string[--ds->length] = '\0';
  479|   545k|        return true;
  480|  1.91M|    } else {
  481|  1.91M|        return false;
  482|  1.91M|    }
  483|  2.46M|}
dynamic-string.c:ds_put_hex_dump__:
  395|  4.53M|{
  396|  4.53M|    const uint8_t *buf = buf_;
  397|  4.53M|    const size_t per_line = 16; /* Maximum bytes per line. */
  398|       |
  399|  16.5M|    while (size > 0) {
  ------------------
  |  Branch (399:12): [True: 11.9M, False: 4.53M]
  ------------------
  400|  11.9M|        size_t start, end, n;
  401|  11.9M|        size_t i;
  402|       |
  403|       |        /* Number of bytes on this line. */
  404|  11.9M|        start = ofs % per_line;
  405|  11.9M|        end = per_line;
  406|  11.9M|        if (end - start > size)
  ------------------
  |  Branch (406:13): [True: 2.86M, False: 9.09M]
  ------------------
  407|  2.86M|            end = start + size;
  408|  11.9M|        n = end - start;
  409|       |
  410|  11.9M|        if (skip_zero_lines && is_all_zeros(&buf[start], n)) {
  ------------------
  |  Branch (410:13): [True: 0, False: 11.9M]
  |  Branch (410:32): [True: 0, False: 0]
  ------------------
  411|      0|            goto next;
  412|      0|        }
  413|       |
  414|       |        /* Print line. */
  415|  11.9M|        ds_put_format(ds, "%08"PRIxMAX"  ",
  416|  11.9M|                      (uintmax_t) ROUND_DOWN(ofs, per_line));
  ------------------
  |  |  305|  11.9M|#define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
  ------------------
  417|  11.9M|        for (i = 0; i < start; i++) {
  ------------------
  |  Branch (417:21): [True: 0, False: 11.9M]
  ------------------
  418|      0|            ds_put_format(ds, "   ");
  419|      0|        }
  420|   182M|        for (; i < end; i++) {
  ------------------
  |  Branch (420:16): [True: 170M, False: 11.9M]
  ------------------
  421|   170M|            ds_put_format(ds, "%02x%c",
  422|   170M|                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
  ------------------
  |  Branch (422:43): [True: 11.4M, False: 159M]
  ------------------
  423|   170M|        }
  424|  11.9M|        if (ascii) {
  ------------------
  |  Branch (424:13): [True: 11.9M, False: 0]
  ------------------
  425|  32.6M|            for (; i < per_line; i++)
  ------------------
  |  Branch (425:20): [True: 20.6M, False: 11.9M]
  ------------------
  426|  20.6M|                ds_put_format(ds, "   ");
  427|  11.9M|            ds_put_format(ds, "|");
  428|  11.9M|            for (i = 0; i < start; i++)
  ------------------
  |  Branch (428:25): [True: 0, False: 11.9M]
  ------------------
  429|      0|                ds_put_format(ds, " ");
  430|   182M|            for (; i < end; i++) {
  ------------------
  |  Branch (430:20): [True: 170M, False: 11.9M]
  ------------------
  431|   170M|                int c = buf[i - start];
  432|   170M|                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
  ------------------
  |  Branch (432:33): [True: 53.6M, False: 117M]
  |  Branch (432:44): [True: 26.2M, False: 27.4M]
  ------------------
  433|   170M|            }
  434|  32.6M|            for (; i < per_line; i++)
  ------------------
  |  Branch (434:20): [True: 20.6M, False: 11.9M]
  ------------------
  435|  20.6M|                ds_put_format(ds, " ");
  436|  11.9M|            ds_put_format(ds, "|");
  437|  11.9M|        } else {
  438|      0|            ds_chomp(ds, ' ');
  439|      0|        }
  440|  11.9M|        ds_put_format(ds, "\n");
  441|  11.9M|next:
  442|  11.9M|        ofs += n;
  443|  11.9M|        buf += n;
  444|  11.9M|        size -= n;
  445|  11.9M|    }
  446|  4.53M|}

parse_nsh:
  577|  7.55k|{
  578|  7.55k|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  579|  7.55k|    uint8_t version, length, flags, ttl;
  580|       |
  581|       |    /* Check if it is long enough for NSH header, doesn't support
  582|       |     * MD type 2 yet
  583|       |     */
  584|  7.55k|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   46|  7.55k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 46, False: 7.50k]
  |  |  ------------------
  ------------------
  585|     46|        return false;
  586|     46|    }
  587|       |
  588|  7.50k|    version = nsh_get_ver(nsh);
  589|  7.50k|    flags = nsh_get_flags(nsh);
  590|  7.50k|    length = nsh_hdr_len(nsh);
  591|  7.50k|    ttl = nsh_get_ttl(nsh);
  592|       |
  593|  7.50k|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   46|  12.0k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 2.94k, False: 4.56k]
  |  |  |  Branch (46:53): [True: 2.92k, False: 4.58k]
  |  |  |  Branch (46:53): [True: 19, False: 4.56k]
  |  |  ------------------
  ------------------
  594|  2.94k|        return false;
  595|  2.94k|    }
  596|       |
  597|  4.56k|    key->flags = flags;
  598|  4.56k|    key->ttl = ttl;
  599|  4.56k|    key->mdtype = nsh->md_type;
  600|  4.56k|    key->np = nsh->next_proto;
  601|  4.56k|    key->path_hdr = nsh_get_path_hdr(nsh);
  602|       |
  603|  4.56k|    switch (key->mdtype) {
  604|    294|        case NSH_M_TYPE1:
  ------------------
  |  |  251|    294|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (604:9): [True: 294, False: 4.26k]
  ------------------
  605|    294|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|    294|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (605:17): [True: 121, False: 173]
  ------------------
  606|    121|                return false;
  607|    121|            }
  608|    865|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (608:32): [True: 692, False: 173]
  ------------------
  609|    692|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  610|    692|            }
  611|    173|            break;
  612|     98|        case NSH_M_TYPE2:
  ------------------
  |  |  252|     98|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (612:9): [True: 98, False: 4.46k]
  ------------------
  613|       |            /* Don't support MD type 2 metedata parsing yet */
  614|     98|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|     98|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (614:17): [True: 75, False: 23]
  ------------------
  615|     75|                return false;
  616|     75|            }
  617|       |
  618|     23|            memset(key->context, 0, sizeof(key->context));
  619|     23|            break;
  620|  4.17k|        default:
  ------------------
  |  Branch (620:9): [True: 4.17k, False: 392]
  ------------------
  621|       |            /* We don't parse other context headers yet. */
  622|  4.17k|            memset(key->context, 0, sizeof(key->context));
  623|  4.17k|            break;
  624|  4.56k|    }
  625|       |
  626|  4.36k|    data_pull(datap, sizep, length);
  627|       |
  628|  4.36k|    return true;
  629|  4.56k|}
flow_extract:
  635|   114k|{
  636|   114k|    struct {
  637|   114k|        struct miniflow mf;
  638|   114k|        uint64_t buf[FLOW_U64S];
  639|   114k|    } m;
  640|       |
  641|   114k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|   114k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|   114k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  642|       |
  643|   114k|    miniflow_extract(packet, &m.mf);
  644|   114k|    miniflow_expand(&m.mf, flow);
  645|   114k|}
miniflow_extract:
  762|   114k|{
  763|       |    /* Add code to this function (or its callees) to extract new fields. */
  764|   114k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42);
  ------------------
  |  |  269|   114k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  765|       |
  766|   114k|    const struct pkt_metadata *md = &packet->md;
  767|   114k|    const void *data = dp_packet_data(packet);
  768|   114k|    size_t size = dp_packet_size(packet);
  769|   114k|    ovs_be32 packet_type = packet->packet_type;
  770|   114k|    uint64_t *values = miniflow_values(dst);
  771|   114k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  285|   114k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  772|   114k|                         values + FLOW_U64S };
  ------------------
  |  |  165|   114k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  773|   114k|    const char *frame;
  774|   114k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|   114k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  775|   114k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  776|   114k|    uint8_t *ct_nw_proto_p = NULL;
  777|   114k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  778|       |
  779|       |    /* Metadata. */
  780|   114k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (780:9): [True: 0, False: 114k]
  ------------------
  781|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  782|      0|                            offsetof(struct flow_tnl, metadata) /
  783|      0|                            sizeof(uint64_t));
  784|       |
  785|      0|        if (!(md->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (785:13): [True: 0, False: 0]
  ------------------
  786|      0|            if (md->tunnel.metadata.present.map) {
  ------------------
  |  Branch (786:17): [True: 0, False: 0]
  ------------------
  787|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  788|      0|                                    sizeof md->tunnel.metadata /
  789|      0|                                    sizeof(uint64_t));
  790|      0|            }
  791|      0|        } else {
  792|      0|            if (md->tunnel.metadata.present.len) {
  ------------------
  |  Branch (792:17): [True: 0, False: 0]
  ------------------
  793|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  794|      0|                                    &md->tunnel.metadata.present, 1);
  795|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  796|      0|                                    md->tunnel.metadata.opts.gnv,
  797|      0|                                    DIV_ROUND_UP(md->tunnel.metadata.present.len,
  798|      0|                                                 sizeof(uint64_t)));
  799|      0|            }
  800|      0|        }
  801|      0|    }
  802|   114k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (802:9): [True: 0, False: 114k]
  |  Branch (802:29): [True: 0, False: 114k]
  ------------------
  803|      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): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  804|      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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  805|      0|    }
  806|   114k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|   114k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|   114k|    {                                           \
  |  |  |  |  180|   114k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|   114k|                                                \
  |  |  |  |  182|   114k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  183|   114k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|   114k|    {                                        \
  |  |  |  |  |  |  160|   114k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   114k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   114k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   114k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   114k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   229k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|   114k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|   229k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|   229k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 114k, False: 114k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   114k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   114k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   114k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|   114k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|   114k|}
  |  |  |  |  ------------------
  |  |  |  |  184|   114k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|   114k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|   114k|}
  |  |  ------------------
  ------------------
  807|   114k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|   114k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|   114k|    {                                           \
  |  |  |  |  180|   114k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|   114k|                                                \
  |  |  |  |  182|   114k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|   114k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  186|   114k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|   114k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|   114k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   114k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   114k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   114k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   114k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   229k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|   114k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|   229k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|   229k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 114k, False: 114k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   114k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   114k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   114k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   114k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|   114k|        MF.data++;                              \
  |  |  |  |  189|   114k|    }                                           \
  |  |  |  |  190|   114k|}
  |  |  ------------------
  ------------------
  808|   114k|    if (md->ct_state) {
  ------------------
  |  Branch (808:9): [True: 0, False: 114k]
  ------------------
  809|      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): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  810|      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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  811|      0|        ct_nw_proto_p = miniflow_pointer(mf, ct_nw_proto);
  ------------------
  |  |  329|      0|    (void *)((uint8_t *)MF.data + ((offsetof(struct flow, FIELD)) % 8))
  ------------------
  812|      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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  813|      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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  814|      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): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  815|      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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  816|      0|        if (!ovs_u128_is_zero(md->ct_label)) {
  ------------------
  |  Branch (816:13): [True: 0, False: 0]
  ------------------
  817|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  818|      0|                                sizeof md->ct_label / sizeof(uint64_t));
  819|      0|        }
  820|   114k|    } else {
  821|   114k|        if (md->recirc_id) {
  ------------------
  |  Branch (821:13): [True: 0, False: 114k]
  ------------------
  822|      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): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  823|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  824|      0|        }
  825|   114k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|   114k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|   114k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|   114k|{                                                               \
  |  |  |  |  243|   114k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|   114k|                                                                \
  |  |  |  |  245|   114k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|   114k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|   114k|    {                                        \
  |  |  |  |  |  |  160|   114k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|   114k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|   114k|{                                                                       \
  |  |  |  |  |  |  |  |  151|   114k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|   114k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   229k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|   114k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|   229k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|   229k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 114k, False: 114k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|   114k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|   114k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|   114k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|   114k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|   114k|}
  |  |  |  |  ------------------
  |  |  |  |  247|   114k|                                                                \
  |  |  |  |  248|   114k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|   114k|}
  |  |  ------------------
  ------------------
  826|   114k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|   114k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|   114k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|   114k|    {                                           \
  |  |  |  |  |  |  180|   114k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|   114k|                                                \
  |  |  |  |  |  |  182|   114k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|   114k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|   114k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|   114k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|   114k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|   114k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|   114k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|   114k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|   114k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|   229k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|   114k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|   229k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|   229k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 114k, False: 114k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|   114k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|   114k|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|   114k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|   114k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|   114k|        MF.data++;                              \
  |  |  |  |  |  |  189|   114k|    }                                           \
  |  |  |  |  |  |  190|   114k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  827|   114k|    }
  828|       |
  829|       |    /* Initialize packet's layer pointer and offsets. */
  830|   114k|    frame = data;
  831|   114k|    dp_packet_reset_offsets(packet);
  832|       |
  833|   114k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (833:9): [True: 106k, False: 8.12k]
  ------------------
  834|       |        /* Must have full Ethernet header to proceed. */
  835|   106k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   46|   106k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 45.2k, False: 61.4k]
  |  |  ------------------
  ------------------
  836|  45.2k|            goto out;
  837|  61.4k|        } else {
  838|       |            /* Link layer. */
  839|  61.4k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  61.4k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  269|  61.4k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  61.4k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  61.4k|                      == offsetof(struct flow, f1))
  ------------------
  840|  61.4k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  61.4k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  61.4k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  61.4k|{                                                               \
  |  |  |  |  291|  61.4k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  61.4k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  61.4k|{                                                               \
  |  |  |  |  |  |  259|  61.4k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  61.4k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  61.4k|                                                                \
  |  |  |  |  |  |  262|  61.4k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  61.4k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  61.4k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  61.4k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  61.4k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  61.4k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   122k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  61.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|   122k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|   122k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 61.4k, False: 61.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  61.4k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  61.4k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  61.4k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  61.4k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  61.4k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  61.4k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  61.4k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  61.4k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  61.4k|}
  |  |  ------------------
  ------------------
  841|       |
  842|       |            /* VLAN */
  843|  61.4k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  844|  61.4k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  845|       |
  846|  61.4k|            dl_type = parse_ethertype(&data, &size);
  847|  61.4k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  61.4k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  61.4k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  61.4k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  61.4k|{                                               \
  |  |  |  |  |  |  197|  61.4k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  61.4k|                                                \
  |  |  |  |  |  |  199|  61.4k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  61.4k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  61.4k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  61.4k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  61.4k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  61.4k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  61.4k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  61.4k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  61.4k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  61.4k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|   122k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  61.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|   122k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|   122k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 61.4k, False: 61.4k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|  61.4k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|  61.4k|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  61.4k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  61.4k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  61.4k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  61.4k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  848|  61.4k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  61.4k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  61.4k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  61.4k|{                                                               \
  |  |  |  |  234|  61.4k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  61.4k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  61.4k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  61.4k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  61.4k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  61.4k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  61.4k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  61.4k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|   122k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  61.4k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|   122k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|   122k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 61.4k, False: 61.4k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  61.4k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  61.4k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  61.4k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  61.4k|                                                                \
  |  |  |  |  237|  61.4k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  61.4k|    MF.data++;                                                  \
  |  |  |  |  239|  61.4k|}
  |  |  ------------------
  ------------------
  849|  61.4k|            if (num_vlans > 0) {
  ------------------
  |  Branch (849:17): [True: 456, False: 61.0k]
  ------------------
  850|    456|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|    456|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    456|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    456|{                                                                       \
  |  |  |  |  279|    456|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    456|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    456|{                                                               \
  |  |  |  |  |  |  259|    456|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    456|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    456|                                                                \
  |  |  |  |  |  |  262|    456|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    456|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    456|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    456|{                                                                       \
  |  |  |  |  |  |  |  |  151|    456|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    456|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    912|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|    456|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|    912|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|    912|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 456, False: 456]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|    456|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|    456|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    456|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    456|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    456|}
  |  |  |  |  ------------------
  |  |  |  |  280|    456|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    456|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|    456|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    456|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 188, False: 268]
  |  |  |  |  ------------------
  |  |  |  |  283|    188|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    188|    }                                                                   \
  |  |  |  |  285|    456|}
  |  |  ------------------
  ------------------
  851|    456|            }
  852|       |
  853|  61.4k|        }
  854|   106k|    } else {
  855|       |        /* Take dl_type from packet_type. */
  856|  8.12k|        dl_type = pt_ns_type_be(packet_type);
  857|  8.12k|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|  8.12k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  8.12k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  8.12k|{                                                               \
  |  |  |  |  243|  8.12k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  8.12k|                                                                \
  |  |  |  |  245|  8.12k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  8.12k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  8.12k|    {                                        \
  |  |  |  |  |  |  160|  8.12k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  8.12k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  8.12k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  8.12k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  8.12k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.2k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  8.12k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  16.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  16.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 8.12k, False: 8.12k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  8.12k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  8.12k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  8.12k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  8.12k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  8.12k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  8.12k|                                                                \
  |  |  |  |  248|  8.12k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  8.12k|}
  |  |  ------------------
  ------------------
  858|  8.12k|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  8.12k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  8.12k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  8.12k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  8.12k|{                                               \
  |  |  |  |  |  |  197|  8.12k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  8.12k|                                                \
  |  |  |  |  |  |  199|  8.12k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  8.12k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  8.12k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  8.12k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  8.12k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  8.12k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.12k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.12k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.12k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.12k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  16.2k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  8.12k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  16.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  16.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 8.12k, False: 8.12k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|  8.12k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|  8.12k|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.12k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  8.12k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  8.12k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  8.12k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|       |        /* Do not push vlan_tci, pad instead */
  860|  8.12k|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  8.12k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  8.12k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  8.12k|{                                                               \
  |  |  |  |  234|  8.12k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  8.12k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  8.12k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  8.12k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  8.12k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  8.12k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  8.12k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  8.12k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  16.2k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  8.12k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  16.2k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  16.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 8.12k, False: 8.12k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  8.12k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  8.12k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  8.12k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  8.12k|                                                                \
  |  |  |  |  237|  8.12k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  8.12k|    MF.data++;                                                  \
  |  |  |  |  239|  8.12k|}
  |  |  ------------------
  ------------------
  861|  8.12k|    }
  862|       |
  863|       |    /* Parse mpls. */
  864|  69.5k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   46|  69.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 761, False: 68.8k]
  |  |  ------------------
  ------------------
  865|    761|        int count;
  866|    761|        const void *mpls = data;
  867|       |
  868|    761|        packet->l2_5_ofs = (char *)data - frame;
  869|    761|        count = parse_mpls(&data, &size);
  870|    761|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|    761|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    761|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    761|{                                                                       \
  |  |  |  |  279|    761|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    761|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    761|{                                                               \
  |  |  |  |  |  |  259|    761|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    761|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    761|                                                                \
  |  |  |  |  |  |  262|    761|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    761|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    761|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    761|{                                                                       \
  |  |  |  |  |  |  |  |  151|    761|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    761|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.52k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|    761|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  1.52k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.52k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 761, False: 761]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|    761|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|    761|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    761|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    761|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    761|}
  |  |  |  |  ------------------
  |  |  |  |  280|    761|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    761|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|    761|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    761|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 236, False: 525]
  |  |  |  |  ------------------
  |  |  |  |  283|    236|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    236|    }                                                                   \
  |  |  |  |  285|    761|}
  |  |  ------------------
  ------------------
  871|    761|    }
  872|       |
  873|       |    /* Network layer. */
  874|  69.5k|    packet->l3_ofs = (char *)data - frame;
  875|       |
  876|  69.5k|    nw_frag = 0;
  877|  69.5k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   45|  69.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 10.8k, False: 58.7k]
  |  |  ------------------
  ------------------
  878|  10.8k|        const struct ip_header *nh = data;
  879|  10.8k|        int ip_len;
  880|  10.8k|        uint16_t tot_len;
  881|       |
  882|  10.8k|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   46|  10.8k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 1.88k, False: 8.97k]
  |  |  ------------------
  ------------------
  883|  1.88k|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   46|  1.88k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 1.88k]
  |  |  ------------------
  ------------------
  884|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  885|      0|            }
  886|  1.88k|            goto out;
  887|  1.88k|        }
  888|  8.97k|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  889|  8.97k|        size = tot_len;   /* Never pull padding. */
  890|       |
  891|       |        /* Push both source and destination address at once. */
  892|  8.97k|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|  8.97k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  8.97k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  8.97k|{                                                               \
  |  |  |  |  270|  8.97k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  8.97k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  8.97k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  8.97k|{                                                               \
  |  |  |  |  |  |  259|  8.97k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  8.97k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  8.97k|                                                                \
  |  |  |  |  |  |  262|  8.97k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  8.97k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  8.97k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  8.97k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  8.97k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  8.97k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  8.97k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  8.97k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  8.97k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  8.97k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.97k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  8.97k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  8.97k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  8.97k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  8.97k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  8.97k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  8.97k|}
  |  |  ------------------
  ------------------
  893|  8.97k|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (893:13): [True: 0, False: 8.97k]
  |  Branch (893:30): [True: 0, False: 0]
  ------------------
  894|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv4.ipv4_proto;
  895|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (895:17): [True: 0, False: 0]
  ------------------
  896|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  897|      0|                                    &md->ct_orig_tuple.ipv4.ipv4_src, 1);
  898|      0|                ct_tp_src = md->ct_orig_tuple.ipv4.src_port;
  899|      0|                ct_tp_dst = md->ct_orig_tuple.ipv4.dst_port;
  900|      0|            }
  901|      0|        }
  902|       |
  903|  8.97k|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|  8.97k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  8.97k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  8.97k|    {                                           \
  |  |  |  |  |  |  180|  8.97k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  8.97k|                                                \
  |  |  |  |  |  |  182|  8.97k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  8.97k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  8.97k|    {                                        \
  |  |  |  |  |  |  |  |  160|  8.97k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.97k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.97k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.97k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.97k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.97k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  8.97k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  8.97k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  8.97k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.97k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.97k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  8.97k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  8.97k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  8.97k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  8.97k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  8.97k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  904|       |
  905|  8.97k|        nw_tos = nh->ip_tos;
  906|  8.97k|        nw_ttl = nh->ip_ttl;
  907|  8.97k|        nw_proto = nh->ip_proto;
  908|  8.97k|        nw_frag = ipv4_get_nw_frag(nh);
  909|  8.97k|        data_pull(&data, &size, ip_len);
  910|  58.7k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (910:16): [True: 37.5k, False: 21.1k]
  ------------------
  911|  37.5k|        const struct ovs_16aligned_ip6_hdr *nh = data;
  912|  37.5k|        ovs_be32 tc_flow;
  913|  37.5k|        uint16_t plen;
  914|       |
  915|  37.5k|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   46|  37.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 1.97k, False: 35.6k]
  |  |  ------------------
  ------------------
  916|  1.97k|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   46|  1.97k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 1.97k]
  |  |  ------------------
  ------------------
  917|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  918|      0|            }
  919|  1.97k|            goto out;
  920|  1.97k|        }
  921|  35.6k|        data_pull(&data, &size, sizeof *nh);
  922|       |
  923|  35.6k|        plen = ntohs(nh->ip6_plen);
  924|  35.6k|        dp_packet_set_l2_pad_size(packet, size - plen);
  925|  35.6k|        size = plen;   /* Never pull padding. */
  926|       |
  927|  35.6k|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|  35.6k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  35.6k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  35.6k|{                                                               \
  |  |  |  |  270|  35.6k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  35.6k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  35.6k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  35.6k|{                                                               \
  |  |  |  |  |  |  259|  35.6k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  35.6k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  35.6k|                                                                \
  |  |  |  |  |  |  262|  35.6k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  35.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  35.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  35.6k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  35.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  35.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  35.6k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  35.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  35.6k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  35.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 35.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  35.6k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  35.6k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  35.6k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  35.6k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  35.6k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  35.6k|}
  |  |  ------------------
  ------------------
  928|  35.6k|                            sizeof nh->ip6_src / 8);
  929|  35.6k|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|  35.6k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  35.6k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  35.6k|{                                                               \
  |  |  |  |  270|  35.6k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  35.6k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  35.6k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  35.6k|{                                                               \
  |  |  |  |  |  |  259|  35.6k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  35.6k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  35.6k|                                                                \
  |  |  |  |  |  |  262|  35.6k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  35.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  35.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  35.6k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  35.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  35.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  35.6k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  35.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  35.6k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  35.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 35.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  35.6k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  35.6k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  35.6k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  35.6k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  35.6k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  35.6k|}
  |  |  ------------------
  ------------------
  930|  35.6k|                            sizeof nh->ip6_dst / 8);
  931|  35.6k|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (931:13): [True: 0, False: 35.6k]
  |  Branch (931:30): [True: 0, False: 0]
  ------------------
  932|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv6.ipv6_proto;
  933|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (933:17): [True: 0, False: 0]
  ------------------
  934|      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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|}
  |  |  ------------------
  ------------------
  935|      0|                                    &md->ct_orig_tuple.ipv6.ipv6_src,
  936|      0|                                    2 *
  937|      0|                                    sizeof md->ct_orig_tuple.ipv6.ipv6_src / 8);
  938|      0|                ct_tp_src = md->ct_orig_tuple.ipv6.src_port;
  939|      0|                ct_tp_dst = md->ct_orig_tuple.ipv6.dst_port;
  940|      0|            }
  941|      0|        }
  942|       |
  943|  35.6k|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  944|  35.6k|        nw_tos = ntohl(tc_flow) >> 20;
  945|  35.6k|        nw_ttl = nh->ip6_hlim;
  946|  35.6k|        nw_proto = nh->ip6_nxt;
  947|       |
  948|  35.6k|        const struct ovs_16aligned_ip6_frag *frag_hdr;
  949|  35.6k|        if (!parse_ipv6_ext_hdrs__(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (949:13): [True: 2.22k, False: 33.3k]
  ------------------
  950|  35.6k|                                   &frag_hdr)) {
  951|  2.22k|            goto out;
  952|  2.22k|        }
  953|       |
  954|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  955|       |         * leaves the nw_frag word uninitialized. */
  956|  33.3k|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|  33.3k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  269|  33.3k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  33.3k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  33.3k|                      == offsetof(struct flow, f1))
  ------------------
  957|  33.3k|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  958|  33.3k|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|  33.3k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  33.3k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  33.3k|    {                                           \
  |  |  |  |  |  |  180|  33.3k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  33.3k|                                                \
  |  |  |  |  |  |  182|  33.3k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  33.3k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  33.3k|    {                                        \
  |  |  |  |  |  |  |  |  160|  33.3k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  33.3k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  33.3k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  33.3k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  33.3k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  33.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  33.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  33.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  33.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 33.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  33.3k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  33.3k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  33.3k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  33.3k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  33.3k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  33.3k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  959|  33.3k|    } else {
  960|  21.1k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (960:13): [True: 826, False: 20.3k]
  ------------------
  961|  21.1k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (961:13): [True: 196, False: 20.1k]
  ------------------
  962|  1.02k|            struct eth_addr arp_buf[2];
  963|  1.02k|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
  964|  1.02k|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  940|  1.02k|#define ARP_ETH_HEADER_LEN 28
  ------------------
  965|       |
  966|  1.02k|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   45|  2.04k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 443, False: 579]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   45|  1.46k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 157, False: 286]
  |  |  ------------------
  ------------------
  967|  1.02k|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   45|  1.17k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 139, False: 18]
  |  |  ------------------
  ------------------
  968|  1.02k|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   45|  1.16k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 120, False: 19]
  |  |  ------------------
  ------------------
  969|  1.02k|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   45|    120|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 20, False: 100]
  |  |  ------------------
  ------------------
  970|     20|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|     20|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     20|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     20|    {                                           \
  |  |  |  |  |  |  180|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     20|                                                \
  |  |  |  |  |  |  182|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|     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|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     20|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     20|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  971|     20|                                   get_16aligned_be32(&arp->ar_spa));
  972|     20|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|     20|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     20|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     20|    {                                           \
  |  |  |  |  |  |  180|     20|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     20|                                                \
  |  |  |  |  |  |  182|     20|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|     20|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|     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|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     20|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     20|        MF.data++;                              \
  |  |  |  |  |  |  189|     20|    }                                           \
  |  |  |  |  |  |  190|     20|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|     20|                                   get_16aligned_be32(&arp->ar_tpa));
  974|       |
  975|       |                /* We only match on the lower 8 bits of the opcode. */
  976|     20|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   45|     20|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 10, False: 10]
  |  |  ------------------
  ------------------
  977|     10|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|     10|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     10|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     10|    {                                           \
  |  |  |  |  |  |  180|     10|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     10|                                                \
  |  |  |  |  |  |  182|     10|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     10|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     10|    {                                        \
  |  |  |  |  |  |  |  |  160|     10|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     10|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     10|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     10|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     10|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     10|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|     10|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|     10|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|     10|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     10|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     10|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     10|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     10|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     10|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|     10|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  978|     10|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|     10|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     10|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     10|    {                                           \
  |  |  |  |  |  |  180|     10|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     10|                                                \
  |  |  |  |  |  |  182|     10|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|     10|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     10|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     10|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     10|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     10|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     10|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     10|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     10|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     10|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|     10|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|     10|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|     10|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 10]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     10|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     10|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     10|        MF.data++;                              \
  |  |  |  |  |  |  189|     10|    }                                           \
  |  |  |  |  |  |  190|     10|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  979|     10|                }
  980|       |
  981|       |                /* Must be adjacent. */
  982|     20|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|     20|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  269|     20|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|     20|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|     20|                      == offsetof(struct flow, f1))
  ------------------
  983|       |
  984|     20|                arp_buf[0] = arp->ar_sha;
  985|     20|                arp_buf[1] = arp->ar_tha;
  986|     20|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|     20|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|     20|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|     20|{                                                               \
  |  |  |  |  291|     20|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|     20|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|     20|{                                                               \
  |  |  |  |  |  |  259|     20|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|     20|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|     20|                                                                \
  |  |  |  |  |  |  262|     20|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|     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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|     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|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|     20|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|     20|}
  |  |  |  |  ------------------
  |  |  |  |  292|     20|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|     20|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|     20|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|     20|}
  |  |  ------------------
  ------------------
  987|     20|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|     20|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|     20|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|     20|{                                                               \
  |  |  |  |  234|     20|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|     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++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|     20|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|     20|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|     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|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|     20|                                                                \
  |  |  |  |  237|     20|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|     20|    MF.data++;                                                  \
  |  |  |  |  239|     20|}
  |  |  ------------------
  ------------------
  988|     20|            }
  989|  20.1k|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (989:20): [True: 7.55k, False: 12.5k]
  ------------------
  990|  7.55k|            struct ovs_key_nsh nsh;
  991|       |
  992|  7.55k|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   45|  7.55k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 4.36k, False: 3.18k]
  |  |  ------------------
  ------------------
  993|  4.36k|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|  4.36k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  4.36k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  4.36k|{                                                               \
  |  |  |  |  270|  4.36k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  4.36k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  4.36k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  4.36k|{                                                               \
  |  |  |  |  |  |  259|  4.36k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  4.36k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  4.36k|                                                                \
  |  |  |  |  |  |  262|  4.36k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  4.36k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  4.36k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  4.36k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  4.36k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  4.36k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.36k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  4.36k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  4.36k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  4.36k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.36k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  4.36k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  4.36k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  4.36k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  4.36k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  4.36k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  4.36k|}
  |  |  ------------------
  ------------------
  994|  4.36k|                                    sizeof(struct ovs_key_nsh) /
  995|  4.36k|                                    sizeof(uint64_t));
  996|  4.36k|            }
  997|  7.55k|        }
  998|  21.1k|        goto out;
  999|  21.1k|    }
 1000|       |
 1001|  42.3k|    packet->l4_ofs = (char *)data - frame;
 1002|  42.3k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  42.3k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  42.3k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  42.3k|    {                                           \
  |  |  |  |  |  |  180|  42.3k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  42.3k|                                                \
  |  |  |  |  |  |  182|  42.3k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  42.3k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  42.3k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  42.3k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  42.3k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  42.3k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  42.3k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  42.3k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  42.3k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  42.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  42.3k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  42.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  42.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 42.3k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  42.3k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  42.3k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  42.3k|        MF.data++;                              \
  |  |  |  |  |  |  189|  42.3k|    }                                           \
  |  |  |  |  |  |  190|  42.3k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1003|  42.3k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1004|       |
 1005|  42.3k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   45|  42.3k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 41.7k, False: 629]
  |  |  ------------------
  ------------------
 1006|  41.7k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   45|  41.7k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 14.1k, False: 27.5k]
  |  |  ------------------
  ------------------
 1007|  14.1k|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   45|  14.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 14.1k, False: 76]
  |  |  ------------------
  ------------------
 1008|  14.1k|                const struct tcp_header *tcp = data;
 1009|  14.1k|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  889|  14.1k|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1010|       |
 1011|  14.1k|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   45|  28.2k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 13.5k, False: 596]
  |  |  ------------------
  ------------------
 1012|  14.1k|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   45|  13.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 13.5k, False: 21]
  |  |  ------------------
  ------------------
 1013|  13.5k|                    miniflow_push_be32(mf, arp_tha.ea[2], 0);
  ------------------
  |  |  300|  13.5k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  13.5k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  13.5k|    {                                           \
  |  |  |  |  |  |  180|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  13.5k|                                                \
  |  |  |  |  |  |  182|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  13.5k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  13.5k|    {                                        \
  |  |  |  |  |  |  |  |  160|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  13.5k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  13.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  13.5k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|  13.5k|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|  13.5k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  13.5k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  13.5k|    {                                           \
  |  |  |  |  |  |  180|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  13.5k|                                                \
  |  |  |  |  |  |  182|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  13.5k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  13.5k|        MF.data++;                              \
  |  |  |  |  |  |  189|  13.5k|    }                                           \
  |  |  |  |  |  |  190|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1015|  13.5k|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1016|  13.5k|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  13.5k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  13.5k|    {                                        \
  |  |  |  |  |  |  |  |  160|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  13.5k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  13.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  13.5k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|  13.5k|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  13.5k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1018|  13.5k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  13.5k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  13.5k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1019|  13.5k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  13.5k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  13.5k|        MF.data++;                              \
  |  |  |  |  |  |  212|  13.5k|    }                                           \
  |  |  |  |  |  |  213|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1020|  13.5k|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1020:25): [True: 2.46k, False: 11.0k]
  ------------------
 1021|  2.46k|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1022|  11.0k|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1022:32): [True: 11.0k, False: 0]
  ------------------
 1023|  11.0k|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1024|  11.0k|                    }
 1025|  13.5k|                }
 1026|  14.1k|            }
 1027|  27.5k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   45|  27.5k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 13.6k, False: 13.8k]
  |  |  ------------------
  ------------------
 1028|  13.6k|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   45|  13.6k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 13.5k, False: 137]
  |  |  ------------------
  ------------------
 1029|  13.5k|                const struct udp_header *udp = data;
 1030|       |
 1031|  13.5k|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  13.5k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  13.5k|    {                                        \
  |  |  |  |  |  |  |  |  160|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  13.5k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  13.5k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  13.5k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1032|  13.5k|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  13.5k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1033|  13.5k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  13.5k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  13.5k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1034|  13.5k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  13.5k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  13.5k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  13.5k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  13.5k|{                                               \
  |  |  |  |  |  |  197|  13.5k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  13.5k|                                                \
  |  |  |  |  |  |  199|  13.5k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  13.5k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  13.5k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  13.5k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  13.5k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  13.5k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  13.5k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  13.5k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  13.5k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  13.5k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  13.5k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  13.5k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  13.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 13.5k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  13.5k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  13.5k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  13.5k|        MF.data++;                              \
  |  |  |  |  |  |  212|  13.5k|    }                                           \
  |  |  |  |  |  |  213|  13.5k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1035|  13.5k|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1035:21): [True: 4.59k, False: 8.92k]
  ------------------
 1036|  4.59k|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1037|  8.92k|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1037:28): [True: 8.92k, False: 0]
  ------------------
 1038|  8.92k|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1039|  8.92k|                }
 1040|  13.5k|            }
 1041|  13.8k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   45|  13.8k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 833, False: 13.0k]
  |  |  ------------------
  ------------------
 1042|    833|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   45|    833|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 821, False: 12]
  |  |  ------------------
  ------------------
 1043|    821|                const struct sctp_header *sctp = data;
 1044|       |
 1045|    821|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|    821|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    821|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    821|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    821|{                                               \
  |  |  |  |  |  |  197|    821|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    821|                                                \
  |  |  |  |  |  |  199|    821|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    821|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    821|    {                                        \
  |  |  |  |  |  |  |  |  160|    821|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    821|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    821|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    821|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    821|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    821|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|    821|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|    821|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|    821|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 821]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    821|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    821|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    821|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    821|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    821|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1046|    821|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|    821|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    821|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    821|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    821|{                                               \
  |  |  |  |  |  |  197|    821|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    821|                                                \
  |  |  |  |  |  |  199|    821|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    821|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    821|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    821|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    821|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    821|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    821|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    821|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    821|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|    821|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|    821|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|    821|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 821]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    821|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    821|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    821|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1047|    821|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    821|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    821|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    821|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    821|{                                               \
  |  |  |  |  |  |  197|    821|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    821|                                                \
  |  |  |  |  |  |  199|    821|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    821|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    821|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    821|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    821|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    821|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    821|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    821|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    821|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|    821|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|    821|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|    821|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 821]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    821|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    821|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    821|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1048|    821|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    821|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    821|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    821|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    821|{                                               \
  |  |  |  |  |  |  197|    821|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    821|                                                \
  |  |  |  |  |  |  199|    821|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|    821|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    821|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    821|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    821|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    821|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    821|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    821|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    821|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    821|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|    821|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|    821|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|    821|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 821]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    821|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    821|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    821|        MF.data++;                              \
  |  |  |  |  |  |  212|    821|    }                                           \
  |  |  |  |  |  |  213|    821|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1049|    821|            }
 1050|  13.0k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   45|  13.0k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 5.19k, False: 7.86k]
  |  |  ------------------
  ------------------
 1051|  5.19k|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   45|  5.19k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 4.67k, False: 525]
  |  |  ------------------
  ------------------
 1052|  4.67k|                const struct icmp_header *icmp = data;
 1053|       |
 1054|  4.67k|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|  4.67k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.67k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.67k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.67k|{                                               \
  |  |  |  |  |  |  197|  4.67k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.67k|                                                \
  |  |  |  |  |  |  199|  4.67k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  4.67k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  4.67k|    {                                        \
  |  |  |  |  |  |  |  |  160|  4.67k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.67k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.67k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.67k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.67k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.67k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  4.67k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  4.67k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  4.67k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.67k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.67k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  4.67k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  4.67k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  4.67k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.67k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1055|  4.67k|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|  4.67k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.67k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.67k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.67k|{                                               \
  |  |  |  |  |  |  197|  4.67k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.67k|                                                \
  |  |  |  |  |  |  199|  4.67k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  4.67k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.67k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.67k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.67k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.67k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.67k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.67k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.67k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  4.67k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  4.67k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  4.67k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.67k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.67k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  4.67k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  4.67k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|  4.67k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  4.67k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.67k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.67k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.67k|{                                               \
  |  |  |  |  |  |  197|  4.67k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.67k|                                                \
  |  |  |  |  |  |  199|  4.67k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  4.67k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.67k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.67k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.67k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.67k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.67k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.67k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.67k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  4.67k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  4.67k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  4.67k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.67k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.67k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  4.67k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  4.67k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  4.67k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  4.67k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.67k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.67k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.67k|{                                               \
  |  |  |  |  |  |  197|  4.67k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.67k|                                                \
  |  |  |  |  |  |  199|  4.67k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  4.67k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  4.67k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.67k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.67k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.67k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.67k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.67k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.67k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.67k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  4.67k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  4.67k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  4.67k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.67k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.67k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  4.67k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  4.67k|        MF.data++;                              \
  |  |  |  |  |  |  212|  4.67k|    }                                           \
  |  |  |  |  |  |  213|  4.67k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|  4.67k|            }
 1059|  7.86k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   45|  7.86k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 2.60k, False: 5.26k]
  |  |  ------------------
  ------------------
 1060|  2.60k|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   45|  2.60k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 1.79k, False: 805]
  |  |  ------------------
  ------------------
 1061|  1.79k|                const struct igmp_header *igmp = data;
 1062|       |
 1063|  1.79k|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|  1.79k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.79k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.79k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.79k|{                                               \
  |  |  |  |  |  |  197|  1.79k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.79k|                                                \
  |  |  |  |  |  |  199|  1.79k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  1.79k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.79k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.79k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.79k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  1.79k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.79k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.79k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1064|  1.79k|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|  1.79k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.79k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.79k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.79k|{                                               \
  |  |  |  |  |  |  197|  1.79k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.79k|                                                \
  |  |  |  |  |  |  199|  1.79k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.79k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.79k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.79k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.79k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.79k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.79k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|  1.79k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  1.79k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.79k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.79k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.79k|{                                               \
  |  |  |  |  |  |  197|  1.79k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.79k|                                                \
  |  |  |  |  |  |  199|  1.79k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.79k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.79k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  1.79k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.79k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  1.79k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.79k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.79k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1066|  1.79k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  1.79k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.79k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.79k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.79k|{                                               \
  |  |  |  |  |  |  197|  1.79k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.79k|                                                \
  |  |  |  |  |  |  199|  1.79k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.79k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.79k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  1.79k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  1.79k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.79k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.79k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  1.79k|        MF.data++;                              \
  |  |  |  |  |  |  212|  1.79k|    }                                           \
  |  |  |  |  |  |  213|  1.79k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1067|  1.79k|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|  1.79k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.79k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.79k|    {                                           \
  |  |  |  |  |  |  180|  1.79k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.79k|                                                \
  |  |  |  |  |  |  182|  1.79k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  1.79k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.79k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.79k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.79k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  1.79k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  1.79k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  1.79k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1068|  1.79k|                                   get_16aligned_be32(&igmp->group));
 1069|  1.79k|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  1.79k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  1.79k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  1.79k|{                                                               \
  |  |  |  |  234|  1.79k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  1.79k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  1.79k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  1.79k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.79k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.79k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.79k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.79k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.79k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  1.79k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  1.79k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.79k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.79k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.79k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  1.79k|                                                                \
  |  |  |  |  237|  1.79k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  1.79k|    MF.data++;                                                  \
  |  |  |  |  239|  1.79k|}
  |  |  ------------------
  ------------------
 1070|  1.79k|            }
 1071|  5.26k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   45|  5.26k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 4.68k, False: 572]
  |  |  ------------------
  ------------------
 1072|  4.68k|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   45|  4.68k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 4.60k, False: 88]
  |  |  ------------------
  ------------------
 1073|  4.60k|                const struct in6_addr *nd_target;
 1074|  4.60k|                struct eth_addr arp_buf[2];
 1075|       |                /* This will populate whether we received Option 1
 1076|       |                 * or Option 2. */
 1077|  4.60k|                uint8_t opt_type;
 1078|       |                /* This holds the ND Reserved field. */
 1079|  4.60k|                ovs_be32 rso_flags;
 1080|  4.60k|                const struct icmp6_data_header *icmp6;
 1081|       |
 1082|  4.60k|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1083|  4.60k|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1083:21): [True: 3.26k, False: 1.33k]
  ------------------
 1084|  4.60k|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1085|  3.26k|                    if (nd_target) {
  ------------------
  |  Branch (1085:25): [True: 2.25k, False: 1.00k]
  ------------------
 1086|  2.25k|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|  2.25k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  2.25k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  2.25k|{                                                               \
  |  |  |  |  270|  2.25k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  2.25k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  2.25k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  2.25k|{                                                               \
  |  |  |  |  |  |  259|  2.25k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  2.25k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  2.25k|                                                                \
  |  |  |  |  |  |  262|  2.25k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  2.25k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.25k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.25k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.25k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.25k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.25k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  2.25k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  2.25k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  2.25k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.25k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.25k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  2.25k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  2.25k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  2.25k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  2.25k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  2.25k|}
  |  |  ------------------
  ------------------
 1087|  2.25k|                                            sizeof *nd_target / sizeof(uint64_t));
 1088|  2.25k|                    }
 1089|  3.26k|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|  3.26k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  3.26k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  3.26k|{                                                               \
  |  |  |  |  291|  3.26k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  3.26k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  3.26k|{                                                               \
  |  |  |  |  |  |  259|  3.26k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  3.26k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  3.26k|                                                                \
  |  |  |  |  |  |  262|  3.26k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  3.26k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  3.26k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  3.26k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  3.26k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  3.26k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  3.26k|}
  |  |  ------------------
  ------------------
 1090|       |                    /* Populate options field and set the padding
 1091|       |                     * accordingly. */
 1092|  3.26k|                    if (opt_type != 0) {
  ------------------
  |  Branch (1092:25): [True: 2.08k, False: 1.18k]
  ------------------
 1093|  2.08k|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|  2.08k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  2.08k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  2.08k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  2.08k|{                                               \
  |  |  |  |  |  |  197|  2.08k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  2.08k|                                                \
  |  |  |  |  |  |  199|  2.08k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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.08k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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.08k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  2.08k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  2.08k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  2.08k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  2.08k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  2.08k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  2.08k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  2.08k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  2.08k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  2.08k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  2.08k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  2.08k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.08k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  2.08k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  2.08k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  2.08k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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.08k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1094|       |                        /* Pad to align with 64 bits.
 1095|       |                         * This will zero out the pad3 field. */
 1096|  2.08k|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|  2.08k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  2.08k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  2.08k|{                                                               \
  |  |  |  |  234|  2.08k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  2.08k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  2.08k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  2.08k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  2.08k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  2.08k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  2.08k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  2.08k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  2.08k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  2.08k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  2.08k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  2.08k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 2.08k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  2.08k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  2.08k|                                                                \
  |  |  |  |  237|  2.08k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  2.08k|    MF.data++;                                                  \
  |  |  |  |  239|  2.08k|}
  |  |  ------------------
  ------------------
 1097|  2.08k|                    } else {
 1098|       |                        /* Pad to align with 64 bits.
 1099|       |                         * This will zero out the tcp_flags & pad3 field. */
 1100|  1.18k|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|  1.18k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  1.18k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  1.18k|{                                                               \
  |  |  |  |  234|  1.18k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  1.18k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  1.18k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  1.18k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.18k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.18k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.18k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.18k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.18k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  1.18k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  1.18k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.18k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.18k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.18k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  1.18k|                                                                \
  |  |  |  |  237|  1.18k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  1.18k|    MF.data++;                                                  \
  |  |  |  |  239|  1.18k|}
  |  |  ------------------
  ------------------
 1101|  1.18k|                    }
 1102|  3.26k|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|  3.26k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  3.26k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  3.26k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  3.26k|{                                               \
  |  |  |  |  |  |  197|  3.26k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  3.26k|                                                \
  |  |  |  |  |  |  199|  3.26k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  3.26k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  3.26k|    {                                        \
  |  |  |  |  |  |  |  |  160|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  3.26k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  3.26k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  3.26k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  3.26k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  3.26k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1103|  3.26k|                                       htons(icmp6->icmp6_base.icmp6_type));
 1104|  3.26k|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|  3.26k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  3.26k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  3.26k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  3.26k|{                                               \
  |  |  |  |  |  |  197|  3.26k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  3.26k|                                                \
  |  |  |  |  |  |  199|  3.26k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  3.26k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  3.26k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  3.26k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  3.26k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  3.26k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  3.26k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  3.26k|                                       htons(icmp6->icmp6_base.icmp6_code));
 1106|  3.26k|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|  3.26k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  3.26k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  3.26k|{                                                               \
  |  |  |  |  234|  3.26k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  3.26k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  3.26k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  3.26k|                                                                \
  |  |  |  |  237|  3.26k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  3.26k|    MF.data++;                                                  \
  |  |  |  |  239|  3.26k|}
  |  |  ------------------
  ------------------
 1107|       |                    /* Fill ND reserved field. */
 1108|  3.26k|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|  3.26k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  3.26k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  3.26k|    {                                           \
  |  |  |  |  |  |  180|  3.26k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  3.26k|                                                \
  |  |  |  |  |  |  182|  3.26k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  3.26k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  3.26k|    {                                        \
  |  |  |  |  |  |  |  |  160|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  3.26k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  3.26k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  3.26k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  3.26k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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.26k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1109|  3.26k|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  3.26k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  3.26k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  3.26k|{                                                               \
  |  |  |  |  234|  3.26k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  3.26k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  3.26k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  3.26k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.26k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.26k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.26k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.26k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.26k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  269|  3.26k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  279|  3.26k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  296|  3.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.26k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.26k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  3.26k|                                                                \
  |  |  |  |  237|  3.26k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  3.26k|    MF.data++;                                                  \
  |  |  |  |  239|  3.26k|}
  |  |  ------------------
  ------------------
 1110|  3.26k|                } else {
 1111|       |                    /* ICMPv6 but not ND. */
 1112|  1.33k|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|  1.33k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.33k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.33k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.33k|{                                               \
  |  |  |  |  |  |  197|  1.33k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.33k|                                                \
  |  |  |  |  |  |  199|  1.33k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  1.33k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.33k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.33k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.33k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.33k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.33k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.33k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.33k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.33k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.33k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.33k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.33k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.33k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.33k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  1.33k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.33k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.33k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1113|  1.33k|                                       htons(icmp6->icmp6_base.icmp6_type));
 1114|  1.33k|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|  1.33k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.33k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.33k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.33k|{                                               \
  |  |  |  |  |  |  197|  1.33k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.33k|                                                \
  |  |  |  |  |  |  199|  1.33k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.33k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.33k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.33k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.33k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.33k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.33k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.33k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.33k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.33k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.33k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.33k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.33k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.33k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.33k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.33k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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 - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.33k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1115|  1.33k|                                       htons(icmp6->icmp6_base.icmp6_code));
 1116|  1.33k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  1.33k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.33k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.33k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.33k|{                                               \
  |  |  |  |  |  |  197|  1.33k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.33k|                                                \
  |  |  |  |  |  |  199|  1.33k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.33k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.33k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  1.33k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.33k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.33k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.33k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.33k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.33k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.33k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.33k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.33k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.33k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.33k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.33k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  1.33k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.33k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.33k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1117|  1.33k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  1.33k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.33k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.33k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.33k|{                                               \
  |  |  |  |  |  |  197|  1.33k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.33k|                                                \
  |  |  |  |  |  |  199|  1.33k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.33k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.33k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  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++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|      0|#define DIV_ROUND_UP(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|  1.33k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded - Ignored]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  1.33k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.33k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.33k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.33k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.33k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.33k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.33k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.33k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  269|  1.33k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  279|  1.33k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  296|  1.33k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.33k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.33k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.33k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  1.33k|        MF.data++;                              \
  |  |  |  |  |  |  212|  1.33k|    }                                           \
  |  |  |  |  |  |  213|  1.33k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1118|  1.33k|                }
 1119|  4.60k|            }
 1120|  4.68k|        }
 1121|  41.7k|    }
 1122|   114k| out:
 1123|   114k|    dst->map = mf.map;
 1124|   114k|}
flow_zero_wildcards:
 1232|   263k|{
 1233|   263k|    uint64_t *flow_u64 = (uint64_t *) flow;
 1234|   263k|    const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
 1235|   263k|    size_t i;
 1236|       |
 1237|  22.4M|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  22.4M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (1237:17): [True: 22.1M, False: 263k]
  ------------------
 1238|  22.1M|        flow_u64[i] &= wc_u64[i];
 1239|  22.1M|    }
 1240|   263k|}
ct_state_to_string:
 1360|  68.4k|{
 1361|  68.4k|    switch (state) {
 1362|      0|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
 1363|      0|        CS_STATES
  ------------------
  |  |  909|  2.64k|    CS_STATE(NEW,         0, "new")             \
  |  |  ------------------
  |  |  |  | 1362|  2.64k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 2.64k, False: 65.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  910|  3.57k|    CS_STATE(ESTABLISHED, 1, "est")             \
  |  |  ------------------
  |  |  |  | 1362|  3.57k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.57k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  911|  3.62k|    CS_STATE(RELATED,     2, "rel")             \
  |  |  ------------------
  |  |  |  | 1362|  3.62k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.62k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  912|  3.63k|    CS_STATE(REPLY_DIR,   3, "rpl")             \
  |  |  ------------------
  |  |  |  | 1362|  3.63k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.63k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  913|  3.63k|    CS_STATE(INVALID,     4, "inv")             \
  |  |  ------------------
  |  |  |  | 1362|  3.59k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.59k, False: 64.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  914|  3.59k|    CS_STATE(TRACKED,     5, "trk")             \
  |  |  ------------------
  |  |  |  | 1362|  3.19k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.19k, False: 65.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  915|  3.19k|    CS_STATE(SRC_NAT,     6, "snat")            \
  |  |  ------------------
  |  |  |  | 1362|  3.13k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 3.13k, False: 65.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  916|  3.13k|    CS_STATE(DST_NAT,     7, "dnat")
  |  |  ------------------
  |  |  |  | 1362|  2.78k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1362:37): [True: 2.78k, False: 65.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1364|      0|#undef CS_STATE
 1365|  42.2k|    default:
  ------------------
  |  Branch (1365:5): [True: 42.2k, False: 26.1k]
  ------------------
 1366|  42.2k|        return NULL;
 1367|  68.4k|    }
 1368|  68.4k|}
flow_tun_flag_to_string:
 1483|  4.03k|{
 1484|  4.03k|    switch (flags) {
 1485|    327|    case FLOW_TNL_F_DONT_FRAGMENT:
  ------------------
  |  |   61|    327|#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
  ------------------
  |  Branch (1485:5): [True: 327, False: 3.70k]
  ------------------
 1486|    327|        return "df";
 1487|    328|    case FLOW_TNL_F_CSUM:
  ------------------
  |  |   62|    328|#define FLOW_TNL_F_CSUM (1 << 2)
  ------------------
  |  Branch (1487:5): [True: 328, False: 3.70k]
  ------------------
 1488|    328|        return "csum";
 1489|    327|    case FLOW_TNL_F_KEY:
  ------------------
  |  |   63|    327|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1489:5): [True: 327, False: 3.70k]
  ------------------
 1490|    327|        return "key";
 1491|     96|    case FLOW_TNL_F_OAM:
  ------------------
  |  |   56|     96|#define FLOW_TNL_F_OAM (1 << 0)
  ------------------
  |  Branch (1491:5): [True: 96, False: 3.93k]
  ------------------
 1492|     96|        return "oam";
 1493|  2.95k|    default:
  ------------------
  |  Branch (1493:5): [True: 2.95k, False: 1.07k]
  ------------------
 1494|  2.95k|        return NULL;
 1495|  4.03k|    }
 1496|  4.03k|}
format_flags:
 1501|  23.4k|{
 1502|  23.4k|    uint32_t bad = 0;
 1503|       |
 1504|  23.4k|    if (!flags) {
  ------------------
  |  Branch (1504:9): [True: 704, False: 22.7k]
  ------------------
 1505|    704|        ds_put_char(ds, '0');
 1506|    704|        return;
 1507|    704|    }
 1508|   169k|    while (flags) {
  ------------------
  |  Branch (1508:12): [True: 146k, False: 22.7k]
  ------------------
 1509|   146k|        uint32_t bit = rightmost_1bit(flags);
 1510|   146k|        const char *s;
 1511|       |
 1512|   146k|        s = bit_to_string(bit);
 1513|   146k|        if (s) {
  ------------------
  |  Branch (1513:13): [True: 123k, False: 23.4k]
  ------------------
 1514|   123k|            ds_put_format(ds, "%s%c", s, del);
 1515|   123k|        } else {
 1516|  23.4k|            bad |= bit;
 1517|  23.4k|        }
 1518|       |
 1519|   146k|        flags &= ~bit;
 1520|   146k|    }
 1521|       |
 1522|  22.7k|    if (bad) {
  ------------------
  |  Branch (1522:9): [True: 5.60k, False: 17.1k]
  ------------------
 1523|  5.60k|        ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
 1524|  5.60k|    }
 1525|  22.7k|    ds_chomp(ds, del);
 1526|  22.7k|}
format_flags_masked:
 1532|  24.7k|{
 1533|  24.7k|    if (name) {
  ------------------
  |  Branch (1533:9): [True: 15.0k, False: 9.67k]
  ------------------
 1534|  15.0k|        ds_put_format(ds, "%s%s=%s", colors.param, name, colors.end);
 1535|  15.0k|    }
 1536|       |
 1537|  24.7k|    if (mask == max_mask) {
  ------------------
  |  Branch (1537:9): [True: 22.0k, False: 2.65k]
  ------------------
 1538|  22.0k|        format_flags(ds, bit_to_string, flags, '|');
 1539|  22.0k|        return;
 1540|  22.0k|    }
 1541|       |
 1542|  2.65k|    if (!mask) {
  ------------------
  |  Branch (1542:9): [True: 21, False: 2.62k]
  ------------------
 1543|     21|        ds_put_cstr(ds, "0/0");
 1544|     21|        return;
 1545|     21|    }
 1546|       |
 1547|  62.0k|    while (mask) {
  ------------------
  |  Branch (1547:12): [True: 59.4k, False: 2.62k]
  ------------------
 1548|  59.4k|        uint32_t bit = rightmost_1bit(mask);
 1549|  59.4k|        const char *s = bit_to_string(bit);
 1550|       |
 1551|  59.4k|        ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
  ------------------
  |  Branch (1551:35): [True: 12.3k, False: 47.1k]
  ------------------
 1552|  59.4k|                      s ? s : "[Unknown]");
  ------------------
  |  Branch (1552:23): [True: 17.1k, False: 42.2k]
  ------------------
 1553|  59.4k|        mask &= ~bit;
 1554|  59.4k|    }
 1555|  2.62k|}
format_packet_type_masked:
 1577|  16.4k|{
 1578|  16.4k|    if (value == htonl(PT_ETH) && mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|    107|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1578:9): [True: 107, False: 16.3k]
  |  Branch (1578:35): [True: 107, False: 0]
  ------------------
 1579|    107|        ds_put_cstr(s, "eth");
 1580|  16.3k|    } else {
 1581|  16.3k|        ds_put_cstr(s, "packet_type=(");
 1582|  16.3k|        put_u16_masked(s, pt_ns(value), pt_ns(mask));
 1583|  16.3k|        ds_put_char(s, ',');
 1584|  16.3k|        put_u16_masked(s, pt_ns_type(value), pt_ns_type(mask));
 1585|  16.3k|        ds_put_char(s, ')');
 1586|  16.3k|    }
 1587|  16.4k|}
flow_format:
 1751|   114k|{
 1752|   114k|    struct match match;
 1753|   114k|    struct flow_wildcards *wc = &match.wc;
 1754|       |
 1755|   114k|    match_wc_init(&match, flow);
 1756|       |
 1757|       |    /* As this function is most often used for formatting a packet in a
 1758|       |     * packet-in message, skip formatting the packet context fields that are
 1759|       |     * all-zeroes to make the print-out easier on the eyes.  This means that a
 1760|       |     * missing context field implies a zero value for that field.  This is
 1761|       |     * similar to OpenFlow encoding of these fields, as the specification
 1762|       |     * states that all-zeroes context fields should not be encoded in the
 1763|       |     * packet-in messages. */
 1764|   114k|    if (!flow->in_port.ofp_port) {
  ------------------
  |  Branch (1764:9): [True: 114k, False: 0]
  ------------------
 1765|   114k|        WC_UNMASK_FIELD(wc, in_port);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1766|   114k|    }
 1767|   114k|    if (!flow->skb_priority) {
  ------------------
  |  Branch (1767:9): [True: 114k, False: 0]
  ------------------
 1768|   114k|        WC_UNMASK_FIELD(wc, skb_priority);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1769|   114k|    }
 1770|   114k|    if (!flow->pkt_mark) {
  ------------------
  |  Branch (1770:9): [True: 114k, False: 0]
  ------------------
 1771|   114k|        WC_UNMASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1772|   114k|    }
 1773|   114k|    if (!flow->recirc_id) {
  ------------------
  |  Branch (1773:9): [True: 114k, False: 0]
  ------------------
 1774|   114k|        WC_UNMASK_FIELD(wc, recirc_id);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1775|   114k|    }
 1776|   114k|    if (!flow->dp_hash) {
  ------------------
  |  Branch (1776:9): [True: 114k, False: 0]
  ------------------
 1777|   114k|        WC_UNMASK_FIELD(wc, dp_hash);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1778|   114k|    }
 1779|   114k|    if (!flow->ct_state) {
  ------------------
  |  Branch (1779:9): [True: 114k, False: 0]
  ------------------
 1780|   114k|        WC_UNMASK_FIELD(wc, ct_state);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1781|   114k|    }
 1782|   114k|    if (!flow->ct_zone) {
  ------------------
  |  Branch (1782:9): [True: 114k, False: 0]
  ------------------
 1783|   114k|        WC_UNMASK_FIELD(wc, ct_zone);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1784|   114k|    }
 1785|   114k|    if (!flow->ct_mark) {
  ------------------
  |  Branch (1785:9): [True: 114k, False: 0]
  ------------------
 1786|   114k|        WC_UNMASK_FIELD(wc, ct_mark);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1787|   114k|    }
 1788|   114k|    if (ovs_u128_is_zero(flow->ct_label)) {
  ------------------
  |  Branch (1788:9): [True: 114k, False: 0]
  ------------------
 1789|   114k|        WC_UNMASK_FIELD(wc, ct_label);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1790|   114k|    }
 1791|   114k|    if (!is_ct_valid(flow, &match.wc, NULL) || !flow->ct_nw_proto) {
  ------------------
  |  Branch (1791:9): [True: 114k, False: 0]
  |  Branch (1791:48): [True: 0, False: 0]
  ------------------
 1792|   114k|        WC_UNMASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1793|   114k|        WC_UNMASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1794|   114k|        WC_UNMASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1795|   114k|        if (flow->dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1795:13): [True: 10.8k, False: 103k]
  ------------------
 1796|  10.8k|            WC_UNMASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  205|  10.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1797|  10.8k|            WC_UNMASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  205|  10.8k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1798|   103k|        } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1798:20): [True: 37.5k, False: 66.3k]
  ------------------
 1799|  37.5k|            WC_UNMASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  205|  37.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1800|  37.5k|            WC_UNMASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  205|  37.5k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1801|  37.5k|        }
 1802|   114k|    }
 1803|  1.95M|    for (int i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  1.95M|#define FLOW_N_REGS 16
  ------------------
  |  Branch (1803:21): [True: 1.83M, False: 114k]
  ------------------
 1804|  1.83M|        if (!flow->regs[i]) {
  ------------------
  |  Branch (1804:13): [True: 1.83M, False: 0]
  ------------------
 1805|  1.83M|            WC_UNMASK_FIELD(wc, regs[i]);
  ------------------
  |  |  205|  1.83M|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1806|  1.83M|        }
 1807|  1.83M|    }
 1808|   114k|    if (!flow->metadata) {
  ------------------
  |  Branch (1808:9): [True: 114k, False: 0]
  ------------------
 1809|   114k|        WC_UNMASK_FIELD(wc, metadata);
  ------------------
  |  |  205|   114k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1810|   114k|    }
 1811|       |
 1812|   114k|    match_format(&match, port_map, ds, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|   114k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1813|   114k|}
flow_wildcards_init_catchall:
 1829|   974k|{
 1830|   974k|    memset(&wc->masks, 0, sizeof wc->masks);
 1831|   974k|}
flow_wildcards_init_for_packet:
 1840|   114k|{
 1841|   114k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|   114k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1842|       |
 1843|   114k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1844|       |
 1845|       |    /* Update this function whenever struct flow changes. */
 1846|   114k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42);
  ------------------
  |  |  269|   114k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1847|       |
 1848|   114k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1848:9): [True: 0, False: 114k]
  ------------------
 1849|      0|        if (flow->tunnel.flags & FLOW_TNL_F_KEY) {
  ------------------
  |  |   63|      0|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1849:13): [True: 0, False: 0]
  ------------------
 1850|      0|            WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1851|      0|        }
 1852|      0|        WC_MASK_FIELD(wc, tunnel.ip_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1853|      0|        WC_MASK_FIELD(wc, tunnel.ip_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1854|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1855|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1856|      0|        WC_MASK_FIELD(wc, tunnel.flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1857|      0|        WC_MASK_FIELD(wc, tunnel.ip_tos);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1858|      0|        WC_MASK_FIELD(wc, tunnel.ip_ttl);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1859|      0|        WC_MASK_FIELD(wc, tunnel.tp_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1860|      0|        WC_MASK_FIELD(wc, tunnel.tp_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1861|      0|        WC_MASK_FIELD(wc, tunnel.gbp_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1862|      0|        WC_MASK_FIELD(wc, tunnel.gbp_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1863|      0|        WC_MASK_FIELD(wc, tunnel.erspan_ver);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1864|      0|        WC_MASK_FIELD(wc, tunnel.erspan_idx);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1865|      0|        WC_MASK_FIELD(wc, tunnel.erspan_dir);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1866|      0|        WC_MASK_FIELD(wc, tunnel.erspan_hwid);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1867|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1868|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_msgtype);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1869|       |
 1870|      0|        if (!(flow->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (1870:13): [True: 0, False: 0]
  ------------------
 1871|      0|            if (flow->tunnel.metadata.present.map) {
  ------------------
  |  Branch (1871:17): [True: 0, False: 0]
  ------------------
 1872|      0|                wc->masks.tunnel.metadata.present.map =
 1873|      0|                                              flow->tunnel.metadata.present.map;
 1874|      0|                WC_MASK_FIELD(wc, tunnel.metadata.opts.u8);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1875|      0|                WC_MASK_FIELD(wc, tunnel.metadata.tab);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1876|      0|            }
 1877|      0|        } else {
 1878|      0|            WC_MASK_FIELD(wc, tunnel.metadata.present.len);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1879|      0|            memset(wc->masks.tunnel.metadata.opts.gnv, 0xff,
 1880|      0|                   flow->tunnel.metadata.present.len);
 1881|      0|        }
 1882|   114k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1882:16): [True: 0, False: 114k]
  ------------------
 1883|      0|        WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1884|      0|    }
 1885|       |
 1886|       |    /* metadata, regs, and conj_id wildcarded. */
 1887|       |
 1888|   114k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1889|   114k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1890|   114k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1891|   114k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1892|   114k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1893|   114k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1894|   114k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1895|   114k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1896|   114k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1897|       |
 1898|       |    /* actset_output wildcarded. */
 1899|       |
 1900|   114k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1901|   114k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1901:9): [True: 106k, False: 8.12k]
  ------------------
 1902|   106k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|   106k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1903|   106k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|   106k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1904|   106k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|   106k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1905|       |        /* No need to set mask of inner VLANs that don't exist. */
 1906|   107k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|   107k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1906:25): [True: 107k, False: 268]
  ------------------
 1907|       |            /* Always show the first zero VLAN. */
 1908|   107k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|   107k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1909|   107k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1909:17): [True: 106k, False: 724]
  ------------------
 1910|   106k|                break;
 1911|   106k|            }
 1912|   107k|        }
 1913|   106k|        dl_type = flow->dl_type;
 1914|   106k|    } else {
 1915|  8.12k|        dl_type = pt_ns_type_be(flow->packet_type);
 1916|  8.12k|    }
 1917|       |
 1918|   114k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1918:9): [True: 10.8k, False: 103k]
  ------------------
 1919|  10.8k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  10.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1920|  10.8k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  10.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1921|  10.8k|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|  10.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1922|  10.8k|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|  10.8k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1923|   103k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1923:16): [True: 37.5k, False: 66.3k]
  ------------------
 1924|  37.5k|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|  37.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1925|  37.5k|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|  37.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1926|  37.5k|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|  37.5k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1927|  37.5k|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1927:13): [True: 3.25k, False: 34.3k]
  ------------------
 1928|  3.25k|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|  3.25k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1929|  3.25k|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|  3.25k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1930|  3.25k|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|  3.25k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1931|  34.3k|        } else {
 1932|  34.3k|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|  34.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1933|  34.3k|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|  34.3k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1934|  34.3k|        }
 1935|  66.3k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1935:16): [True: 826, False: 65.5k]
  ------------------
 1936|  66.3k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1936:16): [True: 196, False: 65.3k]
  ------------------
 1937|  1.02k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  1.02k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1938|  1.02k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  1.02k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1939|  1.02k|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  1.02k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1940|  1.02k|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|  1.02k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1941|  1.02k|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|  1.02k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1942|  1.02k|        return;
 1943|  65.3k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1943:16): [True: 761, False: 64.5k]
  ------------------
 1944|  2.67k|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|  2.67k|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (1944:25): [True: 2.04k, False: 629]
  ------------------
 1945|  2.04k|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|  2.04k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  2.04k|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (1946:17): [True: 132, False: 1.90k]
  ------------------
 1947|    132|                break;
 1948|    132|            }
 1949|  2.04k|        }
 1950|    761|        return;
 1951|  64.5k|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1951:16): [True: 7.55k, False: 57.0k]
  ------------------
 1952|  7.55k|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|  7.55k|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1954|  7.55k|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1955|  7.55k|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1956|  7.55k|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  7.55k|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|  7.55k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1958|  57.0k|    } else {
 1959|  57.0k|        return; /* Unknown ethertype. */
 1960|  57.0k|    }
 1961|       |
 1962|       |    /* IPv4 or IPv6. */
 1963|  56.0k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  56.0k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 1964|  56.0k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  56.0k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1966|  56.0k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1967|  56.0k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1968|  56.0k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1969|  56.0k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  56.0k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1970|       |
 1971|       |    /* No transport layer header in later fragments. */
 1972|  56.0k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  56.0k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1972:9): [True: 55.3k, False: 629]
  ------------------
 1973|  56.0k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (1973:10): [True: 5.19k, False: 50.1k]
  ------------------
 1974|  55.3k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (1974:10): [True: 4.68k, False: 45.4k]
  ------------------
 1975|  55.3k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (1975:10): [True: 14.1k, False: 31.2k]
  ------------------
 1976|  55.3k|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (1976:10): [True: 13.6k, False: 17.6k]
  ------------------
 1977|  55.3k|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (1977:10): [True: 833, False: 16.8k]
  ------------------
 1978|  55.3k|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (1978:10): [True: 2.60k, False: 14.2k]
  ------------------
 1979|  41.1k|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|  41.1k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1980|  41.1k|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|  41.1k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|       |
 1982|  41.1k|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (1982:13): [True: 14.1k, False: 26.9k]
  ------------------
 1983|  14.1k|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|  14.1k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1984|  26.9k|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (1984:20): [True: 2.60k, False: 24.3k]
  ------------------
 1985|  2.60k|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|  2.60k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|  2.60k|        }
 1987|  41.1k|    }
 1988|  56.0k|}
flow_wildcards_equal:
 2174|   148k|{
 2175|   148k|    return flow_equal(&a->masks, &b->masks);
 2176|   148k|}
flow_wildcards_set_reg_mask:
 2219|  20.2k|{
 2220|  20.2k|    wc->masks.regs[idx] = mask;
 2221|  20.2k|}
flow_wildcards_set_xreg_mask:
 2227|  10.2k|{
 2228|  10.2k|    flow_set_xreg(&wc->masks, idx, mask);
 2229|  10.2k|}
flow_wildcards_set_xxreg_mask:
 2236|  4.64k|{
 2237|  4.64k|    flow_set_xxreg(&wc->masks, idx, mask);
 2238|  4.64k|}
flow_hash_fields_to_str:
 2667|  8.67k|{
 2668|  8.67k|    switch (fields) {
 2669|    648|    case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
  ------------------
  |  Branch (2669:5): [True: 648, False: 8.03k]
  ------------------
 2670|    916|    case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
  ------------------
  |  Branch (2670:5): [True: 916, False: 7.76k]
  ------------------
 2671|      1|    case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
  ------------------
  |  Branch (2671:5): [True: 1, False: 8.67k]
  ------------------
 2672|      1|    case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
  ------------------
  |  Branch (2672:5): [True: 1, False: 8.67k]
  ------------------
 2673|      4|    case NX_HASH_FIELDS_NW_SRC: return "nw_src";
  ------------------
  |  Branch (2673:5): [True: 4, False: 8.67k]
  ------------------
 2674|  2.33k|    case NX_HASH_FIELDS_NW_DST: return "nw_dst";
  ------------------
  |  Branch (2674:5): [True: 2.33k, False: 6.34k]
  ------------------
 2675|      0|    case NX_HASH_FIELDS_SYMMETRIC_L3: return "symmetric_l3";
  ------------------
  |  Branch (2675:5): [True: 0, False: 8.67k]
  ------------------
 2676|  4.77k|    default: return "<unknown>";
  ------------------
  |  Branch (2676:5): [True: 4.77k, False: 3.90k]
  ------------------
 2677|  8.67k|    }
 2678|  8.67k|}
flow_hash_fields_valid:
 2683|  19.2k|{
 2684|  19.2k|    return fields == NX_HASH_FIELDS_ETH_SRC
  ------------------
  |  Branch (2684:12): [True: 906, False: 18.3k]
  ------------------
 2685|  19.2k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L4
  ------------------
  |  Branch (2685:12): [True: 4.60k, False: 13.7k]
  ------------------
 2686|  19.2k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
  ------------------
  |  Branch (2686:12): [True: 37, False: 13.7k]
  ------------------
 2687|  19.2k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
  ------------------
  |  Branch (2687:12): [True: 3.25k, False: 10.4k]
  ------------------
 2688|  19.2k|        || fields == NX_HASH_FIELDS_NW_SRC
  ------------------
  |  Branch (2688:12): [True: 14, False: 10.4k]
  ------------------
 2689|  19.2k|        || fields == NX_HASH_FIELDS_NW_DST
  ------------------
  |  Branch (2689:12): [True: 3.49k, False: 6.95k]
  ------------------
 2690|  19.2k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3;
  ------------------
  |  Branch (2690:12): [True: 0, False: 6.95k]
  ------------------
 2691|  19.2k|}
flow_set_vlan_vid:
 2749|    337|{
 2750|    337|    ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
 2751|    337|    flow->vlans[0].tci &= ~mask;
 2752|    337|    flow->vlans[0].tci |= vid & mask;
 2753|    337|}
flow_set_vlan_pcp:
 2764|     12|{
 2765|     12|    pcp &= 0x07;
 2766|     12|    flow->vlans[id].tci &= ~htons(VLAN_PCP_MASK);
 2767|     12|    flow->vlans[id].tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
 2768|     12|}
flow_count_vlan_headers:
 2773|  15.1k|{
 2774|  15.1k|    int i;
 2775|       |
 2776|  18.6k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  18.6k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (2776:17): [True: 18.3k, False: 328]
  ------------------
 2777|  18.3k|        if (!(flow->vlans[i].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (2777:13): [True: 14.8k, False: 3.48k]
  ------------------
 2778|  14.8k|            break;
 2779|  14.8k|        }
 2780|  18.3k|    }
 2781|  15.1k|    return i;
 2782|  15.1k|}
flow_pop_vlan:
 2804|  15.1k|{
 2805|  15.1k|    int n = flow_count_vlan_headers(flow);
 2806|  15.1k|    if (n > 1) {
  ------------------
  |  Branch (2806:9): [True: 328, False: 14.8k]
  ------------------
 2807|    328|        if (wc) {
  ------------------
  |  Branch (2807:13): [True: 0, False: 328]
  ------------------
 2808|      0|            memset(&wc->masks.vlans[1], 0xff,
 2809|      0|                   sizeof(union flow_vlan_hdr) * (n - 1));
 2810|      0|        }
 2811|    328|        memmove(&flow->vlans[0], &flow->vlans[1],
 2812|    328|                sizeof(union flow_vlan_hdr) * (n - 1));
 2813|    328|    }
 2814|  15.1k|    if (n > 0) {
  ------------------
  |  Branch (2814:9): [True: 3.16k, False: 12.0k]
  ------------------
 2815|  3.16k|        memset(&flow->vlans[n - 1], 0, sizeof(union flow_vlan_hdr));
 2816|  3.16k|    }
 2817|  15.1k|}
flow_push_vlan_uninit:
 2821|  1.40k|{
 2822|  1.40k|    if (wc) {
  ------------------
  |  Branch (2822:9): [True: 0, False: 1.40k]
  ------------------
 2823|      0|        int n = flow_count_vlan_headers(flow);
 2824|      0|        if (n) {
  ------------------
  |  Branch (2824:13): [True: 0, False: 0]
  ------------------
 2825|      0|            memset(wc->masks.vlans, 0xff, sizeof(union flow_vlan_hdr) * n);
 2826|      0|        }
 2827|      0|    }
 2828|  1.40k|    memmove(&flow->vlans[1], &flow->vlans[0],
 2829|  1.40k|            sizeof(union flow_vlan_hdr) * (FLOW_MAX_VLAN_HEADERS - 1));
  ------------------
  |  |   75|  1.40k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
 2830|  1.40k|    memset(&flow->vlans[0], 0, sizeof(union flow_vlan_hdr));
 2831|  1.40k|}
flow_set_mpls_label:
 3020|    290|{
 3021|    290|    set_mpls_lse_label(&flow->mpls_lse[idx], label);
 3022|    290|}
flow_set_mpls_ttl:
 3028|  1.84k|{
 3029|  1.84k|    set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
 3030|  1.84k|}
flow_set_mpls_tc:
 3036|    791|{
 3037|    791|    set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
 3038|    791|}
flow_set_mpls_bos:
 3043|    568|{
 3044|    568|    set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
 3045|    568|}
miniflow_init:
 3386|   156k|{
 3387|   156k|    uint64_t *dst_u64 = miniflow_values(dst);
 3388|   156k|    size_t idx;
 3389|       |
 3390|   641k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  336|   156k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  330|   156k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  337|   797k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (337:10): [True: 641k, False: 156k]
  |  |  ------------------
  ------------------
 3391|   641k|        *dst_u64++ = flow_u64_value(src, idx);
 3392|   641k|    }
 3393|   156k|}
miniflow_map_init:
 3398|  78.1k|{
 3399|       |    /* Initialize map, counting the number of nonzero elements. */
 3400|  78.1k|    flowmap_init(&flow->map);
 3401|  6.64M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  6.64M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3401:24): [True: 6.56M, False: 78.1k]
  ------------------
 3402|  6.56M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3402:13): [True: 320k, False: 6.24M]
  ------------------
 3403|   320k|            flowmap_set(&flow->map, i, 1);
 3404|   320k|        }
 3405|  6.56M|    }
 3406|  78.1k|}
miniflow_alloc:
 3413|  78.1k|{
 3414|  78.1k|    size_t n_values = miniflow_n_values(src);
 3415|  78.1k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  526|  78.1k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3416|  78.1k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3417|  78.1k|    size_t i;
 3418|       |
 3419|  78.1k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  78.1k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  78.1k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3420|       |
 3421|   234k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3421:17): [True: 156k, False: 78.1k]
  ------------------
 3422|   156k|        *dst = *src;   /* Copy maps. */
 3423|   156k|        dsts[i] = dst;
 3424|   156k|        dst += 1;      /* Just past the maps. */
 3425|   156k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3426|   156k|    }
 3427|  78.1k|    return data_size;
 3428|  78.1k|}
miniflow_expand:
 3459|   271k|{
 3460|   271k|    memset(dst, 0, sizeof *dst);
 3461|   271k|    flow_union_with_miniflow(dst, src);
 3462|   271k|}
minimask_init:
 3528|  78.1k|{
 3529|  78.1k|    miniflow_init(&mask->masks, &wc->masks);
 3530|  78.1k|}
minimask_expand:
 3572|  78.1k|{
 3573|  78.1k|    miniflow_expand(&mask->masks, &wc->masks);
 3574|  78.1k|}
flow.c:parse_ipv6_ext_hdrs__:
  483|  35.6k|{
  484|  35.6k|    *frag_hdr = NULL;
  485|  51.9k|    while (1) {
  ------------------
  |  Branch (485:12): [Folded - Ignored]
  ------------------
  486|  51.9k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   45|   342k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 33.3k, False: 18.5k]
  |  |  |  Branch (45:51): [True: 33.6k, False: 18.2k]
  |  |  |  Branch (45:51): [True: 33.6k, False: 40]
  |  |  |  Branch (45:51): [True: 33.6k, False: 21]
  |  |  |  Branch (45:51): [True: 33.4k, False: 154]
  |  |  |  Branch (45:51): [True: 33.3k, False: 95]
  |  |  ------------------
  ------------------
  487|  51.9k|                       && (*nw_proto != IPPROTO_ROUTING)
  488|  51.9k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  489|  51.9k|                       && (*nw_proto != IPPROTO_AH)
  490|  51.9k|                       && (*nw_proto != IPPROTO_FRAGMENT))) {
  491|       |            /* It's either a terminal header (e.g., TCP, UDP) or one we
  492|       |             * don't understand.  In either case, we're done with the
  493|       |             * packet, so use it to fill in 'nw_proto'. */
  494|  33.3k|            return true;
  495|  33.3k|        }
  496|       |
  497|       |        /* We only verify that at least 8 bytes of the next header are
  498|       |         * available, but many of these headers are longer.  Ensure that
  499|       |         * accesses within the extension header are within those first 8
  500|       |         * bytes. All extension headers are required to be at least 8
  501|       |         * bytes. */
  502|  18.5k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   46|  18.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 672, False: 17.9k]
  |  |  ------------------
  ------------------
  503|    672|            return false;
  504|    672|        }
  505|       |
  506|  17.9k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (506:13): [True: 17.6k, False: 277]
  ------------------
  507|  17.9k|            || (*nw_proto == IPPROTO_ROUTING)
  ------------------
  |  Branch (507:16): [True: 38, False: 239]
  ------------------
  508|  17.9k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (508:16): [True: 19, False: 220]
  ------------------
  509|       |            /* These headers, while different, have the fields we care
  510|       |             * about in the same location and with the same
  511|       |             * interpretation. */
  512|  17.6k|            const struct ip6_ext *ext_hdr = *datap;
  513|  17.6k|            *nw_proto = ext_hdr->ip6e_nxt;
  514|  17.6k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   46|  17.6k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 1.51k, False: 16.1k]
  |  |  ------------------
  ------------------
  515|  17.6k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  516|  1.51k|                return false;
  517|  1.51k|            }
  518|  17.6k|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (518:20): [True: 125, False: 95]
  ------------------
  519|       |            /* A standard AH definition isn't available, but the fields
  520|       |             * we care about are in the same location as the generic
  521|       |             * option header--only the header length is calculated
  522|       |             * differently. */
  523|    125|            const struct ip6_ext *ext_hdr = *datap;
  524|    125|            *nw_proto = ext_hdr->ip6e_nxt;
  525|    125|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   46|    125|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 36, False: 89]
  |  |  ------------------
  ------------------
  526|    125|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  527|     36|                return false;
  528|     36|            }
  529|    125|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (529:20): [True: 95, False: 0]
  ------------------
  530|     95|            *frag_hdr = *datap;
  531|       |
  532|     95|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  533|     95|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (533:17): [True: 0, False: 95]
  ------------------
  534|      0|                return false;
  535|      0|            }
  536|       |
  537|       |            /* We only process the first fragment. */
  538|     95|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (538:17): [True: 52, False: 43]
  ------------------
  539|     52|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|     52|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  540|     52|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (540:21): [True: 38, False: 14]
  ------------------
  541|     38|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     38|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  542|     38|                    *nw_proto = IPPROTO_FRAGMENT;
  543|     38|                    return true;
  544|     38|                }
  545|     52|            }
  546|     95|        }
  547|  17.9k|    }
  548|  35.6k|}
flow.c:data_pull:
  110|   205k|{
  111|   205k|    const char *data = *datap;
  112|   205k|    *datap = data + size;
  113|   205k|    *sizep -= size;
  114|   205k|    return data;
  115|   205k|}
flow.c:parse_vlan:
  350|  61.4k|{
  351|  61.4k|    const ovs_be16 *eth_type;
  352|       |
  353|  61.4k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  61.4k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  61.4k|    eth_type = *datap;
  356|       |
  357|  61.4k|    size_t n;
  358|  62.1k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 973, False: 61.2k]
  |  Branch (358:45): [True: 744, False: 229]
  ------------------
  359|    744|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   46|    744|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 20, False: 724]
  |  |  ------------------
  ------------------
  360|     20|            break;
  361|     20|        }
  362|       |
  363|    724|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|    724|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|    724|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|    724|        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|    724|        eth_type = *datap;
  368|    724|    }
  369|  61.4k|    return n;
  370|  61.4k|}
flow.c:parse_ethertype:
  374|  61.4k|{
  375|  61.4k|    const struct llc_snap_header *llc;
  376|  61.4k|    ovs_be16 proto;
  377|       |
  378|  61.4k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  61.4k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   45|  61.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 55.0k, False: 6.46k]
  |  |  ------------------
  ------------------
  380|  55.0k|        return proto;
  381|  55.0k|    }
  382|       |
  383|  6.46k|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   46|  6.46k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 814, False: 5.64k]
  |  |  ------------------
  ------------------
  384|    814|        return htons(FLOW_DL_TYPE_NONE);
  385|    814|    }
  386|       |
  387|  5.64k|    llc = *datap;
  388|  5.64k|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   46|  19.4k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 5.09k, False: 550]
  |  |  |  Branch (46:53): [True: 4.66k, False: 985]
  |  |  |  Branch (46:53): [True: 89, False: 896]
  |  |  |  Branch (46:53): [True: 236, False: 660]
  |  |  |  Branch (46:53): [True: 110, False: 550]
  |  |  ------------------
  ------------------
  389|  5.64k|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|  5.64k|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|  5.64k|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|  5.64k|                               sizeof llc->snap.snap_org))) {
  393|  5.09k|        return htons(FLOW_DL_TYPE_NONE);
  394|  5.09k|    }
  395|       |
  396|    550|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|    550|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   45|    550|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 157, False: 393]
  |  |  ------------------
  ------------------
  399|    157|        return llc->snap.snap_type;
  400|    157|    }
  401|       |
  402|    393|    return htons(FLOW_DL_TYPE_NONE);
  403|    550|}
flow.c:parse_mpls:
  334|    761|{
  335|    761|    const struct mpls_hdr *mh;
  336|    761|    int count = 0;
  337|       |
  338|  2.87k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 2.28k, False: 592]
  ------------------
  339|  2.28k|        count++;
  340|  2.28k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 169, False: 2.11k]
  ------------------
  341|    169|            break;
  342|    169|        }
  343|  2.28k|    }
  344|    761|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   96|    761|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 646, False: 115]
  |  |  ------------------
  ------------------
  345|    761|}
flow.c:ipv4_sanity_check:
  650|  10.8k|{
  651|  10.8k|    int ip_len;
  652|  10.8k|    uint16_t tot_len;
  653|       |
  654|  10.8k|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   46|  10.8k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 231, False: 10.6k]
  |  |  ------------------
  ------------------
  655|    231|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|    231|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    231|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  656|    231|        return false;
  657|    231|    }
  658|  10.6k|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|  10.6k|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  659|       |
  660|  10.6k|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   46|  21.0k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 188, False: 10.4k]
  |  |  |  Branch (46:53): [True: 184, False: 10.4k]
  |  |  |  Branch (46:53): [True: 4, False: 10.4k]
  |  |  ------------------
  ------------------
  661|    188|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    188|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    188|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  662|    188|        return false;
  663|    188|    }
  664|       |
  665|  10.4k|    tot_len = ntohs(nh->ip_tot_len);
  666|  10.4k|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   46|  39.0k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 1.46k, False: 8.97k]
  |  |  |  Branch (46:53): [True: 1.29k, False: 9.14k]
  |  |  |  Branch (46:53): [True: 170, False: 8.97k]
  |  |  |  Branch (46:53): [True: 0, False: 8.97k]
  |  |  ------------------
  ------------------
  667|  10.4k|                size - tot_len > UINT16_MAX)) {
  668|  1.46k|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|  1.46k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  1.46k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  669|  1.46k|        return false;
  670|  1.46k|    }
  671|       |
  672|  8.97k|    *ip_lenp = ip_len;
  673|  8.97k|    *tot_lenp = tot_len;
  674|       |
  675|  8.97k|    return true;
  676|  10.4k|}
flow.c:ipv4_get_nw_frag:
  680|  8.97k|{
  681|  8.97k|    uint8_t nw_frag = 0;
  682|       |
  683|  8.97k|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   46|  8.97k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 898, False: 8.07k]
  |  |  ------------------
  ------------------
  684|    898|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    898|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  685|    898|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (685:13): [True: 591, False: 307]
  ------------------
  686|    591|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|    591|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  687|    591|        }
  688|    898|    }
  689|       |
  690|  8.97k|    return nw_frag;
  691|  8.97k|}
flow.c:ipv6_sanity_check:
  695|  37.5k|{
  696|  37.5k|    uint16_t plen;
  697|       |
  698|  37.5k|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   46|  37.5k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 281, False: 37.3k]
  |  |  ------------------
  ------------------
  699|    281|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|    281|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    281|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  700|    281|        return false;
  701|    281|    }
  702|       |
  703|  37.3k|    plen = ntohs(nh->ip6_plen);
  704|  37.3k|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   46|  37.3k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 1.68k, False: 35.6k]
  |  |  ------------------
  ------------------
  705|  1.68k|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|  1.68k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  1.68k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  706|  1.68k|        return false;
  707|  1.68k|    }
  708|       |
  709|  35.6k|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   46|  35.6k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 35.6k]
  |  |  ------------------
  ------------------
  710|      0|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|      0|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      0|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  711|      0|        return false;
  712|      0|    }
  713|       |
  714|  35.6k|    return true;
  715|  35.6k|}
flow.c:data_try_pull:
  122|  30.1k|{
  123|  30.1k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   45|  30.1k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 27.2k, False: 2.90k]
  |  |  ------------------
  ------------------
  124|  30.1k|}
flow.c:parse_icmpv6:
  413|  4.60k|{
  414|  4.60k|    if (icmp6->icmp6_base.icmp6_code != 0 ||
  ------------------
  |  Branch (414:9): [True: 774, False: 3.82k]
  ------------------
  415|  4.60k|        (icmp6->icmp6_base.icmp6_type != ND_NEIGHBOR_SOLICIT &&
  ------------------
  |  Branch (415:10): [True: 702, False: 3.12k]
  ------------------
  416|  3.82k|         icmp6->icmp6_base.icmp6_type != ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (416:10): [True: 560, False: 142]
  ------------------
  417|  1.33k|        return false;
  418|  1.33k|    }
  419|       |
  420|  3.26k|    arp_buf[0] = eth_addr_zero;
  421|  3.26k|    arp_buf[1] = eth_addr_zero;
  422|  3.26k|    *opt_type = 0;
  423|       |
  424|  3.26k|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  425|       |
  426|  3.26k|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  427|  3.26k|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   46|  3.26k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 179, False: 3.08k]
  |  |  ------------------
  ------------------
  428|    179|        return true;
  429|    179|    }
  430|       |
  431|  8.16k|    while (*sizep >= 8) {
  ------------------
  |  Branch (431:12): [True: 7.08k, False: 1.08k]
  ------------------
  432|       |        /* The minimum size of an option is 8 bytes, which also is
  433|       |         * the size of Ethernet link-layer options. */
  434|  7.08k|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  435|  7.08k|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1016|  7.08k|#define ND_LLA_OPT_LEN 8
  ------------------
  436|       |
  437|  7.08k|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (437:13): [True: 768, False: 6.31k]
  |  Branch (437:25): [True: 411, False: 5.90k]
  ------------------
  438|  1.17k|            return true;
  439|  1.17k|        }
  440|       |
  441|       |        /* Store the link layer address if the appropriate option is
  442|       |         * provided.  It is considered an error if the same link
  443|       |         * layer option is specified twice. */
  444|  5.90k|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (444:13): [True: 1.17k, False: 4.73k]
  |  Branch (444:56): [True: 1.15k, False: 18]
  ------------------
  445|  1.15k|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   45|  1.15k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 1.03k, False: 117]
  |  |  ------------------
  ------------------
  446|  1.03k|                arp_buf[0] = lla_opt->mac;
  447|       |                /* We use only first option type present in ND packet. */
  448|  1.03k|                if (*opt_type == 0) {
  ------------------
  |  Branch (448:21): [True: 711, False: 325]
  ------------------
  449|    711|                    *opt_type = lla_opt->type;
  450|    711|                }
  451|  1.03k|            } else {
  452|    117|                goto invalid;
  453|    117|            }
  454|  4.75k|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (454:20): [True: 2.75k, False: 1.99k]
  |  Branch (454:63): [True: 2.74k, False: 12]
  ------------------
  455|  2.74k|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   45|  2.74k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (45:31): [True: 2.03k, False: 712]
  |  |  ------------------
  ------------------
  456|  2.03k|                arp_buf[1] = lla_opt->mac;
  457|       |                /* We use only first option type present in ND packet. */
  458|  2.03k|                if (*opt_type == 0) {
  ------------------
  |  Branch (458:21): [True: 1.37k, False: 661]
  ------------------
  459|  1.37k|                    *opt_type = lla_opt->type;
  460|  1.37k|                }
  461|  2.03k|            } else {
  462|    712|                goto invalid;
  463|    712|            }
  464|  2.74k|        }
  465|       |
  466|  5.07k|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   46|  5.07k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 5.07k]
  |  |  ------------------
  ------------------
  467|      0|            return true;
  468|      0|        }
  469|  5.07k|    }
  470|  1.08k|    return true;
  471|       |
  472|    829|invalid:
  473|    829|    *nd_target = NULL;
  474|    829|    arp_buf[0] = eth_addr_zero;
  475|    829|    arp_buf[1] = eth_addr_zero;
  476|    829|    return true;
  477|  3.08k|}
flow.c:put_u16_masked:
 1559|  32.6k|{
 1560|  32.6k|    if (!mask) {
  ------------------
  |  Branch (1560:9): [True: 0, False: 32.6k]
  ------------------
 1561|      0|        ds_put_char(s, '*');
 1562|  32.6k|    } else {
 1563|  32.6k|        if (value > 9) {
  ------------------
  |  Branch (1563:13): [True: 20.3k, False: 12.2k]
  ------------------
 1564|  20.3k|            ds_put_format(s, "0x%"PRIx16, value);
 1565|  20.3k|        } else {
 1566|  12.2k|            ds_put_format(s, "%"PRIu16, value);
 1567|  12.2k|        }
 1568|       |
 1569|  32.6k|        if (mask != UINT16_MAX) {
  ------------------
  |  Branch (1569:13): [True: 0, False: 32.6k]
  ------------------
 1570|      0|            ds_put_format(s, "/0x%"PRIx16, mask);
 1571|      0|        }
 1572|  32.6k|    }
 1573|  32.6k|}

ofp-queue.c:ofp_to_u16:
  195|  24.4k|{
  196|  24.4k|    return (OVS_FORCE uint16_t) ofp_port;
  197|  24.4k|}
ofp-queue.c:u16_to_ofp:
  213|  18.0k|{
  214|  18.0k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  18.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|  18.0k|}
flow.c:miniflow_values:
  529|   271k|{
  530|   271k|    return (uint64_t *)(mf + 1);
  531|   271k|}
flow.c:flowmap_set:
  384|   811k|{
  385|   811k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  270|   811k|#define MAP_1 (map_t)1
  ------------------
  386|   811k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  269|   811k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  387|       |
  388|   811k|    idx %= MAP_T_BITS;
  ------------------
  |  |  269|   811k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  389|       |
  390|   811k|    fm->bits[unit] |= n_bits_mask << idx;
  391|       |    /* The seemingly unnecessary bounds check on 'unit' is a workaround for a
  392|       |     * false-positive array out of bounds error by GCC 4.9. */
  393|   811k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  279|   811k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  296|  1.62M|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  269|   561k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (393:9): [True: 561k, False: 249k]
  |  Branch (393:37): [True: 0, False: 561k]
  ------------------
  394|       |        /* 'MAP_T_BITS - idx' bits were set on 'unit', set the remaining
  395|       |         * bits from the next unit. */
  396|      0|        fm->bits[unit + 1] |= n_bits_mask >> (MAP_T_BITS - idx);
  ------------------
  |  |  269|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  397|      0|    }
  398|   811k|}
flow.c:odp_to_u32:
  201|   114k|{
  202|   114k|    return (OVS_FORCE uint32_t) odp_port;
  203|   114k|}
flow.c:is_ct_valid:
  944|   114k|{
  945|       |    /* Matches are checked with 'mask' and without 'wc'. */
  946|   114k|    if (mask && !wc) {
  ------------------
  |  Branch (946:9): [True: 114k, False: 0]
  |  Branch (946:17): [True: 114k, False: 0]
  ------------------
  947|       |        /* Must match at least one of the bits that implies a valid
  948|       |         * conntrack entry, or an explicit not-invalid. */
  949|   114k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (949:16): [True: 0, False: 114k]
  ------------------
  950|   114k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  951|   114k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (951:17): [True: 0, False: 114k]
  ------------------
  952|   114k|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (952:20): [True: 0, False: 0]
  ------------------
  953|   114k|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (953:20): [True: 0, False: 0]
  ------------------
  954|   114k|    }
  955|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  956|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  958|      0|    if (wc) {
  ------------------
  |  Branch (958:9): [True: 0, False: 0]
  ------------------
  959|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  960|      0|    }
  961|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  962|   114k|}
flow.c:is_nd:
 1109|  37.5k|{
 1110|  37.5k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1110:9): [True: 4.47k, False: 33.1k]
  ------------------
 1111|  4.47k|        if (wc) {
  ------------------
  |  Branch (1111:13): [True: 4.47k, False: 0]
  ------------------
 1112|  4.47k|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1113|  4.47k|        }
 1114|  4.47k|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1114:13): [True: 720, False: 3.75k]
  ------------------
 1115|    720|            return false;
 1116|    720|        }
 1117|       |
 1118|  3.75k|        if (wc) {
  ------------------
  |  Branch (1118:13): [True: 3.75k, False: 0]
  ------------------
 1119|  3.75k|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1120|  3.75k|        }
 1121|  3.75k|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1121:17): [True: 3.11k, False: 643]
  ------------------
 1122|  3.75k|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1122:17): [True: 140, False: 503]
  ------------------
 1123|  4.47k|    }
 1124|  33.1k|    return false;
 1125|  37.5k|}
flow.c:is_icmpv6:
 1097|  37.5k|{
 1098|  37.5k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1098:9): [True: 37.5k, False: 30]
  ------------------
 1099|  37.5k|        if (wc) {
  ------------------
  |  Branch (1099:13): [True: 37.5k, False: 0]
  ------------------
 1100|  37.5k|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1101|  37.5k|        }
 1102|  37.5k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1103|  37.5k|    }
 1104|     30|    return false;
 1105|  37.5k|}
flow.c:get_dl_type:
 1026|  37.5k|{
 1027|  37.5k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1027:9): [True: 37.4k, False: 117]
  ------------------
 1028|  37.4k|        return flow->dl_type;
 1029|  37.4k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1029:16): [True: 87, False: 30]
  ------------------
 1030|     87|        return pt_ns_type_be(flow->packet_type);
 1031|     87|    } else {
 1032|     30|        return htons(FLOW_DL_TYPE_NONE);
 1033|     30|    }
 1034|  37.5k|}
flow.c:flowmap_init:
  342|  78.1k|{
  343|  78.1k|    memset(fm, 0, sizeof *fm);
  344|  78.1k|}
flow.c:flow_equal:
  183|   148k|{
  184|   148k|    return !flow_compare_3way(a, b);
  185|   148k|}
flow.c:flow_compare_3way:
  177|   148k|{
  178|   148k|    return memcmp(a, b, sizeof *a);
  179|   148k|}
flow.c:flow_set_xreg:
  148|  10.2k|{
  149|  10.2k|    flow->regs[idx * 2] = value >> 32;
  150|  10.2k|    flow->regs[idx * 2 + 1] = value;
  151|  10.2k|}
flow.c:flow_set_xxreg:
  168|  4.64k|{
  169|  4.64k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  170|  4.64k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  171|  4.64k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  172|  4.64k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  173|  4.64k|}
flow.c:miniflow_get_values:
  534|   271k|{
  535|   271k|    return (const uint64_t *)(mf + 1);
  536|   271k|}
flow.c:flowmap_next_index:
  478|   797k|{
  479|   954k|    for (;;) {
  480|   954k|        map_t *map = &aux->map.bits[aux->unit];
  481|   954k|        if (*map) {
  ------------------
  |  Branch (481:13): [True: 641k, False: 312k]
  ------------------
  482|   641k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  269|   641k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  483|   641k|            *map = zero_rightmost_1bit(*map);
  484|   641k|            return true;
  485|   641k|        }
  486|   312k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  279|   312k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  296|   312k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (486:13): [True: 156k, False: 156k]
  ------------------
  487|   156k|            return false;
  488|   156k|        }
  489|   312k|    }
  490|   797k|}
flow.c:flow_u64_value:
  556|  7.20M|{
  557|  7.20M|    return ((uint64_t *)flow)[index];
  558|  7.20M|}
flow.c:miniflow_n_values:
  567|  78.1k|{
  568|  78.1k|    return flowmap_n_1bits(flow->map);
  569|  78.1k|}
flow.c:flowmap_n_1bits:
  461|  78.1k|{
  462|  78.1k|    unsigned int n_1bits = 0;
  463|  78.1k|    size_t unit;
  464|       |
  465|   156k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  319|   234k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  279|   234k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|   234k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (319:22): [True: 156k, False: 78.1k]
  |  |  ------------------
  ------------------
  466|   156k|        n_1bits += count_1bits(fm.bits[unit]);
  467|   156k|    }
  468|  78.1k|    return n_1bits;
  469|  78.1k|}
flow.c:flow_union_with_miniflow:
  937|   271k|{
  938|   271k|    flow_union_with_miniflow_subset(dst, src, src->map);
  939|   271k|}
flow.c:flow_union_with_miniflow_subset:
  918|   271k|{
  919|   271k|    uint64_t *dst_u64 = (uint64_t *) dst;
  920|   271k|    const uint64_t *p = miniflow_get_values(src);
  921|   271k|    map_t map;
  922|       |
  923|   542k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  323|   271k|    for (size_t unit__ = 0;                                       \
  |  |  324|   813k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  279|   813k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|  1.62M|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (324:10): [True: 542k, False: 271k]
  |  |  |  Branch (324:36): [True: 542k, False: 0]
  |  |  ------------------
  |  |  325|   542k|         unit__++)
  ------------------
  924|   542k|        size_t idx;
  925|       |
  926|  1.27M|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  277|   542k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|   542k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|  1.82M|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 1.27M, False: 542k]
  |  |  |  |  |  Branch (286:19): [True: 1.27M, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|  1.27M|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  927|  1.27M|            dst_u64[idx] |= *p++;
  928|  1.27M|        }
  929|   542k|        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  269|   542k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  930|   542k|    }
  931|   271k|}
match.c:flow_set_xreg:
  148|  10.2k|{
  149|  10.2k|    flow->regs[idx * 2] = value >> 32;
  150|  10.2k|    flow->regs[idx * 2 + 1] = value;
  151|  10.2k|}
match.c:flow_set_xxreg:
  168|  4.64k|{
  169|  4.64k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  170|  4.64k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  171|  4.64k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  172|  4.64k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  173|  4.64k|}
match.c:u16_to_ofp:
  213|   275k|{
  214|   275k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   275k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|   275k|}
match.c:is_ip_any:
 1049|   413k|{
 1050|   413k|    return dl_type_is_ip_any(get_dl_type(flow));
 1051|   413k|}
match.c:get_dl_type:
 1026|   413k|{
 1027|   413k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1027:9): [True: 396k, False: 16.2k]
  ------------------
 1028|   396k|        return flow->dl_type;
 1029|   396k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1029:16): [True: 11.7k, False: 4.45k]
  ------------------
 1030|  11.7k|        return pt_ns_type_be(flow->packet_type);
 1031|  11.7k|    } else {
 1032|  4.45k|        return htons(FLOW_DL_TYPE_NONE);
 1033|  4.45k|    }
 1034|   413k|}
meta-flow.c:flow_get_xreg:
  142|  15.0k|{
  143|  15.0k|    return ((uint64_t) flow->regs[idx * 2] << 32) | flow->regs[idx * 2 + 1];
  144|  15.0k|}
meta-flow.c:flow_get_xxreg:
  155|  5.24k|{
  156|  5.24k|    ovs_u128 value;
  157|       |
  158|  5.24k|    value.u64.hi = (uint64_t) flow->regs[idx * 4] << 32;
  159|  5.24k|    value.u64.hi |= flow->regs[idx * 4 + 1];
  160|  5.24k|    value.u64.lo = (uint64_t) flow->regs[idx * 4 + 2] << 32;
  161|  5.24k|    value.u64.lo |= flow->regs[idx * 4 + 3];
  162|       |
  163|  5.24k|    return value;
  164|  5.24k|}
meta-flow.c:get_dl_type:
 1026|   101k|{
 1027|   101k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1027:9): [True: 100k, False: 882]
  ------------------
 1028|   100k|        return flow->dl_type;
 1029|   100k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1029:16): [True: 420, False: 462]
  ------------------
 1030|    420|        return pt_ns_type_be(flow->packet_type);
 1031|    462|    } else {
 1032|    462|        return htons(FLOW_DL_TYPE_NONE);
 1033|    462|    }
 1034|   101k|}
meta-flow.c:is_ethernet:
 1018|    124|{
 1019|    124|    if (wc) {
  ------------------
  |  Branch (1019:9): [True: 0, False: 124]
  ------------------
 1020|      0|        WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1021|      0|    }
 1022|    124|    return flow->packet_type == htonl(PT_ETH);
 1023|    124|}
meta-flow.c:is_vlan:
 1038|     19|{
 1039|     19|    if (!is_ethernet(flow, wc)) {
  ------------------
  |  Branch (1039:9): [True: 1, False: 18]
  ------------------
 1040|      1|        return false;
 1041|      1|    }
 1042|     18|    if (wc) {
  ------------------
  |  Branch (1042:9): [True: 0, False: 18]
  ------------------
 1043|      0|        WC_MASK_FIELD_MASK(wc, vlans[0].tci, htons(VLAN_CFI));
  ------------------
  |  |  203|      0|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 1044|      0|    }
 1045|     18|    return (flow->vlans[0].tci & htons(VLAN_CFI)) != 0;
 1046|     19|}
meta-flow.c:is_ip_any:
 1049|  5.02k|{
 1050|  5.02k|    return dl_type_is_ip_any(get_dl_type(flow));
 1051|  5.02k|}
meta-flow.c:is_ct_valid:
  944|  3.71k|{
  945|       |    /* Matches are checked with 'mask' and without 'wc'. */
  946|  3.71k|    if (mask && !wc) {
  ------------------
  |  Branch (946:9): [True: 3.71k, False: 0]
  |  Branch (946:17): [True: 3.71k, False: 0]
  ------------------
  947|       |        /* Must match at least one of the bits that implies a valid
  948|       |         * conntrack entry, or an explicit not-invalid. */
  949|  3.71k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (949:16): [True: 2.31k, False: 1.40k]
  ------------------
  950|  3.71k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  951|  3.71k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (951:17): [True: 11, False: 1.39k]
  ------------------
  952|  1.40k|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (952:20): [True: 10, False: 1]
  ------------------
  953|  1.40k|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (953:20): [True: 0, False: 10]
  ------------------
  954|  3.71k|    }
  955|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  956|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  958|      0|    if (wc) {
  ------------------
  |  Branch (958:9): [True: 0, False: 0]
  ------------------
  959|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  960|      0|    }
  961|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  962|  3.71k|}
meta-flow.c:is_tcp:
 1067|     93|{
 1068|     93|    return is_ip_proto(flow, IPPROTO_TCP, wc);
 1069|     93|}
meta-flow.c:is_ip_proto:
 1055|  4.96k|{
 1056|  4.96k|    if (is_ip_any(flow)) {
  ------------------
  |  Branch (1056:9): [True: 2.65k, False: 2.30k]
  ------------------
 1057|  2.65k|        if (wc) {
  ------------------
  |  Branch (1057:13): [True: 0, False: 2.65k]
  ------------------
 1058|      0|            WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1059|      0|        }
 1060|  2.65k|        return flow->nw_proto == ip_proto;
 1061|  2.65k|    }
 1062|  2.30k|    return false;
 1063|  4.96k|}
meta-flow.c:is_udp:
 1073|  1.53k|{
 1074|  1.53k|    return is_ip_proto(flow, IPPROTO_UDP, wc);
 1075|  1.53k|}
meta-flow.c:is_sctp:
 1079|  3.33k|{
 1080|  3.33k|    return is_ip_proto(flow, IPPROTO_SCTP, wc);
 1081|  3.33k|}
meta-flow.c:is_icmpv4:
 1085|  1.68k|{
 1086|  1.68k|    if (get_dl_type(flow) == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1086:9): [True: 1.44k, False: 243]
  ------------------
 1087|  1.44k|        if (wc) {
  ------------------
  |  Branch (1087:13): [True: 0, False: 1.44k]
  ------------------
 1088|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1089|      0|        }
 1090|  1.44k|        return flow->nw_proto == IPPROTO_ICMP;
 1091|  1.44k|    }
 1092|    243|    return false;
 1093|  1.68k|}
meta-flow.c:is_icmpv6:
 1097|    195|{
 1098|    195|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1098:9): [True: 32, False: 163]
  ------------------
 1099|     32|        if (wc) {
  ------------------
  |  Branch (1099:13): [True: 0, False: 32]
  ------------------
 1100|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1101|      0|        }
 1102|     32|        return flow->nw_proto == IPPROTO_ICMPV6;
 1103|     32|    }
 1104|    163|    return false;
 1105|    195|}
meta-flow.c:is_nd:
 1109|    153|{
 1110|    153|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1110:9): [True: 0, False: 153]
  ------------------
 1111|      0|        if (wc) {
  ------------------
  |  Branch (1111:13): [True: 0, False: 0]
  ------------------
 1112|      0|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1113|      0|        }
 1114|      0|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1114:13): [True: 0, False: 0]
  ------------------
 1115|      0|            return false;
 1116|      0|        }
 1117|       |
 1118|      0|        if (wc) {
  ------------------
  |  Branch (1118:13): [True: 0, False: 0]
  ------------------
 1119|      0|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1120|      0|        }
 1121|      0|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1121:17): [True: 0, False: 0]
  ------------------
 1122|      0|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1122:17): [True: 0, False: 0]
  ------------------
 1123|      0|    }
 1124|    153|    return false;
 1125|    153|}
meta-flow.c:ofp_to_u16:
  195|  1.72k|{
  196|  1.72k|    return (OVS_FORCE uint16_t) ofp_port;
  197|  1.72k|}
meta-flow.c:u16_to_ofp:
  213|  23.7k|{
  214|  23.7k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  23.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|  23.7k|}
ofp-actions.c:u16_to_ofp:
  213|   117k|{
  214|   117k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   117k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|   117k|}
ofp-actions.c:ofp_to_u16:
  195|   274k|{
  196|   274k|    return (OVS_FORCE uint16_t) ofp_port;
  197|   274k|}
ofp-actions.c:get_dl_type:
 1026|   142k|{
 1027|   142k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1027:9): [True: 117k, False: 24.5k]
  ------------------
 1028|   117k|        return flow->dl_type;
 1029|   117k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1029:16): [True: 24.3k, False: 188]
  ------------------
 1030|  24.3k|        return pt_ns_type_be(flow->packet_type);
 1031|  24.3k|    } else {
 1032|    188|        return htons(FLOW_DL_TYPE_NONE);
 1033|    188|    }
 1034|   142k|}
ofp-actions.c:is_ip_any:
 1049|  66.5k|{
 1050|  66.5k|    return dl_type_is_ip_any(get_dl_type(flow));
 1051|  66.5k|}
ofp-actions.c:is_ct_valid:
  944|     11|{
  945|       |    /* Matches are checked with 'mask' and without 'wc'. */
  946|     11|    if (mask && !wc) {
  ------------------
  |  Branch (946:9): [True: 11, False: 0]
  |  Branch (946:17): [True: 11, False: 0]
  ------------------
  947|       |        /* Must match at least one of the bits that implies a valid
  948|       |         * conntrack entry, or an explicit not-invalid. */
  949|     11|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (949:16): [True: 0, False: 11]
  ------------------
  950|     11|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  951|     11|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (951:17): [True: 0, False: 11]
  ------------------
  952|     11|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (952:20): [True: 0, False: 0]
  ------------------
  953|     11|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (953:20): [True: 0, False: 0]
  ------------------
  954|     11|    }
  955|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  956|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  958|      0|    if (wc) {
  ------------------
  |  Branch (958:9): [True: 0, False: 0]
  ------------------
  959|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  960|      0|    }
  961|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  957|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  962|     11|}
ofp-flow.c:u16_to_ofp:
  213|   154k|{
  214|   154k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   154k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|   154k|}
ofp-match.c:u16_to_ofp:
  213|   271k|{
  214|   271k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   271k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|   271k|}
ofp-monitor.c:u16_to_ofp:
  213|  6.17k|{
  214|  6.17k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  6.17k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|  6.17k|}
ofp-packet.c:u16_to_ofp:
  213|  86.1k|{
  214|  86.1k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  86.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|  86.1k|}
ofp-packet.c:u32_to_odp:
  219|  1.58k|{
  220|  1.58k|    return ODP_PORT_C(port);
  ------------------
  |  |  158|  1.58k|#define ODP_PORT_C(X) ((OVS_FORCE odp_port_t) (X))
  ------------------
  221|  1.58k|}
ofp-packet.c:ofp_to_u16:
  195|   119k|{
  196|   119k|    return (OVS_FORCE uint16_t) ofp_port;
  197|   119k|}
ofp-port.c:ofp_to_u16:
  195|   766k|{
  196|   766k|    return (OVS_FORCE uint16_t) ofp_port;
  197|   766k|}
ofp-port.c:u16_to_ofp:
  213|   341k|{
  214|   341k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   341k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  215|   341k|}
ofp-port.c:ofp11_to_u32:
  207|  70.4k|{
  208|  70.4k|    return (OVS_FORCE uint32_t) ofp11_port;
  209|  70.4k|}

hash_bytes:
   31|    209|{
   32|    209|    const uint32_t *p = p_;
   33|    209|    size_t orig_n = n;
   34|    209|    uint32_t hash;
   35|       |
   36|    209|    hash = basis;
   37|  1.01k|    while (n >= 4) {
  ------------------
  |  Branch (37:12): [True: 805, False: 209]
  ------------------
   38|    805|        hash = hash_add(hash, get_unaligned_u32(p));
   39|    805|        n -= 4;
   40|    805|        p += 1;
   41|    805|    }
   42|       |
   43|    209|    if (n) {
  ------------------
  |  Branch (43:9): [True: 170, False: 39]
  ------------------
   44|    170|        uint32_t tmp = 0;
   45|       |
   46|    170|        memcpy(&tmp, p, n);
   47|    170|        hash = hash_add(hash, tmp);
   48|    170|    }
   49|       |
   50|    209|    return hash_finish(hash, orig_n);
   51|    209|}

flow.c:hash_add64:
  113|  79.8k|{
  114|  79.8k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  79.8k|}
flow.c:hash_add:
  108|   227k|{
  109|   227k|    return mhash_add(hash, data);
  110|   227k|}
flow.c:mhash_add:
   77|   227k|{
   78|   227k|    hash = mhash_add__(hash, data);
   79|   227k|    hash = hash_rot(hash, 13);
   80|   227k|    return hash * 5 + 0xe6546b64;
   81|   227k|}
flow.c:mhash_add__:
   64|   227k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   227k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 46.9k, False: 181k]
  ------------------
   67|  46.9k|        return hash;
   68|  46.9k|    }
   69|       |
   70|   181k|    data *= 0xcc9e2d51;
   71|   181k|    data = hash_rot(data, 15);
   72|   181k|    data *= 0x1b873593;
   73|   181k|    return hash ^ data;
   74|   227k|}
flow.c:hash_rot:
   31|   408k|{
   32|   408k|    return (x << k) | (x >> (32 - k));
   33|   408k|}
flow.c:hash_finish:
  118|  27.0k|{
  119|  27.0k|    return mhash_finish(hash ^ final);
  120|  27.0k|}
flow.c:mhash_finish:
   84|  27.0k|{
   85|  27.0k|    hash ^= hash >> 16;
   86|  27.0k|    hash *= 0x85ebca6b;
   87|  27.0k|    hash ^= hash >> 13;
   88|  27.0k|    hash *= 0xc2b2ae35;
   89|  27.0k|    hash ^= hash >> 16;
   90|  27.0k|    return hash;
   91|  27.0k|}
hash.c:hash_finish:
  118|    209|{
  119|    209|    return mhash_finish(hash ^ final);
  120|    209|}
hash.c:mhash_finish:
   84|    209|{
   85|    209|    hash ^= hash >> 16;
   86|    209|    hash *= 0x85ebca6b;
   87|    209|    hash ^= hash >> 13;
   88|    209|    hash *= 0xc2b2ae35;
   89|    209|    hash ^= hash >> 16;
   90|    209|    return hash;
   91|    209|}
hash.c:hash_add:
  108|    975|{
  109|    975|    return mhash_add(hash, data);
  110|    975|}
hash.c:mhash_add:
   77|    975|{
   78|    975|    hash = mhash_add__(hash, data);
   79|    975|    hash = hash_rot(hash, 13);
   80|    975|    return hash * 5 + 0xe6546b64;
   81|    975|}
hash.c:mhash_add__:
   64|    975|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|    975|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 0, False: 975]
  ------------------
   67|      0|        return hash;
   68|      0|    }
   69|       |
   70|    975|    data *= 0xcc9e2d51;
   71|    975|    data = hash_rot(data, 15);
   72|    975|    data *= 0x1b873593;
   73|    975|    return hash ^ data;
   74|    975|}
hash.c:hash_rot:
   31|  1.95k|{
   32|  1.95k|    return (x << k) | (x >> (32 - k));
   33|  1.95k|}
nx-match.c:hash_string:
  404|    209|{
  405|    209|    return hash_bytes(s, strlen(s), basis);
  406|    209|}
nx-match.c:hash_uint64:
  164|  14.4M|{
  165|  14.4M|    return hash_uint64_basis(x, 0);
  166|  14.4M|}
nx-match.c:hash_uint64_basis:
  159|  14.4M|{
  160|  14.4M|    return hash_finish(hash_add64(basis, x), 8);
  161|  14.4M|}
nx-match.c:hash_finish:
  118|  14.4M|{
  119|  14.4M|    return mhash_finish(hash ^ final);
  120|  14.4M|}
nx-match.c:mhash_finish:
   84|  14.4M|{
   85|  14.4M|    hash ^= hash >> 16;
   86|  14.4M|    hash *= 0x85ebca6b;
   87|  14.4M|    hash ^= hash >> 13;
   88|  14.4M|    hash *= 0xc2b2ae35;
   89|  14.4M|    hash ^= hash >> 16;
   90|  14.4M|    return hash;
   91|  14.4M|}
nx-match.c:hash_add64:
  113|  14.4M|{
  114|  14.4M|    return hash_add(hash_add(hash, data), data >> 32);
  115|  14.4M|}
nx-match.c:hash_add:
  108|  28.9M|{
  109|  28.9M|    return mhash_add(hash, data);
  110|  28.9M|}
nx-match.c:mhash_add:
   77|  28.9M|{
   78|  28.9M|    hash = mhash_add__(hash, data);
   79|  28.9M|    hash = hash_rot(hash, 13);
   80|  28.9M|    return hash * 5 + 0xe6546b64;
   81|  28.9M|}
nx-match.c:mhash_add__:
   64|  28.9M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  28.9M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 13.3M, False: 15.5M]
  ------------------
   67|  13.3M|        return hash;
   68|  13.3M|    }
   69|       |
   70|  15.5M|    data *= 0xcc9e2d51;
   71|  15.5M|    data = hash_rot(data, 15);
   72|  15.5M|    data *= 0x1b873593;
   73|  15.5M|    return hash ^ data;
   74|  28.9M|}
nx-match.c:hash_rot:
   31|  44.5M|{
   32|  44.5M|    return (x << k) | (x >> (32 - k));
   33|  44.5M|}
ofp-actions.c:hash_2words:
  153|   664k|{
  154|   664k|    return hash_finish(hash_add(hash_add(x, 0), y), 8);
  155|   664k|}
ofp-actions.c:hash_finish:
  118|   664k|{
  119|   664k|    return mhash_finish(hash ^ final);
  120|   664k|}
ofp-actions.c:mhash_finish:
   84|   664k|{
   85|   664k|    hash ^= hash >> 16;
   86|   664k|    hash *= 0x85ebca6b;
   87|   664k|    hash ^= hash >> 13;
   88|   664k|    hash *= 0xc2b2ae35;
   89|   664k|    hash ^= hash >> 16;
   90|   664k|    return hash;
   91|   664k|}
ofp-actions.c:hash_add:
  108|  1.32M|{
  109|  1.32M|    return mhash_add(hash, data);
  110|  1.32M|}
ofp-actions.c:mhash_add:
   77|  1.32M|{
   78|  1.32M|    hash = mhash_add__(hash, data);
   79|  1.32M|    hash = hash_rot(hash, 13);
   80|  1.32M|    return hash * 5 + 0xe6546b64;
   81|  1.32M|}
ofp-actions.c:mhash_add__:
   64|  1.32M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  1.32M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 664k, False: 664k]
  ------------------
   67|   664k|        return hash;
   68|   664k|    }
   69|       |
   70|   664k|    data *= 0xcc9e2d51;
   71|   664k|    data = hash_rot(data, 15);
   72|   664k|    data *= 0x1b873593;
   73|   664k|    return hash ^ data;
   74|  1.32M|}
ofp-actions.c:hash_rot:
   31|  1.99M|{
   32|  1.99M|    return (x << k) | (x >> (32 - k));
   33|  1.99M|}
ofp-msgs.c:hash_finish:
  118|  8.46M|{
  119|  8.46M|    return mhash_finish(hash ^ final);
  120|  8.46M|}
ofp-msgs.c:mhash_finish:
   84|  8.46M|{
   85|  8.46M|    hash ^= hash >> 16;
   86|  8.46M|    hash *= 0x85ebca6b;
   87|  8.46M|    hash ^= hash >> 13;
   88|  8.46M|    hash *= 0xc2b2ae35;
   89|  8.46M|    hash ^= hash >> 16;
   90|  8.46M|    return hash;
   91|  8.46M|}
ofp-msgs.c:hash_add:
  108|  25.3M|{
  109|  25.3M|    return mhash_add(hash, data);
  110|  25.3M|}
ofp-msgs.c:mhash_add:
   77|  25.3M|{
   78|  25.3M|    hash = mhash_add__(hash, data);
   79|  25.3M|    hash = hash_rot(hash, 13);
   80|  25.3M|    return hash * 5 + 0xe6546b64;
   81|  25.3M|}
ofp-msgs.c:mhash_add__:
   64|  25.3M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  25.3M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 16.4M, False: 8.93M]
  ------------------
   67|  16.4M|        return hash;
   68|  16.4M|    }
   69|       |
   70|  8.93M|    data *= 0xcc9e2d51;
   71|  8.93M|    data = hash_rot(data, 15);
   72|  8.93M|    data *= 0x1b873593;
   73|  8.93M|    return hash ^ data;
   74|  25.3M|}
ofp-msgs.c:hash_rot:
   31|  34.3M|{
   32|  34.3M|    return (x << k) | (x >> (32 - k));
   33|  34.3M|}
ofp-msgs.c:hash_bytes32:
  393|  8.46M|{
  394|  8.46M|    return hash_words(p, n_bytes / 4, basis);
  395|  8.46M|}
ofp-msgs.c:hash_words:
  358|  8.46M|{
  359|  8.46M|    if (__builtin_constant_p(n_words)) {
  ------------------
  |  Branch (359:9): [True: 8.46M, False: 0]
  ------------------
  360|  8.46M|        return hash_words_inline(p, n_words, basis);
  361|  8.46M|    } else {
  362|      0|        return hash_words__(p, n_words, basis);
  363|      0|    }
  364|  8.46M|}
ofp-msgs.c:hash_words_inline:
  129|  8.46M|{
  130|  8.46M|    return hash_finish(hash_add_words(basis, p, n_words), n_words * 4);
  131|  8.46M|}
ofp-msgs.c:hash_add_words:
  429|  8.46M|{
  430|  33.8M|    for (size_t i = 0; i < n_words; i++) {
  ------------------
  |  Branch (430:24): [True: 25.3M, False: 8.46M]
  ------------------
  431|  25.3M|        hash = hash_add(hash, p[i]);
  432|  25.3M|    }
  433|  8.46M|    return hash;
  434|  8.46M|}

hmap_init:
   36|     32|{
   37|     32|    hmap->buckets = &hmap->one;
   38|     32|    hmap->one = NULL;
   39|     32|    hmap->mask = 0;
   40|     32|    hmap->n = 0;
   41|     32|}
hmap_destroy:
   47|     28|{
   48|     28|    if (hmap && hmap->buckets != &hmap->one) {
  ------------------
  |  Branch (48:9): [True: 28, False: 0]
  |  Branch (48:17): [True: 24, False: 4]
  ------------------
   49|     24|        free(hmap->buckets);
   50|     24|    }
   51|     28|}
hmap_swap:
   72|     28|{
   73|     28|    struct hmap tmp = *a;
   74|     28|    *a = *b;
   75|     28|    *b = tmp;
   76|     28|    hmap_moved(a);
   77|     28|    hmap_moved(b);
   78|     28|}
hmap_moved:
   84|     56|{
   85|     56|    if (!hmap->mask) {
  ------------------
  |  Branch (85:9): [True: 4, False: 52]
  ------------------
   86|      4|        hmap->buckets = &hmap->one;
   87|      4|    }
   88|     56|}
hmap_expand_at:
  171|     28|{
  172|     28|    size_t new_mask = calc_mask(hmap->n);
  173|     28|    if (new_mask > hmap->mask) {
  ------------------
  |  Branch (173:9): [True: 28, False: 0]
  ------------------
  174|     28|        COVERAGE_INC(hmap_expand);
  ------------------
  |  |   83|     28|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     28|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  175|     28|        resize(hmap, new_mask, where);
  176|     28|    }
  177|     28|}
hmap.c:calc_mask:
  146|     28|{
  147|     28|    size_t mask = capacity / 2;
  148|     28|    mask |= mask >> 1;
  149|     28|    mask |= mask >> 2;
  150|     28|    mask |= mask >> 4;
  151|     28|    mask |= mask >> 8;
  152|     28|    mask |= mask >> 16;
  153|     28|#if SIZE_MAX > UINT32_MAX
  154|     28|    mask |= mask >> 32;
  155|     28|#endif
  156|       |
  157|       |    /* If we need to dynamically allocate buckets we might as well allocate at
  158|       |     * least 4 of them. */
  159|     28|    mask |= (mask & 1) << 1;
  160|       |
  161|     28|    return mask;
  162|     28|}
hmap.c:resize:
   92|     28|{
   93|     28|    struct hmap tmp;
   94|     28|    size_t i;
   95|       |
   96|     28|    ovs_assert(is_pow2(new_mask + 1));
  ------------------
  |  |   58|     28|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
   97|       |
   98|     28|    hmap_init(&tmp);
   99|     28|    if (new_mask) {
  ------------------
  |  Branch (99:9): [True: 28, False: 0]
  ------------------
  100|     28|        tmp.buckets = xmalloc(sizeof *tmp.buckets * (new_mask + 1));
  101|     28|        tmp.mask = new_mask;
  102|  3.08k|        for (i = 0; i <= tmp.mask; i++) {
  ------------------
  |  Branch (102:21): [True: 3.05k, False: 28]
  ------------------
  103|  3.05k|            tmp.buckets[i] = NULL;
  104|  3.05k|        }
  105|     28|    }
  106|     28|    int n_big_buckets = 0;
  107|     28|    int biggest_count = 0;
  108|     28|    int n_biggest_buckets = 0;
  109|  1.55k|    for (i = 0; i <= hmap->mask; i++) {
  ------------------
  |  Branch (109:17): [True: 1.52k, False: 28]
  ------------------
  110|  1.52k|        struct hmap_node *node, *next;
  111|  1.52k|        int count = 0;
  112|  4.57k|        for (node = hmap->buckets[i]; node; node = next) {
  ------------------
  |  Branch (112:39): [True: 3.04k, False: 1.52k]
  ------------------
  113|  3.04k|            next = node->next;
  114|  3.04k|            hmap_insert_fast(&tmp, node, node->hash);
  115|  3.04k|            count++;
  116|  3.04k|        }
  117|  1.52k|        if (count > 5) {
  ------------------
  |  Branch (117:13): [True: 17, False: 1.50k]
  ------------------
  118|     17|            n_big_buckets++;
  119|     17|            if (count > biggest_count) {
  ------------------
  |  Branch (119:17): [True: 8, False: 9]
  ------------------
  120|      8|                biggest_count = count;
  121|      8|                n_biggest_buckets = 1;
  122|      9|            } else if (count == biggest_count) {
  ------------------
  |  Branch (122:24): [True: 1, False: 8]
  ------------------
  123|      1|                n_biggest_buckets++;
  124|      1|            }
  125|     17|        }
  126|  1.52k|    }
  127|     28|    hmap_swap(hmap, &tmp);
  128|     28|    hmap_destroy(&tmp);
  129|       |
  130|     28|    if (n_big_buckets) {
  ------------------
  |  Branch (130:9): [True: 6, False: 22]
  ------------------
  131|      6|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(10, 10);
  ------------------
  |  |  110|      6|        {                                                                 \
  |  |  111|      6|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|     24|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      6|            0,                              /* first_dropped */           \
  |  |  113|      6|            0,                              /* last_dropped */            \
  |  |  114|      6|            0,                              /* n_dropped */               \
  |  |  115|      6|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|      6|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|      6|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|      6|        }
  ------------------
  132|      6|        COVERAGE_INC(hmap_pathological);
  ------------------
  |  |   83|      6|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|      6|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  133|      6|        VLOG_DBG_RL(&rl, "%s: %d bucket%s with 6+ nodes, "
  ------------------
  |  |  225|      6|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      6|    do {                                                                \
  |  |  |  |  287|      6|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      6|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:56): [True: 0, False: 0]
  |  |  |  |  |  Branch (289:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  134|      6|                    "including %d bucket%s with %d nodes "
  135|      6|                    "(%"PRIuSIZE" nodes total across %"PRIuSIZE" buckets)",
  136|      6|                    where,
  137|      6|                    n_big_buckets, n_big_buckets > 1 ? "s" : "",
  138|      6|                    n_biggest_buckets, n_biggest_buckets > 1 ? "s" : "",
  139|      6|                    biggest_count,
  140|      6|                    hmap->n, hmap->mask + 1);
  141|      6|    }
  142|     28|}

learn_check:
   42|  28.9k|{
   43|  28.9k|    const struct ofpact_learn_spec *spec;
   44|  28.9k|    struct match dst_match;
   45|       |
   46|  28.9k|    match_init_catchall(&dst_match);
   47|  55.8k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  28.9k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  80.0k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 55.8k, False: 24.2k]
  |  |  ------------------
  |  |  902|  51.1k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
   48|  55.8k|        enum ofperr error;
   49|       |
   50|       |        /* Check the source. */
   51|  55.8k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  55.8k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (51:13): [True: 1.90k, False: 53.8k]
  ------------------
   52|  1.90k|            error = mf_check_src(&spec->src, src_match);
   53|  1.90k|            if (error) {
  ------------------
  |  Branch (53:17): [True: 1.13k, False: 774]
  ------------------
   54|  1.13k|                return error;
   55|  1.13k|            }
   56|  1.90k|        }
   57|       |
   58|       |        /* Check the destination. */
   59|  54.6k|        switch (spec->dst_type) {
  ------------------
  |  Branch (59:17): [True: 0, False: 54.6k]
  ------------------
   60|  51.6k|        case NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|  51.6k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (60:9): [True: 51.6k, False: 3.05k]
  ------------------
   61|  51.6k|            error = mf_check_src(&spec->dst, &dst_match);
   62|  51.6k|            if (error) {
  ------------------
  |  Branch (62:17): [True: 1.57k, False: 50.0k]
  ------------------
   63|  1.57k|                return error;
   64|  1.57k|            }
   65|  50.0k|            if (spec->src_type & NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  50.0k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (65:17): [True: 50.0k, False: 3]
  ------------------
   66|  50.0k|                mf_write_subfield_value(&spec->dst,
   67|  50.0k|                                        ofpact_learn_spec_imm(spec),
   68|  50.0k|                                        &dst_match);
   69|  50.0k|            }
   70|  50.0k|            break;
   71|       |
   72|  2.28k|        case NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  2.28k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (72:9): [True: 2.28k, False: 52.3k]
  ------------------
   73|  2.28k|            error = mf_check_dst(&spec->dst, &dst_match);
   74|  2.28k|            if (error) {
  ------------------
  |  Branch (74:17): [True: 1.95k, False: 334]
  ------------------
   75|  1.95k|                return error;
   76|  1.95k|            }
   77|    334|            break;
   78|       |
   79|    771|        case NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|    771|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (79:9): [True: 771, False: 53.8k]
  ------------------
   80|       |            /* Nothing to do. */
   81|    771|            break;
   82|  54.6k|        }
   83|  54.6k|    }
   84|  24.2k|    return 0;
   85|  28.9k|}
learn_format:
  494|  26.4k|{
  495|  26.4k|    const struct ofpact_learn_spec *spec;
  496|  26.4k|    struct match match;
  497|       |
  498|  26.4k|    match_init_catchall(&match);
  499|       |
  500|  26.4k|    ds_put_format(s, "%slearn(%s%stable=%s",
  501|  26.4k|                  colors.learn, colors.end, colors.special, colors.end);
  502|  26.4k|    ofputil_format_table(learn->table_id, table_map, s);
  503|  26.4k|    if (learn->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  26.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (503:9): [True: 22.7k, False: 3.76k]
  ------------------
  504|  22.7k|        ds_put_format(s, ",%sidle_timeout=%s%"PRIu16,
  505|  22.7k|                      colors.param, colors.end, learn->idle_timeout);
  506|  22.7k|    }
  507|  26.4k|    if (learn->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  26.4k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (507:9): [True: 19.5k, False: 6.91k]
  ------------------
  508|  19.5k|        ds_put_format(s, ",%shard_timeout=%s%"PRIu16,
  509|  19.5k|                      colors.param, colors.end, learn->hard_timeout);
  510|  19.5k|    }
  511|  26.4k|    if (learn->fin_idle_timeout) {
  ------------------
  |  Branch (511:9): [True: 24.5k, False: 1.92k]
  ------------------
  512|  24.5k|        ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16,
  513|  24.5k|                      colors.param, colors.end, learn->fin_idle_timeout);
  514|  24.5k|    }
  515|  26.4k|    if (learn->fin_hard_timeout) {
  ------------------
  |  Branch (515:9): [True: 25.6k, False: 868]
  ------------------
  516|  25.6k|        ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16,
  517|  25.6k|                      colors.param, colors.end, learn->fin_hard_timeout);
  518|  25.6k|    }
  519|  26.4k|    if (learn->priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|  26.4k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (519:9): [True: 22.7k, False: 3.75k]
  ------------------
  520|  22.7k|        ds_put_format(s, "%s,priority=%s%"PRIu16,
  521|  22.7k|                      colors.special, colors.end, learn->priority);
  522|  22.7k|    }
  523|  26.4k|    if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) {
  ------------------
  |  Branch (523:9): [True: 10.0k, False: 16.4k]
  ------------------
  524|  10.0k|        ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end);
  525|  10.0k|    }
  526|  26.4k|    if (learn->flags & NX_LEARN_F_DELETE_LEARNED) {
  ------------------
  |  Branch (526:9): [True: 3.88k, False: 22.5k]
  ------------------
  527|  3.88k|        ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end);
  528|  3.88k|    }
  529|  26.4k|    if (learn->cookie != 0) {
  ------------------
  |  Branch (529:9): [True: 25.5k, False: 937]
  ------------------
  530|  25.5k|        ds_put_format(s, ",%scookie=%s%#"PRIx64,
  531|  25.5k|                      colors.param, colors.end, ntohll(learn->cookie));
  532|  25.5k|    }
  533|  26.4k|    if (learn->limit != 0) {
  ------------------
  |  Branch (533:9): [True: 962, False: 25.5k]
  ------------------
  534|    962|        ds_put_format(s, ",%slimit=%s%"PRIu32,
  535|    962|                      colors.param, colors.end, learn->limit);
  536|    962|    }
  537|  26.4k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (537:9): [True: 539, False: 25.9k]
  ------------------
  538|    539|        ds_put_format(s, ",%sresult_dst=%s", colors.param, colors.end);
  539|    539|        mf_format_subfield(&learn->result_dst, s);
  540|    539|    }
  541|       |
  542|  49.2k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  26.4k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  75.7k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 49.2k, False: 26.4k]
  |  |  ------------------
  |  |  902|  49.2k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
  543|  49.2k|        unsigned int n_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  296|  49.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
  544|  49.2k|        ds_put_char(s, ',');
  545|       |
  546|  49.2k|        switch (spec->src_type | spec->dst_type) {
  ------------------
  |  Branch (546:17): [True: 0, False: 49.2k]
  ------------------
  547|  46.5k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  822|  46.5k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  825|  46.5k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (547:9): [True: 46.5k, False: 2.65k]
  ------------------
  548|  46.5k|            if (spec->dst.ofs == 0
  ------------------
  |  Branch (548:17): [True: 18.9k, False: 27.5k]
  ------------------
  549|  46.5k|                && spec->dst.n_bits == spec->dst.field->n_bits) {
  ------------------
  |  Branch (549:20): [True: 3.11k, False: 15.8k]
  ------------------
  550|  3.11k|                union mf_value value;
  551|       |
  552|  3.11k|                memset(&value, 0, sizeof value);
  553|  3.11k|                memcpy(&value.b[spec->dst.field->n_bytes - n_bytes],
  554|  3.11k|                       ofpact_learn_spec_imm(spec), n_bytes);
  555|  3.11k|                ds_put_format(s, "%s%s=%s", colors.param,
  556|  3.11k|                              spec->dst.field->name, colors.end);
  557|  3.11k|                mf_format(spec->dst.field, &value, NULL, port_map, s);
  558|  43.4k|            } else {
  559|  43.4k|                ds_put_format(s, "%s", colors.param);
  560|  43.4k|                mf_format_subfield(&spec->dst, s);
  561|  43.4k|                ds_put_format(s, "=%s", colors.end);
  562|  43.4k|                ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  563|  43.4k|            }
  564|  46.5k|            break;
  565|      0|        }
  566|    136|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  821|    136|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|    136|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (566:9): [True: 136, False: 49.1k]
  ------------------
  567|    136|            ds_put_format(s, "%s", colors.param);
  568|    136|            mf_format_subfield(&spec->dst, s);
  569|    136|            ds_put_format(s, "%s", colors.end);
  570|    136|            if (spec->src.field != spec->dst.field ||
  ------------------
  |  Branch (570:17): [True: 17, False: 119]
  ------------------
  571|    136|                spec->src.ofs != spec->dst.ofs) {
  ------------------
  |  Branch (571:17): [True: 99, False: 20]
  ------------------
  572|    116|                ds_put_format(s, "%s=%s", colors.param, colors.end);
  573|    116|                mf_format_subfield(&spec->src, s);
  574|    116|            }
  575|    136|            break;
  576|       |
  577|  1.32k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  822|  1.32k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.32k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (577:9): [True: 1.32k, False: 47.9k]
  ------------------
  578|  1.32k|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  579|  1.32k|            ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  580|  1.32k|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  581|  1.32k|            mf_format_subfield(&spec->dst, s);
  582|  1.32k|            break;
  583|       |
  584|     10|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  821|     10|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|     10|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (584:9): [True: 10, False: 49.2k]
  ------------------
  585|     10|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  586|     10|            mf_format_subfield(&spec->src, s);
  587|     10|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  588|     10|            mf_format_subfield(&spec->dst, s);
  589|     10|            break;
  590|       |
  591|  1.18k|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  821|  1.18k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|  1.18k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (591:9): [True: 1.18k, False: 48.0k]
  ------------------
  592|  1.18k|            ds_put_format(s, "%soutput:%s", colors.special, colors.end);
  593|  1.18k|            mf_format_subfield(&spec->src, s);
  594|  1.18k|            break;
  595|  49.2k|        }
  596|  49.2k|    }
  597|  26.4k|    ds_put_format(s, "%s)%s", colors.learn, colors.end);
  598|  26.4k|}

match_wc_init:
   47|   114k|{
   48|   114k|    match->flow = *flow;
   49|       |
   50|   114k|    flow_wildcards_init_for_packet(&match->wc, flow);
   51|   114k|    WC_MASK_FIELD(&match->wc, regs);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   52|   114k|    WC_MASK_FIELD(&match->wc, metadata);
  ------------------
  |  |  201|   114k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   53|       |
   54|   114k|    memset(&match->tun_md, 0, sizeof match->tun_md);
   55|   114k|}
match_init_catchall:
   60|   823k|{
   61|   823k|    memset(&match->flow, 0, sizeof match->flow);
   62|   823k|    flow_wildcards_init_catchall(&match->wc);
   63|   823k|    memset(&match->tun_md, 0, sizeof match->tun_md);
   64|   823k|}
match_zero_wildcarded_fields:
   76|   263k|{
   77|   263k|    flow_zero_wildcards(&match->flow, &match->wc);
   78|   263k|}
match_set_dp_hash:
   82|    307|{
   83|    307|    match_set_dp_hash_masked(match, value, UINT32_MAX);
   84|    307|}
match_set_dp_hash_masked:
   88|  2.96k|{
   89|  2.96k|    match->wc.masks.dp_hash = mask;
   90|  2.96k|    match->flow.dp_hash = value & mask;
   91|  2.96k|}
match_set_recirc_id:
   95|    165|{
   96|    165|    match->flow.recirc_id = value;
   97|    165|    match->wc.masks.recirc_id = UINT32_MAX;
   98|    165|}
match_set_conj_id:
  102|  1.59k|{
  103|  1.59k|    match->flow.conj_id = value;
  104|  1.59k|    match->wc.masks.conj_id = UINT32_MAX;
  105|  1.59k|}
match_set_reg:
  109|  3.50k|{
  110|  3.50k|    match_set_reg_masked(match, reg_idx, value, UINT32_MAX);
  111|  3.50k|}
match_set_reg_masked:
  116|  20.2k|{
  117|  20.2k|    ovs_assert(reg_idx < FLOW_N_REGS);
  ------------------
  |  |   58|  20.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  118|  20.2k|    flow_wildcards_set_reg_mask(&match->wc, reg_idx, mask);
  119|  20.2k|    match->flow.regs[reg_idx] = value & mask;
  120|  20.2k|}
match_set_xreg:
  124|    914|{
  125|    914|    match_set_xreg_masked(match, xreg_idx, value, UINT64_MAX);
  126|    914|}
match_set_xreg_masked:
  131|  10.2k|{
  132|  10.2k|    ovs_assert(xreg_idx < FLOW_N_XREGS);
  ------------------
  |  |   58|  10.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  133|  10.2k|    flow_wildcards_set_xreg_mask(&match->wc, xreg_idx, mask);
  134|  10.2k|    flow_set_xreg(&match->flow, xreg_idx, value & mask);
  135|  10.2k|}
match_set_xxreg:
  139|    186|{
  140|    186|    match_set_xxreg_masked(match, xxreg_idx, value, OVS_U128_MAX);
  141|    186|}
match_set_xxreg_masked:
  146|  4.64k|{
  147|  4.64k|    ovs_assert(xxreg_idx < FLOW_N_XXREGS);
  ------------------
  |  |   58|  4.64k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  148|  4.64k|    flow_wildcards_set_xxreg_mask(&match->wc, xxreg_idx, mask);
  149|  4.64k|    flow_set_xxreg(&match->flow, xxreg_idx, ovs_u128_and(value, mask));
  150|  4.64k|}
match_set_actset_output:
  154|    253|{
  155|    253|    match->wc.masks.actset_output = u16_to_ofp(UINT16_MAX);
  156|    253|    match->flow.actset_output = actset_output;
  157|    253|}
match_set_metadata:
  161|     39|{
  162|     39|    match_set_metadata_masked(match, metadata, OVS_BE64_MAX);
  ------------------
  |  |   44|     39|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  163|     39|}
match_set_metadata_masked:
  168|  15.2k|{
  169|  15.2k|    match->wc.masks.metadata = mask;
  170|  15.2k|    match->flow.metadata = metadata & mask;
  171|  15.2k|}
match_set_tun_id:
  175|     19|{
  176|     19|    match_set_tun_id_masked(match, tun_id, OVS_BE64_MAX);
  ------------------
  |  |   44|     19|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  177|     19|}
match_set_tun_id_masked:
  181|  2.23k|{
  182|  2.23k|    match->wc.masks.tunnel.tun_id = mask;
  183|  2.23k|    match->flow.tunnel.tun_id = tun_id & mask;
  184|  2.23k|}
match_set_tun_src:
  188|     44|{
  189|     44|    match_set_tun_src_masked(match, src, OVS_BE32_MAX);
  ------------------
  |  |   43|     44|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  190|     44|}
match_set_tun_src_masked:
  194|    120|{
  195|    120|    match->wc.masks.tunnel.ip_src = mask;
  196|    120|    match->flow.tunnel.ip_src = src & mask;
  197|    120|}
match_set_tun_dst:
  201|    244|{
  202|    244|    match_set_tun_dst_masked(match, dst, OVS_BE32_MAX);
  ------------------
  |  |   43|    244|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  203|    244|}
match_set_tun_dst_masked:
  207|  2.02k|{
  208|  2.02k|    match->wc.masks.tunnel.ip_dst = mask;
  209|  2.02k|    match->flow.tunnel.ip_dst = dst & mask;
  210|  2.02k|}
match_set_tun_ipv6_src:
  214|     16|{
  215|     16|    match->flow.tunnel.ipv6_src = *src;
  216|     16|    match->wc.masks.tunnel.ipv6_src = in6addr_exact;
  217|     16|}
match_set_tun_ipv6_src_masked:
  222|  1.44k|{
  223|  1.44k|    match->flow.tunnel.ipv6_src = ipv6_addr_bitand(src, mask);
  224|  1.44k|    match->wc.masks.tunnel.ipv6_src = *mask;
  225|  1.44k|}
match_set_tun_ipv6_dst:
  229|    283|{
  230|    283|    match->flow.tunnel.ipv6_dst = *dst;
  231|    283|    match->wc.masks.tunnel.ipv6_dst = in6addr_exact;
  232|    283|}
match_set_tun_ipv6_dst_masked:
  237|  1.42k|{
  238|  1.42k|    match->flow.tunnel.ipv6_dst = ipv6_addr_bitand(dst, mask);
  239|  1.42k|    match->wc.masks.tunnel.ipv6_dst = *mask;
  240|  1.42k|}
match_set_tun_flags:
  270|     19|{
  271|     19|    match_set_tun_flags_masked(match, flags, UINT16_MAX);
  272|     19|}
match_set_tun_flags_masked:
  276|    233|{
  277|    233|    mask &= FLOW_TNL_PUB_F_MASK;
  ------------------
  |  |   58|    233|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  278|       |
  279|    233|    match->wc.masks.tunnel.flags = mask;
  280|    233|    match->flow.tunnel.flags = flags & mask;
  281|    233|}
match_set_tun_gbp_id_masked:
  298|  2.21k|{
  299|  2.21k|    match->wc.masks.tunnel.gbp_id = mask;
  300|  2.21k|    match->flow.tunnel.gbp_id = gbp_id & mask;
  301|  2.21k|}
match_set_tun_gbp_id:
  305|  1.21k|{
  306|  1.21k|    match_set_tun_gbp_id_masked(match, gbp_id, OVS_BE16_MAX);
  ------------------
  |  |   42|  1.21k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  307|  1.21k|}
match_set_tun_gbp_flags_masked:
  311|    710|{
  312|    710|    match->wc.masks.tunnel.gbp_flags = mask;
  313|    710|    match->flow.tunnel.gbp_flags = flags & mask;
  314|    710|}
match_set_tun_gbp_flags:
  318|     37|{
  319|     37|    match_set_tun_gbp_flags_masked(match, flags, UINT8_MAX);
  320|     37|}
match_set_tun_erspan_ver_masked:
  324|    222|{
  325|    222|    match->wc.masks.tunnel.erspan_ver = ver;
  326|    222|    match->flow.tunnel.erspan_ver = ver & mask;
  327|    222|}
match_set_tun_erspan_ver:
  331|     67|{
  332|     67|    match_set_tun_erspan_ver_masked(match, ver, UINT8_MAX);
  333|     67|}
match_set_tun_erspan_idx_masked:
  338|     96|{
  339|     96|    match->wc.masks.tunnel.erspan_idx = mask;
  340|     96|    match->flow.tunnel.erspan_idx = erspan_idx & mask;
  341|     96|}
match_set_tun_erspan_idx:
  345|     11|{
  346|     11|    match_set_tun_erspan_idx_masked(match, erspan_idx, UINT32_MAX);
  347|     11|}
match_set_tun_erspan_dir_masked:
  352|  1.65k|{
  353|  1.65k|    match->wc.masks.tunnel.erspan_dir = dir;
  354|  1.65k|    match->flow.tunnel.erspan_dir = dir & mask;
  355|  1.65k|}
match_set_tun_erspan_dir:
  359|    932|{
  360|    932|    match_set_tun_erspan_dir_masked(match, dir, UINT8_MAX);
  361|    932|}
match_set_tun_erspan_hwid_masked:
  366|  5.16k|{
  367|  5.16k|    match->wc.masks.tunnel.erspan_hwid = hwid;
  368|  5.16k|    match->flow.tunnel.erspan_hwid = hwid & mask;
  369|  5.16k|}
match_set_tun_erspan_hwid:
  373|     69|{
  374|     69|    match_set_tun_erspan_hwid_masked(match, hwid, UINT8_MAX);
  375|     69|}
match_set_tun_gtpu_flags_masked:
  380|  2.70k|{
  381|  2.70k|    match->wc.masks.tunnel.gtpu_flags = flags;
  382|  2.70k|    match->flow.tunnel.gtpu_flags = flags & mask;
  383|  2.70k|}
match_set_tun_gtpu_flags:
  387|    931|{
  388|    931|    match_set_tun_gtpu_flags_masked(match, flags, UINT8_MAX);
  389|    931|}
match_set_tun_gtpu_msgtype_masked:
  394|  3.53k|{
  395|  3.53k|    match->wc.masks.tunnel.gtpu_msgtype = msgtype;
  396|  3.53k|    match->flow.tunnel.gtpu_msgtype = msgtype & mask;
  397|  3.53k|}
match_set_tun_gtpu_msgtype:
  401|     17|{
  402|     17|    match_set_tun_gtpu_msgtype_masked(match, msgtype, UINT8_MAX);
  403|     17|}
match_set_in_port:
  407|   275k|{
  408|   275k|    match->wc.masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
  409|   275k|    match->flow.in_port.ofp_port = ofp_port;
  410|   275k|}
match_set_pkt_mark:
  421|  1.65k|{
  422|  1.65k|    match_set_pkt_mark_masked(match, pkt_mark, UINT32_MAX);
  423|  1.65k|}
match_set_pkt_mark_masked:
  427|  1.72k|{
  428|  1.72k|    match->flow.pkt_mark = pkt_mark & mask;
  429|  1.72k|    match->wc.masks.pkt_mark = mask;
  430|  1.72k|}
match_set_ct_state:
  434|  2.36k|{
  435|  2.36k|    match_set_ct_state_masked(match, ct_state, UINT32_MAX);
  436|  2.36k|}
match_set_ct_state_masked:
  440|  4.57k|{
  441|  4.57k|    match->flow.ct_state = ct_state & mask & UINT8_MAX;
  442|  4.57k|    match->wc.masks.ct_state = mask & UINT8_MAX;
  443|  4.57k|}
match_set_ct_zone:
  447|     25|{
  448|     25|    match_set_ct_zone_masked(match, ct_zone, UINT16_MAX);
  449|     25|}
match_set_ct_zone_masked:
  453|     25|{
  454|     25|    match->flow.ct_zone = ct_zone & mask;
  455|     25|    match->wc.masks.ct_zone = mask;
  456|     25|}
match_set_ct_mark:
  460|  2.37k|{
  461|  2.37k|    match_set_ct_mark_masked(match, ct_mark, UINT32_MAX);
  462|  2.37k|}
match_set_ct_mark_masked:
  467|  4.61k|{
  468|  4.61k|    match->flow.ct_mark = ct_mark & mask;
  469|  4.61k|    match->wc.masks.ct_mark = mask;
  470|  4.61k|}
match_set_ct_label:
  474|     29|{
  475|     29|    ovs_u128 mask;
  476|       |
  477|     29|    mask.u64.lo = UINT64_MAX;
  478|     29|    mask.u64.hi = UINT64_MAX;
  479|     29|    match_set_ct_label_masked(match, ct_label, mask);
  480|     29|}
match_set_ct_label_masked:
  484|    870|{
  485|    870|    match->flow.ct_label.u64.lo = value.u64.lo & mask.u64.lo;
  486|    870|    match->flow.ct_label.u64.hi = value.u64.hi & mask.u64.hi;
  487|    870|    match->wc.masks.ct_label = mask;
  488|    870|}
match_set_ct_nw_src:
  492|     28|{
  493|     28|    match->flow.ct_nw_src = ct_nw_src;
  494|     28|    match->wc.masks.ct_nw_src = OVS_BE32_MAX;
  ------------------
  |  |   43|     28|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  495|     28|}
match_set_ct_nw_src_masked:
  500|    448|{
  501|    448|    match->flow.ct_nw_src = ct_nw_src & mask;
  502|    448|    match->wc.masks.ct_nw_src = mask;
  503|    448|}
match_set_ct_nw_dst:
  507|     83|{
  508|     83|    match->flow.ct_nw_dst = ct_nw_dst;
  509|     83|    match->wc.masks.ct_nw_dst = OVS_BE32_MAX;
  ------------------
  |  |   43|     83|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  510|     83|}
match_set_ct_nw_dst_masked:
  515|    796|{
  516|    796|    match->flow.ct_nw_dst = ct_nw_dst & mask;
  517|    796|    match->wc.masks.ct_nw_dst = mask;
  518|    796|}
match_set_ct_nw_proto:
  522|    204|{
  523|    204|    match->flow.ct_nw_proto = ct_nw_proto;
  524|    204|    match->wc.masks.ct_nw_proto = UINT8_MAX;
  525|    204|}
match_set_ct_tp_src:
  529|     10|{
  530|     10|    match_set_ct_tp_src_masked(match, ct_tp_src, OVS_BE16_MAX);
  ------------------
  |  |   42|     10|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  531|     10|}
match_set_ct_tp_src_masked:
  535|    184|{
  536|    184|    match->flow.ct_tp_src = port & mask;
  537|    184|    match->wc.masks.ct_tp_src = mask;
  538|    184|}
match_set_ct_tp_dst:
  542|    523|{
  543|    523|    match_set_ct_tp_dst_masked(match, ct_tp_dst, OVS_BE16_MAX);
  ------------------
  |  |   42|    523|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  544|    523|}
match_set_ct_tp_dst_masked:
  548|  1.47k|{
  549|  1.47k|    match->flow.ct_tp_dst = port & mask;
  550|  1.47k|    match->wc.masks.ct_tp_dst = mask;
  551|  1.47k|}
match_set_ct_ipv6_src:
  555|     10|{
  556|     10|    match->flow.ct_ipv6_src = *src;
  557|     10|    match->wc.masks.ct_ipv6_src = in6addr_exact;
  558|     10|}
match_set_ct_ipv6_src_masked:
  563|  1.19k|{
  564|  1.19k|    match->flow.ct_ipv6_src = ipv6_addr_bitand(src, mask);
  565|  1.19k|    match->wc.masks.ct_ipv6_src = *mask;
  566|  1.19k|}
match_set_ct_ipv6_dst:
  570|     66|{
  571|     66|    match->flow.ct_ipv6_dst = *dst;
  572|     66|    match->wc.masks.ct_ipv6_dst = in6addr_exact;
  573|     66|}
match_set_ct_ipv6_dst_masked:
  578|    631|{
  579|    631|    match->flow.ct_ipv6_dst = ipv6_addr_bitand(dst, mask);
  580|    631|    match->wc.masks.ct_ipv6_dst = *mask;
  581|    631|}
match_set_packet_type:
  585|   395k|{
  586|   395k|    match->flow.packet_type = packet_type;
  587|   395k|    match->wc.masks.packet_type = OVS_BE32_MAX;
  ------------------
  |  |   43|   395k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  588|   395k|}
match_set_default_packet_type:
  594|   243k|{
  595|   243k|    if (!match->wc.masks.packet_type) {
  ------------------
  |  Branch (595:9): [True: 206k, False: 37.6k]
  ------------------
  596|   206k|        match_set_packet_type(match, htonl(PT_ETH));
  597|   206k|    }
  598|   243k|}
match_has_default_packet_type:
  604|   396k|{
  605|   396k|    return (match->flow.packet_type == htonl(PT_ETH)
  ------------------
  |  Branch (605:13): [True: 379k, False: 16.2k]
  ------------------
  606|   396k|            && match->wc.masks.packet_type == OVS_BE32_MAX);
  ------------------
  |  |   43|   379k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (606:16): [True: 379k, False: 0]
  ------------------
  607|   396k|}
match_add_ethernet_prereq:
  627|   360k|{
  628|   360k|    if (field->prereqs != MFP_NONE) {
  ------------------
  |  Branch (628:9): [True: 58.5k, False: 301k]
  ------------------
  629|  58.5k|        match_set_default_packet_type(match);
  630|  58.5k|    }
  631|   360k|}
match_set_dl_type:
  635|  13.1k|{
  636|  13.1k|    match->wc.masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  13.1k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  637|  13.1k|    match->flow.dl_type = dl_type;
  638|  13.1k|}
match_set_dl_src:
  671|  1.30k|{
  672|  1.30k|    set_eth(dl_src, &match->flow.dl_src, &match->wc.masks.dl_src);
  673|  1.30k|}
match_set_dl_src_masked:
  681|  17.2k|{
  682|  17.2k|    set_eth_masked(dl_src, mask, &match->flow.dl_src, &match->wc.masks.dl_src);
  683|  17.2k|}
match_set_dl_dst:
  689|    141|{
  690|    141|    set_eth(dl_dst, &match->flow.dl_dst, &match->wc.masks.dl_dst);
  691|    141|}
match_set_dl_dst_masked:
  702|  17.2k|{
  703|  17.2k|    set_eth_masked(dl_dst, mask, &match->flow.dl_dst, &match->wc.masks.dl_dst);
  704|  17.2k|}
match_set_dl_tci:
  708|     15|{
  709|     15|    match_set_dl_tci_masked(match, tci, htons(0xffff));
  710|     15|}
match_set_dl_tci_masked:
  714|    373|{
  715|    373|    match->flow.vlans[0].tci = tci & mask;
  716|    373|    match->wc.masks.vlans[0].tci = mask;
  717|    373|}
match_set_any_vid:
  724|    159|{
  725|    159|    if (match->wc.masks.vlans[0].tci & htons(VLAN_PCP_MASK)) {
  ------------------
  |  Branch (725:9): [True: 10, False: 149]
  ------------------
  726|     10|        match->wc.masks.vlans[0].tci &= ~htons(VLAN_VID_MASK);
  727|     10|        match->flow.vlans[0].tci &= ~htons(VLAN_VID_MASK);
  728|    149|    } else {
  729|    149|        match_set_dl_tci_masked(match, htons(0), htons(0));
  730|    149|    }
  731|    159|}
match_set_vlan_vid:
  757|    124|{
  758|    124|    match_set_vlan_vid_masked(match, vid, htons(VLAN_VID_MASK | VLAN_CFI));
  759|    124|}
match_set_vlan_vid_masked:
  767|    337|{
  768|    337|    ovs_be16 pcp_mask = htons(VLAN_PCP_MASK);
  769|    337|    ovs_be16 vid_mask = htons(VLAN_VID_MASK | VLAN_CFI);
  770|       |
  771|    337|    mask &= vid_mask;
  772|    337|    flow_set_vlan_vid(&match->flow, vid & mask);
  773|    337|    match->wc.masks.vlans[0].tci =
  774|    337|        mask | (match->wc.masks.vlans[0].tci & pcp_mask);
  775|    337|}
match_set_any_pcp:
  782|     21|{
  783|     21|    if (match->wc.masks.vlans[0].tci & htons(VLAN_VID_MASK)) {
  ------------------
  |  Branch (783:9): [True: 10, False: 11]
  ------------------
  784|     10|        match->wc.masks.vlans[0].tci &= ~htons(VLAN_PCP_MASK);
  785|     10|        match->flow.vlans[0].tci &= ~htons(VLAN_PCP_MASK);
  786|     11|    } else {
  787|     11|        match_set_dl_tci_masked(match, htons(0), htons(0));
  788|     11|    }
  789|     21|}
match_set_dl_vlan_pcp:
  795|     12|{
  796|     12|    flow_set_vlan_pcp(&match->flow, dl_vlan_pcp, id);
  797|     12|    match->wc.masks.vlans[id].tci |= htons(VLAN_CFI | VLAN_PCP_MASK);
  798|     12|}
match_set_any_mpls_label:
  811|     33|{
  812|     33|    match->wc.masks.mpls_lse[idx] &= ~htonl(MPLS_LABEL_MASK);
  813|     33|    flow_set_mpls_label(&match->flow, idx, htonl(0));
  814|     33|}
match_set_mpls_label:
  820|    257|{
  821|    257|    match->wc.masks.mpls_lse[idx] |= htonl(MPLS_LABEL_MASK);
  822|    257|    flow_set_mpls_label(&match->flow, idx, mpls_label);
  823|    257|}
match_set_any_mpls_tc:
  828|     18|{
  829|     18|    match->wc.masks.mpls_lse[idx] &= ~htonl(MPLS_TC_MASK);
  830|     18|    flow_set_mpls_tc(&match->flow, idx, 0);
  831|     18|}
match_set_mpls_tc:
  837|    773|{
  838|    773|    match->wc.masks.mpls_lse[idx] |= htonl(MPLS_TC_MASK);
  839|    773|    flow_set_mpls_tc(&match->flow, idx, mpls_tc);
  840|    773|}
match_set_any_mpls_bos:
  845|    216|{
  846|    216|    match->wc.masks.mpls_lse[idx] &= ~htonl(MPLS_BOS_MASK);
  847|    216|    flow_set_mpls_bos(&match->flow, idx, 0);
  848|    216|}
match_set_mpls_bos:
  854|    352|{
  855|    352|    match->wc.masks.mpls_lse[idx] |= htonl(MPLS_BOS_MASK);
  856|    352|    flow_set_mpls_bos(&match->flow, idx, mpls_bos);
  857|    352|}
match_set_any_mpls_ttl:
  862|    177|{
  863|    177|    match->wc.masks.mpls_lse[idx] &= ~htonl(MPLS_TTL_MASK);
  864|    177|    flow_set_mpls_ttl(&match->flow, idx, 0);
  865|    177|}
match_set_mpls_ttl:
  871|  1.66k|{
  872|  1.66k|    match->wc.masks.mpls_lse[idx] |= htonl(MPLS_TTL_MASK);
  873|  1.66k|    flow_set_mpls_ttl(&match->flow, idx, mpls_ttl);
  874|  1.66k|}
match_set_tp_src:
  886|  4.62k|{
  887|  4.62k|    match_set_tp_src_masked(match, tp_src, OVS_BE16_MAX);
  ------------------
  |  |   42|  4.62k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  888|  4.62k|}
match_set_tp_src_masked:
  892|  4.72k|{
  893|  4.72k|    match->flow.tp_src = port & mask;
  894|  4.72k|    match->wc.masks.tp_src = mask;
  895|  4.72k|}
match_set_tp_dst:
  899|  3.70k|{
  900|  3.70k|    match_set_tp_dst_masked(match, tp_dst, OVS_BE16_MAX);
  ------------------
  |  |   42|  3.70k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  901|  3.70k|}
match_set_tp_dst_masked:
  905|  6.12k|{
  906|  6.12k|    match->flow.tp_dst = port & mask;
  907|  6.12k|    match->wc.masks.tp_dst = mask;
  908|  6.12k|}
match_set_tcp_flags:
  912|     54|{
  913|     54|    match_set_tcp_flags_masked(match, flags, OVS_BE16_MAX);
  ------------------
  |  |   42|     54|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  914|     54|}
match_set_tcp_flags_masked:
  918|  3.62k|{
  919|  3.62k|    match->flow.tcp_flags = flags & mask;
  920|  3.62k|    match->wc.masks.tcp_flags = mask;
  921|  3.62k|}
match_set_nw_proto:
  925|  6.91k|{
  926|  6.91k|    match->flow.nw_proto = nw_proto;
  927|  6.91k|    match->wc.masks.nw_proto = UINT8_MAX;
  928|  6.91k|}
match_set_nw_src:
  940|  1.29k|{
  941|  1.29k|    match->flow.nw_src = nw_src;
  942|  1.29k|    match->wc.masks.nw_src = OVS_BE32_MAX;
  ------------------
  |  |   43|  1.29k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  943|  1.29k|}
match_set_nw_src_masked:
  948|  11.0k|{
  949|  11.0k|    match->flow.nw_src = nw_src & mask;
  950|  11.0k|    match->wc.masks.nw_src = mask;
  951|  11.0k|}
match_set_nw_dst:
  955|    551|{
  956|    551|    match->flow.nw_dst = nw_dst;
  957|    551|    match->wc.masks.nw_dst = OVS_BE32_MAX;
  ------------------
  |  |   43|    551|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  958|    551|}
match_set_nw_dst_masked:
  962|  9.43k|{
  963|  9.43k|    match->flow.nw_dst = ip & mask;
  964|  9.43k|    match->wc.masks.nw_dst = mask;
  965|  9.43k|}
match_set_nw_dscp:
  969|  5.33k|{
  970|  5.33k|    match->wc.masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  720|  5.33k|#define IP_DSCP_MASK 0xfc
  ------------------
  971|  5.33k|    match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  720|  5.33k|#define IP_DSCP_MASK 0xfc
  ------------------
  972|  5.33k|    match->flow.nw_tos |= nw_dscp & IP_DSCP_MASK;
  ------------------
  |  |  720|  5.33k|#define IP_DSCP_MASK 0xfc
  ------------------
  973|  5.33k|}
match_set_nw_ecn:
  977|    114|{
  978|    114|    match->wc.masks.nw_tos |= IP_ECN_MASK;
  ------------------
  |  |  718|    114|#define IP_ECN_MASK 0x03
  ------------------
  979|    114|    match->flow.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  718|    114|#define IP_ECN_MASK 0x03
  ------------------
  980|    114|    match->flow.nw_tos |= nw_ecn & IP_ECN_MASK;
  ------------------
  |  |  718|    114|#define IP_ECN_MASK 0x03
  ------------------
  981|    114|}
match_set_nw_ttl:
  985|     23|{
  986|     23|    match->wc.masks.nw_ttl = UINT8_MAX;
  987|     23|    match->flow.nw_ttl = nw_ttl;
  988|     23|}
match_set_nw_frag:
 1006|    129|{
 1007|    129|    match->wc.masks.nw_frag |= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|    129|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    129|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|    129|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 1008|    129|    match->flow.nw_frag = nw_frag;
 1009|    129|}
match_set_nw_frag_masked:
 1014|    220|{
 1015|    220|    match->flow.nw_frag = nw_frag & mask;
 1016|    220|    match->wc.masks.nw_frag = mask;
 1017|    220|}
match_set_icmp_type:
 1021|  2.37k|{
 1022|  2.37k|    match_set_tp_src(match, htons(icmp_type));
 1023|  2.37k|}
match_set_icmp_code:
 1027|    822|{
 1028|    822|    match_set_tp_dst(match, htons(icmp_code));
 1029|    822|}
match_set_arp_sha:
 1057|     46|{
 1058|     46|    match->flow.arp_sha = sha;
 1059|     46|    match->wc.masks.arp_sha = eth_addr_exact;
 1060|     46|}
match_set_arp_sha_masked:
 1066|    960|{
 1067|    960|    set_eth_masked(arp_sha, mask,
 1068|    960|                   &match->flow.arp_sha, &match->wc.masks.arp_sha);
 1069|    960|}
match_set_arp_tha:
 1073|     32|{
 1074|     32|    match->flow.arp_tha = tha;
 1075|     32|    match->wc.masks.arp_tha = eth_addr_exact;
 1076|     32|}
match_set_arp_tha_masked:
 1082|  2.36k|{
 1083|  2.36k|    set_eth_masked(arp_tha, mask,
 1084|  2.36k|                   &match->flow.arp_tha, &match->wc.masks.arp_tha);
 1085|  2.36k|}
match_set_ipv6_src:
 1089|     11|{
 1090|     11|    match->flow.ipv6_src = *src;
 1091|     11|    match->wc.masks.ipv6_src = in6addr_exact;
 1092|     11|}
match_set_ipv6_src_masked:
 1097|     80|{
 1098|     80|    match->flow.ipv6_src = ipv6_addr_bitand(src, mask);
 1099|     80|    match->wc.masks.ipv6_src = *mask;
 1100|     80|}
match_set_ipv6_dst:
 1104|     18|{
 1105|     18|    match->flow.ipv6_dst = *dst;
 1106|     18|    match->wc.masks.ipv6_dst = in6addr_exact;
 1107|     18|}
match_set_ipv6_dst_masked:
 1112|    968|{
 1113|    968|    match->flow.ipv6_dst = ipv6_addr_bitand(dst, mask);
 1114|    968|    match->wc.masks.ipv6_dst = *mask;
 1115|    968|}
match_set_ipv6_label:
 1119|    824|{
 1120|    824|    match->wc.masks.ipv6_label = OVS_BE32_MAX;
  ------------------
  |  |   43|    824|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
 1121|    824|    match->flow.ipv6_label = ipv6_label;
 1122|    824|}
match_set_ipv6_label_masked:
 1128|     97|{
 1129|     97|    match->flow.ipv6_label = ipv6_label & mask;
 1130|     97|    match->wc.masks.ipv6_label = mask;
 1131|     97|}
match_set_nd_target:
 1135|     38|{
 1136|     38|    match->flow.nd_target = *target;
 1137|     38|    match->wc.masks.nd_target = in6addr_exact;
 1138|     38|}
match_set_nd_target_masked:
 1144|     98|{
 1145|     98|    match->flow.nd_target = ipv6_addr_bitand(target, mask);
 1146|     98|    match->wc.masks.nd_target = *mask;
 1147|     98|}
match_set_nd_reserved:
 1151|     96|{
 1152|     96|   match->flow.igmp_group_ip4 = value;
 1153|     96|   match->wc.masks.igmp_group_ip4 = OVS_BE32_MAX;
  ------------------
  |  |   43|     96|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
 1154|     96|}
match_set_nd_options_type:
 1158|     11|{
 1159|     11|    match_set_tcp_flags(match, htons(option));
 1160|     11|}
match_format:
 1455|   413k|{
 1456|   413k|    const struct flow_wildcards *wc = &match->wc;
 1457|   413k|    size_t start_len = s->length;
 1458|   413k|    const struct flow *f = &match->flow;
 1459|   413k|    bool skip_type = false;
 1460|   413k|    bool skip_proto = false;
 1461|   413k|    ovs_be16 dl_type = f->dl_type;
 1462|   413k|    bool is_megaflow = false;
 1463|   413k|    int i;
 1464|       |
 1465|   413k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42);
  ------------------
  |  |  269|   413k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1466|       |
 1467|   413k|    if (priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|   413k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (1467:9): [True: 104k, False: 308k]
  ------------------
 1468|   104k|        ds_put_format(s, "%spriority=%s%d,",
 1469|   104k|                      colors.special, colors.end, priority);
 1470|   104k|    }
 1471|       |
 1472|   413k|    format_uint32_masked(s, "pkt_mark", f->pkt_mark, wc->masks.pkt_mark);
 1473|       |
 1474|   413k|    if (wc->masks.recirc_id) {
  ------------------
  |  Branch (1474:9): [True: 123, False: 413k]
  ------------------
 1475|    123|        format_uint32_masked(s, "recirc_id", f->recirc_id,
 1476|    123|                             wc->masks.recirc_id);
 1477|    123|        is_megaflow = true;
 1478|    123|    }
 1479|       |
 1480|   413k|    if (wc->masks.dp_hash) {
  ------------------
  |  Branch (1480:9): [True: 976, False: 412k]
  ------------------
 1481|    976|        format_uint32_masked(s, "dp_hash", f->dp_hash,
 1482|    976|                             wc->masks.dp_hash);
 1483|    976|    }
 1484|       |
 1485|   413k|    if (wc->masks.conj_id) {
  ------------------
  |  Branch (1485:9): [True: 1.04k, False: 412k]
  ------------------
 1486|  1.04k|        ds_put_format(s, "%sconj_id%s=%"PRIu32",",
 1487|  1.04k|                      colors.param, colors.end, f->conj_id);
 1488|  1.04k|    }
 1489|       |
 1490|   413k|    if (wc->masks.skb_priority) {
  ------------------
  |  Branch (1490:9): [True: 0, False: 413k]
  ------------------
 1491|      0|        ds_put_format(s, "%sskb_priority=%s%#"PRIx32",",
 1492|      0|                      colors.param, colors.end, f->skb_priority);
 1493|      0|    }
 1494|       |
 1495|   413k|    if (wc->masks.actset_output) {
  ------------------
  |  Branch (1495:9): [True: 231, False: 412k]
  ------------------
 1496|    231|        ds_put_format(s, "%sactset_output=%s", colors.param, colors.end);
 1497|    231|        ofputil_format_port(f->actset_output, port_map, s);
 1498|    231|        ds_put_char(s, ',');
 1499|    231|    }
 1500|       |
 1501|   413k|    if (wc->masks.ct_state) {
  ------------------
  |  Branch (1501:9): [True: 2.22k, False: 410k]
  ------------------
 1502|  2.22k|        if (wc->masks.ct_state == UINT8_MAX) {
  ------------------
  |  Branch (1502:13): [True: 1.42k, False: 793]
  ------------------
 1503|  1.42k|            ds_put_format(s, "%sct_state=%s", colors.param, colors.end);
 1504|  1.42k|            if (f->ct_state) {
  ------------------
  |  Branch (1504:17): [True: 1.34k, False: 84]
  ------------------
 1505|  1.34k|                format_flags(s, ct_state_to_string, f->ct_state, '|');
 1506|  1.34k|            } else {
 1507|     84|                ds_put_cstr(s, "0"); /* No state. */
 1508|     84|            }
 1509|  1.42k|        } else {
 1510|    793|            format_flags_masked(s, "ct_state", ct_state_to_string,
 1511|    793|                                f->ct_state, wc->masks.ct_state, UINT8_MAX);
 1512|    793|        }
 1513|  2.22k|        ds_put_char(s, ',');
 1514|  2.22k|    }
 1515|       |
 1516|   413k|    if (wc->masks.ct_zone) {
  ------------------
  |  Branch (1516:9): [True: 20, False: 413k]
  ------------------
 1517|     20|        format_uint16_masked(s, "ct_zone", f->ct_zone, wc->masks.ct_zone);
 1518|     20|    }
 1519|       |
 1520|   413k|    if (wc->masks.ct_mark) {
  ------------------
  |  Branch (1520:9): [True: 916, False: 412k]
  ------------------
 1521|    916|        format_uint32_masked(s, "ct_mark", f->ct_mark, wc->masks.ct_mark);
 1522|    916|    }
 1523|       |
 1524|   413k|    if (!ovs_u128_is_zero(wc->masks.ct_label)) {
  ------------------
  |  Branch (1524:9): [True: 322, False: 412k]
  ------------------
 1525|    322|        format_ct_label_masked(s, &f->ct_label, &wc->masks.ct_label);
 1526|    322|    }
 1527|       |
 1528|   413k|    format_ip_netmask(s, "ct_nw_src", f->ct_nw_src,
 1529|   413k|                      wc->masks.ct_nw_src);
 1530|   413k|    format_ipv6_netmask(s, "ct_ipv6_src", &f->ct_ipv6_src,
 1531|   413k|                        &wc->masks.ct_ipv6_src);
 1532|   413k|    format_ip_netmask(s, "ct_nw_dst", f->ct_nw_dst,
 1533|   413k|                      wc->masks.ct_nw_dst);
 1534|   413k|    format_ipv6_netmask(s, "ct_ipv6_dst", &f->ct_ipv6_dst,
 1535|   413k|                        &wc->masks.ct_ipv6_dst);
 1536|   413k|    if (wc->masks.ct_nw_proto) {
  ------------------
  |  Branch (1536:9): [True: 203, False: 413k]
  ------------------
 1537|    203|        ds_put_format(s, "%sct_nw_proto=%s%"PRIu8",",
 1538|    203|                      colors.param, colors.end, f->ct_nw_proto);
 1539|    203|        format_be16_masked(s, "ct_tp_src", f->ct_tp_src, wc->masks.ct_tp_src);
 1540|    203|        format_be16_masked(s, "ct_tp_dst", f->ct_tp_dst, wc->masks.ct_tp_dst);
 1541|    203|    }
 1542|       |
 1543|   413k|    if (wc->masks.packet_type &&
  ------------------
  |  Branch (1543:9): [True: 252k, False: 161k]
  ------------------
 1544|   413k|        (!match_has_default_packet_type(match) || is_megaflow)) {
  ------------------
  |  Branch (1544:10): [True: 16.2k, False: 235k]
  |  Branch (1544:51): [True: 103, False: 235k]
  ------------------
 1545|  16.3k|        format_packet_type_masked(s, f->packet_type, wc->masks.packet_type);
 1546|  16.3k|        ds_put_char(s, ',');
 1547|  16.3k|        if (pt_ns(f->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1547:13): [True: 11.7k, False: 4.55k]
  ------------------
 1548|  11.7k|            dl_type = pt_ns_type_be(f->packet_type);
 1549|  11.7k|        }
 1550|  16.3k|    }
 1551|       |
 1552|   413k|    if (wc->masks.dl_type) {
  ------------------
  |  Branch (1552:9): [True: 156k, False: 256k]
  ------------------
 1553|   156k|        skip_type = true;
 1554|   156k|        if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1554:13): [True: 32.0k, False: 124k]
  ------------------
 1555|  32.0k|            if (wc->masks.nw_proto) {
  ------------------
  |  Branch (1555:17): [True: 30.2k, False: 1.76k]
  ------------------
 1556|  30.2k|                skip_proto = true;
 1557|  30.2k|                if (f->nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (1557:21): [True: 451, False: 29.8k]
  ------------------
 1558|    451|                    ds_put_format(s, "%sicmp%s,", colors.value, colors.end);
 1559|  29.8k|                } else if (f->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (1559:28): [True: 5.32k, False: 24.5k]
  ------------------
 1560|  5.32k|                    ds_put_format(s, "%stcp%s,", colors.value, colors.end);
 1561|  24.5k|                } else if (f->nw_proto == IPPROTO_UDP) {
  ------------------
  |  Branch (1561:28): [True: 6.19k, False: 18.3k]
  ------------------
 1562|  6.19k|                    ds_put_format(s, "%sudp%s,", colors.value, colors.end);
 1563|  18.3k|                } else if (f->nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (1563:28): [True: 11.8k, False: 6.50k]
  ------------------
 1564|  11.8k|                    ds_put_format(s, "%ssctp%s,", colors.value, colors.end);
 1565|  11.8k|                } else {
 1566|  6.50k|                    ds_put_format(s, "%sip%s,", colors.value, colors.end);
 1567|  6.50k|                    skip_proto = false;
 1568|  6.50k|                }
 1569|  30.2k|            } else {
 1570|  1.76k|                ds_put_format(s, "%sip%s,", colors.value, colors.end);
 1571|  1.76k|            }
 1572|   124k|        } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1572:20): [True: 42.3k, False: 81.8k]
  ------------------
 1573|  42.3k|            if (wc->masks.nw_proto) {
  ------------------
  |  Branch (1573:17): [True: 40.5k, False: 1.80k]
  ------------------
 1574|  40.5k|                skip_proto = true;
 1575|  40.5k|                if (f->nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (1575:21): [True: 6.87k, False: 33.6k]
  ------------------
 1576|  6.87k|                    ds_put_format(s, "%sicmp6%s,", colors.value, colors.end);
 1577|  33.6k|                } else if (f->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (1577:28): [True: 11.1k, False: 22.5k]
  ------------------
 1578|  11.1k|                    ds_put_format(s, "%stcp6%s,", colors.value, colors.end);
 1579|  22.5k|                } else if (f->nw_proto == IPPROTO_UDP) {
  ------------------
  |  Branch (1579:28): [True: 9.41k, False: 13.1k]
  ------------------
 1580|  9.41k|                    ds_put_format(s, "%sudp6%s,", colors.value, colors.end);
 1581|  13.1k|                } else if (f->nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (1581:28): [True: 906, False: 12.2k]
  ------------------
 1582|    906|                    ds_put_format(s, "%ssctp6%s,", colors.value, colors.end);
 1583|  12.2k|                } else {
 1584|  12.2k|                    ds_put_format(s, "%sipv6%s,", colors.value, colors.end);
 1585|  12.2k|                    skip_proto = false;
 1586|  12.2k|                }
 1587|  40.5k|            } else {
 1588|  1.80k|                ds_put_format(s, "%sipv6%s,", colors.value, colors.end);
 1589|  1.80k|            }
 1590|  81.8k|        } else if (dl_type == htons(ETH_TYPE_ARP)) {
  ------------------
  |  Branch (1590:20): [True: 1.21k, False: 80.6k]
  ------------------
 1591|  1.21k|            ds_put_format(s, "%sarp%s,", colors.value, colors.end);
 1592|  80.6k|        } else if (dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1592:20): [True: 325, False: 80.2k]
  ------------------
 1593|    325|            ds_put_format(s, "%srarp%s,", colors.value, colors.end);
 1594|  80.2k|        } else if (dl_type == htons(ETH_TYPE_MPLS)) {
  ------------------
  |  Branch (1594:20): [True: 675, False: 79.6k]
  ------------------
 1595|    675|            ds_put_format(s, "%smpls%s,", colors.value, colors.end);
 1596|  79.6k|        } else if (dl_type == htons(ETH_TYPE_MPLS_MCAST)) {
  ------------------
  |  Branch (1596:20): [True: 227, False: 79.3k]
  ------------------
 1597|    227|            ds_put_format(s, "%smplsm%s,", colors.value, colors.end);
 1598|  79.3k|        } else {
 1599|  79.3k|            skip_type = false;
 1600|  79.3k|        }
 1601|   156k|    }
 1602|  7.02M|    for (i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  7.02M|#define FLOW_N_REGS 16
  ------------------
  |  Branch (1602:17): [True: 6.61M, False: 413k]
  ------------------
 1603|  6.61M|        #define REGNAME_LEN 20
 1604|  6.61M|        char regname[REGNAME_LEN];
 1605|  6.61M|        if (snprintf(regname, REGNAME_LEN, "reg%d", i) >= REGNAME_LEN) {
  ------------------
  |  | 1603|  6.61M|        #define REGNAME_LEN 20
  ------------------
                      if (snprintf(regname, REGNAME_LEN, "reg%d", i) >= REGNAME_LEN) {
  ------------------
  |  | 1603|  6.61M|        #define REGNAME_LEN 20
  ------------------
  |  Branch (1605:13): [True: 0, False: 6.61M]
  ------------------
 1606|      0|            strcpy(regname, "reg?");
 1607|      0|        }
 1608|  6.61M|        format_uint32_masked(s, regname, f->regs[i], wc->masks.regs[i]);
 1609|  6.61M|    }
 1610|       |
 1611|   413k|    format_flow_tunnel(s, match);
 1612|       |
 1613|   413k|    format_be64_masked(s, "metadata", f->metadata, wc->masks.metadata);
 1614|       |
 1615|   413k|    if (wc->masks.in_port.ofp_port) {
  ------------------
  |  Branch (1615:9): [True: 173k, False: 239k]
  ------------------
 1616|   173k|        ds_put_format(s, "%sin_port=%s", colors.param, colors.end);
 1617|   173k|        ofputil_format_port(f->in_port.ofp_port, port_map, s);
 1618|   173k|        ds_put_char(s, ',');
 1619|   173k|    }
 1620|   572k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|   572k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1620:17): [True: 571k, False: 456]
  ------------------
 1621|   571k|        char str_i[8];
 1622|       |
 1623|   571k|        if (!wc->masks.vlans[i].tci) {
  ------------------
  |  Branch (1623:13): [True: 412k, False: 158k]
  ------------------
 1624|   412k|            break;
 1625|   412k|        }
 1626|       |
 1627|       |        /* Print VLAN tags as dl_vlan, dl_vlan1, dl_vlan2 ... */
 1628|   158k|        if (i == 0) {
  ------------------
  |  Branch (1628:13): [True: 158k, False: 456]
  ------------------
 1629|   158k|            str_i[0] = '\0';
 1630|   158k|        } else {
 1631|    456|            snprintf(str_i, sizeof(str_i), "%d", i);
 1632|    456|        }
 1633|   158k|        ovs_be16 vid_mask = wc->masks.vlans[i].tci & htons(VLAN_VID_MASK);
 1634|   158k|        ovs_be16 pcp_mask = wc->masks.vlans[i].tci & htons(VLAN_PCP_MASK);
 1635|   158k|        ovs_be16 cfi = wc->masks.vlans[i].tci & htons(VLAN_CFI);
 1636|       |
 1637|   158k|        if (cfi && f->vlans[i].tci & htons(VLAN_CFI)
  ------------------
  |  Branch (1637:13): [True: 158k, False: 67]
  |  Branch (1637:20): [True: 50.9k, False: 107k]
  ------------------
 1638|   158k|            && (!vid_mask || vid_mask == htons(VLAN_VID_MASK))
  ------------------
  |  Branch (1638:17): [True: 8.95k, False: 41.9k]
  |  Branch (1638:30): [True: 41.8k, False: 68]
  ------------------
 1639|   158k|            && (!pcp_mask || pcp_mask == htons(VLAN_PCP_MASK))
  ------------------
  |  Branch (1639:17): [True: 11.4k, False: 39.4k]
  |  Branch (1639:30): [True: 39.3k, False: 12]
  ------------------
 1640|   158k|            && (vid_mask || pcp_mask)) {
  ------------------
  |  Branch (1640:17): [True: 41.8k, False: 8.94k]
  |  Branch (1640:29): [True: 7.96k, False: 988]
  ------------------
 1641|  49.8k|            if (vid_mask) {
  ------------------
  |  Branch (1641:17): [True: 41.8k, False: 7.96k]
  ------------------
 1642|  41.8k|                ds_put_format(s, "%sdl_vlan%s=%s%"PRIu16",",
 1643|  41.8k|                              colors.param, str_i, colors.end,
 1644|  41.8k|                              vlan_tci_to_vid(f->vlans[i].tci));
 1645|  41.8k|            }
 1646|  49.8k|            if (pcp_mask) {
  ------------------
  |  Branch (1646:17): [True: 39.3k, False: 10.4k]
  ------------------
 1647|  39.3k|                ds_put_format(s, "%sdl_vlan_pcp%s=%s%d,",
 1648|  39.3k|                              colors.param, str_i, colors.end,
 1649|  39.3k|                              vlan_tci_to_pcp(f->vlans[i].tci));
 1650|  39.3k|            }
 1651|   108k|        } else if (wc->masks.vlans[i].tci == htons(0xffff)) {
  ------------------
  |  Branch (1651:20): [True: 107k, False: 1.14k]
  ------------------
 1652|   107k|            ds_put_format(s, "%svlan_tci%s=%s0x%04"PRIx16",",
 1653|   107k|                          colors.param, str_i, colors.end,
 1654|   107k|                          ntohs(f->vlans[i].tci));
 1655|   107k|        } else {
 1656|  1.14k|            ds_put_format(s, "%svlan_tci%s=%s0x%04"PRIx16"/0x%04"PRIx16",",
 1657|  1.14k|                          colors.param, str_i, colors.end,
 1658|  1.14k|                          ntohs(f->vlans[i].tci),
 1659|  1.14k|                          ntohs(wc->masks.vlans[i].tci));
 1660|  1.14k|        }
 1661|   158k|    }
 1662|       |
 1663|   413k|    format_eth_masked(s, "dl_src", f->dl_src, wc->masks.dl_src);
 1664|   413k|    format_eth_masked(s, "dl_dst", f->dl_dst, wc->masks.dl_dst);
 1665|       |
 1666|   413k|    if (!skip_type && wc->masks.dl_type) {
  ------------------
  |  Branch (1666:9): [True: 336k, False: 76.8k]
  |  Branch (1666:23): [True: 79.3k, False: 256k]
  ------------------
 1667|  79.3k|        ds_put_format(s, "%sdl_type=%s0x%04"PRIx16",",
 1668|  79.3k|                      colors.param, colors.end, ntohs(dl_type));
 1669|  79.3k|    }
 1670|   413k|    if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1670:9): [True: 42.5k, False: 370k]
  ------------------
 1671|  42.5k|        format_ipv6_netmask(s, "ipv6_src", &f->ipv6_src, &wc->masks.ipv6_src);
 1672|  42.5k|        format_ipv6_netmask(s, "ipv6_dst", &f->ipv6_dst, &wc->masks.ipv6_dst);
 1673|  42.5k|        if (wc->masks.ipv6_label) {
  ------------------
  |  Branch (1673:13): [True: 37.5k, False: 4.98k]
  ------------------
 1674|  37.5k|            if (wc->masks.ipv6_label == OVS_BE32_MAX) {
  ------------------
  |  |   43|  37.5k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1674:17): [True: 37.5k, False: 0]
  ------------------
 1675|  37.5k|                ds_put_format(s, "%sipv6_label=%s0x%05"PRIx32",",
 1676|  37.5k|                              colors.param, colors.end,
 1677|  37.5k|                              ntohl(f->ipv6_label));
 1678|  37.5k|            } else {
 1679|      0|                ds_put_format(s, "%sipv6_label=%s0x%05"PRIx32"/0x%05"PRIx32",",
 1680|      0|                              colors.param, colors.end, ntohl(f->ipv6_label),
 1681|      0|                              ntohl(wc->masks.ipv6_label));
 1682|      0|            }
 1683|  37.5k|        }
 1684|   370k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1684:16): [True: 1.21k, False: 369k]
  ------------------
 1685|   370k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1685:16): [True: 330, False: 369k]
  ------------------
 1686|  1.54k|        format_ip_netmask(s, "arp_spa", f->nw_src, wc->masks.nw_src);
 1687|  1.54k|        format_ip_netmask(s, "arp_tpa", f->nw_dst, wc->masks.nw_dst);
 1688|   369k|    } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1688:16): [True: 13.0k, False: 356k]
  ------------------
 1689|  13.0k|        format_nsh_masked(s, f, &wc->masks);
 1690|   356k|    } else {
 1691|   356k|        format_ip_netmask(s, "nw_src", f->nw_src, wc->masks.nw_src);
 1692|   356k|        format_ip_netmask(s, "nw_dst", f->nw_dst, wc->masks.nw_dst);
 1693|   356k|    }
 1694|   413k|    if (!skip_proto && wc->masks.nw_proto) {
  ------------------
  |  Branch (1694:9): [True: 361k, False: 52.1k]
  |  Branch (1694:24): [True: 28.3k, False: 332k]
  ------------------
 1695|  28.3k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1695:13): [True: 955, False: 27.4k]
  ------------------
 1696|  28.3k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1696:13): [True: 328, False: 27.0k]
  ------------------
 1697|  1.28k|            ds_put_format(s, "%sarp_op=%s%"PRIu8",",
 1698|  1.28k|                          colors.param, colors.end, f->nw_proto);
 1699|  27.0k|        } else {
 1700|  27.0k|            ds_put_format(s, "%snw_proto=%s%"PRIu8",",
 1701|  27.0k|                          colors.param, colors.end, f->nw_proto);
 1702|  27.0k|        }
 1703|  28.3k|    }
 1704|   413k|    if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1704:9): [True: 1.21k, False: 412k]
  ------------------
 1705|   413k|        dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1705:9): [True: 330, False: 411k]
  ------------------
 1706|  1.54k|        format_eth_masked(s, "arp_sha", f->arp_sha, wc->masks.arp_sha);
 1707|  1.54k|        format_eth_masked(s, "arp_tha", f->arp_tha, wc->masks.arp_tha);
 1708|  1.54k|    }
 1709|   413k|    if (wc->masks.nw_tos & IP_DSCP_MASK) {
  ------------------
  |  |  720|   413k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (1709:9): [True: 74.6k, False: 338k]
  ------------------
 1710|  74.6k|        ds_put_format(s, "%snw_tos=%s%d,",
 1711|  74.6k|                      colors.param, colors.end, f->nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  720|  74.6k|#define IP_DSCP_MASK 0xfc
  ------------------
 1712|  74.6k|    }
 1713|   413k|    if (wc->masks.nw_tos & IP_ECN_MASK) {
  ------------------
  |  |  718|   413k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (1713:9): [True: 56.1k, False: 357k]
  ------------------
 1714|  56.1k|        ds_put_format(s, "%snw_ecn=%s%d,",
 1715|  56.1k|                      colors.param, colors.end, f->nw_tos & IP_ECN_MASK);
  ------------------
  |  |  718|  56.1k|#define IP_ECN_MASK 0x03
  ------------------
 1716|  56.1k|    }
 1717|   413k|    if (wc->masks.nw_ttl) {
  ------------------
  |  Branch (1717:9): [True: 56.0k, False: 357k]
  ------------------
 1718|  56.0k|        ds_put_format(s, "%snw_ttl=%s%d,",
 1719|  56.0k|                      colors.param, colors.end, f->nw_ttl);
 1720|  56.0k|    }
 1721|   413k|    if (wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK)) {
  ------------------
  |  Branch (1721:9): [True: 762, False: 412k]
  ------------------
 1722|    762|        ds_put_format(s, "%smpls_label=%s%"PRIu32",", colors.param,
 1723|    762|                      colors.end, mpls_lse_to_label(f->mpls_lse[0]));
 1724|    762|    }
 1725|   413k|    if (wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK)) {
  ------------------
  |  Branch (1725:9): [True: 762, False: 412k]
  ------------------
 1726|    762|        ds_put_format(s, "%smpls_tc=%s%"PRIu8",", colors.param, colors.end,
 1727|    762|                      mpls_lse_to_tc(f->mpls_lse[0]));
 1728|    762|    }
 1729|   413k|    if (wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK)) {
  ------------------
  |  Branch (1729:9): [True: 764, False: 412k]
  ------------------
 1730|    764|        ds_put_format(s, "%smpls_ttl=%s%"PRIu8",", colors.param, colors.end,
 1731|    764|                      mpls_lse_to_ttl(f->mpls_lse[0]));
 1732|    764|    }
 1733|   413k|    if (wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (1733:9): [True: 761, False: 412k]
  ------------------
 1734|    761|        ds_put_format(s, "%smpls_bos=%s%"PRIu8",", colors.param, colors.end,
 1735|    761|                      mpls_lse_to_bos(f->mpls_lse[0]));
 1736|    761|    }
 1737|   413k|    format_be32_masked(s, "mpls_lse1", f->mpls_lse[1], wc->masks.mpls_lse[1]);
 1738|   413k|    format_be32_masked(s, "mpls_lse2", f->mpls_lse[2], wc->masks.mpls_lse[2]);
 1739|       |
 1740|   413k|    switch (wc->masks.nw_frag & FLOW_NW_FRAG_MASK) {
  ------------------
  |  |   56|   413k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|   413k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|   413k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  |  Branch (1740:13): [True: 357k, False: 56.0k]
  ------------------
 1741|  56.0k|    case FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER:
  ------------------
  |  |   54|  56.0k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
                  case FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER:
  ------------------
  |  |   55|  56.0k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1741:5): [True: 56.0k, False: 357k]
  ------------------
 1742|  56.0k|        ds_put_format(s, "%snw_frag=%s%s,", colors.param, colors.end,
 1743|  56.0k|                      f->nw_frag & FLOW_NW_FRAG_ANY
  ------------------
  |  |   54|  56.0k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  |  Branch (1743:23): [True: 942, False: 55.0k]
  ------------------
 1744|  56.0k|                      ? (f->nw_frag & FLOW_NW_FRAG_LATER ? "later" : "first")
  ------------------
  |  |   55|    942|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1744:26): [True: 629, False: 313]
  ------------------
 1745|  56.0k|                      : (f->nw_frag & FLOW_NW_FRAG_LATER ? "<error>" : "no"));
  ------------------
  |  |   55|  55.0k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1745:26): [True: 0, False: 55.0k]
  ------------------
 1746|  56.0k|        break;
 1747|       |
 1748|     33|    case FLOW_NW_FRAG_ANY:
  ------------------
  |  |   54|     33|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  |  Branch (1748:5): [True: 33, False: 413k]
  ------------------
 1749|     33|        ds_put_format(s, "%snw_frag=%s%s,", colors.param, colors.end,
 1750|     33|                      f->nw_frag & FLOW_NW_FRAG_ANY ? "yes" : "no");
  ------------------
  |  |   54|     33|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  |  Branch (1750:23): [True: 0, False: 33]
  ------------------
 1751|     33|        break;
 1752|       |
 1753|     11|    case FLOW_NW_FRAG_LATER:
  ------------------
  |  |   55|     11|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1753:5): [True: 11, False: 413k]
  ------------------
 1754|     11|        ds_put_format(s, "%snw_frag=%s%s,", colors.param, colors.end,
 1755|     11|                      f->nw_frag & FLOW_NW_FRAG_LATER ? "later" : "not_later");
  ------------------
  |  |   55|     11|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (1755:23): [True: 0, False: 11]
  ------------------
 1756|     11|        break;
 1757|   413k|    }
 1758|   413k|    if (dl_type == htons(ETH_TYPE_IP) &&
  ------------------
  |  Branch (1758:9): [True: 32.0k, False: 381k]
  ------------------
 1759|   413k|        f->nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (1759:9): [True: 451, False: 31.6k]
  ------------------
 1760|    451|        format_be16_masked(s, "icmp_type", f->tp_src, wc->masks.tp_src);
 1761|    451|        format_be16_masked(s, "icmp_code", f->tp_dst, wc->masks.tp_dst);
 1762|   412k|    } else if (dl_type == htons(ETH_TYPE_IPV6) &&
  ------------------
  |  Branch (1762:16): [True: 42.5k, False: 370k]
  ------------------
 1763|   412k|               f->nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (1763:16): [True: 6.87k, False: 35.6k]
  ------------------
 1764|  6.87k|        format_be16_masked(s, "icmp_type", f->tp_src, wc->masks.tp_src);
 1765|  6.87k|        format_be16_masked(s, "icmp_code", f->tp_dst, wc->masks.tp_dst);
 1766|  6.87k|        format_ipv6_netmask(s, "nd_target", &f->nd_target,
 1767|  6.87k|                            &wc->masks.nd_target);
 1768|  6.87k|        format_eth_masked(s, "nd_sll", f->arp_sha, wc->masks.arp_sha);
 1769|  6.87k|        format_eth_masked(s, "nd_tll", f->arp_tha, wc->masks.arp_tha);
 1770|  6.87k|        if (wc->masks.igmp_group_ip4) {
  ------------------
  |  Branch (1770:13): [True: 0, False: 6.87k]
  ------------------
 1771|      0|            format_be32_masked(s,"nd_reserved", f->igmp_group_ip4,
 1772|      0|                               wc->masks.igmp_group_ip4);
 1773|      0|        }
 1774|  6.87k|        if (wc->masks.tcp_flags) {
  ------------------
  |  Branch (1774:13): [True: 0, False: 6.87k]
  ------------------
 1775|      0|            format_be16_masked(s,"nd_options_type", f->tcp_flags,
 1776|      0|                               wc->masks.tcp_flags);
 1777|      0|        }
 1778|   405k|    } else {
 1779|   405k|        format_be16_masked(s, "tp_src", f->tp_src, wc->masks.tp_src);
 1780|   405k|        format_be16_masked(s, "tp_dst", f->tp_dst, wc->masks.tp_dst);
 1781|   405k|    }
 1782|   413k|    if (is_ip_any(f) && f->nw_proto == IPPROTO_TCP && wc->masks.tcp_flags) {
  ------------------
  |  Branch (1782:9): [True: 74.6k, False: 338k]
  |  Branch (1782:25): [True: 16.4k, False: 58.1k]
  |  Branch (1782:55): [True: 14.1k, False: 2.28k]
  ------------------
 1783|  14.1k|        format_flags_masked(s, "tcp_flags", packet_tcp_flag_to_string,
 1784|  14.1k|                            ntohs(f->tcp_flags), TCP_FLAGS(wc->masks.tcp_flags),
  ------------------
  |  |  887|  14.1k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 1785|  14.1k|                            TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  887|  14.1k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 1786|  14.1k|    }
 1787|       |
 1788|   413k|    if (s->length > start_len) {
  ------------------
  |  Branch (1788:9): [True: 381k, False: 31.3k]
  ------------------
 1789|   381k|        ds_chomp(s, ',');
 1790|   381k|    }
 1791|   413k|}
minimatch_init:
 1819|  78.1k|{
 1820|  78.1k|    struct miniflow tmp;
 1821|       |
 1822|  78.1k|    miniflow_map_init(&tmp, &src->wc.masks);
 1823|       |    /* Allocate two consecutive miniflows. */
 1824|  78.1k|    miniflow_alloc(dst->flows, 2, &tmp);
 1825|  78.1k|    miniflow_init(dst->flow, &src->flow);
 1826|  78.1k|    minimask_init(dst->mask, &src->wc);
 1827|       |
 1828|  78.1k|    dst->tun_md = tun_metadata_allocation_clone(&src->tun_md);
 1829|  78.1k|}
minimatch_destroy:
 1869|  78.1k|{
 1870|  78.1k|    free(match->flow);
 1871|  78.1k|    free(match->tun_md);
 1872|  78.1k|}
minimatch_expand:
 1877|  78.1k|{
 1878|  78.1k|    miniflow_expand(src->flow, &dst->flow);
 1879|  78.1k|    minimask_expand(src->mask, &dst->wc);
 1880|  78.1k|    tun_metadata_allocation_copy(&dst->tun_md, src->tun_md);
 1881|  78.1k|}
match.c:set_eth:
  646|  1.45k|{
  647|  1.45k|    *value_dst = value_src;
  648|  1.45k|    *mask_dst = eth_addr_exact;
  649|  1.45k|}
match.c:set_eth_masked:
  658|  37.8k|{
  659|  37.8k|    size_t i;
  660|       |
  661|   151k|    for (i = 0; i < ARRAY_SIZE(value_dst->be16); i++) {
  ------------------
  |  |  293|   151k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|   151k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   151k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|   151k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   151k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|   151k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (661:17): [True: 113k, False: 37.8k]
  ------------------
  662|   113k|        value_dst->be16[i] = value_src.be16[i] & mask_src.be16[i];
  663|   113k|    }
  664|  37.8k|    *mask_dst = mask_src;
  665|  37.8k|}
match.c:format_uint32_masked:
 1322|  7.02M|{
 1323|  7.02M|    if (mask) {
  ------------------
  |  Branch (1323:9): [True: 7.12k, False: 7.01M]
  ------------------
 1324|  7.12k|        ds_put_format(s, "%s%s=%s%#"PRIx32,
 1325|  7.12k|                      colors.param, name, colors.end, value);
 1326|  7.12k|        if (mask != UINT32_MAX) {
  ------------------
  |  Branch (1326:13): [True: 3.68k, False: 3.43k]
  ------------------
 1327|  3.68k|            ds_put_format(s, "/%#"PRIx32, mask);
 1328|  3.68k|        }
 1329|  7.12k|        ds_put_char(s, ',');
 1330|  7.12k|    }
 1331|  7.02M|}
match.c:format_uint16_masked:
 1259|     20|{
 1260|     20|    if (mask != 0) {
  ------------------
  |  Branch (1260:9): [True: 20, False: 0]
  ------------------
 1261|     20|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1262|     20|        if (mask == UINT16_MAX) {
  ------------------
  |  Branch (1262:13): [True: 20, False: 0]
  ------------------
 1263|     20|            ds_put_format(s, "%"PRIu16, value);
 1264|     20|        } else {
 1265|      0|            ds_put_format(s, "0x%"PRIx16"/0x%"PRIx16, value, mask);
 1266|      0|        }
 1267|     20|        ds_put_char(s, ',');
 1268|     20|    }
 1269|     20|}
match.c:format_ct_label_masked:
 1406|    322|{
 1407|    322|    if (!ovs_u128_is_zero(*mask)) {
  ------------------
  |  Branch (1407:9): [True: 322, False: 0]
  ------------------
 1408|    322|        ovs_be128 value = hton128(*key);
 1409|    322|        ds_put_format(s, "%sct_label=%s", colors.param, colors.end);
 1410|    322|        ds_put_hex(s, &value, sizeof value);
 1411|    322|        if (!is_all_ones(mask, sizeof(*mask))) {
  ------------------
  |  Branch (1411:13): [True: 293, False: 29]
  ------------------
 1412|    293|            value = hton128(*mask);
 1413|    293|            ds_put_char(s, '/');
 1414|    293|            ds_put_hex(s, &value, sizeof value);
 1415|    293|        }
 1416|    322|        ds_put_char(s, ',');
 1417|    322|    }
 1418|    322|}
match.c:format_ip_netmask:
 1221|  2.36M|{
 1222|  2.36M|    if (netmask) {
  ------------------
  |  Branch (1222:9): [True: 56.8k, False: 2.31M]
  ------------------
 1223|  56.8k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1224|  56.8k|        ip_format_masked(ip, netmask, s);
 1225|  56.8k|        ds_put_char(s, ',');
 1226|  56.8k|    }
 1227|  2.36M|}
match.c:format_ipv6_netmask:
 1233|  1.74M|{
 1234|  1.74M|    if (!ipv6_mask_is_any(netmask)) {
  ------------------
  |  Branch (1234:9): [True: 79.4k, False: 1.66M]
  ------------------
 1235|  79.4k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1236|  79.4k|        ipv6_format_masked(addr, netmask, s);
 1237|  79.4k|        ds_put_char(s, ',');
 1238|  79.4k|    }
 1239|  1.74M|}
match.c:format_be16_masked:
 1274|   827k|{
 1275|   827k|    if (mask != htons(0)) {
  ------------------
  |  Branch (1275:9): [True: 122k, False: 704k]
  ------------------
 1276|   122k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1277|   122k|        if (mask == OVS_BE16_MAX) {
  ------------------
  |  |   42|   122k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (1277:13): [True: 119k, False: 2.32k]
  ------------------
 1278|   119k|            ds_put_format(s, "%"PRIu16, ntohs(value));
 1279|   119k|        } else {
 1280|  2.32k|            ds_put_format(s, "0x%"PRIx16"/0x%"PRIx16,
 1281|  2.32k|                          ntohs(value), ntohs(mask));
 1282|  2.32k|        }
 1283|   122k|        ds_put_char(s, ',');
 1284|   122k|    }
 1285|   827k|}
match.c:format_flow_tunnel:
 1349|   413k|{
 1350|   413k|    const struct flow_wildcards *wc = &match->wc;
 1351|   413k|    const struct flow_tnl *tnl = &match->flow.tunnel;
 1352|       |
 1353|   413k|    format_be64_masked(s, "tun_id", tnl->tun_id, wc->masks.tunnel.tun_id);
 1354|   413k|    format_ip_netmask(s, "tun_src", tnl->ip_src, wc->masks.tunnel.ip_src);
 1355|   413k|    format_ip_netmask(s, "tun_dst", tnl->ip_dst, wc->masks.tunnel.ip_dst);
 1356|   413k|    format_ipv6_netmask(s, "tun_ipv6_src", &tnl->ipv6_src,
 1357|   413k|                        &wc->masks.tunnel.ipv6_src);
 1358|   413k|    format_ipv6_netmask(s, "tun_ipv6_dst", &tnl->ipv6_dst,
 1359|   413k|                        &wc->masks.tunnel.ipv6_dst);
 1360|       |
 1361|   413k|    if (wc->masks.tunnel.gbp_id) {
  ------------------
  |  Branch (1361:9): [True: 222, False: 412k]
  ------------------
 1362|    222|        format_be16_masked(s, "tun_gbp_id", tnl->gbp_id,
 1363|    222|                           wc->masks.tunnel.gbp_id);
 1364|    222|    }
 1365|       |
 1366|   413k|    if (wc->masks.tunnel.gbp_flags) {
  ------------------
  |  Branch (1366:9): [True: 235, False: 412k]
  ------------------
 1367|    235|        ds_put_format(s, "tun_gbp_flags=%#"PRIx8",", tnl->gbp_flags);
 1368|    235|    }
 1369|       |
 1370|   413k|    if (wc->masks.tunnel.ip_tos) {
  ------------------
  |  Branch (1370:9): [True: 0, False: 413k]
  ------------------
 1371|      0|        ds_put_format(s, "tun_tos=%"PRIx8",", tnl->ip_tos);
 1372|      0|    }
 1373|   413k|    if (wc->masks.tunnel.ip_ttl) {
  ------------------
  |  Branch (1373:9): [True: 0, False: 413k]
  ------------------
 1374|      0|        ds_put_format(s, "tun_ttl=%"PRIu8",", tnl->ip_ttl);
 1375|      0|    }
 1376|   413k|    if (wc->masks.tunnel.erspan_ver) {
  ------------------
  |  Branch (1376:9): [True: 68, False: 413k]
  ------------------
 1377|     68|        ds_put_format(s, "tun_erspan_ver=%"PRIu8",", tnl->erspan_ver);
 1378|     68|    }
 1379|   413k|    if (wc->masks.tunnel.erspan_idx && tnl->erspan_ver == 1) {
  ------------------
  |  Branch (1379:9): [True: 61, False: 413k]
  |  Branch (1379:40): [True: 0, False: 61]
  ------------------
 1380|      0|       ds_put_format(s, "tun_erspan_idx=%#"PRIx32",", tnl->erspan_idx);
 1381|      0|    }
 1382|   413k|    if (wc->masks.tunnel.erspan_dir && tnl->erspan_ver == 2) {
  ------------------
  |  Branch (1382:9): [True: 208, False: 413k]
  |  Branch (1382:40): [True: 0, False: 208]
  ------------------
 1383|      0|        ds_put_format(s, "tun_erspan_dir=%"PRIu8",", tnl->erspan_dir);
 1384|      0|    }
 1385|   413k|    if (wc->masks.tunnel.erspan_hwid && tnl->erspan_ver == 2) {
  ------------------
  |  Branch (1385:9): [True: 10, False: 413k]
  |  Branch (1385:41): [True: 0, False: 10]
  ------------------
 1386|      0|        ds_put_format(s, "tun_erspan_hwid=%#"PRIx8",", tnl->erspan_hwid);
 1387|      0|    }
 1388|   413k|    if (wc->masks.tunnel.gtpu_flags) {
  ------------------
  |  Branch (1388:9): [True: 10, False: 413k]
  ------------------
 1389|     10|        ds_put_format(s, "gtpu_flags=%#"PRIx8",", tnl->gtpu_flags);
 1390|     10|    }
 1391|   413k|    if (wc->masks.tunnel.gtpu_msgtype) {
  ------------------
  |  Branch (1391:9): [True: 10, False: 413k]
  ------------------
 1392|     10|        ds_put_format(s, "gtpu_msgtype=%"PRIu8",", tnl->gtpu_msgtype);
 1393|     10|    }
 1394|   413k|    if (wc->masks.tunnel.flags & FLOW_TNL_F_MASK) {
  ------------------
  |  |   65|   413k|#define FLOW_TNL_F_MASK ((1 << 4) - 1)
  ------------------
  |  Branch (1394:9): [True: 74, False: 413k]
  ------------------
 1395|     74|        format_flags_masked(s, "tun_flags", flow_tun_flag_to_string,
 1396|     74|                            tnl->flags & FLOW_TNL_F_MASK,
  ------------------
  |  |   65|     74|#define FLOW_TNL_F_MASK ((1 << 4) - 1)
  ------------------
 1397|     74|                            wc->masks.tunnel.flags & FLOW_TNL_F_MASK,
  ------------------
  |  |   65|     74|#define FLOW_TNL_F_MASK ((1 << 4) - 1)
  ------------------
 1398|     74|                            FLOW_TNL_F_MASK);
  ------------------
  |  |   65|     74|#define FLOW_TNL_F_MASK ((1 << 4) - 1)
  ------------------
 1399|     74|        ds_put_char(s, ',');
 1400|     74|    }
 1401|   413k|    tun_metadata_match_format(s, match);
 1402|   413k|}
match.c:format_be64_masked:
 1336|   826k|{
 1337|   826k|    if (mask != htonll(0)) {
  ------------------
  |  Branch (1337:9): [True: 6.18k, False: 820k]
  ------------------
 1338|  6.18k|        ds_put_format(s, "%s%s=%s%#"PRIx64,
 1339|  6.18k|                      colors.param, name, colors.end, ntohll(value));
 1340|  6.18k|        if (mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|  6.18k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (1340:13): [True: 6.12k, False: 59]
  ------------------
 1341|  6.12k|            ds_put_format(s, "/%#"PRIx64, ntohll(mask));
 1342|  6.12k|        }
 1343|  6.18k|        ds_put_char(s, ',');
 1344|  6.18k|    }
 1345|   826k|}
match.c:format_eth_masked:
 1210|   843k|{
 1211|   843k|    if (!eth_addr_is_zero(mask)) {
  ------------------
  |  Branch (1211:9): [True: 321k, False: 521k]
  ------------------
 1212|   321k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1213|   321k|        eth_format_masked(eth, &mask, s);
 1214|   321k|        ds_put_char(s, ',');
 1215|   321k|    }
 1216|   843k|}
match.c:format_nsh_masked:
 1422|  13.0k|{
 1423|  13.0k|    ovs_be32 spi_mask = nsh_path_hdr_to_spi(m->nsh.path_hdr);
 1424|  13.0k|    if (spi_mask == htonl(NSH_SPI_MASK >> NSH_SPI_SHIFT)) {
  ------------------
  |  Branch (1424:9): [True: 7.55k, False: 5.45k]
  ------------------
 1425|  7.55k|        spi_mask = OVS_BE32_MAX;
  ------------------
  |  |   43|  7.55k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
 1426|  7.55k|    }
 1427|  13.0k|    format_uint8_masked(s, "nsh_flags", f->nsh.flags, m->nsh.flags);
 1428|  13.0k|    format_uint8_masked(s, "nsh_ttl", f->nsh.ttl, m->nsh.ttl);
 1429|  13.0k|    format_uint8_masked(s, "nsh_mdtype", f->nsh.mdtype, m->nsh.mdtype);
 1430|  13.0k|    format_uint8_masked(s, "nsh_np", f->nsh.np, m->nsh.np);
 1431|       |
 1432|  13.0k|    format_be32_masked_hex(s, "nsh_spi", nsh_path_hdr_to_spi(f->nsh.path_hdr),
 1433|  13.0k|                           spi_mask);
 1434|  13.0k|    format_uint8_masked(s, "nsh_si", nsh_path_hdr_to_si(f->nsh.path_hdr),
 1435|  13.0k|                        nsh_path_hdr_to_si(m->nsh.path_hdr));
 1436|  13.0k|    if (m->nsh.mdtype == UINT8_MAX && f->nsh.mdtype == NSH_M_TYPE1) {
  ------------------
  |  |  251|  7.55k|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (1436:9): [True: 7.55k, False: 5.45k]
  |  Branch (1436:39): [True: 173, False: 7.38k]
  ------------------
 1437|    173|        format_be32_masked_hex(s, "nsh_c1", f->nsh.context[0],
 1438|    173|                               m->nsh.context[0]);
 1439|    173|        format_be32_masked_hex(s, "nsh_c2", f->nsh.context[1],
 1440|    173|                               m->nsh.context[1]);
 1441|    173|        format_be32_masked_hex(s, "nsh_c3", f->nsh.context[2],
 1442|    173|                               m->nsh.context[2]);
 1443|    173|        format_be32_masked_hex(s, "nsh_c4", f->nsh.context[3],
 1444|    173|                               m->nsh.context[3]);
 1445|    173|    }
 1446|  13.0k|}
match.c:format_uint8_masked:
 1244|  65.0k|{
 1245|  65.0k|    if (mask != 0) {
  ------------------
  |  Branch (1245:9): [True: 37.7k, False: 27.2k]
  ------------------
 1246|  37.7k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1247|  37.7k|        if (mask == UINT8_MAX) {
  ------------------
  |  Branch (1247:13): [True: 37.7k, False: 0]
  ------------------
 1248|  37.7k|            ds_put_format(s, "%"PRIu8, value);
 1249|  37.7k|        } else {
 1250|      0|            ds_put_format(s, "0x%02"PRIx8"/0x%02"PRIx8, value, mask);
 1251|      0|        }
 1252|  37.7k|        ds_put_char(s, ',');
 1253|  37.7k|    }
 1254|  65.0k|}
match.c:format_be32_masked_hex:
 1306|  13.6k|{
 1307|  13.6k|    if (mask != htonl(0)) {
  ------------------
  |  Branch (1307:9): [True: 8.24k, False: 5.45k]
  ------------------
 1308|  8.24k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1309|  8.24k|        if (mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|  8.24k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1309:13): [True: 8.24k, False: 0]
  ------------------
 1310|  8.24k|            ds_put_format(s, "0x%"PRIx32, ntohl(value));
 1311|  8.24k|        } else {
 1312|      0|            ds_put_format(s, "0x%"PRIx32"/0x%"PRIx32,
 1313|      0|                          ntohl(value), ntohl(mask));
 1314|      0|        }
 1315|  8.24k|        ds_put_char(s, ',');
 1316|  8.24k|    }
 1317|  13.6k|}
match.c:format_be32_masked:
 1290|   826k|{
 1291|   826k|    if (mask != htonl(0)) {
  ------------------
  |  Branch (1291:9): [True: 1.28k, False: 825k]
  ------------------
 1292|  1.28k|        ds_put_format(s, "%s%s=%s", colors.param, name, colors.end);
 1293|  1.28k|        if (mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|  1.28k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1293:13): [True: 1.28k, False: 0]
  ------------------
 1294|  1.28k|            ds_put_format(s, "%"PRIu32, ntohl(value));
 1295|  1.28k|        } else {
 1296|      0|            ds_put_format(s, "0x%08"PRIx32"/0x%08"PRIx32,
 1297|      0|                          ntohl(value), ntohl(mask));
 1298|      0|        }
 1299|  1.28k|        ds_put_char(s, ',');
 1300|  1.28k|    }
 1301|   826k|}

mf_subvalue_format:
  193|  1.96k|{
  194|  1.96k|    ds_put_hex(s, sv, sizeof *sv);
  195|  1.96k|}
mf_is_all_wild:
  204|   378k|{
  205|   378k|    switch (mf->id) {
  206|  2.34k|    case MFF_DP_HASH:
  ------------------
  |  Branch (206:5): [True: 2.34k, False: 375k]
  ------------------
  207|  2.34k|        return !wc->masks.dp_hash;
  208|    186|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (208:5): [True: 186, False: 377k]
  ------------------
  209|    186|        return !wc->masks.recirc_id;
  210|  11.3k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (210:5): [True: 11.3k, False: 366k]
  ------------------
  211|  11.3k|        return !wc->masks.packet_type;
  212|  1.62k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (212:5): [True: 1.62k, False: 376k]
  ------------------
  213|  1.62k|        return !wc->masks.conj_id;
  214|    115|    case MFF_TUN_SRC:
  ------------------
  |  Branch (214:5): [True: 115, False: 377k]
  ------------------
  215|    115|        return !wc->masks.tunnel.ip_src;
  216|  1.97k|    case MFF_TUN_DST:
  ------------------
  |  Branch (216:5): [True: 1.97k, False: 376k]
  ------------------
  217|  1.97k|        return !wc->masks.tunnel.ip_dst;
  218|  1.92k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (218:5): [True: 1.92k, False: 376k]
  ------------------
  219|  1.92k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_src);
  220|  3.09k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (220:5): [True: 3.09k, False: 374k]
  ------------------
  221|  3.09k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_dst);
  222|    281|    case MFF_TUN_ID:
  ------------------
  |  Branch (222:5): [True: 281, False: 377k]
  ------------------
  223|    281|        return !wc->masks.tunnel.tun_id;
  224|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (224:5): [True: 0, False: 378k]
  ------------------
  225|      0|        return !wc->masks.tunnel.ip_tos;
  226|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (226:5): [True: 0, False: 378k]
  ------------------
  227|      0|        return !wc->masks.tunnel.ip_ttl;
  228|    230|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (228:5): [True: 230, False: 377k]
  ------------------
  229|    230|        return !(wc->masks.tunnel.flags & FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    230|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  230|    694|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (230:5): [True: 694, False: 377k]
  ------------------
  231|    694|        return !wc->masks.tunnel.gbp_id;
  232|    360|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (232:5): [True: 360, False: 377k]
  ------------------
  233|    360|        return !wc->masks.tunnel.gbp_flags;
  234|    222|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (234:5): [True: 222, False: 377k]
  ------------------
  235|    222|        return !wc->masks.tunnel.erspan_ver;
  236|     96|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (236:5): [True: 96, False: 377k]
  ------------------
  237|     96|        return !wc->masks.tunnel.erspan_idx;
  238|  1.65k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (238:5): [True: 1.65k, False: 376k]
  ------------------
  239|  1.65k|        return !wc->masks.tunnel.erspan_dir;
  240|  5.16k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (240:5): [True: 5.16k, False: 372k]
  ------------------
  241|  5.16k|        return !wc->masks.tunnel.erspan_hwid;
  242|   210k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|  1.63k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 1.34k, False: 376k]
  |  |  |  Branch (2020:29): [True: 297, False: 377k]
  |  |  ------------------
  |  | 2021|  3.45k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 1.45k, False: 376k]
  |  |  |  Branch (2021:29): [True: 360, False: 377k]
  |  |  ------------------
  |  | 2022|  7.72k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 1.61k, False: 376k]
  |  |  |  Branch (2022:29): [True: 2.65k, False: 375k]
  |  |  ------------------
  |  | 2023|  17.8k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 5.53k, False: 372k]
  |  |  |  Branch (2023:29): [True: 4.58k, False: 373k]
  |  |  ------------------
  |  | 2024|  24.5k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 1.27k, False: 376k]
  |  |  |  Branch (2024:29): [True: 5.44k, False: 372k]
  |  |  ------------------
  |  | 2025|  37.2k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 10.3k, False: 367k]
  |  |  |  Branch (2025:30): [True: 2.30k, False: 375k]
  |  |  ------------------
  |  | 2026|  42.2k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 2.79k, False: 375k]
  |  |  |  Branch (2026:30): [True: 2.24k, False: 375k]
  |  |  ------------------
  |  | 2027|  51.4k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 4.68k, False: 373k]
  |  |  |  Branch (2027:30): [True: 4.53k, False: 373k]
  |  |  ------------------
  |  | 2028|  53.7k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 1.88k, False: 376k]
  |  |  |  Branch (2028:30): [True: 427, False: 377k]
  |  |  ------------------
  |  | 2029|  72.3k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 15.0k, False: 363k]
  |  |  |  Branch (2029:30): [True: 3.54k, False: 374k]
  |  |  ------------------
  |  | 2030|  73.8k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 900, False: 377k]
  |  |  |  Branch (2030:30): [True: 561, False: 377k]
  |  |  ------------------
  |  | 2031|  77.0k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 1.12k, False: 376k]
  |  |  |  Branch (2031:30): [True: 2.09k, False: 375k]
  |  |  ------------------
  |  | 2032|  90.3k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 3.88k, False: 374k]
  |  |  |  Branch (2032:30): [True: 9.48k, False: 368k]
  |  |  ------------------
  |  | 2033|  93.1k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 1.37k, False: 376k]
  |  |  |  Branch (2033:30): [True: 1.41k, False: 376k]
  |  |  ------------------
  |  | 2034|  93.6k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 319, False: 377k]
  |  |  |  Branch (2034:30): [True: 172, False: 377k]
  |  |  ------------------
  |  | 2035|  99.8k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 1.84k, False: 376k]
  |  |  |  Branch (2035:30): [True: 4.32k, False: 373k]
  |  |  ------------------
  |  | 2036|   105k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 3.77k, False: 374k]
  |  |  |  Branch (2036:30): [True: 2.10k, False: 375k]
  |  |  ------------------
  |  | 2037|   121k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 14.6k, False: 363k]
  |  |  |  Branch (2037:30): [True: 716, False: 377k]
  |  |  ------------------
  |  | 2038|   124k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 1.27k, False: 376k]
  |  |  |  Branch (2038:30): [True: 2.28k, False: 375k]
  |  |  ------------------
  |  | 2039|   130k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 1.34k, False: 376k]
  |  |  |  Branch (2039:30): [True: 4.86k, False: 373k]
  |  |  ------------------
  |  | 2040|   138k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 454, False: 377k]
  |  |  |  Branch (2040:30): [True: 7.01k, False: 371k]
  |  |  ------------------
  |  | 2041|   144k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 309, False: 377k]
  |  |  |  Branch (2041:30): [True: 6.23k, False: 371k]
  |  |  ------------------
  |  | 2042|   149k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 4.13k, False: 373k]
  |  |  |  Branch (2042:30): [True: 667, False: 377k]
  |  |  ------------------
  |  | 2043|   157k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 5.39k, False: 372k]
  |  |  |  Branch (2043:30): [True: 2.54k, False: 375k]
  |  |  ------------------
  |  | 2044|   171k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 2.60k, False: 375k]
  |  |  |  Branch (2044:30): [True: 11.6k, False: 366k]
  |  |  ------------------
  |  | 2045|   175k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 3.44k, False: 374k]
  |  |  |  Branch (2045:30): [True: 688, False: 377k]
  |  |  ------------------
  |  | 2046|   182k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 3.33k, False: 374k]
  |  |  |  Branch (2046:30): [True: 3.54k, False: 374k]
  |  |  ------------------
  |  | 2047|   184k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 228, False: 377k]
  |  |  |  Branch (2047:30): [True: 1.63k, False: 376k]
  |  |  ------------------
  |  | 2048|   190k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 122, False: 377k]
  |  |  |  Branch (2048:30): [True: 5.34k, False: 372k]
  |  |  ------------------
  |  | 2049|   196k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 2.19k, False: 375k]
  |  |  |  Branch (2049:30): [True: 4.23k, False: 373k]
  |  |  ------------------
  |  | 2050|   199k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 1.26k, False: 376k]
  |  |  |  Branch (2050:30): [True: 1.43k, False: 376k]
  |  |  ------------------
  |  | 2051|   210k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 968, False: 377k]
  |  |  ------------------
  ------------------
  243|   210k|        return !ULLONG_GET(wc->masks.tunnel.metadata.present.map,
  ------------------
  |  |  293|   210k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  244|  6.52M|                           mf->id - MFF_TUN_METADATA0);
  245|  1.10k|    case MFF_METADATA:
  ------------------
  |  Branch (245:5): [True: 1.10k, False: 376k]
  ------------------
  246|  1.10k|        return !wc->masks.metadata;
  247|  22.9k|    case MFF_IN_PORT:
  ------------------
  |  Branch (247:5): [True: 22.9k, False: 355k]
  ------------------
  248|  23.0k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (248:5): [True: 166, False: 377k]
  ------------------
  249|  23.0k|        return !wc->masks.in_port.ofp_port;
  250|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (250:5): [True: 0, False: 378k]
  ------------------
  251|      0|        return !wc->masks.skb_priority;
  252|  1.82k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (252:5): [True: 1.82k, False: 376k]
  ------------------
  253|  1.82k|        return !wc->masks.pkt_mark;
  254|  2.28k|    case MFF_CT_STATE:
  ------------------
  |  Branch (254:5): [True: 2.28k, False: 375k]
  ------------------
  255|  2.28k|        return !wc->masks.ct_state;
  256|     58|    case MFF_CT_ZONE:
  ------------------
  |  Branch (256:5): [True: 58, False: 378k]
  ------------------
  257|     58|        return !wc->masks.ct_zone;
  258|  4.32k|    case MFF_CT_MARK:
  ------------------
  |  Branch (258:5): [True: 4.32k, False: 373k]
  ------------------
  259|  4.32k|        return !wc->masks.ct_mark;
  260|    438|    case MFF_CT_LABEL:
  ------------------
  |  Branch (260:5): [True: 438, False: 377k]
  ------------------
  261|    438|        return ovs_u128_is_zero(wc->masks.ct_label);
  262|    224|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (262:5): [True: 224, False: 377k]
  ------------------
  263|    224|        return !wc->masks.ct_nw_proto;
  264|    275|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (264:5): [True: 275, False: 377k]
  ------------------
  265|    275|        return !wc->masks.ct_nw_src;
  266|    970|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (266:5): [True: 970, False: 377k]
  ------------------
  267|    970|        return !wc->masks.ct_nw_dst;
  268|    508|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (268:5): [True: 508, False: 377k]
  ------------------
  269|    508|        return !wc->masks.ct_tp_src;
  270|    737|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (270:5): [True: 737, False: 377k]
  ------------------
  271|    737|        return !wc->masks.ct_tp_dst;
  272|  1.29k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (272:5): [True: 1.29k, False: 376k]
  ------------------
  273|  1.29k|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_src);
  274|    832|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (274:5): [True: 832, False: 377k]
  ------------------
  275|    832|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_dst);
  276|  15.8k|    CASE_MFF_REGS:
  ------------------
  |  | 1982|  1.58k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 583, False: 377k]
  |  |  |  Branch (1982:20): [True: 388, False: 377k]
  |  |  |  Branch (1982:35): [True: 142, False: 377k]
  |  |  |  Branch (1982:50): [True: 472, False: 377k]
  |  |  ------------------
  |  | 1983|  8.14k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 52, False: 378k]
  |  |  |  Branch (1983:20): [True: 937, False: 377k]
  |  |  |  Branch (1983:35): [True: 1.14k, False: 376k]
  |  |  |  Branch (1983:50): [True: 4.42k, False: 373k]
  |  |  ------------------
  |  | 1984|  12.6k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 2.28k, False: 375k]
  |  |  |  Branch (1984:20): [True: 1.48k, False: 376k]
  |  |  |  Branch (1984:35): [True: 93, False: 377k]
  |  |  |  Branch (1984:51): [True: 627, False: 377k]
  |  |  ------------------
  |  | 1985|  15.8k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 1.82k, False: 376k]
  |  |  |  Branch (1985:21): [True: 967, False: 377k]
  |  |  |  Branch (1985:37): [True: 279, False: 377k]
  |  |  ------------------
  ------------------
  277|  15.8k|        return !wc->masks.regs[mf->id - MFF_REG0];
  278|  5.71k|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|  2.39k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 210, False: 377k]
  |  |  |  Branch (1994:21): [True: 599, False: 377k]
  |  |  |  Branch (1994:37): [True: 1.28k, False: 376k]
  |  |  |  Branch (1994:53): [True: 298, False: 377k]
  |  |  ------------------
  |  | 1995|  5.71k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 1.48k, False: 376k]
  |  |  |  Branch (1995:21): [True: 269, False: 377k]
  |  |  |  Branch (1995:37): [True: 533, False: 377k]
  |  |  ------------------
  ------------------
  279|  5.71k|        return !flow_get_xreg(&wc->masks, mf->id - MFF_XREG0);
  280|  4.31k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2004|  4.31k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 161, False: 377k]
  |  |  |  Branch (2004:22): [True: 1.27k, False: 376k]
  |  |  |  Branch (2004:39): [True: 2.12k, False: 375k]
  |  |  ------------------
  ------------------
  281|  4.31k|        ovs_u128 value = flow_get_xxreg(&wc->masks, mf->id - MFF_XXREG0);
  282|  4.31k|        return ovs_u128_is_zero(value);
  283|  5.14k|    }
  284|    262|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (284:5): [True: 262, False: 377k]
  ------------------
  285|    262|        return !wc->masks.actset_output;
  286|       |
  287|  3.80k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (287:5): [True: 3.80k, False: 374k]
  ------------------
  288|  3.80k|        return eth_addr_is_zero(wc->masks.dl_src);
  289|  1.76k|    case MFF_ETH_DST:
  ------------------
  |  Branch (289:5): [True: 1.76k, False: 376k]
  ------------------
  290|  1.76k|        return eth_addr_is_zero(wc->masks.dl_dst);
  291|  2.07k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (291:5): [True: 2.07k, False: 375k]
  ------------------
  292|  2.07k|        return !wc->masks.dl_type;
  293|       |
  294|    417|    case MFF_ARP_SHA:
  ------------------
  |  Branch (294:5): [True: 417, False: 377k]
  ------------------
  295|  1.42k|    case MFF_ND_SLL:
  ------------------
  |  Branch (295:5): [True: 1.00k, False: 377k]
  ------------------
  296|  1.42k|        return eth_addr_is_zero(wc->masks.arp_sha);
  297|       |
  298|    232|    case MFF_ARP_THA:
  ------------------
  |  Branch (298:5): [True: 232, False: 377k]
  ------------------
  299|  8.58k|    case MFF_ND_TLL:
  ------------------
  |  Branch (299:5): [True: 8.34k, False: 369k]
  ------------------
  300|  8.58k|        return eth_addr_is_zero(wc->masks.arp_tha);
  301|       |
  302|  2.08k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (302:5): [True: 2.08k, False: 375k]
  ------------------
  303|  2.08k|        return !wc->masks.vlans[0].tci;
  304|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (304:5): [True: 0, False: 378k]
  ------------------
  305|      0|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK));
  306|    500|    case MFF_VLAN_VID:
  ------------------
  |  Branch (306:5): [True: 500, False: 377k]
  ------------------
  307|    500|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI));
  308|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (308:5): [True: 0, False: 378k]
  ------------------
  309|     52|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (309:5): [True: 52, False: 378k]
  ------------------
  310|     52|        return !(wc->masks.vlans[0].tci & htons(VLAN_PCP_MASK));
  311|       |
  312|     57|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (312:5): [True: 57, False: 378k]
  ------------------
  313|     57|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK));
  314|     71|    case MFF_MPLS_TC:
  ------------------
  |  Branch (314:5): [True: 71, False: 377k]
  ------------------
  315|     71|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK));
  316|    599|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (316:5): [True: 599, False: 377k]
  ------------------
  317|    599|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK));
  318|  3.00k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (318:5): [True: 3.00k, False: 375k]
  ------------------
  319|  3.00k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK));
  320|       |
  321|  1.06k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (321:5): [True: 1.06k, False: 376k]
  ------------------
  322|  1.06k|        return !wc->masks.nw_src;
  323|  1.62k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (323:5): [True: 1.62k, False: 376k]
  ------------------
  324|  1.62k|        return !wc->masks.nw_dst;
  325|       |
  326|    181|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (326:5): [True: 181, False: 377k]
  ------------------
  327|    181|        return ipv6_mask_is_any(&wc->masks.ipv6_src);
  328|  1.98k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (328:5): [True: 1.98k, False: 376k]
  ------------------
  329|  1.98k|        return ipv6_mask_is_any(&wc->masks.ipv6_dst);
  330|       |
  331|  6.12k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (331:5): [True: 6.12k, False: 371k]
  ------------------
  332|  6.12k|        return !wc->masks.ipv6_label;
  333|       |
  334|  1.34k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (334:5): [True: 1.34k, False: 376k]
  ------------------
  335|  1.34k|        return !wc->masks.nw_proto;
  336|    858|    case MFF_IP_DSCP:
  ------------------
  |  Branch (336:5): [True: 858, False: 377k]
  ------------------
  337|  1.09k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (337:5): [True: 241, False: 377k]
  ------------------
  338|  1.09k|        return !(wc->masks.nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  720|  1.09k|#define IP_DSCP_MASK 0xfc
  ------------------
  339|  1.72k|    case MFF_IP_ECN:
  ------------------
  |  Branch (339:5): [True: 1.72k, False: 376k]
  ------------------
  340|  1.72k|        return !(wc->masks.nw_tos & IP_ECN_MASK);
  ------------------
  |  |  718|  1.72k|#define IP_ECN_MASK 0x03
  ------------------
  341|    454|    case MFF_IP_TTL:
  ------------------
  |  Branch (341:5): [True: 454, False: 377k]
  ------------------
  342|    454|        return !wc->masks.nw_ttl;
  343|       |
  344|    274|    case MFF_ND_TARGET:
  ------------------
  |  Branch (344:5): [True: 274, False: 377k]
  ------------------
  345|    274|        return ipv6_mask_is_any(&wc->masks.nd_target);
  346|       |
  347|    196|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (347:5): [True: 196, False: 377k]
  ------------------
  348|    196|        return !wc->masks.igmp_group_ip4;
  349|     32|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (349:5): [True: 32, False: 378k]
  ------------------
  350|     32|        return !wc->masks.tcp_flags;
  351|       |
  352|    955|    case MFF_IP_FRAG:
  ------------------
  |  Branch (352:5): [True: 955, False: 377k]
  ------------------
  353|    955|        return !(wc->masks.nw_frag & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    955|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    955|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|    955|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  354|       |
  355|     32|    case MFF_ARP_OP:
  ------------------
  |  Branch (355:5): [True: 32, False: 378k]
  ------------------
  356|     32|        return !wc->masks.nw_proto;
  357|  4.45k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (357:5): [True: 4.45k, False: 373k]
  ------------------
  358|  4.45k|        return !wc->masks.nw_src;
  359|  1.28k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (359:5): [True: 1.28k, False: 376k]
  ------------------
  360|  1.28k|        return !wc->masks.nw_dst;
  361|       |
  362|    148|    case MFF_TCP_SRC:
  ------------------
  |  Branch (362:5): [True: 148, False: 377k]
  ------------------
  363|    434|    case MFF_UDP_SRC:
  ------------------
  |  Branch (363:5): [True: 286, False: 377k]
  ------------------
  364|    578|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (364:5): [True: 144, False: 377k]
  ------------------
  365|    919|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (365:5): [True: 341, False: 377k]
  ------------------
  366|  1.56k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (366:5): [True: 644, False: 377k]
  ------------------
  367|  1.56k|        return !wc->masks.tp_src;
  368|  1.32k|    case MFF_TCP_DST:
  ------------------
  |  Branch (368:5): [True: 1.32k, False: 376k]
  ------------------
  369|  6.94k|    case MFF_UDP_DST:
  ------------------
  |  Branch (369:5): [True: 5.62k, False: 372k]
  ------------------
  370|  7.64k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (370:5): [True: 704, False: 377k]
  ------------------
  371|  9.23k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (371:5): [True: 1.58k, False: 376k]
  ------------------
  372|  9.88k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (372:5): [True: 649, False: 377k]
  ------------------
  373|  9.88k|        return !wc->masks.tp_dst;
  374|  4.50k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (374:5): [True: 4.50k, False: 373k]
  ------------------
  375|  4.50k|        return !wc->masks.tcp_flags;
  376|       |
  377|    588|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (377:5): [True: 588, False: 377k]
  ------------------
  378|    588|        return !wc->masks.nsh.flags;
  379|    368|    case MFF_NSH_TTL:
  ------------------
  |  Branch (379:5): [True: 368, False: 377k]
  ------------------
  380|    368|        return !wc->masks.nsh.ttl;
  381|  1.27k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (381:5): [True: 1.27k, False: 376k]
  ------------------
  382|  1.27k|        return !wc->masks.nsh.mdtype;
  383|     88|    case MFF_NSH_NP:
  ------------------
  |  Branch (383:5): [True: 88, False: 377k]
  ------------------
  384|     88|        return !wc->masks.nsh.np;
  385|     29|    case MFF_NSH_SPI:
  ------------------
  |  Branch (385:5): [True: 29, False: 378k]
  ------------------
  386|     29|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SPI_MASK));
  387|     99|    case MFF_NSH_SI:
  ------------------
  |  Branch (387:5): [True: 99, False: 377k]
  ------------------
  388|     99|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SI_MASK));
  389|     90|    case MFF_NSH_C1:
  ------------------
  |  Branch (389:5): [True: 90, False: 377k]
  ------------------
  390|    739|    case MFF_NSH_C2:
  ------------------
  |  Branch (390:5): [True: 649, False: 377k]
  ------------------
  391|    774|    case MFF_NSH_C3:
  ------------------
  |  Branch (391:5): [True: 35, False: 378k]
  ------------------
  392|    823|    case MFF_NSH_C4:
  ------------------
  |  Branch (392:5): [True: 49, False: 378k]
  ------------------
  393|    823|        return !wc->masks.nsh.context[mf->id - MFF_NSH_C1];
  394|  2.70k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (394:5): [True: 2.70k, False: 375k]
  ------------------
  395|  2.70k|        return !wc->masks.tunnel.gtpu_flags;
  396|  3.53k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (396:5): [True: 3.53k, False: 374k]
  ------------------
  397|  3.53k|        return !wc->masks.tunnel.gtpu_msgtype;
  398|       |
  399|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (399:5): [True: 0, False: 378k]
  ------------------
  400|      0|    default:
  ------------------
  |  Branch (400:5): [True: 0, False: 378k]
  ------------------
  401|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  402|   378k|    }
  403|   378k|}
mf_get_mask:
  414|  50.0k|{
  415|  50.0k|    mf_get_value(mf, &wc->masks, mask);
  416|  50.0k|}
mf_is_mask_valid:
  422|   431k|{
  423|   431k|    switch (mf->maskable) {
  ------------------
  |  Branch (423:13): [True: 0, False: 431k]
  ------------------
  424|  58.5k|    case MFM_NONE:
  ------------------
  |  Branch (424:5): [True: 58.5k, False: 372k]
  ------------------
  425|  58.5k|        return (is_all_zeros(mask, mf->n_bytes) ||
  ------------------
  |  Branch (425:17): [True: 8.79k, False: 49.7k]
  ------------------
  426|  58.5k|                is_all_ones(mask, mf->n_bytes));
  ------------------
  |  Branch (426:17): [True: 46.2k, False: 3.48k]
  ------------------
  427|       |
  428|   372k|    case MFM_FULLY:
  ------------------
  |  Branch (428:5): [True: 372k, False: 58.5k]
  ------------------
  429|   372k|        return true;
  430|   431k|    }
  431|       |
  432|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  433|   431k|}
mf_are_prereqs_ok:
  494|  5.07k|{
  495|  5.07k|    return mf_are_prereqs_ok__(mf, flow, NULL, wc);
  496|  5.07k|}
mf_are_match_prereqs_ok:
  502|  89.6k|{
  503|  89.6k|    return mf_are_prereqs_ok__(mf, &match->flow, &match->wc, NULL);
  504|  89.6k|}
mf_is_value_valid:
  518|   390k|{
  519|   390k|    switch (mf->id) {
  520|  2.34k|    case MFF_DP_HASH:
  ------------------
  |  Branch (520:5): [True: 2.34k, False: 388k]
  ------------------
  521|  2.53k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (521:5): [True: 186, False: 390k]
  ------------------
  522|  13.9k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (522:5): [True: 11.3k, False: 379k]
  ------------------
  523|  15.5k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (523:5): [True: 1.62k, False: 389k]
  ------------------
  524|  15.8k|    case MFF_TUN_ID:
  ------------------
  |  Branch (524:5): [True: 281, False: 390k]
  ------------------
  525|  15.9k|    case MFF_TUN_SRC:
  ------------------
  |  Branch (525:5): [True: 115, False: 390k]
  ------------------
  526|  17.8k|    case MFF_TUN_DST:
  ------------------
  |  Branch (526:5): [True: 1.97k, False: 388k]
  ------------------
  527|  19.8k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (527:5): [True: 1.92k, False: 388k]
  ------------------
  528|  22.9k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (528:5): [True: 3.09k, False: 387k]
  ------------------
  529|  22.9k|    case MFF_TUN_TOS:
  ------------------
  |  Branch (529:5): [True: 0, False: 390k]
  ------------------
  530|  22.9k|    case MFF_TUN_TTL:
  ------------------
  |  Branch (530:5): [True: 0, False: 390k]
  ------------------
  531|  23.6k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (531:5): [True: 694, False: 390k]
  ------------------
  532|  23.9k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (532:5): [True: 360, False: 390k]
  ------------------
  533|  24.0k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (533:5): [True: 96, False: 390k]
  ------------------
  534|  24.2k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (534:5): [True: 222, False: 390k]
  ------------------
  535|  25.9k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (535:5): [True: 1.65k, False: 389k]
  ------------------
  536|  31.1k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (536:5): [True: 5.16k, False: 385k]
  ------------------
  537|  33.8k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (537:5): [True: 2.70k, False: 388k]
  ------------------
  538|  37.3k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (538:5): [True: 3.53k, False: 387k]
  ------------------
  539|  9.62M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|  38.9k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 1.35k, False: 389k]
  |  |  |  Branch (2020:29): [True: 298, False: 390k]
  |  |  ------------------
  |  | 2021|  40.8k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 1.45k, False: 389k]
  |  |  |  Branch (2021:29): [True: 362, False: 390k]
  |  |  ------------------
  |  | 2022|  50.0k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 6.54k, False: 384k]
  |  |  |  Branch (2022:29): [True: 2.65k, False: 388k]
  |  |  ------------------
  |  | 2023|  60.1k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 5.53k, False: 385k]
  |  |  |  Branch (2023:29): [True: 4.58k, False: 386k]
  |  |  ------------------
  |  | 2024|  66.8k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 1.27k, False: 389k]
  |  |  |  Branch (2024:29): [True: 5.44k, False: 385k]
  |  |  ------------------
  |  | 2025|  79.5k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 10.3k, False: 380k]
  |  |  |  Branch (2025:30): [True: 2.30k, False: 388k]
  |  |  ------------------
  |  | 2026|  84.5k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 2.80k, False: 387k]
  |  |  |  Branch (2026:30): [True: 2.24k, False: 388k]
  |  |  ------------------
  |  | 2027|  93.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 4.68k, False: 386k]
  |  |  |  Branch (2027:30): [True: 4.53k, False: 386k]
  |  |  ------------------
  |  | 2028|  99.0k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 1.88k, False: 388k]
  |  |  |  Branch (2028:30): [True: 3.44k, False: 387k]
  |  |  ------------------
  |  | 2029|   118k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 15.7k, False: 374k]
  |  |  |  Branch (2029:30): [True: 3.54k, False: 387k]
  |  |  ------------------
  |  | 2030|   119k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 901, False: 389k]
  |  |  |  Branch (2030:30): [True: 569, False: 390k]
  |  |  ------------------
  |  | 2031|   123k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 1.13k, False: 389k]
  |  |  |  Branch (2031:30): [True: 2.09k, False: 388k]
  |  |  ------------------
  |  | 2032|   137k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 4.48k, False: 386k]
  |  |  |  Branch (2032:30): [True: 9.48k, False: 381k]
  |  |  ------------------
  |  | 2033|   139k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 1.37k, False: 389k]
  |  |  |  Branch (2033:30): [True: 1.41k, False: 389k]
  |  |  ------------------
  |  | 2034|   140k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 319, False: 390k]
  |  |  |  Branch (2034:30): [True: 172, False: 390k]
  |  |  ------------------
  |  | 2035|   146k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 1.84k, False: 388k]
  |  |  |  Branch (2035:30): [True: 4.32k, False: 386k]
  |  |  ------------------
  |  | 2036|   152k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 3.77k, False: 386k]
  |  |  |  Branch (2036:30): [True: 2.10k, False: 388k]
  |  |  ------------------
  |  | 2037|   167k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 14.6k, False: 376k]
  |  |  |  Branch (2037:30): [True: 716, False: 390k]
  |  |  ------------------
  |  | 2038|   171k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 1.27k, False: 389k]
  |  |  |  Branch (2038:30): [True: 2.28k, False: 388k]
  |  |  ------------------
  |  | 2039|   177k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 1.34k, False: 389k]
  |  |  |  Branch (2039:30): [True: 4.86k, False: 385k]
  |  |  ------------------
  |  | 2040|   184k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 454, False: 390k]
  |  |  |  Branch (2040:30): [True: 7.01k, False: 383k]
  |  |  ------------------
  |  | 2041|   191k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 309, False: 390k]
  |  |  |  Branch (2041:30): [True: 6.23k, False: 384k]
  |  |  ------------------
  |  | 2042|   196k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 4.13k, False: 386k]
  |  |  |  Branch (2042:30): [True: 667, False: 390k]
  |  |  ------------------
  |  | 2043|   204k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 5.39k, False: 385k]
  |  |  |  Branch (2043:30): [True: 2.54k, False: 388k]
  |  |  ------------------
  |  | 2044|   218k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 2.60k, False: 388k]
  |  |  |  Branch (2044:30): [True: 11.6k, False: 379k]
  |  |  ------------------
  |  | 2045|   222k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 3.44k, False: 387k]
  |  |  |  Branch (2045:30): [True: 688, False: 390k]
  |  |  ------------------
  |  | 2046|   229k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 3.33k, False: 387k]
  |  |  |  Branch (2046:30): [True: 3.54k, False: 387k]
  |  |  ------------------
  |  | 2047|   231k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 228, False: 390k]
  |  |  |  Branch (2047:30): [True: 1.63k, False: 389k]
  |  |  ------------------
  |  | 2048|   236k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 122, False: 390k]
  |  |  |  Branch (2048:30): [True: 5.34k, False: 385k]
  |  |  ------------------
  |  | 2049|   243k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 2.19k, False: 388k]
  |  |  |  Branch (2049:30): [True: 4.23k, False: 386k]
  |  |  ------------------
  |  | 2050|   246k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 1.26k, False: 389k]
  |  |  |  Branch (2050:30): [True: 1.44k, False: 389k]
  |  |  ------------------
  |  | 2051|   256k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 968, False: 389k]
  |  |  ------------------
  ------------------
  540|  9.62M|    case MFF_METADATA:
  ------------------
  |  Branch (540:5): [True: 1.10k, False: 389k]
  ------------------
  541|   281k|    case MFF_IN_PORT:
  ------------------
  |  Branch (541:5): [True: 22.9k, False: 367k]
  ------------------
  542|   281k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (542:5): [True: 0, False: 390k]
  ------------------
  543|   282k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (543:5): [True: 1.82k, False: 388k]
  ------------------
  544|   282k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (544:5): [True: 58, False: 390k]
  ------------------
  545|   287k|    case MFF_CT_MARK:
  ------------------
  |  Branch (545:5): [True: 4.32k, False: 386k]
  ------------------
  546|   287k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (546:5): [True: 438, False: 390k]
  ------------------
  547|   287k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (547:5): [True: 231, False: 390k]
  ------------------
  548|   288k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (548:5): [True: 275, False: 390k]
  ------------------
  549|   289k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (549:5): [True: 970, False: 389k]
  ------------------
  550|   290k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (550:5): [True: 1.29k, False: 389k]
  ------------------
  551|   291k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (551:5): [True: 832, False: 389k]
  ------------------
  552|   291k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (552:5): [True: 511, False: 390k]
  ------------------
  553|   292k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (553:5): [True: 737, False: 389k]
  ------------------
  554|  4.80M|    CASE_MFF_REGS:
  ------------------
  |  | 1982|   294k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 583, False: 390k]
  |  |  |  Branch (1982:20): [True: 388, False: 390k]
  |  |  |  Branch (1982:35): [True: 142, False: 390k]
  |  |  |  Branch (1982:50): [True: 472, False: 390k]
  |  |  ------------------
  |  | 1983|   300k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 52, False: 390k]
  |  |  |  Branch (1983:20): [True: 937, False: 389k]
  |  |  |  Branch (1983:35): [True: 1.14k, False: 389k]
  |  |  |  Branch (1983:50): [True: 4.42k, False: 386k]
  |  |  ------------------
  |  | 1984|   305k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 2.28k, False: 388k]
  |  |  |  Branch (1984:20): [True: 1.48k, False: 389k]
  |  |  |  Branch (1984:35): [True: 93, False: 390k]
  |  |  |  Branch (1984:51): [True: 627, False: 390k]
  |  |  ------------------
  |  | 1985|   308k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 1.82k, False: 388k]
  |  |  |  Branch (1985:21): [True: 967, False: 389k]
  |  |  |  Branch (1985:37): [True: 279, False: 390k]
  |  |  ------------------
  ------------------
  555|  4.80M|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|   310k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 211, False: 390k]
  |  |  |  Branch (1994:21): [True: 599, False: 390k]
  |  |  |  Branch (1994:37): [True: 1.28k, False: 389k]
  |  |  |  Branch (1994:53): [True: 298, False: 390k]
  |  |  ------------------
  |  | 1995|   314k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 1.48k, False: 389k]
  |  |  |  Branch (1995:21): [True: 269, False: 390k]
  |  |  |  Branch (1995:37): [True: 533, False: 390k]
  |  |  ------------------
  ------------------
  556|  2.49M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2004|   318k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 161, False: 390k]
  |  |  |  Branch (2004:22): [True: 1.27k, False: 389k]
  |  |  |  Branch (2004:39): [True: 2.12k, False: 388k]
  |  |  ------------------
  ------------------
  557|  1.26M|    case MFF_ETH_SRC:
  ------------------
  |  Branch (557:5): [True: 3.81k, False: 386k]
  ------------------
  558|   323k|    case MFF_ETH_DST:
  ------------------
  |  Branch (558:5): [True: 1.76k, False: 388k]
  ------------------
  559|   326k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (559:5): [True: 2.07k, False: 388k]
  ------------------
  560|   328k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (560:5): [True: 2.08k, False: 388k]
  ------------------
  561|   331k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (561:5): [True: 3.00k, False: 387k]
  ------------------
  562|   332k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (562:5): [True: 1.07k, False: 389k]
  ------------------
  563|   333k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (563:5): [True: 1.62k, False: 389k]
  ------------------
  564|   334k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (564:5): [True: 181, False: 390k]
  ------------------
  565|   336k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (565:5): [True: 2.32k, False: 388k]
  ------------------
  566|   337k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (566:5): [True: 1.34k, False: 389k]
  ------------------
  567|   338k|    case MFF_IP_TTL:
  ------------------
  |  Branch (567:5): [True: 455, False: 390k]
  ------------------
  568|   342k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (568:5): [True: 4.69k, False: 386k]
  ------------------
  569|   344k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (569:5): [True: 1.29k, False: 389k]
  ------------------
  570|   344k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (570:5): [True: 417, False: 390k]
  ------------------
  571|   344k|    case MFF_ARP_THA:
  ------------------
  |  Branch (571:5): [True: 232, False: 390k]
  ------------------
  572|   344k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (572:5): [True: 148, False: 390k]
  ------------------
  573|   346k|    case MFF_TCP_DST:
  ------------------
  |  Branch (573:5): [True: 1.32k, False: 389k]
  ------------------
  574|   346k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (574:5): [True: 288, False: 390k]
  ------------------
  575|   352k|    case MFF_UDP_DST:
  ------------------
  |  Branch (575:5): [True: 5.63k, False: 385k]
  ------------------
  576|   352k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (576:5): [True: 147, False: 390k]
  ------------------
  577|   353k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (577:5): [True: 706, False: 390k]
  ------------------
  578|   353k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (578:5): [True: 342, False: 390k]
  ------------------
  579|   355k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (579:5): [True: 1.60k, False: 389k]
  ------------------
  580|   355k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (580:5): [True: 684, False: 390k]
  ------------------
  581|   356k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (581:5): [True: 651, False: 390k]
  ------------------
  582|   356k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (582:5): [True: 353, False: 390k]
  ------------------
  583|   357k|    case MFF_ND_SLL:
  ------------------
  |  Branch (583:5): [True: 1.04k, False: 389k]
  ------------------
  584|   366k|    case MFF_ND_TLL:
  ------------------
  |  Branch (584:5): [True: 8.38k, False: 382k]
  ------------------
  585|   366k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (585:5): [True: 196, False: 390k]
  ------------------
  586|   366k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (586:5): [True: 36, False: 390k]
  ------------------
  587|   366k|        return true;
  588|       |
  589|    167|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (589:5): [True: 167, False: 390k]
  ------------------
  590|    474|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (590:5): [True: 307, False: 390k]
  ------------------
  591|    474|        ofp_port_t port;
  592|    474|        return !ofputil_port_from_ofp11(value->be32, &port);
  593|    167|    }
  594|       |
  595|    862|    case MFF_IP_DSCP:
  ------------------
  |  Branch (595:5): [True: 862, False: 389k]
  ------------------
  596|    862|        return !(value->u8 & ~IP_DSCP_MASK);
  ------------------
  |  |  720|    862|#define IP_DSCP_MASK 0xfc
  ------------------
  597|    242|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (597:5): [True: 242, False: 390k]
  ------------------
  598|    242|        return !(value->u8 & (~IP_DSCP_MASK >> 2));
  ------------------
  |  |  720|    242|#define IP_DSCP_MASK 0xfc
  ------------------
  599|  1.76k|    case MFF_IP_ECN:
  ------------------
  |  Branch (599:5): [True: 1.76k, False: 388k]
  ------------------
  600|  1.76k|        return !(value->u8 & ~IP_ECN_MASK);
  ------------------
  |  |  718|  1.76k|#define IP_ECN_MASK 0x03
  ------------------
  601|  1.15k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (601:5): [True: 1.15k, False: 389k]
  ------------------
  602|  1.15k|        return !(value->u8 & ~FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  1.15k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  1.15k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  1.15k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  603|  4.51k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (603:5): [True: 4.51k, False: 386k]
  ------------------
  604|  4.51k|        return !(value->be16 & ~htons(0x0fff));
  605|       |
  606|     36|    case MFF_ARP_OP:
  ------------------
  |  Branch (606:5): [True: 36, False: 390k]
  ------------------
  607|     36|        return !(value->be16 & htons(0xff00));
  608|       |
  609|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (609:5): [True: 0, False: 390k]
  ------------------
  610|      0|        return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
  611|    563|    case MFF_VLAN_VID:
  ------------------
  |  Branch (611:5): [True: 563, False: 390k]
  ------------------
  612|    563|        return !(value->be16 & htons(VLAN_PCP_MASK));
  613|       |
  614|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (614:5): [True: 0, False: 390k]
  ------------------
  615|     72|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (615:5): [True: 72, False: 390k]
  ------------------
  616|     72|        return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  497|     72|#define VLAN_PCP_MASK 0xe000
  ------------------
                      return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  498|     72|#define VLAN_PCP_SHIFT 13
  ------------------
  617|       |
  618|  6.13k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (618:5): [True: 6.13k, False: 384k]
  ------------------
  619|  6.13k|        return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
  620|       |
  621|     68|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (621:5): [True: 68, False: 390k]
  ------------------
  622|     68|        return !(value->be32 & ~htonl(MPLS_LABEL_MASK >> MPLS_LABEL_SHIFT));
  623|       |
  624|     73|    case MFF_MPLS_TC:
  ------------------
  |  Branch (624:5): [True: 73, False: 390k]
  ------------------
  625|     73|        return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  551|     73|#define MPLS_TC_MASK        0x00000e00
  ------------------
                      return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  552|     73|#define MPLS_TC_SHIFT       9
  ------------------
  626|       |
  627|    621|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (627:5): [True: 621, False: 390k]
  ------------------
  628|    621|        return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  548|    621|#define MPLS_BOS_MASK       0x00000100
  ------------------
                      return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  549|    621|#define MPLS_BOS_SHIFT      8
  ------------------
  629|       |
  630|    241|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (630:5): [True: 241, False: 390k]
  ------------------
  631|    241|        return !(value->be16 & ~htons(FLOW_TNL_PUB_F_MASK));
  632|       |
  633|  2.30k|    case MFF_CT_STATE:
  ------------------
  |  Branch (633:5): [True: 2.30k, False: 388k]
  ------------------
  634|  2.30k|        return !(value->be32 & ~htonl(CS_SUPPORTED_MASK));
  635|       |
  636|    588|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (636:5): [True: 588, False: 390k]
  ------------------
  637|    588|        return true;
  638|    370|    case MFF_NSH_TTL:
  ------------------
  |  Branch (638:5): [True: 370, False: 390k]
  ------------------
  639|    370|        return (value->u8 <= 63);
  640|  3.26k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (640:5): [True: 3.26k, False: 387k]
  ------------------
  641|  3.26k|        return (value->u8 == 1 || value->u8 == 2);
  ------------------
  |  Branch (641:17): [True: 3.20k, False: 55]
  |  Branch (641:35): [True: 0, False: 55]
  ------------------
  642|     88|    case MFF_NSH_NP:
  ------------------
  |  Branch (642:5): [True: 88, False: 390k]
  ------------------
  643|     88|        return true;
  644|     29|    case MFF_NSH_SPI:
  ------------------
  |  Branch (644:5): [True: 29, False: 390k]
  ------------------
  645|     29|        return !(value->be32 & htonl(0xFF000000));
  646|     99|    case MFF_NSH_SI:
  ------------------
  |  Branch (646:5): [True: 99, False: 390k]
  ------------------
  647|    189|    case MFF_NSH_C1:
  ------------------
  |  Branch (647:5): [True: 90, False: 390k]
  ------------------
  648|    838|    case MFF_NSH_C2:
  ------------------
  |  Branch (648:5): [True: 649, False: 390k]
  ------------------
  649|    873|    case MFF_NSH_C3:
  ------------------
  |  Branch (649:5): [True: 35, False: 390k]
  ------------------
  650|    922|    case MFF_NSH_C4:
  ------------------
  |  Branch (650:5): [True: 49, False: 390k]
  ------------------
  651|    922|        return true;
  652|       |
  653|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (653:5): [True: 0, False: 390k]
  ------------------
  654|      0|    default:
  ------------------
  |  Branch (654:5): [True: 0, False: 390k]
  ------------------
  655|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  656|   390k|    }
  657|   390k|}
mf_get_value:
  664|   100k|{
  665|   100k|    switch (mf->id) {
  666|  1.52k|    case MFF_DP_HASH:
  ------------------
  |  Branch (666:5): [True: 1.52k, False: 98.5k]
  ------------------
  667|  1.52k|        value->be32 = htonl(flow->dp_hash);
  668|  1.52k|        break;
  669|  4.70k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (669:5): [True: 4.70k, False: 95.3k]
  ------------------
  670|  4.70k|        value->be32 = htonl(flow->recirc_id);
  671|  4.70k|        break;
  672|    172|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (672:5): [True: 172, False: 99.8k]
  ------------------
  673|    172|        value->be32 = flow->packet_type;
  674|    172|        break;
  675|  6.54k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (675:5): [True: 6.54k, False: 93.5k]
  ------------------
  676|  6.54k|        value->be32 = htonl(flow->conj_id);
  677|  6.54k|        break;
  678|  4.03k|    case MFF_TUN_ID:
  ------------------
  |  Branch (678:5): [True: 4.03k, False: 96.0k]
  ------------------
  679|  4.03k|        value->be64 = flow->tunnel.tun_id;
  680|  4.03k|        break;
  681|     10|    case MFF_TUN_SRC:
  ------------------
  |  Branch (681:5): [True: 10, False: 100k]
  ------------------
  682|     10|        value->be32 = flow->tunnel.ip_src;
  683|     10|        break;
  684|     94|    case MFF_TUN_DST:
  ------------------
  |  Branch (684:5): [True: 94, False: 99.9k]
  ------------------
  685|     94|        value->be32 = flow->tunnel.ip_dst;
  686|     94|        break;
  687|      8|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (687:5): [True: 8, False: 100k]
  ------------------
  688|      8|        value->ipv6 = flow->tunnel.ipv6_src;
  689|      8|        break;
  690|     24|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (690:5): [True: 24, False: 100k]
  ------------------
  691|     24|        value->ipv6 = flow->tunnel.ipv6_dst;
  692|     24|        break;
  693|      6|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (693:5): [True: 6, False: 100k]
  ------------------
  694|      6|        value->be16 = htons(flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
  695|      6|        break;
  696|  3.04k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (696:5): [True: 3.04k, False: 97.0k]
  ------------------
  697|  3.04k|        value->be16 = flow->tunnel.gbp_id;
  698|  3.04k|        break;
  699|    702|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (699:5): [True: 702, False: 99.3k]
  ------------------
  700|    702|        value->u8 = flow->tunnel.gbp_flags;
  701|    702|        break;
  702|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (702:5): [True: 0, False: 100k]
  ------------------
  703|      0|        value->u8 = flow->tunnel.ip_ttl;
  704|      0|        break;
  705|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (705:5): [True: 0, False: 100k]
  ------------------
  706|      0|        value->u8 = flow->tunnel.ip_tos;
  707|      0|        break;
  708|      0|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (708:5): [True: 0, False: 100k]
  ------------------
  709|      0|        value->u8 = flow->tunnel.erspan_ver;
  710|      0|        break;
  711|      0|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (711:5): [True: 0, False: 100k]
  ------------------
  712|      0|        value->be32 = htonl(flow->tunnel.erspan_idx);
  713|      0|        break;
  714|      0|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (714:5): [True: 0, False: 100k]
  ------------------
  715|      0|        value->u8 = flow->tunnel.erspan_dir;
  716|      0|        break;
  717|      0|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (717:5): [True: 0, False: 100k]
  ------------------
  718|      0|        value->u8 = flow->tunnel.erspan_hwid;
  719|      0|        break;
  720|      0|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (720:5): [True: 0, False: 100k]
  ------------------
  721|      0|        value->u8 = flow->tunnel.gtpu_flags;
  722|      0|        break;
  723|      0|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (723:5): [True: 0, False: 100k]
  ------------------
  724|      0|        value->u8 = flow->tunnel.gtpu_msgtype;
  725|      0|        break;
  726|  44.9k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|  3.25k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 16, False: 100k]
  |  |  |  Branch (2020:29): [True: 3.24k, False: 96.8k]
  |  |  ------------------
  |  | 2021|  7.87k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 18, False: 100k]
  |  |  |  Branch (2021:29): [True: 4.59k, False: 95.4k]
  |  |  ------------------
  |  | 2022|  8.78k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 866, False: 99.2k]
  |  |  |  Branch (2022:29): [True: 46, False: 100k]
  |  |  ------------------
  |  | 2023|  10.8k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 1.40k, False: 98.6k]
  |  |  |  Branch (2023:29): [True: 710, False: 99.3k]
  |  |  ------------------
  |  | 2024|  12.0k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 156, False: 99.9k]
  |  |  |  Branch (2024:29): [True: 1.02k, False: 99.0k]
  |  |  ------------------
  |  | 2025|  15.3k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 3.29k, False: 96.7k]
  |  |  |  Branch (2025:30): [True: 14, False: 100k]
  |  |  ------------------
  |  | 2026|  15.5k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 166, False: 99.9k]
  |  |  |  Branch (2026:30): [True: 14, False: 100k]
  |  |  ------------------
  |  | 2027|  15.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 168, False: 99.9k]
  |  |  |  Branch (2027:30): [True: 14, False: 100k]
  |  |  ------------------
  |  | 2028|  15.7k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 6, False: 100k]
  |  |  |  Branch (2028:30): [True: 30, False: 100k]
  |  |  ------------------
  |  | 2029|  19.8k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 1.20k, False: 98.8k]
  |  |  |  Branch (2029:30): [True: 2.83k, False: 97.2k]
  |  |  ------------------
  |  | 2030|  25.5k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 1.01k, False: 99.0k]
  |  |  |  Branch (2030:30): [True: 4.69k, False: 95.3k]
  |  |  ------------------
  |  | 2031|  27.5k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 362, False: 99.7k]
  |  |  |  Branch (2031:30): [True: 1.62k, False: 98.4k]
  |  |  ------------------
  |  | 2032|  28.8k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 40, False: 100k]
  |  |  |  Branch (2032:30): [True: 1.32k, False: 98.7k]
  |  |  ------------------
  |  | 2033|  30.8k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 124, False: 99.9k]
  |  |  |  Branch (2033:30): [True: 1.83k, False: 98.2k]
  |  |  ------------------
  |  | 2034|  32.0k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 1.17k, False: 98.8k]
  |  |  |  Branch (2034:30): [True: 18, False: 100k]
  |  |  ------------------
  |  | 2035|  32.0k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 16, False: 100k]
  |  |  |  Branch (2035:30): [True: 14, False: 100k]
  |  |  ------------------
  |  | 2036|  32.5k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 32, False: 100k]
  |  |  |  Branch (2036:30): [True: 464, False: 99.6k]
  |  |  ------------------
  |  | 2037|  34.0k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 22, False: 100k]
  |  |  |  Branch (2037:30): [True: 1.43k, False: 98.6k]
  |  |  ------------------
  |  | 2038|  37.7k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 1.79k, False: 98.2k]
  |  |  |  Branch (2038:30): [True: 1.97k, False: 98.0k]
  |  |  ------------------
  |  | 2039|  37.8k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 70, False: 99.9k]
  |  |  |  Branch (2039:30): [True: 30, False: 100k]
  |  |  ------------------
  |  | 2040|  38.1k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 302, False: 99.7k]
  |  |  |  Branch (2040:30): [True: 6, False: 100k]
  |  |  ------------------
  |  | 2041|  38.4k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 254, False: 99.8k]
  |  |  |  Branch (2041:30): [True: 40, False: 100k]
  |  |  ------------------
  |  | 2042|  38.6k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 86, False: 99.9k]
  |  |  |  Branch (2042:30): [True: 62, False: 100k]
  |  |  ------------------
  |  | 2043|  38.7k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 54, False: 100k]
  |  |  |  Branch (2043:30): [True: 38, False: 100k]
  |  |  ------------------
  |  | 2044|  38.9k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 200, False: 99.8k]
  |  |  |  Branch (2044:30): [True: 6, False: 100k]
  |  |  ------------------
  |  | 2045|  40.8k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 20, False: 100k]
  |  |  |  Branch (2045:30): [True: 1.92k, False: 98.1k]
  |  |  ------------------
  |  | 2046|  41.9k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 1.04k, False: 99.0k]
  |  |  |  Branch (2046:30): [True: 62, False: 100k]
  |  |  ------------------
  |  | 2047|  43.2k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 1.23k, False: 98.8k]
  |  |  |  Branch (2047:30): [True: 30, False: 100k]
  |  |  ------------------
  |  | 2048|  44.4k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 50, False: 100k]
  |  |  |  Branch (2048:30): [True: 1.18k, False: 98.8k]
  |  |  ------------------
  |  | 2049|  44.4k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 10, False: 100k]
  |  |  |  Branch (2049:30): [True: 24, False: 100k]
  |  |  ------------------
  |  | 2050|  44.7k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 26, False: 100k]
  |  |  |  Branch (2050:30): [True: 206, False: 99.8k]
  |  |  ------------------
  |  | 2051|  44.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 168, False: 99.9k]
  |  |  ------------------
  ------------------
  727|  44.9k|        tun_metadata_read(&flow->tunnel, mf, value);
  728|  44.9k|        break;
  729|       |
  730|     14|    case MFF_METADATA:
  ------------------
  |  Branch (730:5): [True: 14, False: 100k]
  ------------------
  731|     14|        value->be64 = flow->metadata;
  732|     14|        break;
  733|       |
  734|  1.72k|    case MFF_IN_PORT:
  ------------------
  |  Branch (734:5): [True: 1.72k, False: 98.3k]
  ------------------
  735|  1.72k|        value->be16 = htons(ofp_to_u16(flow->in_port.ofp_port));
  736|  1.72k|        break;
  737|     96|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (737:5): [True: 96, False: 99.9k]
  ------------------
  738|     96|        value->be32 = ofputil_port_to_ofp11(flow->in_port.ofp_port);
  739|     96|        break;
  740|     30|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (740:5): [True: 30, False: 100k]
  ------------------
  741|     30|        value->be32 = ofputil_port_to_ofp11(flow->actset_output);
  742|     30|        break;
  743|       |
  744|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (744:5): [True: 0, False: 100k]
  ------------------
  745|      0|        value->be32 = htonl(flow->skb_priority);
  746|      0|        break;
  747|       |
  748|     18|    case MFF_PKT_MARK:
  ------------------
  |  Branch (748:5): [True: 18, False: 100k]
  ------------------
  749|     18|        value->be32 = htonl(flow->pkt_mark);
  750|     18|        break;
  751|       |
  752|  4.68k|    case MFF_CT_STATE:
  ------------------
  |  Branch (752:5): [True: 4.68k, False: 95.3k]
  ------------------
  753|  4.68k|        value->be32 = htonl(flow->ct_state);
  754|  4.68k|        break;
  755|       |
  756|    578|    case MFF_CT_ZONE:
  ------------------
  |  Branch (756:5): [True: 578, False: 99.4k]
  ------------------
  757|    578|        value->be16 = htons(flow->ct_zone);
  758|    578|        break;
  759|       |
  760|  3.47k|    case MFF_CT_MARK:
  ------------------
  |  Branch (760:5): [True: 3.47k, False: 96.5k]
  ------------------
  761|  3.47k|        value->be32 = htonl(flow->ct_mark);
  762|  3.47k|        break;
  763|       |
  764|  1.00k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (764:5): [True: 1.00k, False: 99.0k]
  ------------------
  765|  1.00k|        value->be128 = hton128(flow->ct_label);
  766|  1.00k|        break;
  767|       |
  768|      2|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (768:5): [True: 2, False: 100k]
  ------------------
  769|      2|        value->u8 = flow->ct_nw_proto;
  770|      2|        break;
  771|       |
  772|    504|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (772:5): [True: 504, False: 99.5k]
  ------------------
  773|    504|        value->be32 = flow->ct_nw_src;
  774|    504|        break;
  775|       |
  776|      6|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (776:5): [True: 6, False: 100k]
  ------------------
  777|      6|        value->be32 = flow->ct_nw_dst;
  778|      6|        break;
  779|       |
  780|    804|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (780:5): [True: 804, False: 99.2k]
  ------------------
  781|    804|        value->ipv6 = flow->ct_ipv6_src;
  782|    804|        break;
  783|       |
  784|      6|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (784:5): [True: 6, False: 100k]
  ------------------
  785|      6|        value->ipv6 = flow->ct_ipv6_dst;
  786|      6|        break;
  787|       |
  788|    306|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (788:5): [True: 306, False: 99.7k]
  ------------------
  789|    306|        value->be16 = flow->ct_tp_src;
  790|    306|        break;
  791|       |
  792|  1.87k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (792:5): [True: 1.87k, False: 98.1k]
  ------------------
  793|  1.87k|        value->be16 = flow->ct_tp_dst;
  794|  1.87k|        break;
  795|       |
  796|  8.84k|    CASE_MFF_REGS:
  ------------------
  |  | 1982|  6.67k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 4.54k, False: 95.5k]
  |  |  |  Branch (1982:20): [True: 6, False: 100k]
  |  |  |  Branch (1982:35): [True: 32, False: 100k]
  |  |  |  Branch (1982:50): [True: 2.10k, False: 97.9k]
  |  |  ------------------
  |  | 1983|  8.16k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 16, False: 100k]
  |  |  |  Branch (1983:20): [True: 14, False: 100k]
  |  |  |  Branch (1983:35): [True: 1.44k, False: 98.6k]
  |  |  |  Branch (1983:50): [True: 16, False: 100k]
  |  |  ------------------
  |  | 1984|  8.50k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 22, False: 100k]
  |  |  |  Branch (1984:20): [True: 64, False: 100k]
  |  |  |  Branch (1984:35): [True: 54, False: 100k]
  |  |  |  Branch (1984:51): [True: 196, False: 99.8k]
  |  |  ------------------
  |  | 1985|  8.84k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 8, False: 100k]
  |  |  |  Branch (1985:21): [True: 6, False: 100k]
  |  |  |  Branch (1985:37): [True: 322, False: 99.7k]
  |  |  ------------------
  ------------------
  797|  8.84k|        value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
  798|  8.84k|        break;
  799|       |
  800|  9.30k|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|    210|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 22, False: 100k]
  |  |  |  Branch (1994:21): [True: 2, False: 100k]
  |  |  |  Branch (1994:37): [True: 14, False: 100k]
  |  |  |  Branch (1994:53): [True: 172, False: 99.8k]
  |  |  ------------------
  |  | 1995|  9.30k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 62, False: 100k]
  |  |  |  Branch (1995:21): [True: 528, False: 99.5k]
  |  |  |  Branch (1995:37): [True: 8.49k, False: 91.5k]
  |  |  ------------------
  ------------------
  801|  9.30k|        value->be64 = htonll(flow_get_xreg(flow, mf->id - MFF_XREG0));
  802|  9.30k|        break;
  803|       |
  804|    932|    CASE_MFF_XXREGS:
  ------------------
  |  | 2004|    932|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 2, False: 100k]
  |  |  |  Branch (2004:22): [True: 6, False: 100k]
  |  |  |  Branch (2004:39): [True: 6, False: 100k]
  |  |  ------------------
  ------------------
  805|    932|        value->be128 = hton128(flow_get_xxreg(flow, mf->id - MFF_XXREG0));
  806|    932|        break;
  807|       |
  808|      8|    case MFF_ETH_SRC:
  ------------------
  |  Branch (808:5): [True: 8, False: 100k]
  ------------------
  809|      8|        value->mac = flow->dl_src;
  810|      8|        break;
  811|       |
  812|     52|    case MFF_ETH_DST:
  ------------------
  |  Branch (812:5): [True: 52, False: 100k]
  ------------------
  813|     52|        value->mac = flow->dl_dst;
  814|     52|        break;
  815|       |
  816|      8|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (816:5): [True: 8, False: 100k]
  ------------------
  817|      8|        value->be16 = flow->dl_type;
  818|      8|        break;
  819|       |
  820|     10|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (820:5): [True: 10, False: 100k]
  ------------------
  821|     10|        value->be16 = flow->vlans[0].tci;
  822|     10|        break;
  823|       |
  824|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (824:5): [True: 0, False: 100k]
  ------------------
  825|      0|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK);
  826|      0|        break;
  827|     16|    case MFF_VLAN_VID:
  ------------------
  |  Branch (827:5): [True: 16, False: 100k]
  ------------------
  828|     16|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI);
  829|     16|        break;
  830|       |
  831|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (831:5): [True: 0, False: 100k]
  ------------------
  832|      0|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (832:5): [True: 0, False: 100k]
  ------------------
  833|      0|        value->u8 = vlan_tci_to_pcp(flow->vlans[0].tci);
  834|      0|        break;
  835|       |
  836|      0|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (836:5): [True: 0, False: 100k]
  ------------------
  837|      0|        value->be32 = htonl(mpls_lse_to_label(flow->mpls_lse[0]));
  838|      0|        break;
  839|       |
  840|      0|    case MFF_MPLS_TC:
  ------------------
  |  Branch (840:5): [True: 0, False: 100k]
  ------------------
  841|      0|        value->u8 = mpls_lse_to_tc(flow->mpls_lse[0]);
  842|      0|        break;
  843|       |
  844|      0|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (844:5): [True: 0, False: 100k]
  ------------------
  845|      0|        value->u8 = mpls_lse_to_bos(flow->mpls_lse[0]);
  846|      0|        break;
  847|       |
  848|      0|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (848:5): [True: 0, False: 100k]
  ------------------
  849|      0|        value->u8 = mpls_lse_to_ttl(flow->mpls_lse[0]);
  850|      0|        break;
  851|       |
  852|      0|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (852:5): [True: 0, False: 100k]
  ------------------
  853|      0|        value->be32 = flow->nw_src;
  854|      0|        break;
  855|       |
  856|      0|    case MFF_IPV4_DST:
  ------------------
  |  Branch (856:5): [True: 0, False: 100k]
  ------------------
  857|      0|        value->be32 = flow->nw_dst;
  858|      0|        break;
  859|       |
  860|      0|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (860:5): [True: 0, False: 100k]
  ------------------
  861|      0|        value->ipv6 = flow->ipv6_src;
  862|      0|        break;
  863|       |
  864|      0|    case MFF_IPV6_DST:
  ------------------
  |  Branch (864:5): [True: 0, False: 100k]
  ------------------
  865|      0|        value->ipv6 = flow->ipv6_dst;
  866|      0|        break;
  867|       |
  868|      0|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (868:5): [True: 0, False: 100k]
  ------------------
  869|      0|        value->be32 = flow->ipv6_label;
  870|      0|        break;
  871|       |
  872|      0|    case MFF_IP_PROTO:
  ------------------
  |  Branch (872:5): [True: 0, False: 100k]
  ------------------
  873|      0|        value->u8 = flow->nw_proto;
  874|      0|        break;
  875|       |
  876|      0|    case MFF_IP_DSCP:
  ------------------
  |  Branch (876:5): [True: 0, False: 100k]
  ------------------
  877|      0|        value->u8 = flow->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  720|      0|#define IP_DSCP_MASK 0xfc
  ------------------
  878|      0|        break;
  879|       |
  880|      0|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (880:5): [True: 0, False: 100k]
  ------------------
  881|      0|        value->u8 = flow->nw_tos >> 2;
  882|      0|        break;
  883|       |
  884|      0|    case MFF_IP_ECN:
  ------------------
  |  Branch (884:5): [True: 0, False: 100k]
  ------------------
  885|      0|        value->u8 = flow->nw_tos & IP_ECN_MASK;
  ------------------
  |  |  718|      0|#define IP_ECN_MASK 0x03
  ------------------
  886|      0|        break;
  887|       |
  888|      0|    case MFF_IP_TTL:
  ------------------
  |  Branch (888:5): [True: 0, False: 100k]
  ------------------
  889|      0|        value->u8 = flow->nw_ttl;
  890|      0|        break;
  891|       |
  892|      0|    case MFF_IP_FRAG:
  ------------------
  |  Branch (892:5): [True: 0, False: 100k]
  ------------------
  893|      0|        value->u8 = flow->nw_frag;
  894|      0|        break;
  895|       |
  896|      0|    case MFF_ARP_OP:
  ------------------
  |  Branch (896:5): [True: 0, False: 100k]
  ------------------
  897|      0|        value->be16 = htons(flow->nw_proto);
  898|      0|        break;
  899|       |
  900|      0|    case MFF_ARP_SPA:
  ------------------
  |  Branch (900:5): [True: 0, False: 100k]
  ------------------
  901|      0|        value->be32 = flow->nw_src;
  902|      0|        break;
  903|       |
  904|      0|    case MFF_ARP_TPA:
  ------------------
  |  Branch (904:5): [True: 0, False: 100k]
  ------------------
  905|      0|        value->be32 = flow->nw_dst;
  906|      0|        break;
  907|       |
  908|      0|    case MFF_ARP_SHA:
  ------------------
  |  Branch (908:5): [True: 0, False: 100k]
  ------------------
  909|      0|    case MFF_ND_SLL:
  ------------------
  |  Branch (909:5): [True: 0, False: 100k]
  ------------------
  910|      0|        value->mac = flow->arp_sha;
  911|      0|        break;
  912|       |
  913|      0|    case MFF_ARP_THA:
  ------------------
  |  Branch (913:5): [True: 0, False: 100k]
  ------------------
  914|      0|    case MFF_ND_TLL:
  ------------------
  |  Branch (914:5): [True: 0, False: 100k]
  ------------------
  915|      0|        value->mac = flow->arp_tha;
  916|      0|        break;
  917|       |
  918|      0|    case MFF_TCP_SRC:
  ------------------
  |  Branch (918:5): [True: 0, False: 100k]
  ------------------
  919|      0|    case MFF_UDP_SRC:
  ------------------
  |  Branch (919:5): [True: 0, False: 100k]
  ------------------
  920|      0|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (920:5): [True: 0, False: 100k]
  ------------------
  921|      0|        value->be16 = flow->tp_src;
  922|      0|        break;
  923|       |
  924|      0|    case MFF_TCP_DST:
  ------------------
  |  Branch (924:5): [True: 0, False: 100k]
  ------------------
  925|      0|    case MFF_UDP_DST:
  ------------------
  |  Branch (925:5): [True: 0, False: 100k]
  ------------------
  926|      0|    case MFF_SCTP_DST:
  ------------------
  |  Branch (926:5): [True: 0, False: 100k]
  ------------------
  927|      0|        value->be16 = flow->tp_dst;
  928|      0|        break;
  929|       |
  930|      0|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (930:5): [True: 0, False: 100k]
  ------------------
  931|      0|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (931:5): [True: 0, False: 100k]
  ------------------
  932|      0|        value->be16 = flow->tcp_flags;
  933|      0|        break;
  934|       |
  935|      0|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (935:5): [True: 0, False: 100k]
  ------------------
  936|      0|        value->be32 = flow->igmp_group_ip4;
  937|      0|        break;
  938|       |
  939|      0|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (939:5): [True: 0, False: 100k]
  ------------------
  940|      0|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (940:5): [True: 0, False: 100k]
  ------------------
  941|      0|        value->u8 = ntohs(flow->tp_src);
  942|      0|        break;
  943|       |
  944|      0|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (944:5): [True: 0, False: 100k]
  ------------------
  945|      0|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (945:5): [True: 0, False: 100k]
  ------------------
  946|      0|        value->u8 = ntohs(flow->tp_dst);
  947|      0|        break;
  948|       |
  949|      0|    case MFF_ND_TARGET:
  ------------------
  |  Branch (949:5): [True: 0, False: 100k]
  ------------------
  950|      0|        value->ipv6 = flow->nd_target;
  951|      0|        break;
  952|       |
  953|      0|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (953:5): [True: 0, False: 100k]
  ------------------
  954|      0|        value->u8 = flow->nsh.flags;
  955|      0|        break;
  956|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (956:5): [True: 0, False: 100k]
  ------------------
  957|      0|        value->u8 = flow->nsh.ttl;
  958|      0|        break;
  959|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (959:5): [True: 0, False: 100k]
  ------------------
  960|      0|        value->u8 = flow->nsh.mdtype;
  961|      0|        break;
  962|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (962:5): [True: 0, False: 100k]
  ------------------
  963|      0|        value->u8 = flow->nsh.np;
  964|      0|        break;
  965|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (965:5): [True: 0, False: 100k]
  ------------------
  966|      0|        value->be32 = nsh_path_hdr_to_spi(flow->nsh.path_hdr);
  967|      0|        if (value->be32 == htonl(NSH_SPI_MASK >> NSH_SPI_SHIFT)) {
  ------------------
  |  Branch (967:13): [True: 0, False: 0]
  ------------------
  968|      0|            value->be32 = OVS_BE32_MAX;
  ------------------
  |  |   43|      0|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  969|      0|        }
  970|      0|        break;
  971|      0|    case MFF_NSH_SI:
  ------------------
  |  Branch (971:5): [True: 0, False: 100k]
  ------------------
  972|      0|        value->u8 = nsh_path_hdr_to_si(flow->nsh.path_hdr);
  973|      0|        break;
  974|      0|    case MFF_NSH_C1:
  ------------------
  |  Branch (974:5): [True: 0, False: 100k]
  ------------------
  975|      0|    case MFF_NSH_C2:
  ------------------
  |  Branch (975:5): [True: 0, False: 100k]
  ------------------
  976|      0|    case MFF_NSH_C3:
  ------------------
  |  Branch (976:5): [True: 0, False: 100k]
  ------------------
  977|      0|    case MFF_NSH_C4:
  ------------------
  |  Branch (977:5): [True: 0, False: 100k]
  ------------------
  978|      0|        value->be32 = flow->nsh.context[mf->id - MFF_NSH_C1];
  979|      0|        break;
  980|       |
  981|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (981:5): [True: 0, False: 100k]
  ------------------
  982|      0|    default:
  ------------------
  |  Branch (982:5): [True: 0, False: 100k]
  ------------------
  983|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  984|   100k|    }
  985|   100k|}
mf_set_value:
  997|   159k|{
  998|   159k|    if (err_str) {
  ------------------
  |  Branch (998:9): [True: 154k, False: 4.57k]
  ------------------
  999|   154k|        *err_str = NULL;
 1000|   154k|    }
 1001|       |
 1002|   159k|    switch (mf->id) {
 1003|    307|    case MFF_DP_HASH:
  ------------------
  |  Branch (1003:5): [True: 307, False: 158k]
  ------------------
 1004|    307|        match_set_dp_hash(match, ntohl(value->be32));
 1005|    307|        break;
 1006|    165|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1006:5): [True: 165, False: 159k]
  ------------------
 1007|    165|        match_set_recirc_id(match, ntohl(value->be32));
 1008|    165|        break;
 1009|  8.53k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1009:5): [True: 8.53k, False: 150k]
  ------------------
 1010|  8.53k|        match_set_packet_type(match, value->be32);
 1011|  8.53k|        break;
 1012|  1.59k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1012:5): [True: 1.59k, False: 157k]
  ------------------
 1013|  1.59k|        match_set_conj_id(match, ntohl(value->be32));
 1014|  1.59k|        break;
 1015|     19|    case MFF_TUN_ID:
  ------------------
  |  Branch (1015:5): [True: 19, False: 159k]
  ------------------
 1016|     19|        match_set_tun_id(match, value->be64);
 1017|     19|        break;
 1018|     44|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1018:5): [True: 44, False: 159k]
  ------------------
 1019|     44|        match_set_tun_src(match, value->be32);
 1020|     44|        break;
 1021|    244|    case MFF_TUN_DST:
  ------------------
  |  Branch (1021:5): [True: 244, False: 158k]
  ------------------
 1022|    244|        match_set_tun_dst(match, value->be32);
 1023|    244|        break;
 1024|     16|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1024:5): [True: 16, False: 159k]
  ------------------
 1025|     16|        match_set_tun_ipv6_src(match, &value->ipv6);
 1026|     16|        break;
 1027|    283|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1027:5): [True: 283, False: 158k]
  ------------------
 1028|    283|        match_set_tun_ipv6_dst(match, &value->ipv6);
 1029|    283|        break;
 1030|     19|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1030:5): [True: 19, False: 159k]
  ------------------
 1031|     19|        match_set_tun_flags(match, ntohs(value->be16));
 1032|     19|        break;
 1033|  1.21k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1033:5): [True: 1.21k, False: 157k]
  ------------------
 1034|  1.21k|         match_set_tun_gbp_id(match, value->be16);
 1035|  1.21k|         break;
 1036|     37|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1036:5): [True: 37, False: 159k]
  ------------------
 1037|     37|         match_set_tun_gbp_flags(match, value->u8);
 1038|     37|         break;
 1039|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1039:5): [True: 0, False: 159k]
  ------------------
 1040|      0|        match_set_tun_tos(match, value->u8);
 1041|      0|        break;
 1042|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1042:5): [True: 0, False: 159k]
  ------------------
 1043|      0|        match_set_tun_ttl(match, value->u8);
 1044|      0|        break;
 1045|     67|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1045:5): [True: 67, False: 159k]
  ------------------
 1046|     67|        match_set_tun_erspan_ver(match, value->u8);
 1047|     67|        break;
 1048|     11|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1048:5): [True: 11, False: 159k]
  ------------------
 1049|     11|        match_set_tun_erspan_idx(match, ntohl(value->be32));
 1050|     11|        break;
 1051|    932|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1051:5): [True: 932, False: 158k]
  ------------------
 1052|    932|        match_set_tun_erspan_dir(match, value->u8);
 1053|    932|        break;
 1054|     69|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1054:5): [True: 69, False: 159k]
  ------------------
 1055|     69|        match_set_tun_erspan_hwid(match, value->u8);
 1056|     69|        break;
 1057|    931|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1057:5): [True: 931, False: 158k]
  ------------------
 1058|    931|        match_set_tun_gtpu_flags(match, value->u8);
 1059|    931|        break;
 1060|     17|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1060:5): [True: 17, False: 159k]
  ------------------
 1061|     17|        match_set_tun_gtpu_msgtype(match, value->u8);
 1062|     17|        break;
 1063|  96.5k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|    555|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 343, False: 158k]
  |  |  |  Branch (2020:29): [True: 212, False: 158k]
  |  |  ------------------
  |  | 2021|    984|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 127, False: 159k]
  |  |  |  Branch (2021:29): [True: 302, False: 158k]
  |  |  ------------------
  |  | 2022|  3.27k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 947, False: 158k]
  |  |  |  Branch (2022:29): [True: 1.34k, False: 157k]
  |  |  ------------------
  |  | 2023|  9.87k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 2.68k, False: 156k]
  |  |  |  Branch (2023:29): [True: 3.91k, False: 155k]
  |  |  ------------------
  |  | 2024|  10.4k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 379, False: 158k]
  |  |  |  Branch (2024:29): [True: 161, False: 159k]
  |  |  ------------------
  |  | 2025|  11.5k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 342, False: 158k]
  |  |  |  Branch (2025:30): [True: 773, False: 158k]
  |  |  ------------------
  |  | 2026|  15.4k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 2.63k, False: 156k]
  |  |  |  Branch (2026:30): [True: 1.25k, False: 157k]
  |  |  ------------------
  |  | 2027|  19.7k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 73, False: 159k]
  |  |  |  Branch (2027:30): [True: 4.28k, False: 154k]
  |  |  ------------------
  |  | 2028|  20.2k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 305, False: 158k]
  |  |  |  Branch (2028:30): [True: 132, False: 159k]
  |  |  ------------------
  |  | 2029|  33.5k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 11.9k, False: 147k]
  |  |  |  Branch (2029:30): [True: 1.36k, False: 157k]
  |  |  ------------------
  |  | 2030|  34.7k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 832, False: 158k]
  |  |  |  Branch (2030:30): [True: 422, False: 158k]
  |  |  ------------------
  |  | 2031|  37.1k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 932, False: 158k]
  |  |  |  Branch (2031:30): [True: 1.42k, False: 157k]
  |  |  ------------------
  |  | 2032|  37.5k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 386, False: 158k]
  |  |  |  Branch (2032:30): [True: 22, False: 159k]
  |  |  ------------------
  |  | 2033|  38.6k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 19, False: 159k]
  |  |  |  Branch (2033:30): [True: 1.08k, False: 158k]
  |  |  ------------------
  |  | 2034|  38.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 274, False: 158k]
  |  |  |  Branch (2034:30): [True: 17, False: 159k]
  |  |  ------------------
  |  | 2035|  40.3k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 899, False: 158k]
  |  |  |  Branch (2035:30): [True: 511, False: 158k]
  |  |  ------------------
  |  | 2036|  43.8k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 2.60k, False: 156k]
  |  |  |  Branch (2036:30): [True: 897, False: 158k]
  |  |  ------------------
  |  | 2037|  48.3k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 3.95k, False: 155k]
  |  |  |  Branch (2037:30): [True: 544, False: 158k]
  |  |  ------------------
  |  | 2038|  51.1k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 1.13k, False: 158k]
  |  |  |  Branch (2038:30): [True: 1.66k, False: 157k]
  |  |  ------------------
  |  | 2039|  52.9k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 1.12k, False: 158k]
  |  |  |  Branch (2039:30): [True: 641, False: 158k]
  |  |  ------------------
  |  | 2040|  56.6k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 390, False: 158k]
  |  |  |  Branch (2040:30): [True: 3.30k, False: 155k]
  |  |  ------------------
  |  | 2041|  58.0k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 224, False: 158k]
  |  |  |  Branch (2041:30): [True: 1.24k, False: 157k]
  |  |  ------------------
  |  | 2042|  58.5k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 108, False: 159k]
  |  |  |  Branch (2042:30): [True: 396, False: 158k]
  |  |  ------------------
  |  | 2043|  65.5k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 4.81k, False: 154k]
  |  |  |  Branch (2043:30): [True: 2.15k, False: 157k]
  |  |  ------------------
  |  | 2044|  76.4k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 1.42k, False: 157k]
  |  |  |  Branch (2044:30): [True: 9.50k, False: 149k]
  |  |  ------------------
  |  | 2045|  80.1k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 3.42k, False: 155k]
  |  |  |  Branch (2045:30): [True: 270, False: 158k]
  |  |  ------------------
  |  | 2046|  86.0k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 3.12k, False: 156k]
  |  |  |  Branch (2046:30): [True: 2.71k, False: 156k]
  |  |  ------------------
  |  | 2047|  86.2k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 71, False: 159k]
  |  |  |  Branch (2047:30): [True: 207, False: 158k]
  |  |  ------------------
  |  | 2048|  90.9k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 27, False: 159k]
  |  |  |  Branch (2048:30): [True: 4.59k, False: 154k]
  |  |  ------------------
  |  | 2049|  95.7k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 1.34k, False: 157k]
  |  |  |  Branch (2049:30): [True: 3.46k, False: 155k]
  |  |  ------------------
  |  | 2050|  96.1k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 264, False: 158k]
  |  |  |  Branch (2050:30): [True: 186, False: 158k]
  |  |  ------------------
  |  | 2051|  96.5k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 43, False: 159k]
  |  |  ------------------
  ------------------
 1064|  96.5k|        tun_metadata_set_match(mf, value, NULL, match, err_str);
 1065|  96.5k|        break;
 1066|       |
 1067|     39|    case MFF_METADATA:
  ------------------
  |  Branch (1067:5): [True: 39, False: 159k]
  ------------------
 1068|     39|        match_set_metadata(match, value->be64);
 1069|     39|        break;
 1070|       |
 1071|  22.7k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1071:5): [True: 22.7k, False: 136k]
  ------------------
 1072|  22.7k|        match_set_in_port(match, u16_to_ofp(ntohs(value->be16)));
 1073|  22.7k|        break;
 1074|       |
 1075|     59|    case MFF_IN_PORT_OXM: {
  ------------------
  |  Branch (1075:5): [True: 59, False: 159k]
  ------------------
 1076|     59|        ofp_port_t port;
 1077|     59|        ofputil_port_from_ofp11(value->be32, &port);
 1078|     59|        match_set_in_port(match, port);
 1079|     59|        break;
 1080|  2.84M|    }
 1081|    253|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (1081:5): [True: 253, False: 158k]
  ------------------
 1082|    253|        ofp_port_t port;
 1083|    253|        ofputil_port_from_ofp11(value->be32, &port);
 1084|    253|        match_set_actset_output(match, port);
 1085|    253|        break;
 1086|  2.84M|    }
 1087|       |
 1088|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1088:5): [True: 0, False: 159k]
  ------------------
 1089|      0|        match_set_skb_priority(match, ntohl(value->be32));
 1090|      0|        break;
 1091|       |
 1092|  1.65k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1092:5): [True: 1.65k, False: 157k]
  ------------------
 1093|  1.65k|        match_set_pkt_mark(match, ntohl(value->be32));
 1094|  1.65k|        break;
 1095|       |
 1096|  2.36k|    case MFF_CT_STATE:
  ------------------
  |  Branch (1096:5): [True: 2.36k, False: 156k]
  ------------------
 1097|  2.36k|        match_set_ct_state(match, ntohl(value->be32));
 1098|  2.36k|        break;
 1099|       |
 1100|     25|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1100:5): [True: 25, False: 159k]
  ------------------
 1101|     25|        match_set_ct_zone(match, ntohs(value->be16));
 1102|     25|        break;
 1103|       |
 1104|  2.37k|    case MFF_CT_MARK:
  ------------------
  |  Branch (1104:5): [True: 2.37k, False: 156k]
  ------------------
 1105|  2.37k|        match_set_ct_mark(match, ntohl(value->be32));
 1106|  2.37k|        break;
 1107|       |
 1108|     29|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1108:5): [True: 29, False: 159k]
  ------------------
 1109|     29|        match_set_ct_label(match, ntoh128(value->be128));
 1110|     29|        break;
 1111|       |
 1112|    204|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1112:5): [True: 204, False: 158k]
  ------------------
 1113|    204|        match_set_ct_nw_proto(match, value->u8);
 1114|    204|        break;
 1115|       |
 1116|     28|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1116:5): [True: 28, False: 159k]
  ------------------
 1117|     28|        match_set_ct_nw_src(match, value->be32);
 1118|     28|        break;
 1119|       |
 1120|     83|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1120:5): [True: 83, False: 159k]
  ------------------
 1121|     83|        match_set_ct_nw_dst(match, value->be32);
 1122|     83|        break;
 1123|       |
 1124|     10|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1124:5): [True: 10, False: 159k]
  ------------------
 1125|     10|        match_set_ct_ipv6_src(match, &value->ipv6);
 1126|     10|        break;
 1127|       |
 1128|     66|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1128:5): [True: 66, False: 159k]
  ------------------
 1129|     66|        match_set_ct_ipv6_dst(match, &value->ipv6);
 1130|     66|        break;
 1131|       |
 1132|     10|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1132:5): [True: 10, False: 159k]
  ------------------
 1133|     10|        match_set_ct_tp_src(match, value->be16);
 1134|     10|        break;
 1135|       |
 1136|    523|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1136:5): [True: 523, False: 158k]
  ------------------
 1137|    523|        match_set_ct_tp_dst(match, value->be16);
 1138|    523|        break;
 1139|       |
 1140|  3.50k|    CASE_MFF_REGS:
  ------------------
  |  | 1982|    674|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 393, False: 158k]
  |  |  |  Branch (1982:20): [True: 54, False: 159k]
  |  |  |  Branch (1982:35): [True: 85, False: 159k]
  |  |  |  Branch (1982:50): [True: 142, False: 159k]
  |  |  ------------------
  |  | 1983|  1.74k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 26, False: 159k]
  |  |  |  Branch (1983:20): [True: 116, False: 159k]
  |  |  |  Branch (1983:35): [True: 721, False: 158k]
  |  |  |  Branch (1983:50): [True: 203, False: 158k]
  |  |  ------------------
  |  | 1984|  2.33k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 212, False: 158k]
  |  |  |  Branch (1984:20): [True: 288, False: 158k]
  |  |  |  Branch (1984:35): [True: 43, False: 159k]
  |  |  |  Branch (1984:51): [True: 50, False: 159k]
  |  |  ------------------
  |  | 1985|  3.50k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 10, False: 159k]
  |  |  |  Branch (1985:21): [True: 906, False: 158k]
  |  |  |  Branch (1985:37): [True: 216, False: 158k]
  |  |  ------------------
  ------------------
 1141|  3.50k|        match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
 1142|  3.50k|        break;
 1143|       |
 1144|    914|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|    454|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 155, False: 159k]
  |  |  |  Branch (1994:21): [True: 13, False: 159k]
  |  |  |  Branch (1994:37): [True: 20, False: 159k]
  |  |  |  Branch (1994:53): [True: 266, False: 158k]
  |  |  ------------------
  |  | 1995|    914|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 21, False: 159k]
  |  |  |  Branch (1995:21): [True: 15, False: 159k]
  |  |  |  Branch (1995:37): [True: 20, False: 159k]
  |  |  ------------------
  ------------------
 1145|    914|        match_set_xreg(match, mf->id - MFF_XREG0, ntohll(value->be64));
 1146|    914|        break;
 1147|       |
 1148|    186|    CASE_MFF_XXREGS:
  ------------------
  |  | 2004|    186|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 72, False: 159k]
  |  |  |  Branch (2004:22): [True: 30, False: 159k]
  |  |  |  Branch (2004:39): [True: 17, False: 159k]
  |  |  ------------------
  ------------------
 1149|    186|        match_set_xxreg(match, mf->id - MFF_XXREG0, ntoh128(value->be128));
 1150|    186|        break;
 1151|       |
 1152|  1.30k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1152:5): [True: 1.30k, False: 157k]
  ------------------
 1153|  1.30k|        match_set_dl_src(match, value->mac);
 1154|  1.30k|        break;
 1155|       |
 1156|    141|    case MFF_ETH_DST:
  ------------------
  |  Branch (1156:5): [True: 141, False: 159k]
  ------------------
 1157|    141|        match_set_dl_dst(match, value->mac);
 1158|    141|        break;
 1159|       |
 1160|    568|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1160:5): [True: 568, False: 158k]
  ------------------
 1161|    568|        match_set_dl_type(match, value->be16);
 1162|    568|        break;
 1163|       |
 1164|     15|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1164:5): [True: 15, False: 159k]
  ------------------
 1165|     15|        match_set_dl_tci(match, value->be16);
 1166|     15|        break;
 1167|       |
 1168|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1168:5): [True: 0, False: 159k]
  ------------------
 1169|      0|        match_set_dl_vlan(match, value->be16, 0);
 1170|      0|        break;
 1171|    124|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1171:5): [True: 124, False: 159k]
  ------------------
 1172|    124|        match_set_vlan_vid(match, value->be16);
 1173|    124|        break;
 1174|       |
 1175|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1175:5): [True: 0, False: 159k]
  ------------------
 1176|     12|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1176:5): [True: 12, False: 159k]
  ------------------
 1177|     12|        match_set_dl_vlan_pcp(match, value->u8, 0);
 1178|     12|        break;
 1179|       |
 1180|     22|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1180:5): [True: 22, False: 159k]
  ------------------
 1181|     22|        match_set_mpls_label(match, 0, value->be32);
 1182|     22|        break;
 1183|       |
 1184|     35|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1184:5): [True: 35, False: 159k]
  ------------------
 1185|     35|        match_set_mpls_tc(match, 0, value->u8);
 1186|     35|        break;
 1187|       |
 1188|    352|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1188:5): [True: 352, False: 158k]
  ------------------
 1189|    352|        match_set_mpls_bos(match, 0, value->u8);
 1190|    352|        break;
 1191|       |
 1192|  1.66k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1192:5): [True: 1.66k, False: 157k]
  ------------------
 1193|  1.66k|        match_set_mpls_ttl(match, 0, value->u8);
 1194|  1.66k|        break;
 1195|       |
 1196|    505|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1196:5): [True: 505, False: 158k]
  ------------------
 1197|    505|        match_set_nw_src(match, value->be32);
 1198|    505|        break;
 1199|       |
 1200|     15|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1200:5): [True: 15, False: 159k]
  ------------------
 1201|     15|        match_set_nw_dst(match, value->be32);
 1202|     15|        break;
 1203|       |
 1204|     11|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1204:5): [True: 11, False: 159k]
  ------------------
 1205|     11|        match_set_ipv6_src(match, &value->ipv6);
 1206|     11|        break;
 1207|       |
 1208|     18|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1208:5): [True: 18, False: 159k]
  ------------------
 1209|     18|        match_set_ipv6_dst(match, &value->ipv6);
 1210|     18|        break;
 1211|       |
 1212|    824|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1212:5): [True: 824, False: 158k]
  ------------------
 1213|    824|        match_set_ipv6_label(match, value->be32);
 1214|    824|        break;
 1215|       |
 1216|    272|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1216:5): [True: 272, False: 158k]
  ------------------
 1217|    272|        match_set_nw_proto(match, value->u8);
 1218|    272|        break;
 1219|       |
 1220|    241|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1220:5): [True: 241, False: 158k]
  ------------------
 1221|    241|        match_set_nw_dscp(match, value->u8);
 1222|    241|        break;
 1223|       |
 1224|    140|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1224:5): [True: 140, False: 159k]
  ------------------
 1225|    140|        match_set_nw_dscp(match, value->u8 << 2);
 1226|    140|        break;
 1227|       |
 1228|    114|    case MFF_IP_ECN:
  ------------------
  |  Branch (1228:5): [True: 114, False: 159k]
  ------------------
 1229|    114|        match_set_nw_ecn(match, value->u8);
 1230|    114|        break;
 1231|       |
 1232|     23|    case MFF_IP_TTL:
  ------------------
  |  Branch (1232:5): [True: 23, False: 159k]
  ------------------
 1233|     23|        match_set_nw_ttl(match, value->u8);
 1234|     23|        break;
 1235|       |
 1236|    129|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1236:5): [True: 129, False: 159k]
  ------------------
 1237|    129|        match_set_nw_frag(match, value->u8);
 1238|    129|        break;
 1239|       |
 1240|     10|    case MFF_ARP_OP:
  ------------------
  |  Branch (1240:5): [True: 10, False: 159k]
  ------------------
 1241|     10|        match_set_nw_proto(match, ntohs(value->be16));
 1242|     10|        break;
 1243|       |
 1244|    789|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1244:5): [True: 789, False: 158k]
  ------------------
 1245|    789|        match_set_nw_src(match, value->be32);
 1246|    789|        break;
 1247|       |
 1248|    536|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1248:5): [True: 536, False: 158k]
  ------------------
 1249|    536|        match_set_nw_dst(match, value->be32);
 1250|    536|        break;
 1251|       |
 1252|     35|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1252:5): [True: 35, False: 159k]
  ------------------
 1253|     46|    case MFF_ND_SLL:
  ------------------
  |  Branch (1253:5): [True: 11, False: 159k]
  ------------------
 1254|     46|        match_set_arp_sha(match, value->mac);
 1255|     46|        break;
 1256|       |
 1257|     13|    case MFF_ARP_THA:
  ------------------
  |  Branch (1257:5): [True: 13, False: 159k]
  ------------------
 1258|     32|    case MFF_ND_TLL:
  ------------------
  |  Branch (1258:5): [True: 19, False: 159k]
  ------------------
 1259|     32|        match_set_arp_tha(match, value->mac);
 1260|     32|        break;
 1261|       |
 1262|    103|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1262:5): [True: 103, False: 159k]
  ------------------
 1263|    198|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1263:5): [True: 95, False: 159k]
  ------------------
 1264|    222|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1264:5): [True: 24, False: 159k]
  ------------------
 1265|    222|        match_set_tp_src(match, value->be16);
 1266|    222|        break;
 1267|       |
 1268|    397|    case MFF_TCP_DST:
  ------------------
  |  Branch (1268:5): [True: 397, False: 158k]
  ------------------
 1269|    600|    case MFF_UDP_DST:
  ------------------
  |  Branch (1269:5): [True: 203, False: 158k]
  ------------------
 1270|  1.24k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1270:5): [True: 649, False: 158k]
  ------------------
 1271|  1.24k|        match_set_tp_dst(match, value->be16);
 1272|  1.24k|        break;
 1273|       |
 1274|     43|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1274:5): [True: 43, False: 159k]
  ------------------
 1275|     43|        match_set_tcp_flags(match, value->be16);
 1276|     43|        break;
 1277|       |
 1278|    250|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1278:5): [True: 250, False: 158k]
  ------------------
 1279|    613|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1279:5): [True: 363, False: 158k]
  ------------------
 1280|    613|        match_set_icmp_type(match, value->u8);
 1281|    613|        break;
 1282|       |
 1283|    510|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1283:5): [True: 510, False: 158k]
  ------------------
 1284|    530|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1284:5): [True: 20, False: 159k]
  ------------------
 1285|    530|        match_set_icmp_code(match, value->u8);
 1286|    530|        break;
 1287|       |
 1288|     38|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1288:5): [True: 38, False: 159k]
  ------------------
 1289|     38|        match_set_nd_target(match, &value->ipv6);
 1290|     38|        break;
 1291|       |
 1292|     96|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1292:5): [True: 96, False: 159k]
  ------------------
 1293|     96|        match_set_nd_reserved(match, value->be32);
 1294|     96|        break;
 1295|       |
 1296|     11|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1296:5): [True: 11, False: 159k]
  ------------------
 1297|     11|        match_set_nd_options_type(match, value->u8);
 1298|     11|        break;
 1299|       |
 1300|    339|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1300:5): [True: 339, False: 158k]
  ------------------
 1301|    339|        MATCH_SET_FIELD_UINT8(match, nsh.flags, value->u8);
  ------------------
  |  |   56|    339|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    339|    do {                                                      \
  |  |  |  |   51|    339|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    339|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    339|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1302|    339|        break;
 1303|    331|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1303:5): [True: 331, False: 158k]
  ------------------
 1304|    331|        MATCH_SET_FIELD_UINT8(match, nsh.ttl, value->u8);
  ------------------
  |  |   56|    331|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    331|    do {                                                      \
  |  |  |  |   51|    331|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    331|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    331|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1305|    331|        break;
 1306|  1.19k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1306:5): [True: 1.19k, False: 157k]
  ------------------
 1307|  1.19k|        MATCH_SET_FIELD_UINT8(match, nsh.mdtype, value->u8);
  ------------------
  |  |   56|  1.19k|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|  1.19k|    do {                                                      \
  |  |  |  |   51|  1.19k|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|  1.19k|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|  1.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1308|  1.19k|        break;
 1309|     66|    case MFF_NSH_NP:
  ------------------
  |  Branch (1309:5): [True: 66, False: 159k]
  ------------------
 1310|     66|        MATCH_SET_FIELD_UINT8(match, nsh.np, value->u8);
  ------------------
  |  |   56|     66|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|     66|    do {                                                      \
  |  |  |  |   51|     66|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     66|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     66|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|     66|        break;
 1312|     10|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1312:5): [True: 10, False: 159k]
  ------------------
 1313|     10|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SPI_MASK);
 1314|     10|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, value->be32);
 1315|     10|        break;
 1316|     66|    case MFF_NSH_SI:
  ------------------
  |  Branch (1316:5): [True: 66, False: 159k]
  ------------------
 1317|     66|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SI_MASK);
 1318|     66|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, value->u8);
 1319|     66|        break;
 1320|     10|    case MFF_NSH_C1:
  ------------------
  |  Branch (1320:5): [True: 10, False: 159k]
  ------------------
 1321|    223|    case MFF_NSH_C2:
  ------------------
  |  Branch (1321:5): [True: 213, False: 158k]
  ------------------
 1322|    233|    case MFF_NSH_C3:
  ------------------
  |  Branch (1322:5): [True: 10, False: 159k]
  ------------------
 1323|    243|    case MFF_NSH_C4:
  ------------------
  |  Branch (1323:5): [True: 10, False: 159k]
  ------------------
 1324|    243|        MATCH_SET_FIELD_BE32(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   59|    243|    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
  |  |  ------------------
  |  |  |  |   50|    243|    do {                                                      \
  |  |  |  |   51|    243|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    243|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    243|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1325|    243|                             value->be32);
 1326|    243|        break;
 1327|       |
 1328|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1328:5): [True: 0, False: 159k]
  ------------------
 1329|      0|    default:
  ------------------
  |  Branch (1329:5): [True: 0, False: 159k]
  ------------------
 1330|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1331|   159k|    }
 1332|   159k|}
mf_field_len:
 1401|   228k|{
 1402|   228k|    int len, mask_len;
 1403|   228k|    bool is_masked = mask && !is_all_ones(mask, mf->n_bytes);
  ------------------
  |  Branch (1403:22): [True: 132k, False: 96.5k]
  |  Branch (1403:30): [True: 132k, False: 0]
  ------------------
 1404|       |
 1405|   228k|    len = field_len(mf, value);
 1406|   228k|    if (is_masked) {
  ------------------
  |  Branch (1406:9): [True: 132k, False: 96.5k]
  ------------------
 1407|   132k|        mask_len = field_len(mf, mask);
 1408|   132k|        len = MAX(len, mask_len);
  ------------------
  |  |  100|   132k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 0, False: 132k]
  |  |  ------------------
  ------------------
 1409|   132k|    }
 1410|       |
 1411|   228k|    if (is_masked_) {
  ------------------
  |  Branch (1411:9): [True: 228k, False: 0]
  ------------------
 1412|   228k|        *is_masked_ = is_masked;
 1413|   228k|    }
 1414|       |
 1415|   228k|    return len;
 1416|   228k|}
mf_is_tun_metadata:
 1786|   140k|{
 1787|   140k|    return mf->id >= MFF_TUN_METADATA0 &&
  ------------------
  |  Branch (1787:12): [True: 130k, False: 9.31k]
  ------------------
 1788|   140k|           mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS;
  ------------------
  |  |   26|   270k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  |  Branch (1788:12): [True: 92.6k, False: 38.1k]
  ------------------
 1789|   140k|}
mf_is_pipeline_field:
 1806|   205k|{
 1807|   205k|    switch (mf->id) {
 1808|     10|    case MFF_TUN_ID:
  ------------------
  |  Branch (1808:5): [True: 10, False: 205k]
  ------------------
 1809|     30|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1809:5): [True: 20, False: 205k]
  ------------------
 1810|  1.71k|    case MFF_TUN_DST:
  ------------------
  |  Branch (1810:5): [True: 1.68k, False: 203k]
  ------------------
 1811|  2.58k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1811:5): [True: 867, False: 204k]
  ------------------
 1812|  4.62k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1812:5): [True: 2.04k, False: 203k]
  ------------------
 1813|  4.65k|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1813:5): [True: 27, False: 205k]
  ------------------
 1814|  4.69k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1814:5): [True: 44, False: 205k]
  ------------------
 1815|  5.02k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1815:5): [True: 331, False: 204k]
  ------------------
 1816|  5.18k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1816:5): [True: 154, False: 204k]
  ------------------
 1817|  5.18k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1817:5): [True: 1, False: 205k]
  ------------------
 1818|  6.62k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1818:5): [True: 1.44k, False: 203k]
  ------------------
 1819|  11.7k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1819:5): [True: 5.15k, False: 199k]
  ------------------
 1820|  14.4k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1820:5): [True: 2.69k, False: 202k]
  ------------------
 1821|  17.9k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1821:5): [True: 3.52k, False: 201k]
  ------------------
 1822|  5.30M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|  19.2k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 997, False: 204k]
  |  |  |  Branch (2020:29): [True: 240, False: 204k]
  |  |  ------------------
  |  | 2021|  19.7k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 242, False: 204k]
  |  |  |  Branch (2021:29): [True: 288, False: 204k]
  |  |  ------------------
  |  | 2022|  23.5k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 1.29k, False: 203k]
  |  |  |  Branch (2022:29): [True: 2.54k, False: 202k]
  |  |  ------------------
  |  | 2023|  28.9k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 4.73k, False: 200k]
  |  |  |  Branch (2023:29): [True: 607, False: 204k]
  |  |  ------------------
  |  | 2024|  35.4k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 1.13k, False: 204k]
  |  |  |  Branch (2024:29): [True: 5.41k, False: 199k]
  |  |  ------------------
  |  | 2025|  35.7k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 138, False: 205k]
  |  |  |  Branch (2025:30): [True: 116, False: 205k]
  |  |  ------------------
  |  | 2026|  36.9k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 1.06k, False: 204k]
  |  |  |  Branch (2026:30): [True: 109, False: 205k]
  |  |  ------------------
  |  | 2027|  41.2k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 680, False: 204k]
  |  |  |  Branch (2027:30): [True: 3.62k, False: 201k]
  |  |  ------------------
  |  | 2028|  43.2k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 1.85k, False: 203k]
  |  |  |  Branch (2028:30): [True: 208, False: 204k]
  |  |  ------------------
  |  | 2029|  60.4k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 14.9k, False: 190k]
  |  |  |  Branch (2029:30): [True: 2.18k, False: 202k]
  |  |  ------------------
  |  | 2030|  61.8k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 855, False: 204k]
  |  |  |  Branch (2030:30): [True: 497, False: 204k]
  |  |  ------------------
  |  | 2031|  63.3k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 140, False: 205k]
  |  |  |  Branch (2031:30): [True: 1.42k, False: 203k]
  |  |  ------------------
  |  | 2032|  67.3k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 3.78k, False: 201k]
  |  |  |  Branch (2032:30): [True: 191, False: 204k]
  |  |  ------------------
  |  | 2033|  69.3k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 606, False: 204k]
  |  |  |  Branch (2033:30): [True: 1.37k, False: 203k]
  |  |  ------------------
  |  | 2034|  69.4k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 48, False: 205k]
  |  |  |  Branch (2034:30): [True: 124, False: 205k]
  |  |  ------------------
  |  | 2035|  74.5k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 909, False: 204k]
  |  |  |  Branch (2035:30): [True: 4.15k, False: 200k]
  |  |  ------------------
  |  | 2036|  77.6k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 1.26k, False: 203k]
  |  |  |  Branch (2036:30): [True: 1.84k, False: 203k]
  |  |  ------------------
  |  | 2037|  89.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 11.3k, False: 193k]
  |  |  |  Branch (2037:30): [True: 683, False: 204k]
  |  |  ------------------
  |  | 2038|  92.0k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 195, False: 204k]
  |  |  |  Branch (2038:30): [True: 2.08k, False: 203k]
  |  |  ------------------
  |  | 2039|  96.9k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 329, False: 204k]
  |  |  |  Branch (2039:30): [True: 4.56k, False: 200k]
  |  |  ------------------
  |  | 2040|   103k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 437, False: 204k]
  |  |  |  Branch (2040:30): [True: 6.59k, False: 198k]
  |  |  ------------------
  |  | 2041|   109k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 49, False: 205k]
  |  |  |  Branch (2041:30): [True: 5.70k, False: 199k]
  |  |  ------------------
  |  | 2042|   111k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 1.41k, False: 203k]
  |  |  |  Branch (2042:30): [True: 82, False: 205k]
  |  |  ------------------
  |  | 2043|   117k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 4.66k, False: 200k]
  |  |  |  Branch (2043:30): [True: 2.07k, False: 203k]
  |  |  ------------------
  |  | 2044|   130k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 1.30k, False: 203k]
  |  |  |  Branch (2044:30): [True: 11.3k, False: 193k]
  |  |  ------------------
  |  | 2045|   133k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 3.34k, False: 201k]
  |  |  |  Branch (2045:30): [True: 42, False: 205k]
  |  |  ------------------
  |  | 2046|   137k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 3.20k, False: 201k]
  |  |  |  Branch (2046:30): [True: 816, False: 204k]
  |  |  ------------------
  |  | 2047|   139k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 168, False: 204k]
  |  |  |  Branch (2047:30): [True: 947, False: 204k]
  |  |  ------------------
  |  | 2048|   144k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 90, False: 205k]
  |  |  |  Branch (2048:30): [True: 5.02k, False: 200k]
  |  |  ------------------
  |  | 2049|   146k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 1.36k, False: 203k]
  |  |  |  Branch (2049:30): [True: 1.29k, False: 203k]
  |  |  ------------------
  |  | 2050|   148k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 272, False: 204k]
  |  |  |  Branch (2050:30): [True: 1.28k, False: 203k]
  |  |  ------------------
  |  | 2051|   158k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 956, False: 204k]
  |  |  ------------------
  ------------------
 1823|  5.30M|    case MFF_METADATA:
  ------------------
  |  Branch (1823:5): [True: 967, False: 204k]
  ------------------
 1824|   182k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1824:5): [True: 22.7k, False: 182k]
  ------------------
 1825|   182k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (1825:5): [True: 18, False: 205k]
  ------------------
 1826|  2.94M|    CASE_MFF_REGS:
  ------------------
  |  | 1982|   182k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 274, False: 204k]
  |  |  |  Branch (1982:20): [True: 29, False: 205k]
  |  |  |  Branch (1982:35): [True: 94, False: 205k]
  |  |  |  Branch (1982:50): [True: 20, False: 205k]
  |  |  ------------------
  |  | 1983|   183k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 26, False: 205k]
  |  |  |  Branch (1983:20): [True: 127, False: 205k]
  |  |  |  Branch (1983:35): [True: 27, False: 205k]
  |  |  |  Branch (1983:50): [True: 201, False: 204k]
  |  |  ------------------
  |  | 1984|   184k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 543, False: 204k]
  |  |  |  Branch (1984:20): [True: 932, False: 204k]
  |  |  |  Branch (1984:35): [True: 27, False: 205k]
  |  |  |  Branch (1984:51): [True: 56, False: 205k]
  |  |  ------------------
  |  | 1985|   186k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 1.80k, False: 203k]
  |  |  |  Branch (1985:21): [True: 46, False: 205k]
  |  |  |  Branch (1985:37): [True: 213, False: 204k]
  |  |  ------------------
  ------------------
 1827|  2.94M|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|   189k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 195, False: 204k]
  |  |  |  Branch (1994:21): [True: 572, False: 204k]
  |  |  |  Branch (1994:37): [True: 1.25k, False: 203k]
  |  |  |  Branch (1994:53): [True: 289, False: 204k]
  |  |  ------------------
  |  | 1995|   191k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 1.45k, False: 203k]
  |  |  |  Branch (1995:21): [True: 178, False: 204k]
  |  |  |  Branch (1995:37): [True: 527, False: 204k]
  |  |  ------------------
  ------------------
 1828|  1.51M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2004|   195k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 70, False: 205k]
  |  |  |  Branch (2004:22): [True: 1.18k, False: 203k]
  |  |  |  Branch (2004:39): [True: 2.03k, False: 203k]
  |  |  ------------------
  ------------------
 1829|   774k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1829:5): [True: 102, False: 205k]
  ------------------
 1830|   195k|        return true;
 1831|       |
 1832|     32|    case MFF_DP_HASH:
  ------------------
  |  Branch (1832:5): [True: 32, False: 205k]
  ------------------
 1833|     42|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1833:5): [True: 10, False: 205k]
  ------------------
 1834|     52|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1834:5): [True: 10, False: 205k]
  ------------------
 1835|     52|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1835:5): [True: 0, False: 205k]
  ------------------
 1836|     52|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1836:5): [True: 0, False: 205k]
  ------------------
 1837|     62|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (1837:5): [True: 10, False: 205k]
  ------------------
 1838|     62|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1838:5): [True: 0, False: 205k]
  ------------------
 1839|    151|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1839:5): [True: 89, False: 205k]
  ------------------
 1840|    185|    case MFF_CT_STATE:
  ------------------
  |  Branch (1840:5): [True: 34, False: 205k]
  ------------------
 1841|    203|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1841:5): [True: 18, False: 205k]
  ------------------
 1842|    213|    case MFF_CT_MARK:
  ------------------
  |  Branch (1842:5): [True: 10, False: 205k]
  ------------------
 1843|    223|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1843:5): [True: 10, False: 205k]
  ------------------
 1844|    233|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1844:5): [True: 10, False: 205k]
  ------------------
 1845|    267|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1845:5): [True: 34, False: 205k]
  ------------------
 1846|    277|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1846:5): [True: 10, False: 205k]
  ------------------
 1847|    287|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1847:5): [True: 10, False: 205k]
  ------------------
 1848|    332|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1848:5): [True: 45, False: 205k]
  ------------------
 1849|    400|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1849:5): [True: 68, False: 205k]
  ------------------
 1850|    585|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1850:5): [True: 185, False: 204k]
  ------------------
 1851|  1.49k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1851:5): [True: 905, False: 204k]
  ------------------
 1852|  2.10k|    case MFF_ETH_DST:
  ------------------
  |  Branch (1852:5): [True: 619, False: 204k]
  ------------------
 1853|  2.13k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1853:5): [True: 23, False: 205k]
  ------------------
 1854|  4.01k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1854:5): [True: 1.87k, False: 203k]
  ------------------
 1855|  4.01k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1855:5): [True: 0, False: 205k]
  ------------------
 1856|  4.02k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1856:5): [True: 10, False: 205k]
  ------------------
 1857|  4.02k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1857:5): [True: 0, False: 205k]
  ------------------
 1858|  4.03k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1858:5): [True: 18, False: 205k]
  ------------------
 1859|  4.04k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1859:5): [True: 1, False: 205k]
  ------------------
 1860|  4.05k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1860:5): [True: 18, False: 205k]
  ------------------
 1861|  4.06k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1861:5): [True: 10, False: 205k]
  ------------------
 1862|  5.22k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1862:5): [True: 1.15k, False: 203k]
  ------------------
 1863|  5.23k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1863:5): [True: 11, False: 205k]
  ------------------
 1864|  5.25k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1864:5): [True: 13, False: 205k]
  ------------------
 1865|  5.26k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1865:5): [True: 18, False: 205k]
  ------------------
 1866|  5.28k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1866:5): [True: 18, False: 205k]
  ------------------
 1867|  5.30k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1867:5): [True: 18, False: 205k]
  ------------------
 1868|  5.41k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1868:5): [True: 109, False: 205k]
  ------------------
 1869|  5.42k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1869:5): [True: 10, False: 205k]
  ------------------
 1870|  5.45k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1870:5): [True: 35, False: 205k]
  ------------------
 1871|  7.02k|    case MFF_IP_ECN:
  ------------------
  |  Branch (1871:5): [True: 1.56k, False: 203k]
  ------------------
 1872|  7.42k|    case MFF_IP_TTL:
  ------------------
  |  Branch (1872:5): [True: 395, False: 204k]
  ------------------
 1873|  7.97k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1873:5): [True: 553, False: 204k]
  ------------------
 1874|  7.98k|    case MFF_ARP_OP:
  ------------------
  |  Branch (1874:5): [True: 10, False: 205k]
  ------------------
 1875|  8.28k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1875:5): [True: 299, False: 204k]
  ------------------
 1876|  8.29k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1876:5): [True: 10, False: 205k]
  ------------------
 1877|  8.30k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1877:5): [True: 10, False: 205k]
  ------------------
 1878|  8.31k|    case MFF_ARP_THA:
  ------------------
  |  Branch (1878:5): [True: 10, False: 205k]
  ------------------
 1879|  8.32k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1879:5): [True: 10, False: 205k]
  ------------------
 1880|  8.43k|    case MFF_TCP_DST:
  ------------------
  |  Branch (1880:5): [True: 114, False: 205k]
  ------------------
 1881|  8.82k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1881:5): [True: 392, False: 204k]
  ------------------
 1882|  8.93k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1882:5): [True: 103, False: 205k]
  ------------------
 1883|  9.07k|    case MFF_UDP_DST:
  ------------------
  |  Branch (1883:5): [True: 148, False: 204k]
  ------------------
 1884|  9.16k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1884:5): [True: 84, False: 205k]
  ------------------
 1885|  9.18k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1885:5): [True: 18, False: 205k]
  ------------------
 1886|  9.20k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1886:5): [True: 22, False: 205k]
  ------------------
 1887|  9.21k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1887:5): [True: 10, False: 205k]
  ------------------
 1888|  9.26k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1888:5): [True: 51, False: 205k]
  ------------------
 1889|  9.43k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1889:5): [True: 169, False: 204k]
  ------------------
 1890|  9.46k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1890:5): [True: 34, False: 205k]
  ------------------
 1891|  9.47k|    case MFF_ND_SLL:
  ------------------
  |  Branch (1891:5): [True: 10, False: 205k]
  ------------------
 1892|  9.49k|    case MFF_ND_TLL:
  ------------------
  |  Branch (1892:5): [True: 18, False: 205k]
  ------------------
 1893|  9.51k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1893:5): [True: 18, False: 205k]
  ------------------
 1894|  9.52k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1894:5): [True: 10, False: 205k]
  ------------------
 1895|  9.53k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1895:5): [True: 10, False: 205k]
  ------------------
 1896|  9.55k|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1896:5): [True: 18, False: 205k]
  ------------------
 1897|  9.62k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1897:5): [True: 75, False: 205k]
  ------------------
 1898|  9.63k|    case MFF_NSH_NP:
  ------------------
  |  Branch (1898:5): [True: 10, False: 205k]
  ------------------
 1899|  9.63k|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1899:5): [True: 1, False: 205k]
  ------------------
 1900|  9.64k|    case MFF_NSH_SI:
  ------------------
  |  Branch (1900:5): [True: 10, False: 205k]
  ------------------
 1901|  9.64k|    case MFF_NSH_C1:
  ------------------
  |  Branch (1901:5): [True: 1, False: 205k]
  ------------------
 1902|  9.65k|    case MFF_NSH_C2:
  ------------------
  |  Branch (1902:5): [True: 10, False: 205k]
  ------------------
 1903|  9.66k|    case MFF_NSH_C3:
  ------------------
  |  Branch (1903:5): [True: 11, False: 205k]
  ------------------
 1904|  9.68k|    case MFF_NSH_C4:
  ------------------
  |  Branch (1904:5): [True: 18, False: 205k]
  ------------------
 1905|  9.68k|        return false;
 1906|       |
 1907|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1907:5): [True: 0, False: 205k]
  ------------------
 1908|      0|    default:
  ------------------
  |  Branch (1908:5): [True: 0, False: 205k]
  ------------------
 1909|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1910|   205k|    }
 1911|   205k|}
mf_set_wild:
 1942|  47.4k|{
 1943|  47.4k|    if (err_str) {
  ------------------
  |  Branch (1943:9): [True: 47.4k, False: 0]
  ------------------
 1944|  47.4k|        *err_str = NULL;
 1945|  47.4k|    }
 1946|       |
 1947|  47.4k|    switch (mf->id) {
 1948|    111|    case MFF_DP_HASH:
  ------------------
  |  Branch (1948:5): [True: 111, False: 47.3k]
  ------------------
 1949|    111|        match->flow.dp_hash = 0;
 1950|    111|        match->wc.masks.dp_hash = 0;
 1951|    111|        break;
 1952|     10|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1952:5): [True: 10, False: 47.4k]
  ------------------
 1953|     10|        match->flow.recirc_id = 0;
 1954|     10|        match->wc.masks.recirc_id = 0;
 1955|     10|        break;
 1956|  2.90k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1956:5): [True: 2.90k, False: 44.5k]
  ------------------
 1957|  2.90k|        match->flow.packet_type = 0;
 1958|  2.90k|        match->wc.masks.packet_type = 0;
 1959|  2.90k|        break;
 1960|     19|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1960:5): [True: 19, False: 47.4k]
  ------------------
 1961|     19|        match->flow.conj_id = 0;
 1962|     19|        match->wc.masks.conj_id = 0;
 1963|     19|        break;
 1964|     10|    case MFF_TUN_ID:
  ------------------
  |  Branch (1964:5): [True: 10, False: 47.4k]
  ------------------
 1965|     10|        match_set_tun_id_masked(match, htonll(0), htonll(0));
 1966|     10|        break;
 1967|     14|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1967:5): [True: 14, False: 47.4k]
  ------------------
 1968|     14|        match_set_tun_src_masked(match, htonl(0), htonl(0));
 1969|     14|        break;
 1970|    885|    case MFF_TUN_DST:
  ------------------
  |  Branch (1970:5): [True: 885, False: 46.5k]
  ------------------
 1971|    885|        match_set_tun_dst_masked(match, htonl(0), htonl(0));
 1972|    885|        break;
 1973|    320|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1973:5): [True: 320, False: 47.1k]
  ------------------
 1974|    320|        memset(&match->wc.masks.tunnel.ipv6_src, 0,
 1975|    320|               sizeof match->wc.masks.tunnel.ipv6_src);
 1976|    320|        memset(&match->flow.tunnel.ipv6_src, 0,
 1977|    320|               sizeof match->flow.tunnel.ipv6_src);
 1978|    320|        break;
 1979|    470|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1979:5): [True: 470, False: 46.9k]
  ------------------
 1980|    470|        memset(&match->wc.masks.tunnel.ipv6_dst, 0,
 1981|    470|               sizeof match->wc.masks.tunnel.ipv6_dst);
 1982|    470|        memset(&match->flow.tunnel.ipv6_dst, 0,
 1983|    470|               sizeof match->flow.tunnel.ipv6_dst);
 1984|    470|        break;
 1985|     10|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1985:5): [True: 10, False: 47.4k]
  ------------------
 1986|     10|        match_set_tun_flags_masked(match, 0, 0);
 1987|     10|        break;
 1988|    441|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1988:5): [True: 441, False: 46.9k]
  ------------------
 1989|    441|        match_set_tun_gbp_id_masked(match, 0, 0);
 1990|    441|        break;
 1991|     19|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1991:5): [True: 19, False: 47.4k]
  ------------------
 1992|     19|        match_set_tun_gbp_flags_masked(match, 0, 0);
 1993|     19|        break;
 1994|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1994:5): [True: 0, False: 47.4k]
  ------------------
 1995|      0|        match_set_tun_tos_masked(match, 0, 0);
 1996|      0|        break;
 1997|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1997:5): [True: 0, False: 47.4k]
  ------------------
 1998|      0|        match_set_tun_ttl_masked(match, 0, 0);
 1999|      0|        break;
 2000|     18|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2000:5): [True: 18, False: 47.4k]
  ------------------
 2001|     18|        match_set_tun_erspan_ver_masked(match, 0, 0);
 2002|     18|        break;
 2003|     34|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2003:5): [True: 34, False: 47.3k]
  ------------------
 2004|     34|        match_set_tun_erspan_idx_masked(match, 0, 0);
 2005|     34|        break;
 2006|     79|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2006:5): [True: 79, False: 47.3k]
  ------------------
 2007|     79|        match_set_tun_erspan_dir_masked(match, 0, 0);
 2008|     79|        break;
 2009|  2.66k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2009:5): [True: 2.66k, False: 44.7k]
  ------------------
 2010|  2.66k|        match_set_tun_erspan_hwid_masked(match, 0, 0);
 2011|  2.66k|        break;
 2012|    111|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2012:5): [True: 111, False: 47.3k]
  ------------------
 2013|    111|        match_set_tun_gtpu_flags_masked(match, 0, 0);
 2014|    111|        break;
 2015|  1.19k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2015:5): [True: 1.19k, False: 46.2k]
  ------------------
 2016|  1.19k|        match_set_tun_gtpu_msgtype_masked(match, 0, 0);
 2017|  1.19k|        break;
 2018|      0|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|      0|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2020:29): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2021|      0|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2021:29): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2022|      0|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2022:29): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2023|      0|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2023:29): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2024|      0|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2024:29): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2025|      0|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2025:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2026|      0|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2026:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2027|      0|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2027:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2028|      0|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2028:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2029|      0|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2029:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2030|      0|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2030:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2031|      0|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2031:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2032|      0|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2032:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2033|      0|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2033:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2034|      0|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2034:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2035|      0|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2035:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2036|      0|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2036:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2037|      0|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2037:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2038|      0|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2038:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2039|      0|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2039:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2040|      0|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2040:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2041|      0|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2041:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2042|      0|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2042:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2043|      0|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2043:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2044|      0|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2044:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2045|      0|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2045:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2046|      0|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2046:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2047|      0|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2047:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2048|      0|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2048:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2049|      0|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2049:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2050|      0|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 0, False: 47.4k]
  |  |  |  Branch (2050:30): [True: 0, False: 47.4k]
  |  |  ------------------
  |  | 2051|      0|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 0, False: 47.4k]
  |  |  ------------------
  ------------------
 2019|      0|        tun_metadata_set_match(mf, NULL, NULL, match, err_str);
 2020|      0|        break;
 2021|       |
 2022|    568|    case MFF_METADATA:
  ------------------
  |  Branch (2022:5): [True: 568, False: 46.8k]
  ------------------
 2023|    568|        match_set_metadata_masked(match, htonll(0), htonll(0));
 2024|    568|        break;
 2025|       |
 2026|    122|    case MFF_IN_PORT:
  ------------------
  |  Branch (2026:5): [True: 122, False: 47.3k]
  ------------------
 2027|    262|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2027:5): [True: 140, False: 47.2k]
  ------------------
 2028|    262|        match->flow.in_port.ofp_port = 0;
 2029|    262|        match->wc.masks.in_port.ofp_port = 0;
 2030|    262|        break;
 2031|     10|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2031:5): [True: 10, False: 47.4k]
  ------------------
 2032|     10|        match->flow.actset_output = 0;
 2033|     10|        match->wc.masks.actset_output = 0;
 2034|     10|        break;
 2035|       |
 2036|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2036:5): [True: 0, False: 47.4k]
  ------------------
 2037|      0|        match->flow.skb_priority = 0;
 2038|      0|        match->wc.masks.skb_priority = 0;
 2039|      0|        break;
 2040|       |
 2041|     18|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2041:5): [True: 18, False: 47.4k]
  ------------------
 2042|     18|        match->flow.pkt_mark = 0;
 2043|     18|        match->wc.masks.pkt_mark = 0;
 2044|     18|        break;
 2045|       |
 2046|     22|    case MFF_CT_STATE:
  ------------------
  |  Branch (2046:5): [True: 22, False: 47.4k]
  ------------------
 2047|     22|        match->flow.ct_state = 0;
 2048|     22|        match->wc.masks.ct_state = 0;
 2049|     22|        break;
 2050|       |
 2051|     18|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2051:5): [True: 18, False: 47.4k]
  ------------------
 2052|     18|        match->flow.ct_zone = 0;
 2053|     18|        match->wc.masks.ct_zone = 0;
 2054|     18|        break;
 2055|       |
 2056|  1.42k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2056:5): [True: 1.42k, False: 46.0k]
  ------------------
 2057|  1.42k|        match->flow.ct_mark = 0;
 2058|  1.42k|        match->wc.masks.ct_mark = 0;
 2059|  1.42k|        break;
 2060|       |
 2061|     21|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2061:5): [True: 21, False: 47.4k]
  ------------------
 2062|     21|        memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
 2063|     21|        memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
 2064|     21|        break;
 2065|       |
 2066|     10|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2066:5): [True: 10, False: 47.4k]
  ------------------
 2067|     10|        match->flow.ct_nw_proto = 0;
 2068|     10|        match->wc.masks.ct_nw_proto = 0;
 2069|     10|        break;
 2070|       |
 2071|     16|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2071:5): [True: 16, False: 47.4k]
  ------------------
 2072|     16|        match->flow.ct_nw_src = 0;
 2073|     16|        match->wc.masks.ct_nw_src = 0;
 2074|     16|        break;
 2075|       |
 2076|     82|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2076:5): [True: 82, False: 47.3k]
  ------------------
 2077|     82|        match->flow.ct_nw_dst = 0;
 2078|     82|        match->wc.masks.ct_nw_dst = 0;
 2079|     82|        break;
 2080|       |
 2081|     35|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2081:5): [True: 35, False: 47.3k]
  ------------------
 2082|     35|        memset(&match->flow.ct_ipv6_src, 0, sizeof(match->flow.ct_ipv6_src));
 2083|     35|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_src);
  ------------------
  |  |  205|     35|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2084|     35|        break;
 2085|       |
 2086|     34|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2086:5): [True: 34, False: 47.3k]
  ------------------
 2087|     34|        memset(&match->flow.ct_ipv6_dst, 0, sizeof(match->flow.ct_ipv6_dst));
 2088|     34|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_dst);
  ------------------
  |  |  205|     34|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2089|     34|        break;
 2090|       |
 2091|    398|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2091:5): [True: 398, False: 47.0k]
  ------------------
 2092|    398|        match->flow.ct_tp_src = 0;
 2093|    398|        match->wc.masks.ct_tp_src = 0;
 2094|    398|        break;
 2095|       |
 2096|     18|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2096:5): [True: 18, False: 47.4k]
  ------------------
 2097|     18|        match->flow.ct_tp_dst = 0;
 2098|     18|        match->wc.masks.ct_tp_dst = 0;
 2099|     18|        break;
 2100|       |
 2101|  5.51k|    CASE_MFF_REGS:
  ------------------
  |  | 1982|    536|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 66, False: 47.3k]
  |  |  |  Branch (1982:20): [True: 114, False: 47.3k]
  |  |  |  Branch (1982:35): [True: 43, False: 47.3k]
  |  |  |  Branch (1982:50): [True: 313, False: 47.1k]
  |  |  ------------------
  |  | 1983|  4.63k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 10, False: 47.4k]
  |  |  |  Branch (1983:20): [True: 548, False: 46.8k]
  |  |  |  Branch (1983:35): [True: 339, False: 47.0k]
  |  |  |  Branch (1983:50): [True: 3.20k, False: 44.2k]
  |  |  ------------------
  |  | 1984|  5.19k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 10, False: 47.4k]
  |  |  |  Branch (1984:20): [True: 502, False: 46.9k]
  |  |  |  Branch (1984:35): [True: 28, False: 47.4k]
  |  |  |  Branch (1984:51): [True: 15, False: 47.4k]
  |  |  ------------------
  |  | 1985|  5.51k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 162, False: 47.2k]
  |  |  |  Branch (1985:21): [True: 29, False: 47.3k]
  |  |  |  Branch (1985:37): [True: 60, False: 47.3k]
  |  |  ------------------
  ------------------
 2102|  5.51k|        match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
 2103|  5.51k|        break;
 2104|       |
 2105|  2.02k|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|    771|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 34, False: 47.3k]
  |  |  |  Branch (1994:21): [True: 18, False: 47.4k]
  |  |  |  Branch (1994:37): [True: 709, False: 46.7k]
  |  |  |  Branch (1994:53): [True: 10, False: 47.4k]
  |  |  ------------------
  |  | 1995|  2.02k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 625, False: 46.8k]
  |  |  |  Branch (1995:21): [True: 69, False: 47.3k]
  |  |  |  Branch (1995:37): [True: 452, False: 46.9k]
  |  |  ------------------
  ------------------
 2106|  2.02k|        match_set_xreg_masked(match, mf->id - MFF_XREG0, 0, 0);
 2107|  2.02k|        break;
 2108|       |
 2109|  1.65k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2004|  1.65k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 10, False: 47.4k]
  |  |  |  Branch (2004:22): [True: 679, False: 46.7k]
  |  |  |  Branch (2004:39): [True: 532, False: 46.8k]
  |  |  ------------------
  ------------------
 2110|  1.65k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0, OVS_U128_ZERO,
  ------------------
  |  |  130|  1.65k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2111|  1.65k|                               OVS_U128_ZERO);
  ------------------
  |  |  130|  1.65k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2112|  1.65k|        break;
 2113|  1.92k|    }
 2114|       |
 2115|  1.05k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2115:5): [True: 1.05k, False: 46.3k]
  ------------------
 2116|  1.05k|        match->flow.dl_src = eth_addr_zero;
 2117|  1.05k|        match->wc.masks.dl_src = eth_addr_zero;
 2118|  1.05k|        break;
 2119|       |
 2120|    381|    case MFF_ETH_DST:
  ------------------
  |  Branch (2120:5): [True: 381, False: 47.0k]
  ------------------
 2121|    381|        match->flow.dl_dst = eth_addr_zero;
 2122|    381|        match->wc.masks.dl_dst = eth_addr_zero;
 2123|    381|        break;
 2124|       |
 2125|  1.48k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2125:5): [True: 1.48k, False: 45.9k]
  ------------------
 2126|  1.48k|        match->flow.dl_type = htons(0);
 2127|  1.48k|        match->wc.masks.dl_type = htons(0);
 2128|  1.48k|        break;
 2129|       |
 2130|     34|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2130:5): [True: 34, False: 47.3k]
  ------------------
 2131|     34|        match_set_dl_tci_masked(match, htons(0), htons(0));
 2132|     34|        break;
 2133|       |
 2134|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2134:5): [True: 0, False: 47.4k]
  ------------------
 2135|    159|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2135:5): [True: 159, False: 47.2k]
  ------------------
 2136|    159|        match_set_any_vid(match);
 2137|    159|        break;
 2138|       |
 2139|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2139:5): [True: 0, False: 47.4k]
  ------------------
 2140|     21|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2140:5): [True: 21, False: 47.4k]
  ------------------
 2141|     21|        match_set_any_pcp(match);
 2142|     21|        break;
 2143|       |
 2144|     33|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2144:5): [True: 33, False: 47.3k]
  ------------------
 2145|     33|        match_set_any_mpls_label(match, 0);
 2146|     33|        break;
 2147|       |
 2148|     18|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2148:5): [True: 18, False: 47.4k]
  ------------------
 2149|     18|        match_set_any_mpls_tc(match, 0);
 2150|     18|        break;
 2151|       |
 2152|    216|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2152:5): [True: 216, False: 47.2k]
  ------------------
 2153|    216|        match_set_any_mpls_bos(match, 0);
 2154|    216|        break;
 2155|       |
 2156|    177|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2156:5): [True: 177, False: 47.2k]
  ------------------
 2157|    177|        match_set_any_mpls_ttl(match, 0);
 2158|    177|        break;
 2159|       |
 2160|    274|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2160:5): [True: 274, False: 47.1k]
  ------------------
 2161|  2.68k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2161:5): [True: 2.40k, False: 45.0k]
  ------------------
 2162|  2.68k|        match_set_nw_src_masked(match, htonl(0), htonl(0));
 2163|  2.68k|        break;
 2164|       |
 2165|    702|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2165:5): [True: 702, False: 46.7k]
  ------------------
 2166|    913|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2166:5): [True: 211, False: 47.2k]
  ------------------
 2167|    913|        match_set_nw_dst_masked(match, htonl(0), htonl(0));
 2168|    913|        break;
 2169|       |
 2170|     10|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2170:5): [True: 10, False: 47.4k]
  ------------------
 2171|     10|        memset(&match->wc.masks.ipv6_src, 0, sizeof match->wc.masks.ipv6_src);
 2172|     10|        memset(&match->flow.ipv6_src, 0, sizeof match->flow.ipv6_src);
 2173|     10|        break;
 2174|       |
 2175|     80|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2175:5): [True: 80, False: 47.3k]
  ------------------
 2176|     80|        memset(&match->wc.masks.ipv6_dst, 0, sizeof match->wc.masks.ipv6_dst);
 2177|     80|        memset(&match->flow.ipv6_dst, 0, sizeof match->flow.ipv6_dst);
 2178|     80|        break;
 2179|       |
 2180|  5.13k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2180:5): [True: 5.13k, False: 42.2k]
  ------------------
 2181|  5.13k|        match->wc.masks.ipv6_label = htonl(0);
 2182|  5.13k|        match->flow.ipv6_label = htonl(0);
 2183|  5.13k|        break;
 2184|       |
 2185|    960|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2185:5): [True: 960, False: 46.4k]
  ------------------
 2186|    960|        match->wc.masks.nw_proto = 0;
 2187|    960|        match->flow.nw_proto = 0;
 2188|    960|        break;
 2189|       |
 2190|    606|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2190:5): [True: 606, False: 46.8k]
  ------------------
 2191|    672|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2191:5): [True: 66, False: 47.3k]
  ------------------
 2192|    672|        match->wc.masks.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  720|    672|#define IP_DSCP_MASK 0xfc
  ------------------
 2193|    672|        match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  720|    672|#define IP_DSCP_MASK 0xfc
  ------------------
 2194|    672|        break;
 2195|       |
 2196|     45|    case MFF_IP_ECN:
  ------------------
  |  Branch (2196:5): [True: 45, False: 47.3k]
  ------------------
 2197|     45|        match->wc.masks.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  718|     45|#define IP_ECN_MASK 0x03
  ------------------
 2198|     45|        match->flow.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  718|     45|#define IP_ECN_MASK 0x03
  ------------------
 2199|     45|        break;
 2200|       |
 2201|     35|    case MFF_IP_TTL:
  ------------------
  |  Branch (2201:5): [True: 35, False: 47.3k]
  ------------------
 2202|     35|        match->wc.masks.nw_ttl = 0;
 2203|     35|        match->flow.nw_ttl = 0;
 2204|     35|        break;
 2205|       |
 2206|     52|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2206:5): [True: 52, False: 47.3k]
  ------------------
 2207|     52|        match->wc.masks.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     52|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     52|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|     52|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2208|     52|        match->flow.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     52|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     52|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|     52|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2209|     52|        break;
 2210|       |
 2211|     12|    case MFF_ARP_OP:
  ------------------
  |  Branch (2211:5): [True: 12, False: 47.4k]
  ------------------
 2212|     12|        match->wc.masks.nw_proto = 0;
 2213|     12|        match->flow.nw_proto = 0;
 2214|     12|        break;
 2215|       |
 2216|    154|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2216:5): [True: 154, False: 47.2k]
  ------------------
 2217|    398|    case MFF_ND_SLL:
  ------------------
  |  Branch (2217:5): [True: 244, False: 47.1k]
  ------------------
 2218|    398|        match->flow.arp_sha = eth_addr_zero;
 2219|    398|        match->wc.masks.arp_sha = eth_addr_zero;
 2220|    398|        break;
 2221|       |
 2222|    196|    case MFF_ARP_THA:
  ------------------
  |  Branch (2222:5): [True: 196, False: 47.2k]
  ------------------
 2223|  5.75k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2223:5): [True: 5.56k, False: 41.8k]
  ------------------
 2224|  5.75k|        match->flow.arp_tha = eth_addr_zero;
 2225|  5.75k|        match->wc.masks.arp_tha = eth_addr_zero;
 2226|  5.75k|        break;
 2227|       |
 2228|     10|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2228:5): [True: 10, False: 47.4k]
  ------------------
 2229|     10|        match->wc.masks.igmp_group_ip4 = htonl(0);
 2230|     10|        match->flow.igmp_group_ip4 = htonl(0);
 2231|     10|        break;
 2232|       |
 2233|     11|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2233:5): [True: 11, False: 47.4k]
  ------------------
 2234|     32|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2234:5): [True: 21, False: 47.4k]
  ------------------
 2235|     43|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2235:5): [True: 11, False: 47.4k]
  ------------------
 2236|    110|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2236:5): [True: 67, False: 47.3k]
  ------------------
 2237|    144|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2237:5): [True: 34, False: 47.3k]
  ------------------
 2238|    144|        match->wc.masks.tp_src = htons(0);
 2239|    144|        match->flow.tp_src = htons(0);
 2240|    144|        break;
 2241|       |
 2242|    409|    case MFF_TCP_DST:
  ------------------
  |  Branch (2242:5): [True: 409, False: 47.0k]
  ------------------
 2243|  3.24k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2243:5): [True: 2.83k, False: 44.5k]
  ------------------
 2244|  3.26k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2244:5): [True: 18, False: 47.4k]
  ------------------
 2245|  4.33k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2245:5): [True: 1.06k, False: 46.3k]
  ------------------
 2246|  4.79k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2246:5): [True: 459, False: 46.9k]
  ------------------
 2247|  4.79k|        match->wc.masks.tp_dst = htons(0);
 2248|  4.79k|        match->flow.tp_dst = htons(0);
 2249|  4.79k|        break;
 2250|       |
 2251|    490|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2251:5): [True: 490, False: 46.9k]
  ------------------
 2252|    500|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2252:5): [True: 10, False: 47.4k]
  ------------------
 2253|    500|        match->wc.masks.tcp_flags = htons(0);
 2254|    500|        match->flow.tcp_flags = htons(0);
 2255|    500|        break;
 2256|       |
 2257|     18|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2257:5): [True: 18, False: 47.4k]
  ------------------
 2258|     18|        memset(&match->wc.masks.nd_target, 0,
 2259|     18|               sizeof match->wc.masks.nd_target);
 2260|     18|        memset(&match->flow.nd_target, 0, sizeof match->flow.nd_target);
 2261|     18|        break;
 2262|       |
 2263|     73|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2263:5): [True: 73, False: 47.3k]
  ------------------
 2264|     73|        MATCH_SET_FIELD_MASKED(match, nsh.flags, 0, 0);
  ------------------
  |  |   50|     73|    do {                                                      \
  |  |   51|     73|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     73|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     73|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2265|     73|        break;
 2266|     19|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2266:5): [True: 19, False: 47.4k]
  ------------------
 2267|     19|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, 0, 0);
  ------------------
  |  |   50|     19|    do {                                                      \
  |  |   51|     19|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     19|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     19|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2268|     19|        break;
 2269|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2269:5): [True: 0, False: 47.4k]
  ------------------
 2270|      0|        MATCH_SET_FIELD_MASKED(match, nsh.mdtype, 0, 0);
  ------------------
  |  |   50|      0|    do {                                                      \
  |  |   51|      0|        (match)->wc.masks.field = (msk);                      \
  |  |   52|      0|        (match)->flow.field = (value) & (msk);                \
  |  |   53|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2271|      0|        break;
 2272|     12|    case MFF_NSH_NP:
  ------------------
  |  Branch (2272:5): [True: 12, False: 47.4k]
  ------------------
 2273|     12|        MATCH_SET_FIELD_MASKED(match, nsh.np, 0, 0);
  ------------------
  |  |   50|     12|    do {                                                      \
  |  |   51|     12|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     12|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     12|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2274|     12|        break;
 2275|     18|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2275:5): [True: 18, False: 47.4k]
  ------------------
 2276|     18|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SPI_MASK);
 2277|     18|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, htonl(0));
 2278|     18|        break;
 2279|     23|    case MFF_NSH_SI:
  ------------------
  |  Branch (2279:5): [True: 23, False: 47.4k]
  ------------------
 2280|     23|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SI_MASK);
 2281|     23|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, 0);
 2282|     23|        break;
 2283|     40|    case MFF_NSH_C1:
  ------------------
  |  Branch (2283:5): [True: 40, False: 47.3k]
  ------------------
 2284|     43|    case MFF_NSH_C2:
  ------------------
  |  Branch (2284:5): [True: 3, False: 47.4k]
  ------------------
 2285|     46|    case MFF_NSH_C3:
  ------------------
  |  Branch (2285:5): [True: 3, False: 47.4k]
  ------------------
 2286|     56|    case MFF_NSH_C4:
  ------------------
  |  Branch (2286:5): [True: 10, False: 47.4k]
  ------------------
 2287|     56|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|     56|    do {                                                      \
  |  |   51|     56|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     56|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     56|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2288|     56|                               htonl(0), htonl(0));
 2289|     56|        break;
 2290|       |
 2291|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2291:5): [True: 0, False: 47.4k]
  ------------------
 2292|      0|    default:
  ------------------
  |  Branch (2292:5): [True: 0, False: 47.4k]
  ------------------
 2293|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2294|  47.4k|    }
 2295|  47.4k|}
mf_set:
 2320|   410k|{
 2321|   410k|    if (!mask || is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (2321:9): [True: 0, False: 410k]
  |  Branch (2321:18): [True: 158k, False: 251k]
  ------------------
 2322|   158k|        mf_set_value(mf, value, match, err_str);
 2323|   158k|        return mf->usable_protocols_exact;
 2324|   251k|    } else if (is_all_zeros(mask, mf->n_bytes) && !mf_is_tun_metadata(mf)) {
  ------------------
  |  Branch (2324:16): [True: 140k, False: 111k]
  |  Branch (2324:51): [True: 47.4k, False: 92.6k]
  ------------------
 2325|       |        /* Tunnel metadata matches on the existence of the field itself, so
 2326|       |         * it still needs to be encoded even if the value is wildcarded. */
 2327|  47.4k|        mf_set_wild(mf, match, err_str);
 2328|  47.4k|        return OFPUTIL_P_ANY;
  ------------------
  |  |  100|  47.4k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 2329|  47.4k|    }
 2330|       |
 2331|   203k|    if (err_str) {
  ------------------
  |  Branch (2331:9): [True: 158k, False: 45.4k]
  ------------------
 2332|   158k|        *err_str = NULL;
 2333|   158k|    }
 2334|       |
 2335|       |    /* The cases where 'mask' is all-1-bits or all-0-bits were already handled
 2336|       |     * above[*], so the code below only needs to work for the remaining cases
 2337|       |     * of a nontrivial mask.
 2338|       |     *
 2339|       |     * [*] Except where the field is a tunnel metadata field and 'mask' is
 2340|       |     *     all-0-bits; see above. */
 2341|   203k|    switch (mf->id) {
 2342|    285|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2342:5): [True: 285, False: 203k]
  ------------------
 2343|    286|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2343:5): [True: 1, False: 203k]
  ------------------
 2344|  2.63k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2344:5): [True: 2.35k, False: 201k]
  ------------------
 2345|  2.66k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2345:5): [True: 23, False: 203k]
  ------------------
 2346|  5.93k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2346:5): [True: 3.27k, False: 200k]
  ------------------
 2347|  6.78k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2347:5): [True: 856, False: 202k]
  ------------------
 2348|  6.80k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2348:5): [True: 14, False: 203k]
  ------------------
 2349|  6.80k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2349:5): [True: 3, False: 203k]
  ------------------
 2350|  6.80k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2350:5): [True: 0, False: 203k]
  ------------------
 2351|  6.80k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2351:5): [True: 4, False: 203k]
  ------------------
 2352|  6.80k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2352:5): [True: 0, False: 203k]
  ------------------
 2353|  6.80k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2353:5): [True: 0, False: 203k]
  ------------------
 2354|  6.80k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2354:5): [True: 0, False: 203k]
  ------------------
 2355|  6.80k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2355:5): [True: 0, False: 203k]
  ------------------
 2356|  6.80k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2356:5): [True: 0, False: 203k]
  ------------------
 2357|  6.80k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2357:5): [True: 0, False: 203k]
  ------------------
 2358|  6.80k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2358:5): [True: 0, False: 203k]
  ------------------
 2359|  6.80k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2359:5): [True: 0, False: 203k]
  ------------------
 2360|  6.80k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2360:5): [True: 0, False: 203k]
  ------------------
 2361|  6.80k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2361:5): [True: 0, False: 203k]
  ------------------
 2362|  6.80k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2362:5): [True: 0, False: 203k]
  ------------------
 2363|  6.80k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2363:5): [True: 0, False: 203k]
  ------------------
 2364|  6.80k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2364:5): [True: 0, False: 203k]
  ------------------
 2365|  6.80k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2365:5): [True: 0, False: 203k]
  ------------------
 2366|  6.80k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2366:5): [True: 0, False: 203k]
  ------------------
 2367|  6.80k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2367:5): [True: 0, False: 203k]
  ------------------
 2368|  6.80k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2368:5): [True: 0, False: 203k]
  ------------------
 2369|  6.80k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2369:5): [True: 0, False: 203k]
  ------------------
 2370|  6.80k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2370:5): [True: 0, False: 203k]
  ------------------
 2371|  6.80k|        return OFPUTIL_P_NONE;
  ------------------
  |  |   53|  6.80k|#define OFPUTIL_P_NONE 0
  ------------------
 2372|       |
 2373|  2.65k|    case MFF_DP_HASH:
  ------------------
  |  Branch (2373:5): [True: 2.65k, False: 201k]
  ------------------
 2374|  2.65k|        match_set_dp_hash_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2375|  2.65k|        break;
 2376|  2.20k|    case MFF_TUN_ID:
  ------------------
  |  Branch (2376:5): [True: 2.20k, False: 201k]
  ------------------
 2377|  2.20k|        match_set_tun_id_masked(match, value->be64, mask->be64);
 2378|  2.20k|        break;
 2379|     62|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2379:5): [True: 62, False: 203k]
  ------------------
 2380|     62|        match_set_tun_src_masked(match, value->be32, mask->be32);
 2381|     62|        break;
 2382|    894|    case MFF_TUN_DST:
  ------------------
  |  Branch (2382:5): [True: 894, False: 202k]
  ------------------
 2383|    894|        match_set_tun_dst_masked(match, value->be32, mask->be32);
 2384|    894|        break;
 2385|  1.44k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2385:5): [True: 1.44k, False: 202k]
  ------------------
 2386|  1.44k|        match_set_tun_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2387|  1.44k|        break;
 2388|  1.42k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2388:5): [True: 1.42k, False: 202k]
  ------------------
 2389|  1.42k|        match_set_tun_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2390|  1.42k|        break;
 2391|    204|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2391:5): [True: 204, False: 203k]
  ------------------
 2392|    204|        match_set_tun_flags_masked(match, ntohs(value->be16), ntohs(mask->be16));
 2393|    204|        break;
 2394|    553|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2394:5): [True: 553, False: 203k]
  ------------------
 2395|    553|        match_set_tun_gbp_id_masked(match, value->be16, mask->be16);
 2396|    553|        break;
 2397|    654|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2397:5): [True: 654, False: 203k]
  ------------------
 2398|    654|        match_set_tun_gbp_flags_masked(match, value->u8, mask->u8);
 2399|    654|        break;
 2400|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2400:5): [True: 0, False: 203k]
  ------------------
 2401|      0|        match_set_tun_ttl_masked(match, value->u8, mask->u8);
 2402|      0|        break;
 2403|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2403:5): [True: 0, False: 203k]
  ------------------
 2404|      0|        match_set_tun_tos_masked(match, value->u8, mask->u8);
 2405|      0|        break;
 2406|    137|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2406:5): [True: 137, False: 203k]
  ------------------
 2407|    137|        match_set_tun_erspan_ver_masked(match, value->u8, mask->u8);
 2408|    137|        break;
 2409|     51|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2409:5): [True: 51, False: 203k]
  ------------------
 2410|     51|        match_set_tun_erspan_idx_masked(match, ntohl(value->be32),
 2411|     51|                                        ntohl(mask->be32));
 2412|     51|        break;
 2413|    639|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2413:5): [True: 639, False: 203k]
  ------------------
 2414|    639|        match_set_tun_erspan_dir_masked(match, value->u8, mask->u8);
 2415|    639|        break;
 2416|  2.42k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2416:5): [True: 2.42k, False: 201k]
  ------------------
 2417|  2.42k|        match_set_tun_erspan_hwid_masked(match, value->u8, mask->u8);
 2418|  2.42k|        break;
 2419|  1.66k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2419:5): [True: 1.66k, False: 202k]
  ------------------
 2420|  1.66k|        match_set_tun_gtpu_flags_masked(match, value->u8, mask->u8);
 2421|  1.66k|        break;
 2422|  2.32k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2422:5): [True: 2.32k, False: 201k]
  ------------------
 2423|  2.32k|        match_set_tun_gtpu_msgtype_masked(match, value->u8, mask->u8);
 2424|  2.32k|        break;
 2425|   132k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2020|  2.69k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2020:5): [True: 1.00k, False: 202k]
  |  |  |  Branch (2020:29): [True: 1.68k, False: 202k]
  |  |  ------------------
  |  | 2021|  6.36k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2021:5): [True: 1.33k, False: 202k]
  |  |  |  Branch (2021:29): [True: 2.34k, False: 201k]
  |  |  ------------------
  |  | 2022|  8.60k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2022:5): [True: 904, False: 202k]
  |  |  |  Branch (2022:29): [True: 1.33k, False: 202k]
  |  |  ------------------
  |  | 2023|  13.1k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2023:5): [True: 3.55k, False: 200k]
  |  |  |  Branch (2023:29): [True: 949, False: 202k]
  |  |  ------------------
  |  | 2024|  19.8k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2024:5): [True: 962, False: 202k]
  |  |  |  Branch (2024:29): [True: 5.78k, False: 198k]
  |  |  ------------------
  |  | 2025|  33.0k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2025:5): [True: 11.6k, False: 192k]
  |  |  |  Branch (2025:30): [True: 1.53k, False: 202k]
  |  |  ------------------
  |  | 2026|  34.1k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2026:5): [True: 185, False: 203k]
  |  |  |  Branch (2026:30): [True: 986, False: 202k]
  |  |  ------------------
  |  | 2027|  39.1k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2027:5): [True: 4.68k, False: 199k]
  |  |  |  Branch (2027:30): [True: 249, False: 203k]
  |  |  ------------------
  |  | 2028|  40.9k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2028:5): [True: 1.57k, False: 202k]
  |  |  |  Branch (2028:30): [True: 306, False: 203k]
  |  |  ------------------
  |  | 2029|  46.9k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2029:5): [True: 3.65k, False: 200k]
  |  |  |  Branch (2029:30): [True: 2.30k, False: 201k]
  |  |  ------------------
  |  | 2030|  50.0k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2030:5): [True: 575, False: 203k]
  |  |  |  Branch (2030:30): [True: 2.48k, False: 201k]
  |  |  ------------------
  |  | 2031|  51.8k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2031:5): [True: 375, False: 203k]
  |  |  |  Branch (2031:30): [True: 1.47k, False: 202k]
  |  |  ------------------
  |  | 2032|  65.4k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2032:5): [True: 3.51k, False: 200k]
  |  |  |  Branch (2032:30): [True: 10.1k, False: 193k]
  |  |  ------------------
  |  | 2033|  68.1k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2033:5): [True: 1.41k, False: 202k]
  |  |  |  Branch (2033:30): [True: 1.23k, False: 202k]
  |  |  ------------------
  |  | 2034|  68.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2034:5): [True: 623, False: 203k]
  |  |  |  Branch (2034:30): [True: 146, False: 203k]
  |  |  ------------------
  |  | 2035|  73.6k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2035:5): [True: 954, False: 202k]
  |  |  |  Branch (2035:30): [True: 3.79k, False: 200k]
  |  |  ------------------
  |  | 2036|  76.2k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2036:5): [True: 1.15k, False: 202k]
  |  |  |  Branch (2036:30): [True: 1.42k, False: 202k]
  |  |  ------------------
  |  | 2037|  87.7k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2037:5): [True: 10.6k, False: 193k]
  |  |  |  Branch (2037:30): [True: 883, False: 202k]
  |  |  ------------------
  |  | 2038|  90.3k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2038:5): [True: 999, False: 202k]
  |  |  |  Branch (2038:30): [True: 1.59k, False: 202k]
  |  |  ------------------
  |  | 2039|  94.4k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2039:5): [True: 70, False: 203k]
  |  |  |  Branch (2039:30): [True: 3.96k, False: 199k]
  |  |  ------------------
  |  | 2040|  98.3k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2040:5): [True: 201, False: 203k]
  |  |  |  Branch (2040:30): [True: 3.70k, False: 200k]
  |  |  ------------------
  |  | 2041|   103k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2041:5): [True: 211, False: 203k]
  |  |  |  Branch (2041:30): [True: 5.00k, False: 198k]
  |  |  ------------------
  |  | 2042|   107k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2042:5): [True: 3.91k, False: 199k]
  |  |  |  Branch (2042:30): [True: 299, False: 203k]
  |  |  ------------------
  |  | 2043|   108k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2043:5): [True: 597, False: 203k]
  |  |  |  Branch (2043:30): [True: 407, False: 203k]
  |  |  ------------------
  |  | 2044|   112k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2044:5): [True: 1.27k, False: 202k]
  |  |  |  Branch (2044:30): [True: 2.03k, False: 201k]
  |  |  ------------------
  |  | 2045|   113k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2045:5): [True: 26, False: 203k]
  |  |  |  Branch (2045:30): [True: 1.37k, False: 202k]
  |  |  ------------------
  |  | 2046|   115k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2046:5): [True: 711, False: 203k]
  |  |  |  Branch (2046:30): [True: 854, False: 202k]
  |  |  ------------------
  |  | 2047|   117k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2047:5): [True: 717, False: 203k]
  |  |  |  Branch (2047:30): [True: 1.43k, False: 202k]
  |  |  ------------------
  |  | 2048|   118k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2048:5): [True: 116, False: 203k]
  |  |  |  Branch (2048:30): [True: 1.07k, False: 202k]
  |  |  ------------------
  |  | 2049|   119k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2049:5): [True: 246, False: 203k]
  |  |  |  Branch (2049:30): [True: 778, False: 203k]
  |  |  ------------------
  |  | 2050|   121k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2050:5): [True: 1.01k, False: 202k]
  |  |  |  Branch (2050:30): [True: 1.26k, False: 202k]
  |  |  ------------------
  |  | 2051|   132k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2051:5): [True: 1.00k, False: 202k]
  |  |  ------------------
  ------------------
 2426|   132k|        tun_metadata_set_match(mf, value, mask, match, err_str);
 2427|   132k|        break;
 2428|       |
 2429|    505|    case MFF_METADATA:
  ------------------
  |  Branch (2429:5): [True: 505, False: 203k]
  ------------------
 2430|    505|        match_set_metadata_masked(match, value->be64, mask->be64);
 2431|    505|        break;
 2432|       |
 2433|  11.2k|    CASE_MFF_REGS:
  ------------------
  |  | 1982|  3.67k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:   \
  |  |  ------------------
  |  |  |  Branch (1982:5): [True: 2.36k, False: 201k]
  |  |  |  Branch (1982:20): [True: 217, False: 203k]
  |  |  |  Branch (1982:35): [True: 25, False: 203k]
  |  |  |  Branch (1982:50): [True: 1.06k, False: 202k]
  |  |  ------------------
  |  | 1983|  5.80k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:   \
  |  |  ------------------
  |  |  |  Branch (1983:5): [True: 23, False: 203k]
  |  |  |  Branch (1983:20): [True: 279, False: 203k]
  |  |  |  Branch (1983:35): [True: 799, False: 203k]
  |  |  |  Branch (1983:50): [True: 1.02k, False: 202k]
  |  |  ------------------
  |  | 1984|  9.30k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11: \
  |  |  ------------------
  |  |  |  Branch (1984:5): [True: 2.06k, False: 201k]
  |  |  |  Branch (1984:20): [True: 729, False: 203k]
  |  |  |  Branch (1984:35): [True: 48, False: 203k]
  |  |  |  Branch (1984:51): [True: 660, False: 203k]
  |  |  ------------------
  |  | 1985|  11.2k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15
  |  |  ------------------
  |  |  |  Branch (1985:5): [True: 1.65k, False: 202k]
  |  |  |  Branch (1985:21): [True: 29, False: 203k]
  |  |  |  Branch (1985:37): [True: 163, False: 203k]
  |  |  ------------------
  ------------------
 2434|  11.2k|        match_set_reg_masked(match, mf->id - MFF_REG0,
 2435|  11.2k|                             ntohl(value->be32), ntohl(mask->be32));
 2436|  11.2k|        break;
 2437|       |
 2438|  7.30k|    CASE_MFF_XREGS:
  ------------------
  |  | 1994|  1.24k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3: \
  |  |  ------------------
  |  |  |  Branch (1994:5): [True: 29, False: 203k]
  |  |  |  Branch (1994:21): [True: 564, False: 203k]
  |  |  |  Branch (1994:37): [True: 544, False: 203k]
  |  |  |  Branch (1994:53): [True: 106, False: 203k]
  |  |  ------------------
  |  | 1995|  7.30k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7
  |  |  ------------------
  |  |  |  Branch (1995:5): [True: 855, False: 202k]
  |  |  |  Branch (1995:21): [True: 412, False: 203k]
  |  |  |  Branch (1995:37): [True: 4.30k, False: 199k]
  |  |  ------------------
  ------------------
 2439|  7.30k|        match_set_xreg_masked(match, mf->id - MFF_XREG0,
 2440|  7.30k|                              ntohll(value->be64), ntohll(mask->be64));
 2441|  7.30k|        break;
 2442|       |
 2443|  2.80k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2004|  2.80k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3
  |  |  ------------------
  |  |  |  Branch (2004:5): [True: 20, False: 203k]
  |  |  |  Branch (2004:22): [True: 495, False: 203k]
  |  |  |  Branch (2004:39): [True: 1.57k, False: 202k]
  |  |  ------------------
  ------------------
 2444|  2.80k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0,
 2445|  2.80k|                ntoh128(value->be128), ntoh128(mask->be128));
 2446|  2.80k|        break;
 2447|  2.62k|    }
 2448|       |
 2449|     70|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2449:5): [True: 70, False: 203k]
  ------------------
 2450|     70|        match_set_pkt_mark_masked(match, ntohl(value->be32),
 2451|     70|                                  ntohl(mask->be32));
 2452|     70|        break;
 2453|       |
 2454|  2.20k|    case MFF_CT_STATE:
  ------------------
  |  Branch (2454:5): [True: 2.20k, False: 201k]
  ------------------
 2455|  2.20k|        match_set_ct_state_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2456|  2.20k|        break;
 2457|       |
 2458|  2.24k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2458:5): [True: 2.24k, False: 201k]
  ------------------
 2459|  2.24k|        match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2460|  2.24k|        break;
 2461|       |
 2462|    841|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2462:5): [True: 841, False: 203k]
  ------------------
 2463|    841|        match_set_ct_label_masked(match, ntoh128(value->be128),
 2464|    841|                                  ntoh128(mask->be128));
 2465|    841|        break;
 2466|       |
 2467|    448|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2467:5): [True: 448, False: 203k]
  ------------------
 2468|    448|        match_set_ct_nw_src_masked(match, value->be32, mask->be32);
 2469|    448|        break;
 2470|       |
 2471|    796|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2471:5): [True: 796, False: 203k]
  ------------------
 2472|    796|        match_set_ct_nw_dst_masked(match, value->be32, mask->be32);
 2473|    796|        break;
 2474|       |
 2475|  1.19k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2475:5): [True: 1.19k, False: 202k]
  ------------------
 2476|  1.19k|        match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2477|  1.19k|        break;
 2478|       |
 2479|    631|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2479:5): [True: 631, False: 203k]
  ------------------
 2480|    631|        match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2481|    631|        break;
 2482|       |
 2483|    174|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2483:5): [True: 174, False: 203k]
  ------------------
 2484|    174|        match_set_ct_tp_src_masked(match, value->be16, mask->be16);
 2485|    174|        break;
 2486|       |
 2487|    949|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2487:5): [True: 949, False: 202k]
  ------------------
 2488|    949|        match_set_ct_tp_dst_masked(match, value->be16, mask->be16);
 2489|    949|        break;
 2490|       |
 2491|    519|    case MFF_ETH_DST:
  ------------------
  |  Branch (2491:5): [True: 519, False: 203k]
  ------------------
 2492|    519|        match_set_dl_dst_masked(match, value->mac, mask->mac);
 2493|    519|        break;
 2494|       |
 2495|    539|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2495:5): [True: 539, False: 203k]
  ------------------
 2496|    539|        match_set_dl_src_masked(match, value->mac, mask->mac);
 2497|    539|        break;
 2498|       |
 2499|    217|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2499:5): [True: 217, False: 203k]
  ------------------
 2500|    960|    case MFF_ND_SLL:
  ------------------
  |  Branch (2500:5): [True: 743, False: 203k]
  ------------------
 2501|    960|        match_set_arp_sha_masked(match, value->mac, mask->mac);
 2502|    960|        break;
 2503|       |
 2504|     10|    case MFF_ARP_THA:
  ------------------
  |  Branch (2504:5): [True: 10, False: 203k]
  ------------------
 2505|  2.36k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2505:5): [True: 2.35k, False: 201k]
  ------------------
 2506|  2.36k|        match_set_arp_tha_masked(match, value->mac, mask->mac);
 2507|  2.36k|        break;
 2508|       |
 2509|    164|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2509:5): [True: 164, False: 203k]
  ------------------
 2510|    164|        match_set_dl_tci_masked(match, value->be16, mask->be16);
 2511|    164|        break;
 2512|       |
 2513|    213|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2513:5): [True: 213, False: 203k]
  ------------------
 2514|    213|        match_set_vlan_vid_masked(match, value->be16, mask->be16);
 2515|    213|        break;
 2516|       |
 2517|    273|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2517:5): [True: 273, False: 203k]
  ------------------
 2518|    273|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2519|    273|        break;
 2520|       |
 2521|    893|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2521:5): [True: 893, False: 202k]
  ------------------
 2522|    893|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2523|    893|        break;
 2524|       |
 2525|     80|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2525:5): [True: 80, False: 203k]
  ------------------
 2526|     80|        match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2527|     80|        break;
 2528|       |
 2529|    968|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2529:5): [True: 968, False: 202k]
  ------------------
 2530|    968|        match_set_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2531|    968|        break;
 2532|       |
 2533|    458|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2533:5): [True: 458, False: 203k]
  ------------------
 2534|    458|        if ((mask->be32 & htonl(IPV6_LABEL_MASK)) == htonl(IPV6_LABEL_MASK)) {
  ------------------
  |  Branch (2534:13): [True: 361, False: 97]
  ------------------
 2535|    361|            mf_set_value(mf, value, match, err_str);
 2536|    361|        } else {
 2537|     97|            match_set_ipv6_label_masked(match, value->be32, mask->be32);
 2538|     97|        }
 2539|    458|        break;
 2540|       |
 2541|     98|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2541:5): [True: 98, False: 203k]
  ------------------
 2542|     98|        match_set_nd_target_masked(match, &value->ipv6, &mask->ipv6);
 2543|     98|        break;
 2544|       |
 2545|    220|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2545:5): [True: 220, False: 203k]
  ------------------
 2546|    220|        match_set_nw_frag_masked(match, value->u8, mask->u8);
 2547|    220|        break;
 2548|       |
 2549|    946|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2549:5): [True: 946, False: 202k]
  ------------------
 2550|    946|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2551|    946|        break;
 2552|       |
 2553|    523|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2553:5): [True: 523, False: 203k]
  ------------------
 2554|    523|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2555|    523|        break;
 2556|       |
 2557|     20|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2557:5): [True: 20, False: 203k]
  ------------------
 2558|     86|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2558:5): [True: 66, False: 203k]
  ------------------
 2559|    107|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2559:5): [True: 21, False: 203k]
  ------------------
 2560|    107|        match_set_tp_src_masked(match, value->be16, mask->be16);
 2561|    107|        break;
 2562|       |
 2563|     18|    case MFF_TCP_DST:
  ------------------
  |  Branch (2563:5): [True: 18, False: 203k]
  ------------------
 2564|  2.40k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2564:5): [True: 2.38k, False: 201k]
  ------------------
 2565|  2.42k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2565:5): [True: 19, False: 203k]
  ------------------
 2566|  2.42k|        match_set_tp_dst_masked(match, value->be16, mask->be16);
 2567|  2.42k|        break;
 2568|       |
 2569|  3.57k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2569:5): [True: 3.57k, False: 200k]
  ------------------
 2570|  3.57k|        match_set_tcp_flags_masked(match, value->be16, mask->be16);
 2571|  3.57k|        break;
 2572|       |
 2573|    166|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2573:5): [True: 166, False: 203k]
  ------------------
 2574|    166|        MATCH_SET_FIELD_MASKED(match, nsh.flags, value->u8, mask->u8);
  ------------------
  |  |   50|    166|    do {                                                      \
  |  |   51|    166|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    166|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    166|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2575|    166|        break;
 2576|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2576:5): [True: 0, False: 203k]
  ------------------
 2577|      0|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, value->u8, mask->u8);
  ------------------
  |  |   50|      0|    do {                                                      \
  |  |   51|      0|        (match)->wc.masks.field = (msk);                      \
  |  |   52|      0|        (match)->flow.field = (value) & (msk);                \
  |  |   53|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2578|      0|        break;
 2579|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2579:5): [True: 0, False: 203k]
  ------------------
 2580|      0|        MATCH_SET_FIELD_MASKED(match, nsh.mdtype, value->u8, mask->u8);
  ------------------
  |  |   50|      0|    do {                                                      \
  |  |   51|      0|        (match)->wc.masks.field = (msk);                      \
  |  |   52|      0|        (match)->flow.field = (value) & (msk);                \
  |  |   53|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2581|      0|        break;
 2582|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (2582:5): [True: 0, False: 203k]
  ------------------
 2583|      0|        MATCH_SET_FIELD_MASKED(match, nsh.np, value->u8, mask->u8);
  ------------------
  |  |   50|      0|    do {                                                      \
  |  |   51|      0|        (match)->wc.masks.field = (msk);                      \
  |  |   52|      0|        (match)->flow.field = (value) & (msk);                \
  |  |   53|      0|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2584|      0|        break;
 2585|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2585:5): [True: 0, False: 203k]
  ------------------
 2586|      0|        match->wc.masks.nsh.path_hdr |= mask->be32;
 2587|      0|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr,
 2588|      0|                             value->be32 & mask->be32);
 2589|      0|        break;
 2590|      0|    case MFF_NSH_SI:
  ------------------
  |  Branch (2590:5): [True: 0, False: 203k]
  ------------------
 2591|      0|        match->wc.masks.nsh.path_hdr |= htonl(mask->u8);
 2592|      0|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr,
 2593|      0|                             value->u8 & mask->u8);
 2594|      0|        break;
 2595|     37|    case MFF_NSH_C1:
  ------------------
  |  Branch (2595:5): [True: 37, False: 203k]
  ------------------
 2596|    460|    case MFF_NSH_C2:
  ------------------
  |  Branch (2596:5): [True: 423, False: 203k]
  ------------------
 2597|    470|    case MFF_NSH_C3:
  ------------------
  |  Branch (2597:5): [True: 10, False: 203k]
  ------------------
 2598|    480|    case MFF_NSH_C4:
  ------------------
  |  Branch (2598:5): [True: 10, False: 203k]
  ------------------
 2599|    480|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    480|    do {                                                      \
  |  |   51|    480|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    480|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    480|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded - Ignored]
  |  |  ------------------
  ------------------
 2600|    480|                               value->be32, mask->be32);
 2601|    480|        break;
 2602|       |
 2603|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2603:5): [True: 0, False: 203k]
  ------------------
 2604|      0|    default:
  ------------------
  |  Branch (2604:5): [True: 0, False: 203k]
  ------------------
 2605|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2606|   203k|    }
 2607|       |
 2608|   197k|    return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr
  ------------------
  |  Branch (2608:14): [True: 194k, False: 2.63k]
  ------------------
 2609|   197k|             || ip_is_cidr(mask->be32))
  ------------------
  |  Branch (2609:17): [True: 199, False: 2.43k]
  ------------------
 2610|   197k|            ? mf->usable_protocols_cidr
 2611|   197k|            : mf->usable_protocols_bitwise);
 2612|   203k|}
mf_check_src:
 2721|  79.6k|{
 2722|  79.6k|    return mf_check__(sf, match, "source");
 2723|  79.6k|}
mf_check_dst:
 2730|  28.5k|{
 2731|  28.5k|    int error = mf_check__(sf, match, "destination");
 2732|  28.5k|    if (!error && !sf->field->writable) {
  ------------------
  |  Branch (2732:9): [True: 24.9k, False: 3.68k]
  |  Branch (2732:19): [True: 1.13k, False: 23.7k]
  ------------------
 2733|  1.13k|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  223|  1.13k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.13k|    do {                                                                \
  |  |  |  |  287|  1.13k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.13k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.13k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2734|  1.13k|                     sf->field->name);
 2735|  1.13k|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2736|  1.13k|    }
 2737|  27.4k|    return error;
 2738|  28.5k|}
mf_get:
 2745|  50.0k|{
 2746|  50.0k|    mf_get_value(mf, &match->flow, value);
 2747|  50.0k|    mf_get_mask(mf, &match->wc, mask);
 2748|  50.0k|}
mf_format:
 3174|  49.1k|{
 3175|  49.1k|    if (mask) {
  ------------------
  |  Branch (3175:9): [True: 7.96k, False: 41.1k]
  ------------------
 3176|  7.96k|        if (is_all_zeros(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3176:13): [True: 27, False: 7.94k]
  ------------------
 3177|     27|            ds_put_cstr(s, "ANY");
 3178|     27|            return;
 3179|  7.94k|        } else if (is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3179:20): [True: 6.04k, False: 1.89k]
  ------------------
 3180|  6.04k|            mask = NULL;
 3181|  6.04k|        }
 3182|  7.96k|    }
 3183|       |
 3184|  49.0k|    switch (mf->string) {
 3185|     46|    case MFS_OFP_PORT_OXM:
  ------------------
  |  Branch (3185:5): [True: 46, False: 49.0k]
  ------------------
 3186|     46|        if (!mask) {
  ------------------
  |  Branch (3186:13): [True: 46, False: 0]
  ------------------
 3187|     46|            ofp_port_t port;
 3188|     46|            ofputil_port_from_ofp11(value->be32, &port);
 3189|     46|            ofputil_format_port(port, port_map, s);
 3190|     46|            break;
 3191|     46|        }
 3192|       |        /* fall through */
 3193|  1.00k|    case MFS_OFP_PORT:
  ------------------
  |  Branch (3193:5): [True: 1.00k, False: 48.0k]
  ------------------
 3194|  1.00k|        if (!mask) {
  ------------------
  |  Branch (3194:13): [True: 984, False: 21]
  ------------------
 3195|    984|            ofputil_format_port(u16_to_ofp(ntohs(value->be16)), port_map, s);
 3196|    984|            break;
 3197|    984|        }
 3198|       |        /* fall through */
 3199|  5.69k|    case MFS_DECIMAL:
  ------------------
  |  Branch (3199:5): [True: 5.67k, False: 43.4k]
  ------------------
 3200|  35.0k|    case MFS_HEXADECIMAL:
  ------------------
  |  Branch (3200:5): [True: 29.3k, False: 19.7k]
  ------------------
 3201|  35.0k|        mf_format_integer_string(mf, (uint8_t *) value, (uint8_t *) mask, s);
 3202|  35.0k|        break;
 3203|       |
 3204|  1.76k|    case MFS_CT_STATE:
  ------------------
  |  Branch (3204:5): [True: 1.76k, False: 47.3k]
  ------------------
 3205|  1.76k|        mf_format_ct_state_string(value->be32,
 3206|  1.76k|                                  mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|  1.76k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3206:35): [True: 0, False: 1.76k]
  ------------------
 3207|  1.76k|        break;
 3208|       |
 3209|     11|    case MFS_ETHERNET:
  ------------------
  |  Branch (3209:5): [True: 11, False: 49.0k]
  ------------------
 3210|     11|        eth_format_masked(value->mac, mask ? &mask->mac : NULL, s);
  ------------------
  |  Branch (3210:39): [True: 0, False: 11]
  ------------------
 3211|     11|        break;
 3212|       |
 3213|    249|    case MFS_IPV4:
  ------------------
  |  Branch (3213:5): [True: 249, False: 48.8k]
  ------------------
 3214|    249|        ip_format_masked(value->be32, mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    239|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3214:39): [True: 10, False: 239]
  ------------------
 3215|    249|        break;
 3216|       |
 3217|     20|    case MFS_IPV6:
  ------------------
  |  Branch (3217:5): [True: 20, False: 49.0k]
  ------------------
 3218|     20|        ipv6_format_masked(&value->ipv6, mask ? &mask->ipv6 : NULL, s);
  ------------------
  |  Branch (3218:42): [True: 10, False: 10]
  ------------------
 3219|     20|        break;
 3220|       |
 3221|  3.03k|    case MFS_FRAG:
  ------------------
  |  Branch (3221:5): [True: 3.03k, False: 46.0k]
  ------------------
 3222|  3.03k|        mf_format_frag_string(value->u8, mask ? mask->u8 : UINT8_MAX, s);
  ------------------
  |  Branch (3222:42): [True: 0, False: 3.03k]
  ------------------
 3223|  3.03k|        break;
 3224|       |
 3225|    358|    case MFS_TNL_FLAGS:
  ------------------
  |  Branch (3225:5): [True: 358, False: 48.7k]
  ------------------
 3226|    358|        mf_format_tnl_flags_string(value->be16,
 3227|    358|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|    695|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3227:36): [True: 21, False: 337]
  ------------------
 3228|    358|        break;
 3229|       |
 3230|  7.55k|    case MFS_TCP_FLAGS:
  ------------------
  |  Branch (3230:5): [True: 7.55k, False: 41.5k]
  ------------------
 3231|  7.55k|        mf_format_tcp_flags_string(value->be16,
 3232|  7.55k|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  15.1k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3232:36): [True: 0, False: 7.55k]
  ------------------
 3233|  7.55k|        break;
 3234|       |
 3235|     61|    case MFS_PACKET_TYPE:
  ------------------
  |  Branch (3235:5): [True: 61, False: 49.0k]
  ------------------
 3236|     61|        mf_format_packet_type_string(value->be32,
 3237|     61|                                     mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|     61|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3237:38): [True: 0, False: 61]
  ------------------
 3238|     61|        break;
 3239|       |
 3240|      0|    default:
  ------------------
  |  Branch (3240:5): [True: 0, False: 49.0k]
  ------------------
 3241|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 3242|  49.0k|    }
 3243|  49.0k|}
mf_write_subfield_value:
 3280|  50.0k|{
 3281|  50.0k|    const struct mf_field *field = sf->field;
 3282|  50.0k|    union mf_value value, mask;
 3283|  50.0k|    unsigned int size = DIV_ROUND_UP(sf->n_bits, 8);
  ------------------
  |  |  296|  50.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 3284|       |
 3285|  50.0k|    mf_get(field, match, &value, &mask);
 3286|  50.0k|    bitwise_copy(src, size, 0, &value, field->n_bytes, sf->ofs, sf->n_bits);
 3287|  50.0k|    bitwise_one (              &mask,  field->n_bytes, sf->ofs, sf->n_bits);
 3288|  50.0k|    mf_set(field, &value, &mask, match, NULL);
 3289|  50.0k|}
field_array_set:
 3344|  46.6k|{
 3345|  46.6k|    size_t i, offset = 0;
 3346|       |
 3347|  46.6k|    ovs_assert(id < MFF_N_IDS);
  ------------------
  |  |   58|  46.6k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 3348|       |
 3349|       |    /* Find the spot for 'id'. */
 3350|  46.6k|    BITMAP_FOR_EACH_1 (i, id, fa->used.bm) {
  ------------------
  |  |  281|  46.6k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  63.4k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 16.8k, False: 46.6k]
  |  |  |  |  ------------------
  |  |  |  |  279|  46.6k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 3351|  16.8k|        offset += mf_from_id(i)->n_bytes;
 3352|  16.8k|    }
 3353|       |
 3354|  46.6k|    size_t value_size = mf_from_id(id)->n_bytes;
 3355|       |
 3356|       |    /* make room if necessary. */
 3357|  46.6k|    if (!bitmap_is_set(fa->used.bm, id)) {
  ------------------
  |  Branch (3357:9): [True: 46.6k, False: 0]
  ------------------
 3358|  46.6k|        fa->values = xrealloc(fa->values, fa->values_size + value_size);
 3359|       |        /* Move remainder forward, if any. */
 3360|  46.6k|        if (offset < fa->values_size) {
  ------------------
  |  Branch (3360:13): [True: 18.5k, False: 28.1k]
  ------------------
 3361|  18.5k|            memmove(fa->values + offset + value_size, fa->values + offset,
 3362|  18.5k|                    fa->values_size - offset);
 3363|  18.5k|        }
 3364|  46.6k|        fa->values_size += value_size;
 3365|  46.6k|    }
 3366|  46.6k|    bitmap_set1(fa->used.bm, id);
 3367|       |
 3368|  46.6k|    memcpy(fa->values + offset, value, value_size);
 3369|  46.6k|}
mf_get_vl_mff:
 3443|   590k|{
 3444|   590k|    if (mff && mff->variable_len && vl_mff_map) {
  ------------------
  |  Branch (3444:9): [True: 590k, False: 0]
  |  Branch (3444:16): [True: 306k, False: 283k]
  |  Branch (3444:37): [True: 0, False: 306k]
  ------------------
 3445|      0|        struct vl_mf_field *vl_mff = mf_get_vl_mff__(mff->id, vl_mff_map);
 3446|       |
 3447|      0|        return vl_mff ? &vl_mff->mf : NULL;
  ------------------
  |  Branch (3447:16): [True: 0, False: 0]
  ------------------
 3448|      0|    }
 3449|       |
 3450|   590k|    return NULL;
 3451|   590k|}
mf_vl_mff_invalid:
 3554|   590k|{
 3555|   590k|    return map && mff && mff->variable_len && !mff->mapped;
  ------------------
  |  Branch (3555:12): [True: 0, False: 590k]
  |  Branch (3555:19): [True: 0, False: 0]
  |  Branch (3555:26): [True: 0, False: 0]
  |  Branch (3555:47): [True: 0, False: 0]
  ------------------
 3556|   590k|}
mf_vl_mff_set_tlv_bitmap:
 3560|   128k|{
 3561|   128k|    if (mff && mff->mapped) {
  ------------------
  |  Branch (3561:9): [True: 128k, False: 0]
  |  Branch (3561:16): [True: 0, False: 128k]
  ------------------
 3562|      0|        ovs_assert(mf_is_tun_metadata(mff));
  ------------------
  |  |   58|      0|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 3563|      0|        ULLONG_SET1(*tlv_bitmap, mff->id - MFF_TUN_METADATA0);
  ------------------
  |  |  290|      0|#define ULLONG_SET1(MAP, OFFSET) ((MAP) |= 1ULL << (OFFSET))
  ------------------
 3564|      0|    }
 3565|   128k|}
mf_vl_mff_nx_pull_header:
 3606|  17.4k|{
 3607|  17.4k|    enum ofperr error = nx_pull_header(b, vl_mff_map, field, masked);
 3608|  17.4k|    if (error) {
  ------------------
  |  Branch (3608:9): [True: 2.65k, False: 14.7k]
  ------------------
 3609|  2.65k|        return error;
 3610|  2.65k|    }
 3611|       |
 3612|  14.7k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3613|  14.7k|    return 0;
 3614|  17.4k|}
mf_vl_mff_nx_pull_entry:
 3620|  26.3k|{
 3621|  26.3k|    enum ofperr error = nx_pull_entry(b, vl_mff_map, field, value, mask, true);
 3622|  26.3k|    if (error) {
  ------------------
  |  Branch (3622:9): [True: 7.91k, False: 18.4k]
  ------------------
 3623|  7.91k|        return error;
 3624|  7.91k|    }
 3625|       |
 3626|  18.4k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3627|  18.4k|    return 0;
 3628|  26.3k|}
mf_vl_mff_mf_from_nxm_header:
 3635|   107k|{
 3636|   107k|    *field = mf_from_nxm_header(header, vl_mff_map);
 3637|   107k|    if (!*field) {
  ------------------
  |  Branch (3637:9): [True: 12.6k, False: 94.8k]
  ------------------
 3638|  12.6k|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 3639|  94.8k|    } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (3639:16): [True: 0, False: 94.8k]
  ------------------
 3640|      0|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3641|      0|    }
 3642|       |
 3643|  94.8k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3644|  94.8k|    return 0;
 3645|   107k|}
mf_bitmap_and:
 3659|   137k|{
 3660|   137k|    bitmap_and(a.bm, b.bm, MFF_N_IDS);
 3661|   137k|    return a;
 3662|   137k|}
mf_bitmap_not:
 3675|  68.6k|{
 3676|  68.6k|    bitmap_not(x.bm, MFF_N_IDS);
 3677|  68.6k|    return x;
 3678|  68.6k|}
meta-flow.c:mf_are_prereqs_ok__:
  442|  94.7k|{
  443|  94.7k|    ovs_be16 dl_type = get_dl_type(flow);
  444|       |
  445|  94.7k|    switch (mf->prereqs) {
  ------------------
  |  Branch (445:13): [True: 0, False: 94.7k]
  ------------------
  446|  81.0k|    case MFP_NONE:
  ------------------
  |  Branch (446:5): [True: 81.0k, False: 13.7k]
  ------------------
  447|  81.0k|        return true;
  448|    105|    case MFP_ETHERNET:
  ------------------
  |  Branch (448:5): [True: 105, False: 94.6k]
  ------------------
  449|    105|        return is_ethernet(flow, wc);
  450|     12|    case MFP_ARP:
  ------------------
  |  Branch (450:5): [True: 12, False: 94.7k]
  ------------------
  451|     12|        return (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (451:17): [True: 0, False: 12]
  ------------------
  452|     12|                dl_type == htons(ETH_TYPE_RARP));
  ------------------
  |  Branch (452:17): [True: 0, False: 12]
  ------------------
  453|     13|    case MFP_IPV4:
  ------------------
  |  Branch (453:5): [True: 13, False: 94.7k]
  ------------------
  454|     13|        return dl_type == htons(ETH_TYPE_IP);
  455|    339|    case MFP_IPV6:
  ------------------
  |  Branch (455:5): [True: 339, False: 94.4k]
  ------------------
  456|    339|        return dl_type == htons(ETH_TYPE_IPV6);
  457|     19|    case MFP_VLAN_VID:
  ------------------
  |  Branch (457:5): [True: 19, False: 94.7k]
  ------------------
  458|     19|        return is_vlan(flow, wc);
  459|    660|    case MFP_MPLS:
  ------------------
  |  Branch (459:5): [True: 660, False: 94.1k]
  ------------------
  460|    660|        return eth_type_mpls(dl_type);
  461|     59|    case MFP_IP_ANY:
  ------------------
  |  Branch (461:5): [True: 59, False: 94.7k]
  ------------------
  462|     59|        return is_ip_any(flow);
  463|  1.93k|    case MFP_NSH:
  ------------------
  |  Branch (463:5): [True: 1.93k, False: 92.8k]
  ------------------
  464|  1.93k|        return dl_type == htons(ETH_TYPE_NSH);
  465|  3.71k|    case MFP_CT_VALID:
  ------------------
  |  Branch (465:5): [True: 3.71k, False: 91.0k]
  ------------------
  466|  3.71k|        return is_ct_valid(flow, mask, wc);
  467|     93|    case MFP_TCP:
  ------------------
  |  Branch (467:5): [True: 93, False: 94.6k]
  ------------------
  468|       |        /* Matching !FRAG_LATER is not enforced (mask is not checked). */
  469|     93|        return is_tcp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|     38|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (469:16): [True: 38, False: 55]
  |  Branch (469:36): [True: 38, False: 0]
  ------------------
  470|  1.53k|    case MFP_UDP:
  ------------------
  |  Branch (470:5): [True: 1.53k, False: 93.2k]
  ------------------
  471|  1.53k|        return is_udp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    769|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (471:16): [True: 769, False: 766]
  |  Branch (471:36): [True: 769, False: 0]
  ------------------
  472|  3.33k|    case MFP_SCTP:
  ------------------
  |  Branch (472:5): [True: 3.33k, False: 91.4k]
  ------------------
  473|  3.33k|        return is_sctp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|  1.01k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (473:16): [True: 1.01k, False: 2.31k]
  |  Branch (473:37): [True: 1.01k, False: 0]
  ------------------
  474|  1.68k|    case MFP_ICMPV4:
  ------------------
  |  Branch (474:5): [True: 1.68k, False: 93.0k]
  ------------------
  475|  1.68k|        return is_icmpv4(flow, wc);
  476|     42|    case MFP_ICMPV6:
  ------------------
  |  Branch (476:5): [True: 42, False: 94.7k]
  ------------------
  477|     42|        return is_icmpv6(flow, wc);
  478|     83|    case MFP_ND:
  ------------------
  |  Branch (478:5): [True: 83, False: 94.6k]
  ------------------
  479|     83|        return is_nd(flow, wc);
  480|     39|    case MFP_ND_SOLICIT:
  ------------------
  |  Branch (480:5): [True: 39, False: 94.7k]
  ------------------
  481|     39|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT);
  ------------------
  |  Branch (481:16): [True: 0, False: 39]
  |  Branch (481:35): [True: 0, False: 0]
  ------------------
  482|     31|    case MFP_ND_ADVERT:
  ------------------
  |  Branch (482:5): [True: 31, False: 94.7k]
  ------------------
  483|     31|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_ADVERT);
  ------------------
  |  Branch (483:16): [True: 0, False: 31]
  |  Branch (483:35): [True: 0, False: 0]
  ------------------
  484|  94.7k|    }
  485|       |
  486|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  487|  94.7k|}
meta-flow.c:field_len:
 1369|   361k|{
 1370|   361k|    const uint8_t *value = &value_->u8;
 1371|   361k|    int i;
 1372|       |
 1373|   361k|    if (!mf->variable_len) {
  ------------------
  |  Branch (1373:9): [True: 0, False: 361k]
  ------------------
 1374|      0|        return mf->n_bytes;
 1375|      0|    }
 1376|       |
 1377|   361k|    if (!value) {
  ------------------
  |  Branch (1377:9): [True: 0, False: 361k]
  ------------------
 1378|      0|        return 0;
 1379|      0|    }
 1380|       |
 1381|  44.5M|    for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (1381:17): [True: 44.2M, False: 287k]
  ------------------
 1382|  44.2M|        if (value[i] != 0) {
  ------------------
  |  Branch (1382:13): [True: 74.1k, False: 44.1M]
  ------------------
 1383|  74.1k|            break;
 1384|  74.1k|        }
 1385|  44.2M|    }
 1386|       |
 1387|   361k|    return mf->n_bytes - i;
 1388|   361k|}
meta-flow.c:mf_check__:
 2617|   108k|{
 2618|   108k|    if (!sf->field) {
  ------------------
  |  Branch (2618:9): [True: 0, False: 108k]
  ------------------
 2619|      0|        VLOG_WARN_RL(&rl, "unknown %s field", type);
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2620|      0|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 2621|   108k|    } else if (!sf->n_bits) {
  ------------------
  |  Branch (2621:16): [True: 10, False: 108k]
  ------------------
 2622|     10|        VLOG_WARN_RL(&rl, "zero bit %s field %s", type, sf->field->name);
  ------------------
  |  |  223|     10|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     10|    do {                                                                \
  |  |  |  |  287|     10|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     10|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2623|     10|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2624|   108k|    } else if (sf->ofs >= sf->field->n_bits) {
  ------------------
  |  Branch (2624:16): [True: 4.68k, False: 103k]
  ------------------
 2625|  4.68k|        VLOG_WARN_RL(&rl, "bit offset %d exceeds %d-bit width of %s field %s",
  ------------------
  |  |  223|  4.68k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  4.68k|    do {                                                                \
  |  |  |  |  287|  4.68k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  4.68k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 4.68k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  4.68k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2626|  4.68k|                     sf->ofs, sf->field->n_bits, type, sf->field->name);
 2627|  4.68k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2628|   103k|    } else if (sf->ofs + sf->n_bits > sf->field->n_bits) {
  ------------------
  |  Branch (2628:16): [True: 1.73k, False: 101k]
  ------------------
 2629|  1.73k|        VLOG_WARN_RL(&rl, "bit offset %d and width %d exceeds %d-bit width "
  ------------------
  |  |  223|  1.73k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.73k|    do {                                                                \
  |  |  |  |  287|  1.73k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.73k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.73k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.73k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2630|  1.73k|                     "of %s field %s", sf->ofs, sf->n_bits,
 2631|  1.73k|                     sf->field->n_bits, type, sf->field->name);
 2632|  1.73k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2633|   101k|    } else if (match && !mf_are_match_prereqs_ok(sf->field, match)) {
  ------------------
  |  Branch (2633:16): [True: 67.9k, False: 33.8k]
  |  Branch (2633:25): [True: 2.83k, False: 65.1k]
  ------------------
 2634|  2.83k|        VLOG_WARN_RL(&rl, "%s field %s lacks correct prerequisites",
  ------------------
  |  |  223|  2.83k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.83k|    do {                                                                \
  |  |  |  |  287|  2.83k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.83k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.83k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.83k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2635|  2.83k|                     type, sf->field->name);
 2636|  2.83k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2637|  98.9k|    } else {
 2638|  98.9k|        return 0;
 2639|  98.9k|    }
 2640|   108k|}
meta-flow.c:mf_format_integer_string:
 3100|  35.0k|{
 3101|  35.0k|    if (mf->string == MFS_HEXADECIMAL) {
  ------------------
  |  Branch (3101:9): [True: 29.3k, False: 5.69k]
  ------------------
 3102|  29.3k|        ds_put_hex(s, valuep, mf->n_bytes);
 3103|  29.3k|    } else {
 3104|  5.69k|        unsigned long long int integer = 0;
 3105|  5.69k|        int i;
 3106|       |
 3107|  5.69k|        ovs_assert(mf->n_bytes <= 8);
  ------------------
  |  |   58|  5.69k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 3108|  16.9k|        for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (3108:21): [True: 11.2k, False: 5.69k]
  ------------------
 3109|  11.2k|            integer = (integer << 8) | valuep[i];
 3110|  11.2k|        }
 3111|  5.69k|        ds_put_format(s, "%lld", integer);
 3112|  5.69k|    }
 3113|       |
 3114|  35.0k|    if (maskp) {
  ------------------
  |  Branch (3114:9): [True: 1.85k, False: 33.1k]
  ------------------
 3115|       |        /* I guess we could write the mask in decimal for MFS_DECIMAL but I'm
 3116|       |         * not sure that that a bit-mask written in decimal is ever easier to
 3117|       |         * understand than the same bit-mask written in hexadecimal. */
 3118|  1.85k|        ds_put_char(s, '/');
 3119|  1.85k|        ds_put_hex(s, maskp, mf->n_bytes);
 3120|  1.85k|    }
 3121|  35.0k|}
meta-flow.c:mf_format_ct_state_string:
 3156|  1.76k|{
 3157|  1.76k|    format_flags_masked(s, NULL, ct_state_to_string, ntohl(value),
 3158|  1.76k|                        ntohl(mask), UINT16_MAX);
 3159|  1.76k|}
meta-flow.c:mf_format_frag_string:
 3125|  3.03k|{
 3126|  3.03k|    const struct frag_handling *h;
 3127|       |
 3128|  3.03k|    mask &= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|  3.03k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  3.03k|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  |  |  ------------------
  |  |               #define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   55|  3.03k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 3129|  3.03k|    value &= mask;
 3130|       |
 3131|  7.50k|    for (h = all_frags; h < &all_frags[ARRAY_SIZE(all_frags)]; h++) {
  ------------------
  |  |  293|  7.50k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|  7.50k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  7.50k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|  7.50k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  7.50k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  7.50k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3131:25): [True: 6.87k, False: 630]
  ------------------
 3132|  6.87k|        if (value == h->value && mask == h->mask) {
  ------------------
  |  Branch (3132:13): [True: 3.03k, False: 3.84k]
  |  Branch (3132:34): [True: 2.40k, False: 630]
  ------------------
 3133|  2.40k|            ds_put_cstr(s, h->name);
 3134|  2.40k|            return;
 3135|  2.40k|        }
 3136|  6.87k|    }
 3137|    630|    ds_put_cstr(s, "<error>");
 3138|    630|}
meta-flow.c:mf_format_tnl_flags_string:
 3142|    358|{
 3143|    358|    format_flags_masked(s, NULL, flow_tun_flag_to_string, ntohs(value),
 3144|    358|                        ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    358|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
                                      ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    358|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
 3145|    358|}
meta-flow.c:mf_format_tcp_flags_string:
 3149|  7.55k|{
 3150|  7.55k|    format_flags_masked(s, NULL, packet_tcp_flag_to_string, ntohs(value),
 3151|  7.55k|                        TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  887|  7.55k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
                                      TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  887|  7.55k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 3152|  7.55k|}
meta-flow.c:mf_format_packet_type_string:
 3163|     61|{
 3164|     61|    format_packet_type_masked(s, value, mask);
 3165|     61|}

multipath_check:
   38|  3.85k|{
   39|  3.85k|    return mf_check_dst(&mp->dst, match);
   40|  3.85k|}
multipath_format:
  234|  2.43k|{
  235|  2.43k|    const char *fields, *algorithm;
  236|       |
  237|  2.43k|    fields = flow_hash_fields_to_str(mp->fields);
  238|       |
  239|  2.43k|    switch (mp->algorithm) {
  240|     73|    case NX_MP_ALG_MODULO_N:
  ------------------
  |  Branch (240:5): [True: 73, False: 2.35k]
  ------------------
  241|     73|        algorithm = "modulo_n";
  242|     73|        break;
  243|      7|    case NX_MP_ALG_HASH_THRESHOLD:
  ------------------
  |  Branch (243:5): [True: 7, False: 2.42k]
  ------------------
  244|      7|        algorithm = "hash_threshold";
  245|      7|        break;
  246|  1.35k|    case NX_MP_ALG_HRW:
  ------------------
  |  Branch (246:5): [True: 1.35k, False: 1.07k]
  ------------------
  247|  1.35k|        algorithm = "hrw";
  248|  1.35k|        break;
  249|    995|    case NX_MP_ALG_ITER_HASH:
  ------------------
  |  Branch (249:5): [True: 995, False: 1.43k]
  ------------------
  250|    995|        algorithm = "iter_hash";
  251|    995|        break;
  252|      0|    default:
  ------------------
  |  Branch (252:5): [True: 0, False: 2.43k]
  ------------------
  253|      0|        algorithm = "<unknown>";
  254|  2.43k|    }
  255|       |
  256|  2.43k|    ds_put_format(s, "%smultipath(%s%s,%"PRIu16",%s,%d,%"PRIu32",",
  257|  2.43k|                  colors.paren, colors.end, fields, mp->basis, algorithm,
  258|  2.43k|                  mp->max_link + 1, mp->arg);
  259|  2.43k|    mf_format_subfield(&mp->dst, s);
  260|  2.43k|    ds_put_format(s, "%s)%s", colors.paren, colors.end);
  261|  2.43k|}

netdev_features_to_bps:
 1176|  60.4k|{
 1177|  60.4k|    enum {
 1178|  60.4k|        F_1000000MB = NETDEV_F_1TB_FD,
 1179|  60.4k|        F_100000MB = NETDEV_F_100GB_FD,
 1180|  60.4k|        F_40000MB = NETDEV_F_40GB_FD,
 1181|  60.4k|        F_10000MB = NETDEV_F_10GB_FD,
 1182|  60.4k|        F_1000MB = NETDEV_F_1GB_HD | NETDEV_F_1GB_FD,
 1183|  60.4k|        F_100MB = NETDEV_F_100MB_HD | NETDEV_F_100MB_FD,
 1184|  60.4k|        F_10MB = NETDEV_F_10MB_HD | NETDEV_F_10MB_FD
 1185|  60.4k|    };
 1186|       |
 1187|  60.4k|    return (  features & F_1000000MB ? UINT64_C(1000000000000)
  ------------------
  |  Branch (1187:15): [True: 0, False: 60.4k]
  ------------------
 1188|  60.4k|            : features & F_100000MB  ? UINT64_C(100000000000)
  ------------------
  |  Branch (1188:15): [True: 0, False: 60.4k]
  ------------------
 1189|  60.4k|            : features & F_40000MB   ? UINT64_C(40000000000)
  ------------------
  |  Branch (1189:15): [True: 0, False: 60.4k]
  ------------------
 1190|  60.4k|            : features & F_10000MB   ? UINT64_C(10000000000)
  ------------------
  |  Branch (1190:15): [True: 23.9k, False: 36.5k]
  ------------------
 1191|  60.4k|            : features & F_1000MB    ? UINT64_C(1000000000)
  ------------------
  |  Branch (1191:15): [True: 8.99k, False: 27.5k]
  ------------------
 1192|  36.5k|            : features & F_100MB     ? UINT64_C(100000000)
  ------------------
  |  Branch (1192:15): [True: 8.24k, False: 19.3k]
  ------------------
 1193|  27.5k|            : features & F_10MB      ? UINT64_C(10000000)
  ------------------
  |  Branch (1193:15): [True: 4.10k, False: 15.2k]
  ------------------
 1194|  19.3k|                                     : default_bps);
 1195|  60.4k|}
netdev_features_format:
 1248|   123k|{
 1249|   123k|    ofp_print_bit_names(s, features, netdev_feature_to_name, ' ');
 1250|   123k|    ds_put_char(s, '\n');
 1251|   123k|}
netdev_free_custom_stats_counters:
 2300|  40.7k|{
 2301|  40.7k|    if (custom_stats) {
  ------------------
  |  Branch (2301:9): [True: 40.7k, False: 0]
  ------------------
 2302|  40.7k|        if (custom_stats->counters) {
  ------------------
  |  Branch (2302:13): [True: 6.21k, False: 34.5k]
  ------------------
 2303|  6.21k|            free(custom_stats->counters);
 2304|  6.21k|            custom_stats->counters = NULL;
 2305|  6.21k|            custom_stats->size = 0;
 2306|  6.21k|        }
 2307|  40.7k|    }
 2308|  40.7k|}
netdev.c:netdev_feature_to_name:
 1221|   714k|{
 1222|   714k|    enum netdev_features f = bit;
 1223|       |
 1224|   714k|    switch (f) {
  ------------------
  |  Branch (1224:13): [True: 0, False: 714k]
  ------------------
 1225|  62.2k|    case NETDEV_F_10MB_HD:    return "10MB-HD";
  ------------------
  |  Branch (1225:5): [True: 62.2k, False: 652k]
  ------------------
 1226|  56.0k|    case NETDEV_F_10MB_FD:    return "10MB-FD";
  ------------------
  |  Branch (1226:5): [True: 56.0k, False: 658k]
  ------------------
 1227|  63.5k|    case NETDEV_F_100MB_HD:   return "100MB-HD";
  ------------------
  |  Branch (1227:5): [True: 63.5k, False: 650k]
  ------------------
 1228|  65.7k|    case NETDEV_F_100MB_FD:   return "100MB-FD";
  ------------------
  |  Branch (1228:5): [True: 65.7k, False: 648k]
  ------------------
 1229|  53.9k|    case NETDEV_F_1GB_HD:     return "1GB-HD";
  ------------------
  |  Branch (1229:5): [True: 53.9k, False: 660k]
  ------------------
 1230|  58.7k|    case NETDEV_F_1GB_FD:     return "1GB-FD";
  ------------------
  |  Branch (1230:5): [True: 58.7k, False: 655k]
  ------------------
 1231|  52.6k|    case NETDEV_F_10GB_FD:    return "10GB-FD";
  ------------------
  |  Branch (1231:5): [True: 52.6k, False: 661k]
  ------------------
 1232|  4.30k|    case NETDEV_F_40GB_FD:    return "40GB-FD";
  ------------------
  |  Branch (1232:5): [True: 4.30k, False: 710k]
  ------------------
 1233|  9.39k|    case NETDEV_F_100GB_FD:   return "100GB-FD";
  ------------------
  |  Branch (1233:5): [True: 9.39k, False: 705k]
  ------------------
 1234|  5.85k|    case NETDEV_F_1TB_FD:     return "1TB-FD";
  ------------------
  |  Branch (1234:5): [True: 5.85k, False: 708k]
  ------------------
 1235|  8.58k|    case NETDEV_F_OTHER:      return "OTHER";
  ------------------
  |  Branch (1235:5): [True: 8.58k, False: 705k]
  ------------------
 1236|  51.5k|    case NETDEV_F_COPPER:     return "COPPER";
  ------------------
  |  Branch (1236:5): [True: 51.5k, False: 662k]
  ------------------
 1237|  56.9k|    case NETDEV_F_FIBER:      return "FIBER";
  ------------------
  |  Branch (1237:5): [True: 56.9k, False: 657k]
  ------------------
 1238|  53.4k|    case NETDEV_F_AUTONEG:    return "AUTO_NEG";
  ------------------
  |  Branch (1238:5): [True: 53.4k, False: 661k]
  ------------------
 1239|  55.6k|    case NETDEV_F_PAUSE:      return "AUTO_PAUSE";
  ------------------
  |  Branch (1239:5): [True: 55.6k, False: 658k]
  ------------------
 1240|  55.9k|    case NETDEV_F_PAUSE_ASYM: return "AUTO_PAUSE_ASYM";
  ------------------
  |  Branch (1240:5): [True: 55.9k, False: 658k]
  ------------------
 1241|   714k|    }
 1242|       |
 1243|      0|    return NULL;
 1244|   714k|}

mf_nxm_header:
  231|  6.84k|{
  232|  6.84k|    uint64_t oxm = mf_oxm_header(id, 0);
  233|  6.84k|    return is_experimenter_oxm(oxm) ? 0 : oxm >> 32;
  ------------------
  |  Branch (233:12): [True: 0, False: 6.84k]
  ------------------
  234|  6.84k|}
mf_from_nxm_header:
  271|   107k|{
  272|   107k|    return mf_from_oxm_header((uint64_t) header << 32, vl_mff_map, false, NULL);
  273|   107k|}
nx_pull_entry:
  465|  26.3k|{
  466|  26.3k|    uint64_t header;
  467|       |
  468|  26.3k|    return nx_pull_entry__(b, false, vl_mff_map, &header, field, value, mask, is_action);
  469|  26.3k|}
nx_pull_header:
  484|   106k|{
  485|   106k|    enum ofperr error;
  486|   106k|    uint64_t header;
  487|       |
  488|   106k|    error = nx_pull_header__(b, false, vl_mff_map,  &header, field, false);
  489|   106k|    if (masked) {
  ------------------
  |  Branch (489:9): [True: 88.2k, False: 18.4k]
  ------------------
  490|  88.2k|        *masked = !error && nxm_hasmask(header);
  ------------------
  |  Branch (490:19): [True: 1.67k, False: 86.5k]
  |  Branch (490:29): [True: 1.38k, False: 293]
  ------------------
  491|  88.2k|    } else if (!error && nxm_hasmask(header)) {
  ------------------
  |  Branch (491:16): [True: 15.7k, False: 2.74k]
  |  Branch (491:26): [True: 117, False: 15.6k]
  ------------------
  492|    117|        error = OFPERR_OFPBMC_BAD_MASK;
  493|    117|    }
  494|   106k|    return error;
  495|   106k|}
nx_pull_match:
  639|  38.4k|{
  640|  38.4k|    return nx_pull_match__(b, match_len, true, pipeline_fields_only, match,
  641|  38.4k|                           cookie, cookie_mask, tun_table, vl_mff_map);
  642|  38.4k|}
nx_pull_match_loose:
  652|  7.06k|{
  653|  7.06k|    return nx_pull_match__(b, match_len, false, pipeline_fields_only, match,
  654|  7.06k|                           cookie, cookie_mask, tun_table, NULL);
  655|  7.06k|}
oxm_pull_match:
  709|   101k|{
  710|   101k|    return oxm_pull_match__(b, true, pipeline_fields_only, tun_table,
  711|   101k|                            vl_mff_map, match);
  712|   101k|}
oxm_pull_match_loose:
  720|   257k|{
  721|   257k|    return oxm_pull_match__(b, false, pipeline_fields_only, tun_table, NULL,
  722|   257k|                            match);
  723|   257k|}
oxm_decode_match:
  737|  17.7k|{
  738|  17.7k|    return nx_pull_raw(oxm, oxm_len, !loose, false, match, NULL, NULL,
  739|  17.7k|                       tun_table, vl_mff_map);
  740|  17.7k|}
oxm_pull_field_array:
  747|  25.7k|{
  748|  25.7k|    struct ofpbuf b = ofpbuf_const_initializer(fields_data, fields_len);
  749|  72.3k|    while (b.size) {
  ------------------
  |  Branch (749:12): [True: 56.9k, False: 15.3k]
  ------------------
  750|  56.9k|        const uint8_t *pos = b.data;
  751|  56.9k|        const struct mf_field *field;
  752|  56.9k|        union mf_value value;
  753|  56.9k|        enum ofperr error;
  754|  56.9k|        uint64_t header;
  755|       |
  756|  56.9k|        error = nx_pull_entry__(&b, false, NULL, &header, &field, &value,
  757|  56.9k|                                NULL, false);
  758|  56.9k|        if (error) {
  ------------------
  |  Branch (758:13): [True: 9.17k, False: 47.7k]
  ------------------
  759|  9.17k|            VLOG_DBG_RL(&rl, "error pulling field array field");
  ------------------
  |  |  225|  9.17k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  9.17k|    do {                                                                \
  |  |  |  |  287|  9.17k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  9.17k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 9.17k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  9.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  760|  47.7k|        } else if (!field) {
  ------------------
  |  Branch (760:20): [True: 0, False: 47.7k]
  ------------------
  761|      0|            VLOG_DBG_RL(&rl, "unknown field array field");
  ------------------
  |  |  225|      0|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  762|      0|            error = OFPERR_OFPBMC_BAD_FIELD;
  763|  47.7k|        } else if (bitmap_is_set(fa->used.bm, field->id)) {
  ------------------
  |  Branch (763:20): [True: 18, False: 47.7k]
  ------------------
  764|     18|            VLOG_DBG_RL(&rl, "duplicate field array field '%s'", field->name);
  ------------------
  |  |  225|     18|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     18|    do {                                                                \
  |  |  |  |  287|     18|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     18|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     18|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|     18|            error = OFPERR_OFPBMC_DUP_FIELD;
  766|  47.7k|        } else if (!mf_is_mask_valid(field, &value)) {
  ------------------
  |  Branch (766:20): [True: 1.14k, False: 46.6k]
  ------------------
  767|  1.14k|            VLOG_DBG_RL(&rl, "bad mask in field array field '%s'", field->name);
  ------------------
  |  |  225|  1.14k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.14k|    do {                                                                \
  |  |  |  |  287|  1.14k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.14k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.14k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  768|  1.14k|            error = OFPERR_OFPBMC_BAD_MASK;
  769|  46.6k|        } else {
  770|  46.6k|            field_array_set(field->id, &value, fa);
  771|  46.6k|        }
  772|       |
  773|  56.9k|        if (error) {
  ------------------
  |  Branch (773:13): [True: 10.3k, False: 46.6k]
  ------------------
  774|  10.3k|            const uint8_t *start = fields_data;
  775|       |
  776|  10.3k|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  225|  10.3k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  10.3k|    do {                                                                \
  |  |  |  |  287|  10.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  10.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10.3k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  10.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  777|  10.3k|                        "within field array (%s)", pos - start,
  778|  10.3k|                        ofperr_to_string(error));
  779|       |
  780|  10.3k|            free(fa->values);
  781|  10.3k|            fa->values = NULL;
  782|  10.3k|            return error;
  783|  10.3k|        }
  784|  56.9k|    }
  785|       |
  786|  15.3k|    return 0;
  787|  25.7k|}
oxm_format_field_array:
 1392|  15.3k|{
 1393|  15.3k|    size_t start_len = ds->length;
 1394|  15.3k|    size_t i, offset = 0;
 1395|       |
 1396|  38.5k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, fa->used.bm) {
  ------------------
  |  |  281|  15.3k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  53.8k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 38.5k, False: 15.3k]
  |  |  |  |  ------------------
  |  |  |  |  279|  38.5k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1397|  38.5k|        const struct mf_field *mf = mf_from_id(i);
 1398|  38.5k|        union mf_value value;
 1399|       |
 1400|  38.5k|        memcpy(&value, fa->values + offset, mf->n_bytes);
 1401|  38.5k|        nx_format_mask_tlv(ds, i, &value);
 1402|  38.5k|        offset += mf->n_bytes;
 1403|  38.5k|    }
 1404|       |
 1405|  15.3k|    if (ds->length > start_len) {
  ------------------
  |  Branch (1405:9): [True: 15.3k, False: 0]
  ------------------
 1406|  15.3k|        ds_chomp(ds, ',');
 1407|  15.3k|    }
 1408|  15.3k|}
nxm_format_reg_move:
 1818|    590|{
 1819|    590|    ds_put_format(s, "%smove:%s", colors.special, colors.end);
 1820|    590|    mf_format_subfield(&move->src, s);
 1821|    590|    ds_put_format(s, "%s->%s", colors.special, colors.end);
 1822|    590|    mf_format_subfield(&move->dst, s);
 1823|    590|}
nxm_reg_move_check:
 1829|  1.70k|{
 1830|  1.70k|    enum ofperr error;
 1831|       |
 1832|  1.70k|    error = mf_check_src(&move->src, match);
 1833|  1.70k|    if (error) {
  ------------------
  |  Branch (1833:9): [True: 523, False: 1.17k]
  ------------------
 1834|    523|        return error;
 1835|    523|    }
 1836|       |
 1837|  1.17k|    return mf_check_dst(&move->dst, match);
 1838|  1.70k|}
nxm_format_stack_push:
 1885|  4.79k|{
 1886|  4.79k|    ds_put_format(s, "%spush:%s", colors.param, colors.end);
 1887|  4.79k|    mf_format_subfield(&push->subfield, s);
 1888|  4.79k|}
nxm_format_stack_pop:
 1892|    510|{
 1893|    510|    ds_put_format(s, "%spop:%s", colors.param, colors.end);
 1894|    510|    mf_format_subfield(&pop->subfield, s);
 1895|    510|}
nxm_stack_push_check:
 1900|  13.2k|{
 1901|  13.2k|    return mf_check_src(&push->subfield, match);
 1902|  13.2k|}
nxm_stack_pop_check:
 1907|  1.39k|{
 1908|  1.39k|    return mf_check_dst(&pop->subfield, match);
 1909|  1.39k|}
nx_stack_push_bottom:
 1935|  2.07k|{
 1936|  2.07k|    ofpbuf_push(stack, &bytes, sizeof bytes);
 1937|  2.07k|    ofpbuf_push(stack, v, bytes);
 1938|  2.07k|}
nx_stack_pop:
 1945|  1.96k|{
 1946|  1.96k|    if (!stack->size) {
  ------------------
  |  Branch (1946:9): [True: 0, False: 1.96k]
  ------------------
 1947|      0|        *bytes = 0;
 1948|      0|        return NULL;
 1949|      0|    }
 1950|       |
 1951|  1.96k|    stack->size -= sizeof *bytes;
 1952|  1.96k|    memcpy(bytes, ofpbuf_tail(stack), sizeof *bytes);
 1953|       |
 1954|  1.96k|    ovs_assert(stack->size >= *bytes);
  ------------------
  |  |   58|  1.96k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1955|  1.96k|    stack->size -= *bytes;
 1956|  1.96k|    return ofpbuf_tail(stack);
 1957|  1.96k|}
mf_format_subfield:
 2025|  70.3k|{
 2026|  70.3k|    if (!sf->field) {
  ------------------
  |  Branch (2026:9): [True: 0, False: 70.3k]
  ------------------
 2027|      0|        ds_put_cstr(s, "<unknown>");
 2028|  70.3k|    } else {
 2029|  70.3k|        const struct nxm_field *f = nxm_field_by_mf_id(sf->field->id, 0);
 2030|  70.3k|        ds_put_cstr(s, f ? f->name : sf->field->name);
  ------------------
  |  Branch (2030:24): [True: 70.3k, False: 0]
  ------------------
 2031|  70.3k|    }
 2032|       |
 2033|  70.3k|    if (sf->field && sf->ofs == 0 && sf->n_bits == sf->field->n_bits) {
  ------------------
  |  Branch (2033:9): [True: 70.3k, False: 0]
  |  Branch (2033:22): [True: 29.1k, False: 41.1k]
  |  Branch (2033:38): [True: 5.91k, False: 23.2k]
  ------------------
 2034|  5.91k|        ds_put_cstr(s, "[]");
 2035|  64.3k|    } else if (sf->n_bits == 1) {
  ------------------
  |  Branch (2035:16): [True: 6.88k, False: 57.5k]
  ------------------
 2036|  6.88k|        ds_put_format(s, "[%d]", sf->ofs);
 2037|  57.5k|    } else {
 2038|  57.5k|        ds_put_format(s, "[%d..%d]", sf->ofs, sf->ofs + sf->n_bits - 1);
 2039|  57.5k|    }
 2040|  70.3k|}
oxm_bitmap_to_mf_bitmap:
 2170|  75.4k|{
 2171|  75.4k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 1970|  75.4k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2172|       |
 2173|  13.8M|    for (enum mf_field_id id = 0; id < MFF_N_IDS; id++) {
  ------------------
  |  Branch (2173:35): [True: 13.8M, False: 75.4k]
  ------------------
 2174|  13.8M|        uint64_t oxm = mf_oxm_header(id, version);
 2175|  13.8M|        if (oxm && version >= nxm_field_by_header(oxm, false, NULL)->version) {
  ------------------
  |  Branch (2175:13): [True: 13.4M, False: 377k]
  |  Branch (2175:20): [True: 12.6M, False: 830k]
  ------------------
 2176|  12.6M|            uint32_t class = nxm_class(oxm);
 2177|  12.6M|            int field = nxm_field(oxm);
 2178|       |
 2179|  12.6M|            if (class == OFPXMC12_OPENFLOW_BASIC
  ------------------
  |  Branch (2179:17): [True: 2.64M, False: 9.96M]
  ------------------
 2180|  12.6M|                && field < 64
  ------------------
  |  Branch (2180:20): [True: 2.64M, False: 0]
  ------------------
 2181|  12.6M|                && oxm_bitmap & htonll(UINT64_C(1) << field)) {
  ------------------
  |  Branch (2181:20): [True: 875k, False: 1.76M]
  ------------------
 2182|   875k|                bitmap_set1(fields.bm, id);
 2183|   875k|            }
 2184|  12.6M|        }
 2185|  13.8M|    }
 2186|  75.4k|    return fields;
 2187|  75.4k|}
nx-match.c:mf_oxm_header:
  218|  13.8M|{
  219|  13.8M|    const struct nxm_field *f = nxm_field_by_mf_id(id, version);
  220|  13.8M|    return f ? f->header : 0;
  ------------------
  |  Branch (220:12): [True: 13.4M, False: 377k]
  ------------------
  221|  13.8M|}
nx-match.c:is_experimenter_oxm:
  108|  5.48M|{
  109|  5.48M|    return nxm_class(header) == OFPXMC12_EXPERIMENTER;
  110|  5.48M|}
nx-match.c:nxm_no_len:
  104|  40.4M|static uint64_t nxm_no_len(uint64_t header) { return header & 0xffffff80ffffffffULL; }
nx-match.c:mf_from_oxm_header:
  255|  1.03M|{
  256|  1.03M|    const struct nxm_field *f = nxm_field_by_header(header, is_action, h_error);
  257|       |
  258|  1.03M|    if (f) {
  ------------------
  |  Branch (258:9): [True: 590k, False: 446k]
  ------------------
  259|   590k|        const struct mf_field *mff = mf_from_id(f->id);
  260|   590k|        const struct mf_field *vl_mff = mf_get_vl_mff(mff, vl_mff_map);
  261|   590k|        return vl_mff ? vl_mff : mff;
  ------------------
  |  Branch (261:16): [True: 0, False: 590k]
  ------------------
  262|   590k|    } else {
  263|   446k|        return NULL;
  264|   446k|    }
  265|  1.03M|}
nx-match.c:nx_pull_entry__:
  395|   851k|{
  396|   851k|    const struct mf_field *field;
  397|   851k|    enum ofperr header_error;
  398|   851k|    unsigned int payload_len;
  399|   851k|    const uint8_t *payload;
  400|   851k|    int width;
  401|       |
  402|   851k|    header_error = nx_pull_header__(b, allow_cookie, vl_mff_map, header,
  403|   851k|                                    &field, is_action);
  404|   851k|    if (header_error && header_error != OFPERR_OFPBMC_BAD_FIELD) {
  ------------------
  |  Branch (404:9): [True: 373k, False: 477k]
  |  Branch (404:25): [True: 31.5k, False: 341k]
  ------------------
  405|  31.5k|        return header_error;
  406|  31.5k|    }
  407|       |
  408|   819k|    payload_len = nxm_payload_len(*header);
  409|   819k|    payload = ofpbuf_try_pull(b, payload_len);
  410|   819k|    if (!payload) {
  ------------------
  |  Branch (410:9): [True: 62.7k, False: 756k]
  ------------------
  411|  62.7k|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" calls for %u-byte "
  ------------------
  |  |  225|  62.7k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  62.7k|    do {                                                                \
  |  |  |  |  287|  62.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  62.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 62.7k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  62.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  412|  62.7k|                    "payload but only %"PRIu32" bytes follow OXM header",
  413|  62.7k|                    NXM_HEADER_ARGS(*header), payload_len, b->size);
  414|  62.7k|        return OFPERR_OFPBMC_BAD_LEN;
  415|  62.7k|    }
  416|       |
  417|   756k|    width = nxm_field_bytes(*header);
  418|   756k|    if (nxm_hasmask(*header)
  ------------------
  |  Branch (418:9): [True: 318k, False: 437k]
  ------------------
  419|   756k|        && !is_mask_consistent(*header, payload, payload + width)) {
  ------------------
  |  Branch (419:12): [True: 21.1k, False: 297k]
  ------------------
  420|  21.1k|        return OFPERR_OFPBMC_BAD_WILDCARDS;
  421|  21.1k|    }
  422|       |
  423|   735k|    copy_entry_value(field, value, payload, width);
  424|       |
  425|   735k|    if (mask) {
  ------------------
  |  Branch (425:9): [True: 674k, False: 61.5k]
  ------------------
  426|   674k|        if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (426:13): [True: 295k, False: 378k]
  ------------------
  427|   295k|            copy_entry_value(field, mask, payload + width, width);
  428|   378k|        } else {
  429|   378k|            memset(mask, 0xff, sizeof *mask);
  430|   378k|        }
  431|   674k|    } else if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (431:16): [True: 2.22k, False: 59.2k]
  ------------------
  432|  2.22k|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" includes mask but "
  ------------------
  |  |  225|  2.22k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.22k|    do {                                                                \
  |  |  |  |  287|  2.22k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.22k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|  2.22k|                    "masked OXMs are not allowed here",
  434|  2.22k|                    NXM_HEADER_ARGS(*header));
  435|  2.22k|        return OFPERR_OFPBMC_BAD_MASK;
  436|  2.22k|    }
  437|       |
  438|   733k|    if (field_) {
  ------------------
  |  Branch (438:9): [True: 733k, False: 0]
  ------------------
  439|   733k|        *field_ = field;
  440|   733k|        return header_error;
  441|   733k|    }
  442|       |
  443|      0|    return 0;
  444|   733k|}
nx-match.c:nxm_payload_len:
  136|  2.29M|{
  137|  2.29M|    return nxm_length(header) - nxm_experimenter_len(header);
  138|  2.29M|}
nx-match.c:nxm_experimenter_len:
  128|  4.54M|{
  129|  4.54M|    return is_experimenter_oxm(header) ? 4 : 0;
  ------------------
  |  Branch (129:12): [True: 165k, False: 4.38M]
  ------------------
  130|  4.54M|}
nx-match.c:nxm_vendor:
   99|   395k|static uint32_t nxm_vendor(uint64_t header) { return header; }
nx-match.c:nxm_length:
  103|  31.6M|static int nxm_length(uint64_t header) { return (header >> 32) & 0xff; }
nx-match.c:is_mask_consistent:
  291|   318k|{
  292|   318k|    unsigned int width = nxm_field_bytes(header);
  293|   318k|    unsigned int i;
  294|       |
  295|  1.00M|    for (i = 0; i < width; i++) {
  ------------------
  |  Branch (295:17): [True: 709k, False: 297k]
  ------------------
  296|   709k|        if (value[i] & ~mask[i]) {
  ------------------
  |  Branch (296:13): [True: 21.1k, False: 688k]
  ------------------
  297|  21.1k|            if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  233|  21.1k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (297:17): [True: 0, False: 21.1k]
  ------------------
  298|      0|                VLOG_WARN_RL(&rl, "Rejecting NXM/OXM entry "NXM_HEADER_FMT " "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  299|      0|                             "with 1-bits in value for bits wildcarded by the "
  300|      0|                             "mask.", NXM_HEADER_ARGS(header));
  301|      0|            }
  302|  21.1k|            return false;
  303|  21.1k|        }
  304|   709k|    }
  305|   297k|    return true;
  306|   318k|}
nx-match.c:copy_entry_value:
  375|  1.03M|{
  376|  1.03M|    int copy_len;
  377|  1.03M|    void *copy_dst;
  378|       |
  379|  1.03M|    copy_dst = value;
  380|  1.03M|    copy_len = MIN(width, field ? field->n_bytes : sizeof *value);
  ------------------
  |  |   96|  2.06M|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 722k, False: 308k]
  |  |  |  Branch (96:27): [True: 676k, False: 354k]
  |  |  |  Branch (96:39): [True: 308k, False: 201]
  |  |  ------------------
  ------------------
  381|       |
  382|  1.03M|    if (field && field->variable_len) {
  ------------------
  |  Branch (382:9): [True: 676k, False: 354k]
  |  Branch (382:18): [True: 368k, False: 308k]
  ------------------
  383|   368k|        memset(value, 0, field->n_bytes);
  384|   368k|        copy_dst = &value->u8 + field->n_bytes - copy_len;
  385|   368k|    }
  386|       |
  387|  1.03M|    memcpy(copy_dst, payload, copy_len);
  388|  1.03M|}
nx-match.c:nx_pull_header__:
  318|   957k|{
  319|   957k|    if (b->size < 4) {
  ------------------
  |  Branch (319:9): [True: 24.4k, False: 933k]
  ------------------
  320|  24.4k|        goto bad_len;
  321|  24.4k|    }
  322|       |
  323|   933k|    *header = ((uint64_t) ntohl(get_unaligned_be32(b->data))) << 32;
  324|   933k|    if (is_experimenter_oxm(*header)) {
  ------------------
  |  Branch (324:9): [True: 30.5k, False: 902k]
  ------------------
  325|  30.5k|        if (b->size < 8) {
  ------------------
  |  Branch (325:13): [True: 357, False: 30.1k]
  ------------------
  326|    357|            goto bad_len;
  327|    357|        }
  328|  30.1k|        *header = ntohll(get_unaligned_be64(b->data));
  329|  30.1k|    }
  330|   933k|    if (nxm_length(*header) < nxm_experimenter_len(*header)) {
  ------------------
  |  Branch (330:9): [True: 3.78k, False: 929k]
  ------------------
  331|  3.78k|        VLOG_WARN_RL(&rl, "OXM header "NXM_HEADER_FMT" has invalid length %d "
  ------------------
  |  |  223|  3.78k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  3.78k|    do {                                                                \
  |  |  |  |  287|  3.78k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  3.78k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 3.78k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  3.78k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  332|  3.78k|                     "(minimum is %d)",
  333|  3.78k|                     NXM_HEADER_ARGS(*header), nxm_length(*header),
  334|  3.78k|                     nxm_header_len(*header));
  335|  3.78k|        goto error;
  336|  3.78k|    }
  337|   929k|    ofpbuf_pull(b, nxm_header_len(*header));
  338|       |
  339|   929k|    if (field) {
  ------------------
  |  Branch (339:9): [True: 929k, False: 0]
  ------------------
  340|   929k|        enum ofperr h_error = 0;
  341|   929k|        *field = mf_from_oxm_header(*header, vl_mff_map, is_action, &h_error);
  342|   929k|        if (!*field && !(allow_cookie && is_cookie_pseudoheader(*header))) {
  ------------------
  |  Branch (342:13): [True: 433k, False: 495k]
  |  Branch (342:26): [True: 805, False: 433k]
  |  Branch (342:42): [True: 110, False: 695]
  ------------------
  343|   433k|            VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" is unknown",
  ------------------
  |  |  225|   433k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|   433k|    do {                                                                \
  |  |  |  |  287|   433k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|   433k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 433k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|   433k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  344|   433k|                        NXM_HEADER_ARGS(*header));
  345|   433k|            if (is_action) {
  ------------------
  |  Branch (345:17): [True: 3.71k, False: 430k]
  ------------------
  346|  3.71k|                if (h_error) {
  ------------------
  |  Branch (346:21): [True: 2.62k, False: 1.08k]
  ------------------
  347|  2.62k|                     *field = NULL;
  348|  2.62k|                     return h_error;
  349|  2.62k|                }
  350|  1.08k|                return OFPERR_OFPBAC_BAD_SET_TYPE;
  351|   430k|            } else {
  352|   430k|                return OFPERR_OFPBMC_BAD_FIELD;
  353|   430k|            }
  354|   495k|        } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (354:20): [True: 0, False: 495k]
  ------------------
  355|      0|            return OFPERR_NXFMFC_INVALID_TLV_FIELD;
  356|      0|        }
  357|   929k|    }
  358|       |
  359|   495k|    return 0;
  360|       |
  361|  24.7k|bad_len:
  362|  24.7k|    VLOG_DBG_RL(&rl, "encountered partial (%"PRIu32"-byte) OXM entry",
  ------------------
  |  |  225|  24.7k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  24.7k|    do {                                                                \
  |  |  |  |  287|  24.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  24.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 24.7k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  24.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  363|  24.7k|                b->size);
  364|  28.5k|error:
  365|  28.5k|    *header = 0;
  366|  28.5k|    if (field) {
  ------------------
  |  Branch (366:9): [True: 28.5k, False: 0]
  ------------------
  367|  28.5k|        *field = NULL;
  368|  28.5k|    }
  369|  28.5k|    return OFPERR_OFPBMC_BAD_LEN;
  370|  24.7k|}
nx-match.c:nxm_header_len:
  144|   929k|{
  145|   929k|    return 4 + nxm_experimenter_len(header);
  146|   929k|}
nx-match.c:is_cookie_pseudoheader:
  310|    805|{
  311|    805|    return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  184|    805|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  ------------------
  |  |  |  |  149|  1.61k|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  150|  1.61k|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  151|  1.61k|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  152|  1.61k|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  153|  1.61k|     (VENDOR))
  |  |  ------------------
  ------------------
                  return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  185|  1.57k|#define NXM_NX_COOKIE_W   nxm_make_wild_header(NXM_NX_COOKIE)
  |  |  ------------------
  |  |  |  |  184|    774|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  149|    774|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  |  |  150|    774|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  |  |  151|    774|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  |  |  152|    774|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  |  |  153|    774|     (VENDOR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (311:12): [True: 31, False: 774]
  |  Branch (311:39): [True: 79, False: 695]
  ------------------
  312|    805|}
nx-match.c:nxm_make_wild_header:
  171|    774|{
  172|    774|    int new_len = nxm_payload_len(header) * 2 + nxm_experimenter_len(header);
  173|    774|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  149|    774|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  150|    774|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  151|    774|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  152|    774|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  153|    774|     (VENDOR))
  ------------------
  174|    774|                      nxm_field(header), 1, new_len);
  175|    774|}
nx-match.c:nxm_hasmask:
  102|  17.0M|static bool nxm_hasmask(uint64_t header) { return (header >> 40) & 1; }
nx-match.c:nx_pull_match__:
  602|  45.5k|{
  603|  45.5k|    uint8_t *p = NULL;
  604|       |
  605|  45.5k|    if (match_len) {
  ------------------
  |  Branch (605:9): [True: 21.0k, False: 24.5k]
  ------------------
  606|  21.0k|        p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  299|  21.0k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  21.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  607|  21.0k|        if (!p) {
  ------------------
  |  Branch (607:13): [True: 15.2k, False: 5.75k]
  ------------------
  608|  15.2k|            VLOG_DBG_RL(&rl, "nx_match length %u, rounded up to a "
  ------------------
  |  |  225|  15.2k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  15.2k|    do {                                                                \
  |  |  |  |  287|  15.2k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  15.2k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 15.2k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  15.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  609|  15.2k|                        "multiple of 8, is longer than space in message (max "
  610|  15.2k|                        "length %"PRIu32")", match_len, b->size);
  611|  15.2k|            return OFPERR_OFPBMC_BAD_LEN;
  612|  15.2k|        }
  613|  21.0k|    }
  614|       |
  615|  30.2k|    return nx_pull_raw(p, match_len, strict, pipeline_fields_only, match,
  616|  30.2k|                       cookie, cookie_mask, tun_table, vl_mff_map);
  617|  45.5k|}
nx-match.c:oxm_pull_match__:
  661|   358k|{
  662|   358k|    struct ofp11_match_header *omh = b->data;
  663|   358k|    uint8_t *p;
  664|   358k|    uint16_t match_len;
  665|       |
  666|   358k|    if (b->size < sizeof *omh) {
  ------------------
  |  Branch (666:9): [True: 2.25k, False: 356k]
  ------------------
  667|  2.25k|        return OFPERR_OFPBMC_BAD_LEN;
  668|  2.25k|    }
  669|       |
  670|   356k|    match_len = ntohs(omh->length);
  671|   356k|    if (match_len < sizeof *omh) {
  ------------------
  |  Branch (671:9): [True: 10.9k, False: 345k]
  ------------------
  672|  10.9k|        return OFPERR_OFPBMC_BAD_LEN;
  673|  10.9k|    }
  674|       |
  675|   345k|    if (omh->type != htons(OFPMT_OXM)) {
  ------------------
  |  Branch (675:9): [True: 23.5k, False: 322k]
  ------------------
  676|  23.5k|        return OFPERR_OFPBMC_BAD_TYPE;
  677|  23.5k|    }
  678|       |
  679|   322k|    p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  299|   322k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|   322k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  680|   322k|    if (!p) {
  ------------------
  |  Branch (680:9): [True: 10.8k, False: 311k]
  ------------------
  681|  10.8k|        VLOG_DBG_RL(&rl, "oxm length %u, rounded up to a "
  ------------------
  |  |  225|  10.8k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  10.8k|    do {                                                                \
  |  |  |  |  287|  10.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  10.8k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10.8k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  10.8k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  682|  10.8k|                    "multiple of 8, is longer than space in message (max "
  683|  10.8k|                    "length %"PRIu32")", match_len, b->size);
  684|  10.8k|        return OFPERR_OFPBMC_BAD_LEN;
  685|  10.8k|    }
  686|       |
  687|   311k|    return nx_pull_raw(p + sizeof *omh, match_len - sizeof *omh,
  688|   311k|                       strict, pipeline_fields_only, match, NULL, NULL,
  689|   311k|                       tun_table, vl_mff_map);
  690|   322k|}
nx-match.c:nx_pull_raw:
  532|   359k|{
  533|   359k|    ovs_assert((cookie != NULL) == (cookie_mask != NULL));
  ------------------
  |  |   58|   359k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  534|       |
  535|   359k|    match_init_catchall(match);
  536|   359k|    match->flow.tunnel.metadata.tab = tun_table;
  537|   359k|    if (cookie) {
  ------------------
  |  Branch (537:9): [True: 6.48k, False: 352k]
  ------------------
  538|  6.48k|        *cookie = *cookie_mask = htonll(0);
  539|  6.48k|    }
  540|       |
  541|   359k|    struct ofpbuf b = ofpbuf_const_initializer(p, match_len);
  542|  1.00M|    while (b.size) {
  ------------------
  |  Branch (542:12): [True: 767k, False: 232k]
  ------------------
  543|   767k|        const uint8_t *pos = b.data;
  544|   767k|        const struct mf_field *field;
  545|   767k|        union mf_value value;
  546|   767k|        union mf_value mask;
  547|   767k|        enum ofperr error;
  548|       |
  549|   767k|        error = nx_pull_match_entry(&b, cookie != NULL, vl_mff_map, &field,
  550|   767k|                                    &value, &mask);
  551|   767k|        if (error) {
  ------------------
  |  Branch (551:13): [True: 386k, False: 380k]
  ------------------
  552|   386k|            if (error == OFPERR_OFPBMC_BAD_FIELD && !strict) {
  ------------------
  |  Branch (552:17): [True: 282k, False: 104k]
  |  Branch (552:53): [True: 281k, False: 1.14k]
  ------------------
  553|   281k|                continue;
  554|   281k|            }
  555|   386k|        } else if (!field) {
  ------------------
  |  Branch (555:20): [True: 97, False: 380k]
  ------------------
  556|     97|            if (!cookie) {
  ------------------
  |  Branch (556:17): [True: 0, False: 97]
  ------------------
  557|      0|                error = OFPERR_OFPBMC_BAD_FIELD;
  558|     97|            } else if (*cookie_mask) {
  ------------------
  |  Branch (558:24): [True: 1, False: 96]
  ------------------
  559|      1|                error = OFPERR_OFPBMC_DUP_FIELD;
  560|     96|            } else {
  561|     96|                *cookie = value.be64;
  562|     96|                *cookie_mask = mask.be64;
  563|     96|            }
  564|   380k|        } else if (strict && !mf_are_match_prereqs_ok(field, match)) {
  ------------------
  |  Branch (564:20): [True: 21.7k, False: 359k]
  |  Branch (564:30): [True: 2.64k, False: 19.0k]
  ------------------
  565|  2.64k|            error = OFPERR_OFPBMC_BAD_PREREQ;
  566|   378k|        } else if (!mf_is_all_wild(field, &match->wc)) {
  ------------------
  |  Branch (566:20): [True: 8.32k, False: 369k]
  ------------------
  567|  8.32k|            error = OFPERR_OFPBMC_DUP_FIELD;
  568|   369k|        } else if (pipeline_fields_only && !mf_is_pipeline_field(field)) {
  ------------------
  |  Branch (568:20): [True: 205k, False: 164k]
  |  Branch (568:44): [True: 9.68k, False: 195k]
  ------------------
  569|  9.68k|            error = OFPERR_OFPBRC_PIPELINE_FIELDS_ONLY;
  570|   360k|        } else {
  571|   360k|            char *err_str;
  572|       |
  573|   360k|            mf_set(field, &value, &mask, match, &err_str);
  574|   360k|            if (err_str) {
  ------------------
  |  Branch (574:17): [True: 0, False: 360k]
  ------------------
  575|      0|                VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  225|      0|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  576|      0|                           "within match (%s)", pos - p, err_str);
  577|      0|                free(err_str);
  578|      0|                return OFPERR_OFPBMC_BAD_VALUE;
  579|      0|            }
  580|       |
  581|   360k|            match_add_ethernet_prereq(match, field);
  582|   360k|        }
  583|       |
  584|   486k|        if (error) {
  ------------------
  |  Branch (584:13): [True: 126k, False: 360k]
  ------------------
  585|   126k|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  225|   126k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|   126k|    do {                                                                \
  |  |  |  |  287|   126k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|   126k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 126k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|   126k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  586|   126k|                        "within match (%s)", pos -
  587|   126k|                        p, ofperr_to_string(error));
  588|   126k|            return error;
  589|   126k|        }
  590|   486k|    }
  591|       |
  592|   232k|    match->flow.tunnel.metadata.tab = NULL;
  593|   232k|    return 0;
  594|   359k|}
nx-match.c:nx_pull_match_entry:
  502|   767k|{
  503|   767k|    enum ofperr error;
  504|   767k|    uint64_t header;
  505|       |
  506|   767k|    error = nx_pull_entry__(b, allow_cookie, vl_mff_map, &header, field, value,
  507|   767k|                            mask, false);
  508|   767k|    if (error) {
  ------------------
  |  Branch (508:9): [True: 384k, False: 383k]
  ------------------
  509|   384k|        return error;
  510|   384k|    }
  511|   383k|    if (field && *field) {
  ------------------
  |  Branch (511:9): [True: 383k, False: 0]
  |  Branch (511:18): [True: 383k, False: 97]
  ------------------
  512|   383k|        if (!mf_is_mask_valid(*field, mask)) {
  ------------------
  |  Branch (512:13): [True: 2.34k, False: 381k]
  ------------------
  513|  2.34k|            VLOG_DBG_RL(&rl, "bad mask for field %s", (*field)->name);
  ------------------
  |  |  225|  2.34k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.34k|    do {                                                                \
  |  |  |  |  287|  2.34k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.34k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  514|  2.34k|            return OFPERR_OFPBMC_BAD_MASK;
  515|  2.34k|        }
  516|   381k|        if (!mf_is_value_valid(*field, value)) {
  ------------------
  |  Branch (516:13): [True: 351, False: 380k]
  ------------------
  517|    351|            VLOG_DBG_RL(&rl, "bad value for field %s", (*field)->name);
  ------------------
  |  |  225|    351|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    351|    do {                                                                \
  |  |  |  |  287|    351|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    351|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 351]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    351|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  518|    351|            return OFPERR_OFPBMC_BAD_VALUE;
  519|    351|        }
  520|   381k|    }
  521|   380k|    return 0;
  522|   383k|}
nx-match.c:nx_format_mask_tlv:
 1374|  38.5k|{
 1375|  38.5k|    const struct mf_field *mf = mf_from_id(id);
 1376|       |
 1377|  38.5k|    ds_put_format(ds, "%s", mf->name);
 1378|       |
 1379|  38.5k|    if (!is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (1379:9): [True: 38.0k, False: 531]
  ------------------
 1380|  38.0k|        ds_put_char(ds, '=');
 1381|  38.0k|        mf_format(mf, mask, NULL, NULL, ds);
 1382|  38.0k|    }
 1383|       |
 1384|  38.5k|    ds_put_char(ds, ',');
 1385|  38.5k|}
nx-match.c:nxm_field_bytes:
  279|  1.07M|{
  280|  1.07M|    unsigned int length = nxm_payload_len(header);
  281|  1.07M|    return nxm_hasmask(header) ? length / 2 : length;
  ------------------
  |  Branch (281:12): [True: 637k, False: 437k]
  ------------------
  282|  1.07M|}
nx-match.c:nxm_class:
  100|  18.4M|static int nxm_class(uint64_t header) { return header >> 48; }
nx-match.c:nxm_field:
  101|  13.0M|static int nxm_field(uint64_t header) { return (header >> 41) & 0x7f; }
nx-match.c:nxm_field_by_header:
 2275|  14.4M|{
 2276|  14.4M|    const struct nxm_field_index *nfi;
 2277|  14.4M|    uint64_t header_no_len;
 2278|       |
 2279|  14.4M|    nxm_init();
 2280|  14.4M|    if (nxm_hasmask(header)) {
  ------------------
  |  Branch (2280:9): [True: 394k, False: 14.0M]
  ------------------
 2281|   394k|        header = nxm_make_exact_header(header);
 2282|   394k|    }
 2283|       |
 2284|  14.4M|    header_no_len = nxm_no_len(header);
 2285|       |
 2286|  14.4M|    HMAP_FOR_EACH_IN_BUCKET (nfi, header_node, hash_uint64(header_no_len),
  ------------------
  |  |  144|  14.4M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_in_bucket(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  167|  14.4M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  14.4M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  14.4M|                       struct hmap_node);                                     \
  |  |  146|  26.3M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  181|  26.3M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 26.0M, False: 315k]
  |  |  |  |  |  Branch (181:6): [True: 26.0M, False: 315k]
  |  |  |  |  ------------------
  |  |  |  |  182|  26.3M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  26.0M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  26.0M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  26.0M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  26.3M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  147|  14.4M|         UPDATE_MULTIVAR(NODE, hmap_next_in_bucket(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  189|  11.8M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  11.8M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2287|  26.0M|                             &nxm_header_map) {
 2288|  26.0M|        if (is_action && nxm_length(header) > 0) {
  ------------------
  |  Branch (2288:13): [True: 59.7k, False: 25.9M]
  |  Branch (2288:26): [True: 40.1k, False: 19.6k]
  ------------------
 2289|  40.1k|            if (nxm_length(header) != nxm_length(nfi->nf.header) && h_error ) {
  ------------------
  |  Branch (2289:17): [True: 29.3k, False: 10.8k]
  |  Branch (2289:69): [True: 29.3k, False: 0]
  ------------------
 2290|  29.3k|               *h_error = OFPERR_OFPBAC_BAD_SET_LEN;
 2291|  29.3k|            }
 2292|  40.1k|        }
 2293|  26.0M|        if (header_no_len == nxm_no_len(nfi->nf.header)) {
  ------------------
  |  Branch (2293:13): [True: 14.1M, False: 11.8M]
  ------------------
 2294|  14.1M|            if (nxm_length(header) == nxm_length(nfi->nf.header) ||
  ------------------
  |  Branch (2294:17): [True: 13.7M, False: 436k]
  ------------------
 2295|  14.1M|                mf_from_id(nfi->nf.id)->variable_len) {
  ------------------
  |  Branch (2295:17): [True: 305k, False: 130k]
  ------------------
 2296|  14.0M|                return &nfi->nf;
 2297|  14.0M|            } else {
 2298|   130k|                return NULL;
 2299|   130k|            }
 2300|  14.1M|        }
 2301|  26.0M|    }
 2302|   315k|    return NULL;
 2303|  14.4M|}
nx-match.c:nxm_init:
 2252|  28.3M|{
 2253|  28.3M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  28.3M|    {                                           \
  |  |  135|  28.3M|        false,                                  \
  |  |  136|  28.3M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  28.3M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  28.3M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  28.3M|    }
  ------------------
 2254|  28.3M|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (2254:9): [True: 1, False: 28.3M]
  ------------------
 2255|      1|        hmap_init(&nxm_header_map);
 2256|      1|        hmap_init(&nxm_name_map);
 2257|    184|        for (int i = 0; i < MFF_N_IDS; i++) {
  ------------------
  |  Branch (2257:25): [True: 183, False: 1]
  ------------------
 2258|    183|            ovs_list_init(&nxm_mf_map[i]);
 2259|    183|        }
 2260|      1|        for (struct nxm_field_index *nfi = all_nxm_fields;
 2261|    210|             nfi < &all_nxm_fields[ARRAY_SIZE(all_nxm_fields)]; nfi++) {
  ------------------
  |  |  293|    210|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|    210|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    210|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|    210|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    210|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|    210|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2261:14): [True: 209, False: 1]
  ------------------
 2262|    209|            hmap_insert(&nxm_header_map, &nfi->header_node,
  ------------------
  |  |  101|    209|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    209|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    209|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    209|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2263|    209|                        hash_uint64(nxm_no_len(nfi->nf.header)));
 2264|    209|            hmap_insert(&nxm_name_map, &nfi->name_node,
  ------------------
  |  |  101|    209|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    209|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    209|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    209|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2265|    209|                        hash_string(nfi->nf.name, 0));
 2266|    209|            ovs_list_push_back(&nxm_mf_map[nfi->nf.id], &nfi->mf_node);
 2267|    209|        }
 2268|      1|        ovsthread_once_done(&once);
 2269|      1|    }
 2270|  28.3M|}
nx-match.c:nxm_make_exact_header:
  164|   394k|{
  165|   394k|    int new_len = nxm_payload_len(header) / 2 + nxm_experimenter_len(header);
  166|   394k|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  149|   394k|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  150|   394k|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  151|   394k|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  152|   394k|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  153|   394k|     (VENDOR))
  ------------------
  167|   394k|                      nxm_field(header), 0, new_len);
  168|   394k|}
nx-match.c:nxm_field_by_mf_id:
 2322|  13.8M|{
 2323|  13.8M|    const struct nxm_field_index *nfi;
 2324|  13.8M|    const struct nxm_field *f;
 2325|       |
 2326|  13.8M|    nxm_init();
 2327|       |
 2328|  13.8M|    f = NULL;
 2329|  15.8M|    LIST_FOR_EACH (nfi, mf_node, &nxm_mf_map[id]) {
  ------------------
  |  |   76|  13.8M|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  13.8M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  13.8M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  29.7M|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  29.7M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 15.8M, False: 13.8M]
  |  |  |  |  |  Branch (181:6): [True: 15.8M, False: 13.8M]
  |  |  |  |  ------------------
  |  |  |  |  182|  29.7M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  15.8M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  15.8M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  15.8M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  29.7M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  15.8M|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|  15.8M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  15.8M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2330|  15.8M|        if (!f || version >= nfi->nf.version) {
  ------------------
  |  Branch (2330:13): [True: 13.5M, False: 2.34M]
  |  Branch (2330:19): [True: 2.03M, False: 305k]
  ------------------
 2331|  15.5M|            f = &nfi->nf;
 2332|  15.5M|        }
 2333|  15.8M|    }
 2334|  13.8M|    return f;
 2335|  13.8M|}

ofp-actions.c:nxm_decode_ofs:
  167|  36.5k|{
  168|  36.5k|    return ntohs(ofs_nbits) >> 6;
  169|  36.5k|}
ofp-actions.c:nxm_decode_n_bits:
  173|  36.5k|{
  174|  36.5k|    return (ntohs(ofs_nbits) & 0x3f) + 1;
  175|  36.5k|}

ofpact_put_set_field:
 3393|  26.1k|{
 3394|       |    /* Ensure there's enough space for:
 3395|       |     * - value (8-byte aligned)
 3396|       |     * - mask  (8-byte aligned)
 3397|       |     * - padding (to make the whole ofpact_set_field 8-byte aligned)
 3398|       |     */
 3399|  26.1k|    size_t total_size = 2 * ROUND_UP(field->n_bytes, OFPACT_ALIGNTO);
  ------------------
  |  |  299|  26.1k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  26.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 3400|  26.1k|    struct ofpact_set_field *sf = ofpact_put_SET_FIELD(ofpacts);
 3401|  26.1k|    sf->field = field;
 3402|       |
 3403|       |    /* Fill in the value and mask if given, otherwise put zeroes so that the
 3404|       |     * caller may fill in the value and mask itself. */
 3405|  26.1k|    if (value) {
  ------------------
  |  Branch (3405:9): [True: 17.8k, False: 8.20k]
  ------------------
 3406|  17.8k|        ofpbuf_put_uninit(ofpacts, total_size);
 3407|  17.8k|        sf = ofpacts->header;
 3408|  17.8k|        memcpy(sf->value, value, field->n_bytes);
 3409|  17.8k|        if (mask) {
  ------------------
  |  Branch (3409:13): [True: 17.8k, False: 0]
  ------------------
 3410|  17.8k|            memcpy(ofpact_set_field_mask(sf), mask, field->n_bytes);
  ------------------
  |  |  563|  17.8k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|  17.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  17.8k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  17.8k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3411|  17.8k|        } else {
 3412|      0|            memset(ofpact_set_field_mask(sf), 0xff, field->n_bytes);
  ------------------
  |  |  563|      0|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|      0|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|      0|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3413|      0|        }
 3414|  17.8k|    } else {
 3415|  8.20k|        ofpbuf_put_zeros(ofpacts, total_size);
 3416|  8.20k|        sf = ofpacts->header;
 3417|  8.20k|    }
 3418|       |    /* Update length. */
 3419|  26.1k|    ofpact_finish_SET_FIELD(ofpacts, &sf);
 3420|       |
 3421|  26.1k|    return sf;
 3422|  26.1k|}
ofpact_put_reg_load:
 3432|  8.20k|{
 3433|  8.20k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3434|  8.20k|                                                       mask);
 3435|  8.20k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD;
 3436|       |
 3437|  8.20k|    return sf;
 3438|  8.20k|}
ofpact_put_reg_load2:
 3443|  8.25k|{
 3444|  8.25k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3445|  8.25k|                                                       mask);
 3446|  8.25k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD2;
 3447|       |
 3448|  8.25k|    return sf;
 3449|  8.25k|}
ofpacts_pull_openflow_actions:
 7930|   245k|{
 7931|   245k|    return ofpacts_pull_openflow_actions__(
 7932|   245k|        openflow, actions_len, version,
 7933|   245k|        (1u << OVSINST_OFPIT11_APPLY_ACTIONS) | (1u << OVSINST_OFPIT13_METER),
 7934|   245k|        ofpacts, 0, vl_mff_map, ofpacts_tlv_bitmap);
 7935|   245k|}
ovs_instruction_name_from_type:
 8172|  26.3k|{
 8173|  26.3k|    return type < ARRAY_SIZE(inst_info) ? inst_info[type].name : NULL;
  ------------------
  |  |  293|  26.3k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|  26.3k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  26.3k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|  26.3k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  26.3k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  26.3k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8173:12): [True: 26.3k, False: 0]
  ------------------
 8174|  26.3k|}
ovs_instruction_type_from_ofpact_type:
 8191|   385k|{
 8192|   385k|    switch (type) {
 8193|  11.5k|    case OFPACT_METER:
  ------------------
  |  Branch (8193:5): [True: 11.5k, False: 374k]
  ------------------
 8194|  11.5k|        return (version >= OFP15_VERSION
  ------------------
  |  Branch (8194:17): [True: 11.2k, False: 352]
  ------------------
 8195|  11.5k|                ? OVSINST_OFPIT11_APPLY_ACTIONS
 8196|  11.5k|                : OVSINST_OFPIT13_METER);
 8197|    348|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8197:5): [True: 348, False: 385k]
  ------------------
 8198|    348|        return OVSINST_OFPIT11_CLEAR_ACTIONS;
 8199|  17.0k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8199:5): [True: 17.0k, False: 368k]
  ------------------
 8200|  17.0k|        return OVSINST_OFPIT11_WRITE_ACTIONS;
 8201|  1.19k|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8201:5): [True: 1.19k, False: 384k]
  ------------------
 8202|  1.19k|        return OVSINST_OFPIT11_WRITE_METADATA;
 8203|  1.88k|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8203:5): [True: 1.88k, False: 383k]
  ------------------
 8204|  1.88k|        return OVSINST_OFPIT11_GOTO_TABLE;
 8205|  36.7k|    case OFPACT_OUTPUT:
  ------------------
  |  Branch (8205:5): [True: 36.7k, False: 348k]
  ------------------
 8206|  41.9k|    case OFPACT_GROUP:
  ------------------
  |  Branch (8206:5): [True: 5.19k, False: 380k]
  ------------------
 8207|  42.7k|    case OFPACT_CLONE:
  ------------------
  |  Branch (8207:5): [True: 829, False: 384k]
  ------------------
 8208|  50.5k|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8208:5): [True: 7.78k, False: 377k]
  ------------------
 8209|  52.2k|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8209:5): [True: 1.64k, False: 383k]
  ------------------
 8210|  52.2k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8210:5): [True: 31, False: 385k]
  ------------------
 8211|  52.7k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8211:5): [True: 494, False: 385k]
  ------------------
 8212|  58.9k|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8212:5): [True: 6.24k, False: 379k]
  ------------------
 8213|  65.3k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8213:5): [True: 6.35k, False: 379k]
  ------------------
 8214|  67.0k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8214:5): [True: 1.71k, False: 383k]
  ------------------
 8215|  81.0k|    case OFPACT_STRIP_VLAN:
  ------------------
  |  Branch (8215:5): [True: 13.9k, False: 371k]
  ------------------
 8216|  82.7k|    case OFPACT_PUSH_VLAN:
  ------------------
  |  Branch (8216:5): [True: 1.69k, False: 383k]
  ------------------
 8217|  82.7k|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8217:5): [True: 41, False: 385k]
  ------------------
 8218|  82.8k|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8218:5): [True: 64, False: 385k]
  ------------------
 8219|  86.3k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8219:5): [True: 3.53k, False: 382k]
  ------------------
 8220|  94.6k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8220:5): [True: 8.29k, False: 377k]
  ------------------
 8221|   107k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8221:5): [True: 12.5k, False: 373k]
  ------------------
 8222|   107k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8222:5): [True: 63, False: 385k]
  ------------------
 8223|   108k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8223:5): [True: 795, False: 384k]
  ------------------
 8224|   134k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8224:5): [True: 25.9k, False: 359k]
  ------------------
 8225|   153k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8225:5): [True: 19.3k, False: 366k]
  ------------------
 8226|   154k|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8226:5): [True: 591, False: 385k]
  ------------------
 8227|   173k|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8227:5): [True: 19.0k, False: 366k]
  ------------------
 8228|   177k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8228:5): [True: 4.83k, False: 380k]
  ------------------
 8229|   178k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8229:5): [True: 512, False: 385k]
  ------------------
 8230|   179k|    case OFPACT_DEC_TTL:
  ------------------
  |  Branch (8230:5): [True: 1.12k, False: 384k]
  ------------------
 8231|   183k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8231:5): [True: 4.00k, False: 381k]
  ------------------
 8232|   186k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8232:5): [True: 2.50k, False: 383k]
  ------------------
 8233|   187k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8233:5): [True: 1.70k, False: 383k]
  ------------------
 8234|   203k|    case OFPACT_DEC_MPLS_TTL:
  ------------------
  |  Branch (8234:5): [True: 15.8k, False: 369k]
  ------------------
 8235|   203k|    case OFPACT_PUSH_MPLS:
  ------------------
  |  Branch (8235:5): [True: 1, False: 385k]
  ------------------
 8236|   203k|    case OFPACT_POP_MPLS:
  ------------------
  |  Branch (8236:5): [True: 56, False: 385k]
  ------------------
 8237|   208k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8237:5): [True: 5.21k, False: 380k]
  ------------------
 8238|   208k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8238:5): [True: 21, False: 385k]
  ------------------
 8239|   222k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8239:5): [True: 13.1k, False: 372k]
  ------------------
 8240|   224k|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8240:5): [True: 2.06k, False: 383k]
  ------------------
 8241|   226k|    case OFPACT_RESUBMIT:
  ------------------
  |  Branch (8241:5): [True: 1.93k, False: 383k]
  ------------------
 8242|   258k|    case OFPACT_LEARN:
  ------------------
  |  Branch (8242:5): [True: 32.3k, False: 353k]
  ------------------
 8243|   258k|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8243:5): [True: 0, False: 385k]
  ------------------
 8244|   260k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8244:5): [True: 2.43k, False: 383k]
  ------------------
 8245|   280k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8245:5): [True: 19.8k, False: 365k]
  ------------------
 8246|   281k|    case OFPACT_EXIT:
  ------------------
  |  Branch (8246:5): [True: 660, False: 384k]
  ------------------
 8247|   292k|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8247:5): [True: 10.7k, False: 374k]
  ------------------
 8248|   296k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8248:5): [True: 3.90k, False: 381k]
  ------------------
 8249|   296k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8249:5): [True: 0, False: 385k]
  ------------------
 8250|   296k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8250:5): [True: 0, False: 385k]
  ------------------
 8251|   322k|    case OFPACT_CT:
  ------------------
  |  Branch (8251:5): [True: 26.2k, False: 359k]
  ------------------
 8252|   322k|    case OFPACT_CT_CLEAR:
  ------------------
  |  Branch (8252:5): [True: 461, False: 385k]
  ------------------
 8253|   339k|    case OFPACT_NAT:
  ------------------
  |  Branch (8253:5): [True: 16.6k, False: 368k]
  ------------------
 8254|   339k|    case OFPACT_ENCAP:
  ------------------
  |  Branch (8254:5): [True: 285, False: 385k]
  ------------------
 8255|   352k|    case OFPACT_DECAP:
  ------------------
  |  Branch (8255:5): [True: 12.4k, False: 373k]
  ------------------
 8256|   352k|    case OFPACT_DEC_NSH_TTL:
  ------------------
  |  Branch (8256:5): [True: 174, False: 385k]
  ------------------
 8257|   352k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8257:5): [True: 11, False: 385k]
  ------------------
 8258|   353k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8258:5): [True: 1.25k, False: 384k]
  ------------------
 8259|   353k|    default:
  ------------------
  |  Branch (8259:5): [True: 0, False: 385k]
  ------------------
 8260|   353k|        return OVSINST_OFPIT11_APPLY_ACTIONS;
 8261|   385k|    }
 8262|   385k|}
ovs_instruction_type_from_inst_type:
 8267|    954|{
 8268|    954|    switch (inst_type) {
 8269|       |
 8270|      0|#define DEFINE_INST(ENUM, STRUCT, EXTENSIBLE, NAME) \
 8271|      0|    case ENUM:                                      \
 8272|      0|        *instruction_type = OVSINST_##ENUM;         \
 8273|      0|        return 0;
 8274|      0|OVS_INSTRUCTIONS
  ------------------
  |  | 1342|    149|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8271|    149|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 149, False: 805]
  |  |  |  |  ------------------
  |  |  |  | 8272|    149|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|    149|        return 0;
  |  |  ------------------
  |  | 1343|    149|                ofp13_instruction_meter,          false,    \
  |  | 1344|    149|                "meter")                                    \
  |  | 1345|    149|                                                            \
  |  | 1346|    149|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8271|      9|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 9, False: 945]
  |  |  |  |  ------------------
  |  |  |  | 8272|      9|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|      9|        return 0;
  |  |  ------------------
  |  | 1347|      9|                ofp11_instruction_actions,        true,     \
  |  | 1348|      9|                "apply_actions")                            \
  |  | 1349|      9|                                                            \
  |  | 1350|    175|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8271|    175|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 175, False: 779]
  |  |  |  |  ------------------
  |  |  |  | 8272|    175|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|    175|        return 0;
  |  |  ------------------
  |  | 1351|    175|                ofp11_instruction,                false,    \
  |  | 1352|    175|                "clear_actions")                            \
  |  | 1353|    175|                                                            \
  |  | 1354|    175|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8271|      2|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 2, False: 952]
  |  |  |  |  ------------------
  |  |  |  | 8272|      2|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|      2|        return 0;
  |  |  ------------------
  |  | 1355|      2|                ofp11_instruction_actions,        true,     \
  |  | 1356|      2|                "write_actions")                            \
  |  | 1357|      2|                                                            \
  |  | 1358|     29|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8271|     29|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 29, False: 925]
  |  |  |  |  ------------------
  |  |  |  | 8272|     29|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|     29|        return 0;
  |  |  ------------------
  |  | 1359|     29|                ofp11_instruction_write_metadata, false,    \
  |  | 1360|     29|                "write_metadata")                           \
  |  | 1361|     29|                                                            \
  |  | 1362|     29|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8271|     16|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8271:5): [True: 16, False: 938]
  |  |  |  |  ------------------
  |  |  |  | 8272|     16|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8273|     16|        return 0;
  |  |  ------------------
  |  | 1363|     16|                ofp11_instruction_goto_table,     false,    \
  |  | 1364|     16|                "goto_table")
  ------------------
 8275|      0|#undef DEFINE_INST
 8276|       |
 8277|    574|    default:
  ------------------
  |  Branch (8277:5): [True: 574, False: 380]
  ------------------
 8278|    574|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8279|    954|    }
 8280|    954|}
ovsinst_bitmap_from_openflow:
 8338|  27.0k|{
 8339|  27.0k|    uint32_t ovsinst_bitmap = 0;
 8340|  27.0k|    const struct ovsinst_map *x;
 8341|       |
 8342|   162k|    for (x = get_ovsinst_map(version); x->ofpit >= 0; x++) {
  ------------------
  |  Branch (8342:40): [True: 135k, False: 27.0k]
  ------------------
 8343|   135k|        if (ofpit_bitmap & htonl(1u << x->ofpit)) {
  ------------------
  |  Branch (8343:13): [True: 43.5k, False: 91.7k]
  ------------------
 8344|  43.5k|            ovsinst_bitmap |= 1u << x->ovsinst;
 8345|  43.5k|        }
 8346|   135k|    }
 8347|  27.0k|    return ovsinst_bitmap;
 8348|  27.0k|}
ofpacts_pull_openflow_instructions:
 8456|   225k|{
 8457|   225k|    const struct ofp11_instruction *instructions;
 8458|   225k|    const struct ofp11_instruction *insts[N_OVS_INSTRUCTIONS];
 8459|   225k|    enum ofperr error;
 8460|       |
 8461|   225k|    ofpbuf_clear(ofpacts);
 8462|   225k|    if (version == OFP10_VERSION) {
  ------------------
  |  Branch (8462:9): [True: 140k, False: 84.2k]
  ------------------
 8463|   140k|        return ofpacts_pull_openflow_actions__(openflow, instructions_len,
 8464|   140k|                                               version,
 8465|   140k|                                               (1u << N_OVS_INSTRUCTIONS) - 1,
 8466|   140k|                                               ofpacts, 0, vl_mff_map,
 8467|   140k|                                               ofpacts_tlv_bitmap);
 8468|   140k|    }
 8469|       |
 8470|  84.2k|    if (instructions_len % OFP11_INSTRUCTION_ALIGN != 0) {
  ------------------
  |  |  262|  84.2k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8470:9): [True: 1.15k, False: 83.1k]
  ------------------
 8471|  1.15k|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u is not a "
  ------------------
  |  |  223|  1.15k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.15k|    do {                                                                \
  |  |  |  |  287|  1.15k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.15k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.15k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.15k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8472|  1.15k|                     "multiple of %d",
 8473|  1.15k|                     instructions_len, OFP11_INSTRUCTION_ALIGN);
 8474|  1.15k|        error = OFPERR_OFPBIC_BAD_LEN;
 8475|  1.15k|        goto exit;
 8476|  1.15k|    }
 8477|       |
 8478|  83.1k|    instructions = ofpbuf_try_pull(openflow, instructions_len);
 8479|  83.1k|    if (instructions == NULL) {
  ------------------
  |  Branch (8479:9): [True: 986, False: 82.1k]
  ------------------
 8480|    986|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u exceeds "
  ------------------
  |  |  223|    986|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    986|    do {                                                                \
  |  |  |  |  287|    986|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    986|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 986]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    986|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8481|    986|                     "remaining message length (%"PRIu32")",
 8482|    986|                     instructions_len, openflow->size);
 8483|    986|        error = OFPERR_OFPBIC_BAD_LEN;
 8484|    986|        goto exit;
 8485|    986|    }
 8486|       |
 8487|  82.1k|    error = decode_openflow11_instructions(
 8488|  82.1k|        instructions, instructions_len / OFP11_INSTRUCTION_ALIGN, version,
  ------------------
  |  |  262|  82.1k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
 8489|  82.1k|        insts);
 8490|  82.1k|    if (error) {
  ------------------
  |  Branch (8490:9): [True: 11.4k, False: 70.6k]
  ------------------
 8491|  11.4k|        goto exit;
 8492|  11.4k|    }
 8493|       |
 8494|  70.6k|    if (insts[OVSINST_OFPIT13_METER]) {
  ------------------
  |  Branch (8494:9): [True: 352, False: 70.2k]
  ------------------
 8495|    352|        const struct ofp13_instruction_meter *oim;
 8496|    352|        struct ofpact_meter *om;
 8497|       |
 8498|    352|        oim = ALIGNED_CAST(const struct ofp13_instruction_meter *,
  ------------------
  |  |  430|    352|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8499|    352|                           insts[OVSINST_OFPIT13_METER]);
 8500|       |
 8501|    352|        om = ofpact_put_METER(ofpacts);
 8502|    352|        om->meter_id = ntohl(oim->meter_id);
 8503|    352|        om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 8504|    352|    }
 8505|  70.6k|    if (insts[OVSINST_OFPIT11_APPLY_ACTIONS]) {
  ------------------
  |  Branch (8505:9): [True: 27.2k, False: 43.3k]
  ------------------
 8506|  27.2k|        const struct ofp_action_header *actions;
 8507|  27.2k|        size_t actions_len;
 8508|       |
 8509|  27.2k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_APPLY_ACTIONS],
 8510|  27.2k|                                     &actions, &actions_len);
 8511|  27.2k|        error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8512|  27.2k|                               ofpacts_tlv_bitmap, ofpacts);
 8513|  27.2k|        if (error) {
  ------------------
  |  Branch (8513:13): [True: 3.92k, False: 23.3k]
  ------------------
 8514|  3.92k|            goto exit;
 8515|  3.92k|        }
 8516|  27.2k|    }
 8517|  66.6k|    if (insts[OVSINST_OFPIT11_CLEAR_ACTIONS]) {
  ------------------
  |  Branch (8517:9): [True: 348, False: 66.3k]
  ------------------
 8518|    348|        instruction_get_OFPIT11_CLEAR_ACTIONS(
 8519|    348|            insts[OVSINST_OFPIT11_CLEAR_ACTIONS]);
 8520|    348|        ofpact_put_CLEAR_ACTIONS(ofpacts);
 8521|    348|    }
 8522|  66.6k|    if (insts[OVSINST_OFPIT11_WRITE_ACTIONS]) {
  ------------------
  |  Branch (8522:9): [True: 22.2k, False: 44.4k]
  ------------------
 8523|  22.2k|        struct ofpact_nest *on;
 8524|  22.2k|        const struct ofp_action_header *actions;
 8525|  22.2k|        size_t actions_len;
 8526|  22.2k|        size_t start = ofpacts->size;
 8527|  22.2k|        ofpact_put(ofpacts, OFPACT_WRITE_ACTIONS,
 8528|  22.2k|                   offsetof(struct ofpact_nest, actions));
 8529|  22.2k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_WRITE_ACTIONS],
 8530|  22.2k|                                     &actions, &actions_len);
 8531|  22.2k|        error = ofpacts_decode_for_action_set(actions, actions_len,
 8532|  22.2k|                                              version, vl_mff_map,
 8533|  22.2k|                                              ofpacts_tlv_bitmap, ofpacts);
 8534|  22.2k|        if (error) {
  ------------------
  |  Branch (8534:13): [True: 5.25k, False: 17.0k]
  ------------------
 8535|  5.25k|            goto exit;
 8536|  5.25k|        }
 8537|  17.0k|        on = ofpbuf_at_assert(ofpacts, start, sizeof *on);
 8538|  17.0k|        on->ofpact.len = ofpacts->size - start;
 8539|  17.0k|    }
 8540|  61.4k|    if (insts[OVSINST_OFPIT11_WRITE_METADATA]) {
  ------------------
  |  Branch (8540:9): [True: 1.18k, False: 60.2k]
  ------------------
 8541|  1.18k|        const struct ofp11_instruction_write_metadata *oiwm;
 8542|  1.18k|        struct ofpact_metadata *om;
 8543|       |
 8544|  1.18k|        oiwm = ALIGNED_CAST(const struct ofp11_instruction_write_metadata *,
  ------------------
  |  |  430|  1.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8545|  1.18k|                            insts[OVSINST_OFPIT11_WRITE_METADATA]);
 8546|       |
 8547|  1.18k|        om = ofpact_put_WRITE_METADATA(ofpacts);
 8548|  1.18k|        om->metadata = oiwm->metadata;
 8549|  1.18k|        om->mask = oiwm->metadata_mask;
 8550|  1.18k|    }
 8551|  61.4k|    if (insts[OVSINST_OFPIT11_GOTO_TABLE]) {
  ------------------
  |  Branch (8551:9): [True: 1.88k, False: 59.5k]
  ------------------
 8552|  1.88k|        const struct ofp11_instruction_goto_table *oigt;
 8553|  1.88k|        struct ofpact_goto_table *ogt;
 8554|       |
 8555|  1.88k|        oigt = instruction_get_OFPIT11_GOTO_TABLE(
 8556|  1.88k|            insts[OVSINST_OFPIT11_GOTO_TABLE]);
 8557|  1.88k|        ogt = ofpact_put_GOTO_TABLE(ofpacts);
 8558|  1.88k|        ogt->table_id = oigt->table_id;
 8559|  1.88k|    }
 8560|       |
 8561|  61.4k|    error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8562|  61.4k|                           (1u << N_OVS_INSTRUCTIONS) - 1, 0, NULL);
 8563|  84.2k|exit:
 8564|  84.2k|    if (error) {
  ------------------
  |  Branch (8564:9): [True: 22.8k, False: 61.4k]
  ------------------
 8565|  22.8k|        ofpbuf_clear(ofpacts);
 8566|  22.8k|    }
 8567|  84.2k|    return error;
 8568|  61.4k|}
ofpact_check_output_port:
 8591|   145k|{
 8592|   145k|    switch (port) {
 8593|    149|    case OFPP_IN_PORT:
  ------------------
  |  |   39|    149|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    149|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8593:5): [True: 149, False: 145k]
  ------------------
 8594|  30.7k|    case OFPP_TABLE:
  ------------------
  |  |   40|  30.7k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  ------------------
  |  |  |  |  157|  30.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8594:5): [True: 30.6k, False: 114k]
  ------------------
 8595|  31.1k|    case OFPP_NORMAL:
  ------------------
  |  |   41|  31.1k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  ------------------
  |  |  |  |  157|  31.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8595:5): [True: 374, False: 145k]
  ------------------
 8596|  31.1k|    case OFPP_FLOOD:
  ------------------
  |  |   42|  31.1k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  ------------------
  |  |  |  |  157|  31.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8596:5): [True: 23, False: 145k]
  ------------------
 8597|  32.3k|    case OFPP_ALL:
  ------------------
  |  |   44|  32.3k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  32.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8597:5): [True: 1.17k, False: 144k]
  ------------------
 8598|  45.9k|    case OFPP_CONTROLLER:
  ------------------
  |  |   45|  45.9k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  45.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8598:5): [True: 13.6k, False: 131k]
  ------------------
 8599|  47.2k|    case OFPP_LOCAL:
  ------------------
  |  |   46|  47.2k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  47.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8599:5): [True: 1.22k, False: 144k]
  ------------------
 8600|  47.2k|        return 0;
 8601|       |
 8602|     98|    case OFPP_NONE:
  ------------------
  |  |   47|     98|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|     98|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8602:5): [True: 98, False: 145k]
  ------------------
 8603|     98|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8604|       |
 8605|  98.2k|    default:
  ------------------
  |  Branch (8605:5): [True: 98.2k, False: 47.3k]
  ------------------
 8606|  98.2k|        if (ofp_to_u16(port) < ofp_to_u16(max_ports)) {
  ------------------
  |  Branch (8606:13): [True: 95.9k, False: 2.32k]
  ------------------
 8607|  95.9k|            return 0;
 8608|  95.9k|        }
 8609|  2.32k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8610|   145k|    }
 8611|   145k|}
ofpacts_check:
 8660|   128k|{
 8661|       |    /* Save fields that might temporarily be modified. */
 8662|   128k|    struct flow *flow = &cp->match->flow;
 8663|   128k|    ovs_be32 packet_type = flow->packet_type;
 8664|   128k|    ovs_be16 dl_type = flow->dl_type;
 8665|   128k|    uint8_t nw_proto = flow->nw_proto;
 8666|   128k|    union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
 8667|   128k|    memcpy(vlans, flow->vlans, sizeof vlans);
 8668|       |
 8669|       |    /* Check all the actions. */
 8670|   128k|    cp->usable_protocols = OFPUTIL_P_ANY;
  ------------------
  |  |  100|   128k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 8671|   128k|    enum ofperr error = 0;
 8672|   128k|    struct ofpact *a;
 8673|   302k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   417k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 302k, False: 114k]
  |  |  ------------------
  |  |  262|   289k|         (POS) = ofpact_next(POS))
  ------------------
 8674|   302k|        error = ofpact_check__(a, cp);
 8675|   302k|        if (error) {
  ------------------
  |  Branch (8675:13): [True: 13.1k, False: 289k]
  ------------------
 8676|  13.1k|            break;
 8677|  13.1k|        }
 8678|   302k|    }
 8679|       |
 8680|       |    /* Restore fields that may have been modified. */
 8681|   128k|    flow->packet_type = packet_type;
 8682|   128k|    flow->dl_type = dl_type;
 8683|   128k|    memcpy(flow->vlans, vlans, sizeof vlans);
 8684|   128k|    flow->nw_proto = nw_proto;
 8685|       |
 8686|   128k|    return error;
 8687|   128k|}
ofpacts_check_consistency:
 8695|   103k|{
 8696|   103k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, cp);
 8697|   103k|    if (!error && needed_protocols & ~cp->usable_protocols) {
  ------------------
  |  Branch (8697:9): [True: 90.0k, False: 13.0k]
  |  Branch (8697:19): [True: 11.9k, False: 78.1k]
  ------------------
 8698|  11.9k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 8699|  11.9k|    }
 8700|  91.2k|    return error;
 8701|   103k|}
ofpact_get_mf_dst:
 8707|   388k|{
 8708|   388k|    if (ofpact->type == OFPACT_SET_FIELD) {
  ------------------
  |  Branch (8708:9): [True: 19.9k, False: 368k]
  ------------------
 8709|  19.9k|        const struct ofpact_set_field *orl;
 8710|       |
 8711|  19.9k|        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
  ------------------
  |  |  120|  19.9k|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8712|  19.9k|        return orl->field;
 8713|   368k|    } else if (ofpact->type == OFPACT_REG_MOVE) {
  ------------------
  |  Branch (8713:16): [True: 591, False: 367k]
  ------------------
 8714|    591|        const struct ofpact_reg_move *orm;
 8715|       |
 8716|    591|        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
  ------------------
  |  |  120|    591|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8717|    591|        return orm->dst.field;
 8718|    591|    }
 8719|       |
 8720|   367k|    return NULL;
 8721|   388k|}
ofpact_bitmap_from_openflow:
 9074|  64.1k|{
 9075|  64.1k|    uint64_t ofpact_bitmap = 0;
 9076|  64.1k|    const struct ofpact_map *x;
 9077|       |
 9078|  1.01M|    for (x = get_ofpact_map(version); x->ofpat >= 0; x++) {
  ------------------
  |  Branch (9078:39): [True: 950k, False: 64.1k]
  ------------------
 9079|   950k|        if (ofpat_bitmap & htonl(1u << x->ofpat)) {
  ------------------
  |  Branch (9079:13): [True: 285k, False: 664k]
  ------------------
 9080|   285k|            ofpact_bitmap |= UINT64_C(1) << x->ofpact;
 9081|   285k|        }
 9082|   950k|    }
 9083|  64.1k|    return ofpact_bitmap;
 9084|  64.1k|}
ofpact_bitmap_format:
 9090|  35.2k|{
 9091|  35.2k|    if (!ofpacts_bitmap) {
  ------------------
  |  Branch (9091:9): [True: 840, False: 34.4k]
  ------------------
 9092|    840|        ds_put_cstr(s, "<none>");
 9093|  34.4k|    } else {
 9094|   198k|        while (ofpacts_bitmap) {
  ------------------
  |  Branch (9094:16): [True: 164k, False: 34.4k]
  ------------------
 9095|   164k|            ds_put_format(s, "%s ",
 9096|   164k|                          ofpact_name(rightmost_1bit_idx(ofpacts_bitmap)));
 9097|   164k|            ofpacts_bitmap = zero_rightmost_1bit(ofpacts_bitmap);
 9098|   164k|        }
 9099|  34.4k|        ds_chomp(s, ' ');
 9100|  34.4k|    }
 9101|  35.2k|}
ofpacts_format:
 9293|   205k|{
 9294|   205k|    if (!ofpacts_len) {
  ------------------
  |  Branch (9294:9): [True: 47.1k, False: 157k]
  ------------------
 9295|  47.1k|        ds_put_format(fp->s, "%sdrop%s", colors.drop, colors.end);
 9296|   157k|    } else {
 9297|   157k|        const struct ofpact *a;
 9298|       |
 9299|   351k|        OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   509k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 351k, False: 157k]
  |  |  ------------------
  |  |  262|   351k|         (POS) = ofpact_next(POS))
  ------------------
 9300|   351k|            if (a != ofpacts) {
  ------------------
  |  Branch (9300:17): [True: 193k, False: 157k]
  ------------------
 9301|   193k|                ds_put_char(fp->s, ',');
 9302|   193k|            }
 9303|       |
 9304|   351k|            ofpact_format(a, fp);
 9305|   351k|        }
 9306|   157k|    }
 9307|   205k|}
ofpact_put:
 9314|   620k|{
 9315|   620k|    struct ofpact *ofpact;
 9316|       |
 9317|   620k|    ofpacts->header = ofpbuf_put_uninit(ofpacts, len);
 9318|   620k|    ofpact = ofpacts->header;
 9319|   620k|    ofpact_init(ofpact, type, len);
 9320|   620k|    return ofpact;
 9321|   620k|}
ofpact_init:
 9326|   620k|{
 9327|   620k|    memset(ofpact, 0, len);
 9328|   620k|    ofpact->type = type;
 9329|   620k|    ofpact->raw = -1;
 9330|   620k|    ofpact->len = len;
 9331|   620k|}
ofpact_finish:
 9344|   141k|{
 9345|   141k|    ptrdiff_t len;
 9346|       |
 9347|   141k|    ovs_assert(ofpact == ofpacts->header);
  ------------------
  |  |   58|   141k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 9348|   141k|    len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
 9349|   141k|    ovs_assert(len > 0 && len <= UINT16_MAX);
  ------------------
  |  |   58|   282k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 141k, False: 0]
  |  |  |  Branch (58:40): [True: 141k, False: 0]
  |  |  ------------------
  ------------------
 9350|   141k|    ofpact->len = len;
 9351|   141k|    ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
  ------------------
  |  |  205|   141k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  299|   141k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|   141k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9352|       |
 9353|   141k|    return ofpacts->header;
 9354|   141k|}
ofpact_name:
 9522|   172k|{
 9523|   172k|    switch (type) {
  ------------------
  |  Branch (9523:13): [True: 0, False: 172k]
  ------------------
 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
 9525|   172k|        OFPACTS
  ------------------
  |  |   64|  16.0k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9524|  16.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 16.0k, False: 156k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  16.0k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9524|  9.40k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 9.40k, False: 162k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  9.40k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|    468|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9524|    468|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 468, False: 171k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    468|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      0|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      0|                                                                        \
  |  |   71|      0|    /* Header changes. */                                               \
  |  |   72|  8.68k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9524|  8.68k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 8.68k, False: 163k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  8.68k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9524|  3.48k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 3.48k, False: 168k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|  3.50k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9524|  3.50k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 3.50k, False: 168k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|  11.9k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9524|  11.9k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 11.9k, False: 160k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|  11.9k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9524|  11.1k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 11.1k, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  11.1k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9524|  2.82k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.82k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  2.82k|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9524|  2.24k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.24k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  2.44k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9524|  2.44k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.44k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  2.44k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9524|  2.11k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.11k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  2.17k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9524|  2.17k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.17k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  2.79k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9524|  2.79k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.79k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  8.15k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9524|  8.15k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 8.15k, False: 164k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  8.15k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9524|  2.73k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.73k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|  2.75k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9524|  2.75k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.75k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|  2.75k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      0|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|      0|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  13.0k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9524|  13.0k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 13.0k, False: 159k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  13.0k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9524|  2.08k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.08k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  2.08k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9524|  2.00k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.00k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|  7.78k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9524|  7.78k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 7.78k, False: 164k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|  13.5k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9524|  13.5k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 13.5k, False: 158k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|  13.5k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9524|  11.7k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 11.7k, False: 160k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  11.7k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9524|  10.3k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 10.3k, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  10.3k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      0|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|                                                                        \
  |  |   99|      0|    /* Generic encap & decap */                                         \
  |  |  100|      0|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|      0|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      0|                                                                        \
  |  |  103|      0|    /* Metadata. */                                                     \
  |  |  104|  3.00k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9524|  3.00k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 3.00k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|  10.6k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9524|  10.6k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 10.6k, False: 161k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|  10.6k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9524|  2.29k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.29k, False: 170k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  2.29k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  108|      0|                                                                        \
  |  |  109|      0|    /* Flow table interaction. */                                       \
  |  |  110|    137|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9524|    137|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 137, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|    137|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      0|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|      0|                                                                        \
  |  |  114|      0|    /* Arithmetic. */                                                   \
  |  |  115|      0|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  116|      0|                                                                        \
  |  |  117|      0|    /* Other. */                                                        \
  |  |  118|      0|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|      0|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|      0|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      0|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|  2.75k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9524|  2.75k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 2.75k, False: 169k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|  2.75k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|      0|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|      0|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|      0|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|      0|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  128|      0|           "check_pkt_larger")                                          \
  |  |  129|      0|                                                                        \
  |  |  130|      0|    /* Debugging actions.                                               \
  |  |  131|      0|     *                                                                  \
  |  |  132|      0|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|      0|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|      0|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|      0|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|      0|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  140|      0|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9524|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9524:44): [True: 0, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9526|   172k|#undef OFPACT
 9527|   172k|    }
 9528|      0|    return "<unknown>";
 9529|   172k|}
ofp-actions.c:ofpacts_pull_openflow_actions__:
 7869|   426k|{
 7870|   426k|    const struct ofp_action_header *actions;
 7871|   426k|    enum ofperr error;
 7872|       |
 7873|   426k|    if (actions_len % OFP_ACTION_ALIGN != 0) {
  ------------------
  |  |  382|   426k|#define OFP_ACTION_ALIGN 8
  ------------------
  |  Branch (7873:9): [True: 24.7k, False: 401k]
  ------------------
 7874|  24.7k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u is not a "
  ------------------
  |  |  223|  24.7k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  24.7k|    do {                                                                \
  |  |  |  |  287|  24.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  24.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 24.7k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  24.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7875|  24.7k|                     "multiple of %d", actions_len, OFP_ACTION_ALIGN);
 7876|  24.7k|        return OFPERR_OFPBRC_BAD_LEN;
 7877|  24.7k|    }
 7878|       |
 7879|   401k|    actions = ofpbuf_try_pull(openflow, actions_len);
 7880|   401k|    if (actions == NULL) {
  ------------------
  |  Branch (7880:9): [True: 9.59k, False: 391k]
  ------------------
 7881|  9.59k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u exceeds "
  ------------------
  |  |  223|  9.59k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  9.59k|    do {                                                                \
  |  |  |  |  287|  9.59k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  9.59k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 9.59k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  9.59k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7882|  9.59k|                     "remaining message length (%"PRIu32")",
 7883|  9.59k|                     actions_len, openflow->size);
 7884|  9.59k|        return OFPERR_OFPBRC_BAD_LEN;
 7885|  9.59k|    }
 7886|       |
 7887|   391k|    error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 7888|   391k|                           ofpacts_tlv_bitmap, ofpacts);
 7889|   391k|    if (!error) {
  ------------------
  |  Branch (7889:9): [True: 216k, False: 175k]
  ------------------
 7890|   216k|        error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 7891|   216k|                               allowed_ovsinsts, outer_action, NULL);
 7892|   216k|    }
 7893|   391k|    if (error) {
  ------------------
  |  Branch (7893:9): [True: 183k, False: 208k]
  ------------------
 7894|   183k|        ofpbuf_clear(ofpacts);
 7895|   183k|    }
 7896|   391k|    return error;
 7897|   401k|}
ofp-actions.c:action_set_classify:
 7998|  55.9k|{
 7999|  55.9k|    switch (a->type) {
 8000|      0|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8001|      0|        ACTION_SET_ORDER
  ------------------
  |  | 7949|  2.34k|    SLOT(OFPACT_STRIP_VLAN)                     \
  |  |  ------------------
  |  |  |  | 8000|  2.34k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 2.34k, False: 53.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7950|  13.2k|    SLOT(OFPACT_POP_MPLS)                       \
  |  |  ------------------
  |  |  |  | 8000|  13.2k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 13.2k, False: 42.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7951|  13.2k|    SLOT(OFPACT_DECAP)                          \
  |  |  ------------------
  |  |  |  | 8000|     31|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 31, False: 55.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7952|  3.57k|    SLOT(OFPACT_ENCAP)                          \
  |  |  ------------------
  |  |  |  | 8000|  3.57k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 3.57k, False: 52.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7953|  4.43k|    SLOT(OFPACT_PUSH_MPLS)                      \
  |  |  ------------------
  |  |  |  | 8000|  4.43k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 4.43k, False: 51.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7954|  4.43k|    SLOT(OFPACT_PUSH_VLAN)                      \
  |  |  ------------------
  |  |  |  | 8000|  1.69k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 1.69k, False: 54.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7955|  1.69k|    SLOT(OFPACT_DEC_TTL)                        \
  |  |  ------------------
  |  |  |  | 8000|    193|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 193, False: 55.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7956|  5.09k|    SLOT(OFPACT_DEC_MPLS_TTL)                   \
  |  |  ------------------
  |  |  |  | 8000|  5.09k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 5.09k, False: 50.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7957|  5.09k|    SLOT(OFPACT_DEC_NSH_TTL)
  |  |  ------------------
  |  |  |  | 8000|    290|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8000:22): [True: 290, False: 55.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8002|      0|#undef SLOT
 8003|       |
 8004|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8005|    290|        ACTION_SET_FINAL_PRIORITY
  ------------------
  |  | 7964|      0|    FINAL(OFPACT_CT)                            \
  |  |  ------------------
  |  |  |  | 8004|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8004:23): [True: 0, False: 55.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7965|      1|    FINAL(OFPACT_CT_CLEAR)                      \
  |  |  ------------------
  |  |  |  | 8004|      1|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8004:23): [True: 1, False: 55.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7966|    814|    FINAL(OFPACT_RESUBMIT)                      \
  |  |  ------------------
  |  |  |  | 8004|    814|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8004:23): [True: 814, False: 55.1k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7967|    814|    FINAL(OFPACT_OUTPUT)                        \
  |  |  ------------------
  |  |  |  | 8004|      2|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8004:23): [True: 2, False: 55.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 7968|     26|    FINAL(OFPACT_GROUP)
  |  |  ------------------
  |  |  |  | 8004|     26|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8004:23): [True: 26, False: 55.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8006|      0|#undef FINAL
 8007|       |
 8008|      0|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8008:5): [True: 0, False: 55.9k]
  ------------------
 8009|      0|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8009:5): [True: 0, False: 55.9k]
  ------------------
 8010|      0|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8010:5): [True: 0, False: 55.9k]
  ------------------
 8011|      6|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8011:5): [True: 6, False: 55.9k]
  ------------------
 8012|      8|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8012:5): [True: 2, False: 55.9k]
  ------------------
 8013|  9.06k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8013:5): [True: 9.05k, False: 46.9k]
  ------------------
 8014|  9.98k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8014:5): [True: 921, False: 55.0k]
  ------------------
 8015|  9.98k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8015:5): [True: 0, False: 55.9k]
  ------------------
 8016|  9.98k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8016:5): [True: 6, False: 55.9k]
  ------------------
 8017|  10.7k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8017:5): [True: 809, False: 55.1k]
  ------------------
 8018|  10.8k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8018:5): [True: 6, False: 55.9k]
  ------------------
 8019|  10.8k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8019:5): [True: 74, False: 55.9k]
  ------------------
 8020|  11.5k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8020:5): [True: 694, False: 55.2k]
  ------------------
 8021|  17.2k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8021:5): [True: 5.66k, False: 50.3k]
  ------------------
 8022|  24.1k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8022:5): [True: 6.91k, False: 49.0k]
  ------------------
 8023|  24.1k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8023:5): [True: 0, False: 55.9k]
  ------------------
 8024|  24.1k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8024:5): [True: 26, False: 55.9k]
  ------------------
 8025|  24.2k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8025:5): [True: 23, False: 55.9k]
  ------------------
 8026|  24.2k|        return ACTION_SLOT_SET_OR_MOVE;
 8027|       |
 8028|      0|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8028:5): [True: 0, False: 55.9k]
  ------------------
 8029|      0|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8029:5): [True: 0, False: 55.9k]
  ------------------
 8030|      3|    case OFPACT_CLONE:
  ------------------
  |  Branch (8030:5): [True: 3, False: 55.9k]
  ------------------
 8031|     18|    case OFPACT_NAT:
  ------------------
  |  Branch (8031:5): [True: 15, False: 55.9k]
  ------------------
 8032|     18|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8032:5): [True: 0, False: 55.9k]
  ------------------
 8033|     18|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8033:5): [True: 0, False: 55.9k]
  ------------------
 8034|     18|    case OFPACT_EXIT:
  ------------------
  |  Branch (8034:5): [True: 0, False: 55.9k]
  ------------------
 8035|     18|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8035:5): [True: 0, False: 55.9k]
  ------------------
 8036|     18|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8036:5): [True: 0, False: 55.9k]
  ------------------
 8037|     18|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8037:5): [True: 0, False: 55.9k]
  ------------------
 8038|     18|    case OFPACT_LEARN:
  ------------------
  |  Branch (8038:5): [True: 0, False: 55.9k]
  ------------------
 8039|     18|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8039:5): [True: 0, False: 55.9k]
  ------------------
 8040|     19|    case OFPACT_METER:
  ------------------
  |  Branch (8040:5): [True: 1, False: 55.9k]
  ------------------
 8041|     19|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8041:5): [True: 0, False: 55.9k]
  ------------------
 8042|     19|    case OFPACT_NOTE:
  ------------------
  |  Branch (8042:5): [True: 0, False: 55.9k]
  ------------------
 8043|     19|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8043:5): [True: 0, False: 55.9k]
  ------------------
 8044|     20|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8044:5): [True: 1, False: 55.9k]
  ------------------
 8045|     23|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8045:5): [True: 3, False: 55.9k]
  ------------------
 8046|     23|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8046:5): [True: 0, False: 55.9k]
  ------------------
 8047|     23|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8047:5): [True: 0, False: 55.9k]
  ------------------
 8048|     23|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8048:5): [True: 0, False: 55.9k]
  ------------------
 8049|     23|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8049:5): [True: 0, False: 55.9k]
  ------------------
 8050|     23|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8050:5): [True: 0, False: 55.9k]
  ------------------
 8051|     23|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8051:5): [True: 0, False: 55.9k]
  ------------------
 8052|     23|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8052:5): [True: 0, False: 55.9k]
  ------------------
 8053|     23|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8053:5): [True: 0, False: 55.9k]
  ------------------
 8054|     23|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8054:5): [True: 0, False: 55.9k]
  ------------------
 8055|     23|        return ACTION_SLOT_INVALID;
 8056|       |
 8057|      0|    default:
  ------------------
  |  Branch (8057:5): [True: 0, False: 55.9k]
  ------------------
 8058|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8059|  55.9k|    }
 8060|  55.9k|}
ofp-actions.c:get_ovsinst_map:
 8291|  27.0k|{
 8292|       |    /* OpenFlow 1.1, 1.2, and 1.5 instructions. */
 8293|  27.0k|    static const struct ovsinst_map of11[] = {
 8294|  27.0k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8295|  27.0k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8296|  27.0k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8297|  27.0k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8298|  27.0k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8299|  27.0k|        { 0, -1 },
 8300|  27.0k|    };
 8301|       |
 8302|       |    /* OpenFlow 1.3 and 1.4 instructions. */
 8303|  27.0k|    static const struct ovsinst_map of13[] = {
 8304|  27.0k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8305|  27.0k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8306|  27.0k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8307|  27.0k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8308|  27.0k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8309|  27.0k|        { OVSINST_OFPIT13_METER, 6 },
 8310|  27.0k|        { 0, -1 },
 8311|  27.0k|    };
 8312|       |
 8313|  27.0k|    return version == OFP13_VERSION || version == OFP14_VERSION ? of13 : of11;
  ------------------
  |  Branch (8313:12): [True: 0, False: 27.0k]
  |  Branch (8313:40): [True: 0, False: 27.0k]
  ------------------
 8314|  27.0k|}
ofp-actions.c:decode_openflow11_instructions:
 8407|  82.1k|{
 8408|  82.1k|    const struct ofp11_instruction *inst;
 8409|  82.1k|    size_t left;
 8410|       |
 8411|  82.1k|    memset(out, 0, N_OVS_INSTRUCTIONS * sizeof *out);
 8412|  82.1k|    INSTRUCTION_FOR_EACH (inst, left, insts, n_insts) {
  ------------------
  |  | 8369|  82.1k|    for ((ITER) = (INSTRUCTIONS), (LEFT) = (N_INSTRUCTIONS);            \
  |  | 8370|   137k|         (LEFT) > 0 && instruction_is_valid(ITER, LEFT);                \
  |  |  ------------------
  |  |  |  Branch (8370:10): [True: 66.7k, False: 70.6k]
  |  |  |  Branch (8370:24): [True: 59.5k, False: 7.24k]
  |  |  ------------------
  |  | 8371|  82.1k|         ((LEFT) -= (ntohs((ITER)->len)                                 \
  |  | 8372|  55.2k|                     / sizeof(struct ofp11_instruction)),               \
  |  | 8373|  55.2k|          (ITER) = instruction_next(ITER)))
  ------------------
 8413|  59.5k|        enum ovs_instruction_type type;
 8414|  59.5k|        enum ofperr error;
 8415|       |
 8416|  59.5k|        error = decode_openflow11_instruction(inst, &type);
 8417|  59.5k|        if (error) {
  ------------------
  |  Branch (8417:13): [True: 4.07k, False: 55.4k]
  ------------------
 8418|  4.07k|            return error;
 8419|  4.07k|        }
 8420|       |
 8421|  55.4k|        if (type == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8421:13): [True: 369, False: 55.0k]
  |  Branch (8421:46): [True: 10, False: 359]
  ------------------
 8422|       |            /* "meter" is an action, not an instruction, in OpenFlow 1.5. */
 8423|     10|            return OFPERR_OFPBIC_UNKNOWN_INST;
 8424|     10|        }
 8425|       |
 8426|  55.4k|        if (out[type]) {
  ------------------
  |  Branch (8426:13): [True: 167, False: 55.2k]
  ------------------
 8427|    167|            return OFPERR_OFPBIC_DUP_INST;
 8428|    167|        }
 8429|  55.2k|        out[type] = inst;
 8430|  55.2k|    }
 8431|       |
 8432|  77.8k|    if (left) {
  ------------------
  |  Branch (8432:9): [True: 7.24k, False: 70.6k]
  ------------------
 8433|  7.24k|        VLOG_WARN_RL(&rl, "bad instruction format at offset %"PRIuSIZE,
  ------------------
  |  |  223|  7.24k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  7.24k|    do {                                                                \
  |  |  |  |  287|  7.24k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  7.24k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 7.24k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  7.24k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8434|  7.24k|                     (n_insts - left) * sizeof *inst);
 8435|  7.24k|        return OFPERR_OFPBIC_BAD_LEN;
 8436|  7.24k|    }
 8437|  70.6k|    return 0;
 8438|  77.8k|}
ofp-actions.c:instruction_is_valid:
 8360|  66.7k|{
 8361|  66.7k|    uint16_t len = ntohs(inst->len);
 8362|  66.7k|    return (!(len % OFP11_INSTRUCTION_ALIGN)
  ------------------
  |  |  262|  66.7k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8362:13): [True: 63.3k, False: 3.40k]
  ------------------
 8363|  66.7k|            && len >= sizeof *inst
  ------------------
  |  Branch (8363:16): [True: 62.5k, False: 776]
  ------------------
 8364|  66.7k|            && len / sizeof *inst <= n_instructions);
  ------------------
  |  Branch (8364:16): [True: 59.5k, False: 3.06k]
  ------------------
 8365|  66.7k|}
ofp-actions.c:decode_openflow11_instruction:
 8378|  59.5k|{
 8379|  59.5k|    uint16_t len = ntohs(inst->len);
 8380|       |
 8381|  59.5k|    switch (inst->type) {
 8382|    592|    case CONSTANT_HTONS(OFPIT11_EXPERIMENTER):
  ------------------
  |  |   84|    592|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |   85|    592|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  ------------------
  |  Branch (8382:5): [True: 592, False: 58.9k]
  ------------------
 8383|    592|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 8384|       |
 8385|      0|#define DEFINE_INST(ENUM, STRUCT, EXTENSIBLE, NAME)     \
 8386|      0|        case CONSTANT_HTONS(ENUM):                      \
 8387|      0|            if (EXTENSIBLE                              \
 8388|      0|                ? len >= sizeof(struct STRUCT)          \
 8389|      0|                : len == sizeof(struct STRUCT)) {       \
 8390|      0|                *type = OVSINST_##ENUM;                 \
 8391|      0|                return 0;                               \
 8392|      0|            } else {                                    \
 8393|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
 8394|      0|            }
 8395|    592|OVS_INSTRUCTIONS
  ------------------
  |  | 1342|    408|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8386|    408|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    408|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    408|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 408, False: 59.1k]
  |  |  |  |  ------------------
  |  |  |  | 8387|    408|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 369, False: 39]
  |  |  |  |  ------------------
  |  |  |  | 8388|    408|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|    408|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|    369|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|    369|                return 0;                               \
  |  |  |  | 8392|    369|            } else {                                    \
  |  |  |  | 8393|     39|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|     39|            }
  |  |  ------------------
  |  | 1343|    408|                ofp13_instruction_meter,          false,    \
  |  | 1344|    408|                "meter")                                    \
  |  | 1345|    408|                                                            \
  |  | 1346|  27.5k|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8386|  27.5k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  27.5k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  27.5k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 27.5k, False: 31.9k]
  |  |  |  |  ------------------
  |  |  |  | 8387|  27.5k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 27.5k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8388|  27.5k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|  27.5k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|  27.5k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|  27.5k|                return 0;                               \
  |  |  |  | 8392|  27.5k|            } else {                                    \
  |  |  |  | 8393|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|      0|            }
  |  |  ------------------
  |  | 1347|  27.5k|                ofp11_instruction_actions,        true,     \
  |  | 1348|  27.5k|                "apply_actions")                            \
  |  | 1349|  27.5k|                                                            \
  |  | 1350|  27.5k|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8386|  2.21k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  2.21k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  2.21k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 2.21k, False: 57.3k]
  |  |  |  |  ------------------
  |  |  |  | 8387|  2.21k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 933, False: 1.28k]
  |  |  |  |  ------------------
  |  |  |  | 8388|  2.21k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|  2.21k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|    933|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|    933|                return 0;                               \
  |  |  |  | 8392|  1.28k|            } else {                                    \
  |  |  |  | 8393|  1.28k|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|  1.28k|            }
  |  |  ------------------
  |  | 1351|  2.21k|                ofp11_instruction,                false,    \
  |  | 1352|  2.21k|                "clear_actions")                            \
  |  | 1353|  2.21k|                                                            \
  |  | 1354|  22.6k|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8386|  22.6k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  22.6k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  22.6k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 22.6k, False: 36.8k]
  |  |  |  |  ------------------
  |  |  |  | 8387|  22.6k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 22.6k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8388|  22.6k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|  22.6k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|  22.6k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|  22.6k|                return 0;                               \
  |  |  |  | 8392|  22.6k|            } else {                                    \
  |  |  |  | 8393|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|      0|            }
  |  |  ------------------
  |  | 1355|  22.6k|                ofp11_instruction_actions,        true,     \
  |  | 1356|  22.6k|                "write_actions")                            \
  |  | 1357|  22.6k|                                                            \
  |  | 1358|  22.6k|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8386|  1.29k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  1.29k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  1.29k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 1.29k, False: 58.2k]
  |  |  |  |  ------------------
  |  |  |  | 8387|  1.29k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 1.18k, False: 111]
  |  |  |  |  ------------------
  |  |  |  | 8388|  1.29k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|  1.29k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|  1.18k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|  1.18k|                return 0;                               \
  |  |  |  | 8392|  1.18k|            } else {                                    \
  |  |  |  | 8393|    111|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|    111|            }
  |  |  ------------------
  |  | 1359|  1.29k|                ofp11_instruction_write_metadata, false,    \
  |  | 1360|  1.29k|                "write_metadata")                           \
  |  | 1361|  1.29k|                                                            \
  |  | 1362|  2.75k|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8386|  2.75k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  2.75k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  2.75k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8386:9): [True: 2.75k, False: 56.7k]
  |  |  |  |  ------------------
  |  |  |  | 8387|  2.75k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8387:17): [Folded - Ignored]
  |  |  |  |  |  Branch (8387:17): [True: 2.74k, False: 12]
  |  |  |  |  ------------------
  |  |  |  | 8388|  2.75k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8389|  2.75k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8390|  2.74k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8391|  2.74k|                return 0;                               \
  |  |  |  | 8392|  2.74k|            } else {                                    \
  |  |  |  | 8393|     12|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8394|     12|            }
  |  |  ------------------
  |  | 1363|  2.75k|                ofp11_instruction_goto_table,     false,    \
  |  | 1364|  2.75k|                "goto_table")
  ------------------
 8396|      0|#undef DEFINE_INST
 8397|       |
 8398|  2.03k|    default:
  ------------------
  |  Branch (8398:5): [True: 2.03k, False: 57.4k]
  ------------------
 8399|  2.03k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8400|  59.5k|    }
 8401|  59.5k|}
ofp-actions.c:instruction_next:
 8352|  55.2k|{
 8353|  55.2k|    return ((struct ofp11_instruction *) (void *)
 8354|  55.2k|            ((uint8_t *) inst + ntohs(inst->len)));
 8355|  55.2k|}
ofp-actions.c:get_actions_from_instruction:
 8444|  49.5k|{
 8445|  49.5k|    *actions = ALIGNED_CAST(const struct ofp_action_header *, inst + 1);
  ------------------
  |  |  430|  49.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8446|  49.5k|    *actions_len = ntohs(inst->len) - sizeof *inst;
 8447|  49.5k|}
ofp-actions.c:ofpacts_decode:
 7838|   441k|{
 7839|   441k|    size_t bad_action_offset = 0;
 7840|   441k|    struct ofpbuf aligned_buf;
 7841|       |
 7842|   441k|    if (!OFPACT_IS_ALIGNED(actions)) {
  ------------------
  |  |  206|   441k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   441k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7842:9): [True: 304k, False: 136k]
  ------------------
 7843|   304k|        ofpbuf_init(&aligned_buf, actions_len);
 7844|   304k|        ofpbuf_put(&aligned_buf, actions, actions_len);
 7845|   304k|    } else {
 7846|   136k|        ofpbuf_use_data(&aligned_buf, actions, actions_len);
 7847|   136k|    }
 7848|       |
 7849|   441k|    enum ofperr error
 7850|   441k|        = ofpacts_decode_aligned(&aligned_buf, ofp_version, vl_mff_map,
 7851|   441k|                                 ofpacts_tlv_bitmap, ofpacts,
 7852|   441k|                                 &bad_action_offset);
 7853|   441k|    if (error) {
  ------------------
  |  Branch (7853:9): [True: 184k, False: 256k]
  ------------------
 7854|   184k|        log_bad_action(actions, actions_len, bad_action_offset, error);
 7855|   184k|    }
 7856|   441k|    ofpbuf_uninit(&aligned_buf);
 7857|   441k|    return error;
 7858|   441k|}
ofp-actions.c:ofpacts_decode_aligned:
 7795|   441k|{
 7796|   441k|    size_t decoded_len = 0;
 7797|   441k|    enum ofperr error = 0;
 7798|       |
 7799|   441k|    ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |   58|   441k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 7800|   941k|    while (openflow->size) {
  ------------------
  |  Branch (7800:12): [True: 685k, False: 256k]
  ------------------
 7801|       |        /* Ensure the next action data is properly aligned before decoding it.
 7802|       |         * Some times it's valid to have to decode actions that are not
 7803|       |         * properly aligned (e.g., when processing OF 1.0 statistics reply
 7804|       |         * messages which have a header of 12 bytes - struct ofp10_stats_msg).
 7805|       |         * In other cases the encoder might be buggy.
 7806|       |         */
 7807|   685k|        if (!OFPACT_IS_ALIGNED(openflow->data)) {
  ------------------
  |  |  206|   685k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   685k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7807:13): [True: 0, False: 685k]
  ------------------
 7808|      0|            ofpbuf_align(openflow);
 7809|      0|        }
 7810|       |
 7811|   685k|        const struct ofp_action_header *action = openflow->data;
 7812|   685k|        enum ofp_raw_action_type raw;
 7813|   685k|        size_t act_len = 0;
 7814|   685k|        uint64_t arg;
 7815|       |
 7816|   685k|        error = ofpact_pull_raw(openflow, ofp_version, &raw, &arg, &act_len);
 7817|   685k|        if (!error) {
  ------------------
  |  Branch (7817:13): [True: 604k, False: 80.8k]
  ------------------
 7818|   604k|            error = ofpact_decode(action, raw, ofp_version, arg, vl_mff_map,
 7819|   604k|                                  ofpacts_tlv_bitmap, ofpacts);
 7820|   604k|        }
 7821|       |
 7822|   685k|        if (error) {
  ------------------
  |  Branch (7822:13): [True: 184k, False: 500k]
  ------------------
 7823|   184k|            *bad_action_offset = decoded_len;
 7824|   184k|            goto done;
 7825|   184k|        }
 7826|   500k|        decoded_len += act_len;
 7827|   500k|    }
 7828|       |
 7829|   441k|done:
 7830|   441k|    return error;
 7831|   441k|}
ofp-actions.c:ofpact_pull_raw:
 9712|   685k|{
 9713|   685k|    const struct ofp_action_header *oah = buf->data;
 9714|   685k|    const struct ofpact_raw_instance *action;
 9715|   685k|    unsigned int length;
 9716|   685k|    enum ofperr error;
 9717|       |
 9718|   685k|    *raw = *arg = *raw_len = 0;
 9719|   685k|    error = ofpact_decode_raw(ofp_version, oah, buf->size, &action);
 9720|   685k|    if (error) {
  ------------------
  |  Branch (9720:9): [True: 55.3k, False: 629k]
  ------------------
 9721|  55.3k|        return error;
 9722|  55.3k|    }
 9723|       |
 9724|   629k|    if (action->deprecation) {
  ------------------
  |  Branch (9724:9): [True: 36.0k, False: 593k]
  ------------------
 9725|  36.0k|        VLOG_INFO_RL(&rl, "%s is deprecated in %s (%s)",
  ------------------
  |  |  224|  36.0k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  36.0k|    do {                                                                \
  |  |  |  |  287|  36.0k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  36.0k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 36.0k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  36.0k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9726|  36.0k|                     action->name, ofputil_version_to_string(ofp_version),
 9727|  36.0k|                     action->deprecation);
 9728|  36.0k|    }
 9729|       |
 9730|   629k|    length = ntohs(oah->len);
 9731|   629k|    if (length > buf->size) {
  ------------------
  |  Branch (9731:9): [True: 13.9k, False: 615k]
  ------------------
 9732|  13.9k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u exceeds action buffer "
  ------------------
  |  |  223|  13.9k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  13.9k|    do {                                                                \
  |  |  |  |  287|  13.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  13.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 13.9k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  13.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9733|  13.9k|                     "length %"PRIu32, action->name, length, buf->size);
 9734|  13.9k|        return OFPERR_OFPBAC_BAD_LEN;
 9735|  13.9k|    }
 9736|   615k|    if (length < action->min_length || length > action->max_length) {
  ------------------
  |  Branch (9736:9): [True: 5.14k, False: 610k]
  |  Branch (9736:40): [True: 3.59k, False: 606k]
  ------------------
 9737|  8.73k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u not in valid range "
  ------------------
  |  |  223|  8.73k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  8.73k|    do {                                                                \
  |  |  |  |  287|  8.73k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  8.73k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 8.73k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  8.73k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9738|  8.73k|                     "[%hu,%hu]", action->name, length,
 9739|  8.73k|                     action->min_length, action->max_length);
 9740|  8.73k|        return OFPERR_OFPBAC_BAD_LEN;
 9741|  8.73k|    }
 9742|   606k|    if (length % 8) {
  ------------------
  |  Branch (9742:9): [True: 2.82k, False: 604k]
  ------------------
 9743|  2.82k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u is not a multiple "
  ------------------
  |  |  223|  2.82k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.82k|    do {                                                                \
  |  |  |  |  287|  2.82k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.82k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.82k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.82k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9744|  2.82k|                     "of 8", action->name, length);
 9745|  2.82k|        return OFPERR_OFPBAC_BAD_LEN;
 9746|  2.82k|    }
 9747|       |
 9748|   604k|    *raw = action->raw;
 9749|   604k|    *arg = 0;
 9750|   604k|    if (action->arg_len) {
  ------------------
  |  Branch (9750:9): [True: 193k, False: 410k]
  ------------------
 9751|   193k|        const uint8_t *p;
 9752|   193k|        int i;
 9753|       |
 9754|   193k|        p = ofpbuf_at_assert(buf, action->arg_ofs, action->arg_len);
 9755|   642k|        for (i = 0; i < action->arg_len; i++) {
  ------------------
  |  Branch (9755:21): [True: 449k, False: 193k]
  ------------------
 9756|   449k|            *arg = (*arg << 8) | p[i];
 9757|   449k|        }
 9758|   193k|    }
 9759|       |
 9760|   604k|    ofpbuf_pull(buf, length);
 9761|   604k|    *raw_len = length;
 9762|       |
 9763|   604k|    return 0;
 9764|   606k|}
ofp-actions.c:ofpact_decode_raw:
 9659|   685k|{
 9660|   685k|    const struct ofpact_raw_instance *inst;
 9661|   685k|    struct ofpact_hdrs hdrs;
 9662|       |
 9663|   685k|    *instp = NULL;
 9664|   685k|    if (length < sizeof *oah) {
  ------------------
  |  Branch (9664:9): [True: 0, False: 685k]
  ------------------
 9665|      0|        return OFPERR_OFPBAC_BAD_LEN;
 9666|      0|    }
 9667|       |
 9668|       |    /* Get base action type. */
 9669|   685k|    if (oah->type == htons(OFPAT_VENDOR)) {
  ------------------
  |  Branch (9669:9): [True: 348k, False: 336k]
  ------------------
 9670|       |        /* Get vendor. */
 9671|   348k|        hdrs.vendor = ntohl(oah->vendor);
 9672|   348k|        if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   697k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  20.1k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (9672:13): [True: 328k, False: 20.1k]
  |  Branch (9672:44): [True: 26, False: 20.1k]
  ------------------
 9673|       |            /* Get extension subtype. */
 9674|   328k|            const struct ext_action_header *nah;
 9675|       |
 9676|   328k|            nah = ALIGNED_CAST(const struct ext_action_header *, oah);
  ------------------
  |  |  430|   328k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 9677|   328k|            if (length < sizeof *nah) {
  ------------------
  |  Branch (9677:17): [True: 657, False: 327k]
  ------------------
 9678|    657|                return OFPERR_OFPBAC_BAD_LEN;
 9679|    657|            }
 9680|   327k|            hdrs.type = ntohs(nah->subtype);
 9681|   327k|        } else {
 9682|  20.1k|            VLOG_WARN_RL(&rl, "OpenFlow action has unknown vendor %#"PRIx32,
  ------------------
  |  |  223|  20.1k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  20.1k|    do {                                                                \
  |  |  |  |  287|  20.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  20.1k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 20.1k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  20.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9683|  20.1k|                         hdrs.vendor);
 9684|  20.1k|            return OFPERR_OFPBAC_BAD_VENDOR;
 9685|  20.1k|        }
 9686|   348k|    } else {
 9687|   336k|        hdrs.vendor = 0;
 9688|   336k|        hdrs.type = ntohs(oah->type);
 9689|   336k|    }
 9690|       |
 9691|   664k|    hdrs.ofp_version = ofp_version;
 9692|   664k|    HMAP_FOR_EACH_WITH_HASH (inst, decode_node, ofpact_hdrs_hash(&hdrs),
  ------------------
  |  |  138|   664k|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  167|   664k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|   664k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|   664k|                       struct hmap_node);                                     \
  |  |  140|   664k|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  181|   664k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 629k, False: 34.5k]
  |  |  |  |  |  Branch (181:6): [True: 629k, False: 34.5k]
  |  |  |  |  ------------------
  |  |  |  |  182|   664k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|   629k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|   629k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|   629k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|   664k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|   664k|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  189|      0|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|      0|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9693|   664k|                             ofpact_decode_hmap()) {
 9694|   629k|        if (ofpact_hdrs_equal(&hdrs, &inst->hdrs)) {
  ------------------
  |  Branch (9694:13): [True: 629k, False: 0]
  ------------------
 9695|   629k|            *instp = inst;
 9696|   629k|            return 0;
 9697|   629k|        }
 9698|   629k|    }
 9699|       |
 9700|  34.5k|    VLOG_WARN_RL(&rl, "unknown %s action for vendor %#"PRIx32" and "
  ------------------
  |  |  223|  34.5k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  34.5k|    do {                                                                \
  |  |  |  |  287|  34.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  34.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 34.5k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  34.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9701|  34.5k|                 "type %"PRIu16, ofputil_version_to_string(ofp_version),
 9702|  34.5k|                 hdrs.vendor, hdrs.type);
 9703|  34.5k|    return (hdrs.vendor
  ------------------
  |  Branch (9703:13): [True: 3.58k, False: 30.9k]
  ------------------
 9704|  34.5k|            ? OFPERR_OFPBAC_BAD_VENDOR_TYPE
 9705|  34.5k|            : OFPERR_OFPBAC_BAD_TYPE);
 9706|   664k|}
ofp-actions.c:ofpact_decode_hmap:
 9615|   664k|{
 9616|   664k|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|   664k|    {                                           \
  |  |  135|   664k|        false,                                  \
  |  |  136|   664k|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|   664k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|   664k|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|   664k|    }
  ------------------
 9617|   664k|    static struct hmap hmap;
 9618|       |
 9619|   664k|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (9619:9): [True: 1, False: 664k]
  ------------------
 9620|      1|        struct ofpact_raw_instance *inst;
 9621|       |
 9622|      1|        hmap_init(&hmap);
 9623|      1|        for (inst = all_raw_instances;
 9624|    379|             inst < &all_raw_instances[ARRAY_SIZE(all_raw_instances)];
  ------------------
  |  |  293|    379|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|    379|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    379|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|    379|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    379|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|    379|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9624:14): [True: 378, False: 1]
  ------------------
 9625|    378|             inst++) {
 9626|    378|            hmap_insert(&hmap, &inst->decode_node,
  ------------------
  |  |  101|    378|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    378|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    378|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    378|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9627|    378|                        ofpact_hdrs_hash(&inst->hdrs));
 9628|    378|        }
 9629|      1|        ovsthread_once_done(&once);
 9630|      1|    }
 9631|   664k|    return &hmap;
 9632|   664k|}
ofp-actions.c:ofpact_hdrs_hash:
 9606|   664k|{
 9607|   664k|    return hash_2words(hdrs->vendor,
 9608|   664k|                       ((uint32_t) hdrs->type << 16) | hdrs->ofp_version);
 9609|   664k|}
ofp-actions.c:ofpact_hdrs_equal:
 9598|   629k|{
 9599|   629k|    return (a->vendor == b->vendor
  ------------------
  |  Branch (9599:13): [True: 629k, False: 0]
  ------------------
 9600|   629k|            && a->type == b->type
  ------------------
  |  Branch (9600:16): [True: 629k, False: 0]
  ------------------
 9601|   629k|            && a->ofp_version == b->ofp_version);
  ------------------
  |  Branch (9601:16): [True: 629k, False: 0]
  ------------------
 9602|   629k|}
ofp-actions.c:decode_OFPAT_RAW10_OUTPUT:
  576|  49.3k|{
  577|  49.3k|    struct ofpact_output *output;
  578|       |
  579|  49.3k|    output = ofpact_put_OUTPUT(out);
  580|  49.3k|    output->port = u16_to_ofp(ntohs(oao->port));
  581|  49.3k|    output->max_len = ntohs(oao->max_len);
  582|       |
  583|  49.3k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  49.3k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  49.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  584|  49.3k|}
ofp-actions.c:decode_OFPAT_RAW11_OUTPUT:
  590|  1.66k|{
  591|  1.66k|    struct ofpact_output *output;
  592|  1.66k|    enum ofperr error;
  593|       |
  594|  1.66k|    output = ofpact_put_OUTPUT(out);
  595|  1.66k|    output->max_len = ntohs(oao->max_len);
  596|       |
  597|  1.66k|    error = ofputil_port_from_ofp11(oao->port, &output->port);
  598|  1.66k|    if (error) {
  ------------------
  |  Branch (598:9): [True: 181, False: 1.48k]
  ------------------
  599|    181|        return error;
  600|    181|    }
  601|       |
  602|  1.48k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  1.48k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.48k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  603|  1.66k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_VID:
 1583|  10.4k|{
 1584|  10.4k|    return decode_set_vlan_vid(vid, true, out);
 1585|  10.4k|}
ofp-actions.c:decode_set_vlan_vid:
 1568|  11.1k|{
 1569|  11.1k|    if (vid & ~0xfff) {
  ------------------
  |  Branch (1569:9): [True: 187, False: 10.9k]
  ------------------
 1570|    187|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1571|  10.9k|    } else {
 1572|  10.9k|        struct ofpact_vlan_vid *vlan_vid = ofpact_put_SET_VLAN_VID(out);
 1573|  10.9k|        vlan_vid->vlan_vid = vid;
 1574|  10.9k|        vlan_vid->push_vlan_if_needed = push_vlan_if_needed;
 1575|  10.9k|        return 0;
 1576|  10.9k|    }
 1577|  11.1k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_PCP:
 1691|  1.52k|{
 1692|  1.52k|    return decode_set_vlan_pcp(pcp, true, out);
 1693|  1.52k|}
ofp-actions.c:decode_set_vlan_pcp:
 1676|  2.20k|{
 1677|  2.20k|    if (pcp & ~7) {
  ------------------
  |  Branch (1677:9): [True: 90, False: 2.11k]
  ------------------
 1678|     90|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1679|  2.11k|    } else {
 1680|  2.11k|        struct ofpact_vlan_pcp *vlan_pcp = ofpact_put_SET_VLAN_PCP(out);
 1681|  2.11k|        vlan_pcp->vlan_pcp = pcp;
 1682|  2.11k|        vlan_pcp->push_vlan_if_needed = push_vlan_if_needed;
 1683|  2.11k|        return 0;
 1684|  2.11k|    }
 1685|  2.20k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_VID:
 1591|    734|{
 1592|    734|    return decode_set_vlan_vid(vid, false, out);
 1593|    734|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_PCP:
 1699|    677|{
 1700|    677|    return decode_set_vlan_pcp(pcp, false, out);
 1701|    677|}
ofp-actions.c:decode_OFPAT_RAW11_PUSH_VLAN:
 1848|  5.05k|{
 1849|  5.05k|    struct ofpact_push_vlan *push_vlan;
 1850|  5.05k|    if (!eth_type_vlan(eth_type)) {
  ------------------
  |  Branch (1850:9): [True: 614, False: 4.43k]
  ------------------
 1851|    614|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1852|    614|    }
 1853|  4.43k|    push_vlan = ofpact_put_PUSH_VLAN(out);
 1854|  4.43k|    push_vlan->ethertype = eth_type;
 1855|  4.43k|    return 0;
 1856|  5.05k|}
ofp-actions.c:decode_OFPAT_RAW10_STRIP_VLAN:
 1784|  16.9k|{
 1785|  16.9k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW10_STRIP_VLAN;
 1786|  16.9k|    return 0;
 1787|  16.9k|}
ofp-actions.c:decode_OFPAT_RAW11_POP_VLAN:
 1791|  3.49k|{
 1792|  3.49k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW11_POP_VLAN;
 1793|  3.49k|    return 0;
 1794|  3.49k|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_SRC:
 1927|     54|{
 1928|     54|    ofpact_put_SET_ETH_SRC(out)->mac = a->dl_addr;
 1929|     54|    return 0;
 1930|     54|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_DST:
 1936|     71|{
 1937|     71|    ofpact_put_SET_ETH_DST(out)->mac = a->dl_addr;
 1938|     71|    return 0;
 1939|     71|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_SRC:
 2023|  5.78k|{
 2024|  5.78k|    ofpact_put_SET_IPV4_SRC(out)->ipv4 = ipv4;
 2025|  5.78k|    return 0;
 2026|  5.78k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_DST:
 2032|  10.1k|{
 2033|  10.1k|    ofpact_put_SET_IPV4_DST(out)->ipv4 = ipv4;
 2034|  10.1k|    return 0;
 2035|  10.1k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_TOS:
 2125|  17.7k|{
 2126|  17.7k|    if (dscp & ~IP_DSCP_MASK) {
  ------------------
  |  |  720|  17.7k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (2126:9): [True: 48, False: 17.7k]
  ------------------
 2127|     48|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2128|  17.7k|    } else {
 2129|  17.7k|        ofpact_put_SET_IP_DSCP(out)->dscp = dscp;
 2130|  17.7k|        return 0;
 2131|  17.7k|    }
 2132|  17.7k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_ECN:
 2194|  9.58k|{
 2195|  9.58k|    if (ecn & ~IP_ECN_MASK) {
  ------------------
  |  |  718|  9.58k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (2195:9): [True: 169, False: 9.41k]
  ------------------
 2196|    169|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2197|  9.41k|    } else {
 2198|  9.41k|        ofpact_put_SET_IP_ECN(out)->ecn = ecn;
 2199|  9.41k|        return 0;
 2200|  9.41k|    }
 2201|  9.58k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_SRC:
 2313|  37.2k|{
 2314|  37.2k|    ofpact_put_SET_L4_SRC_PORT(out)->port = ntohs(port);
 2315|  37.2k|    return 0;
 2316|  37.2k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_DST:
 2322|  24.5k|{
 2323|  24.5k|    ofpact_put_SET_L4_DST_PORT(out)->port = ntohs(port);
 2324|  24.5k|    return 0;
 2325|  24.5k|}
ofp-actions.c:decode_OFPAT_RAW10_ENQUEUE:
 1102|  1.95k|{
 1103|  1.95k|    struct ofpact_enqueue *enqueue;
 1104|       |
 1105|  1.95k|    enqueue = ofpact_put_ENQUEUE(out);
 1106|  1.95k|    enqueue->port = u16_to_ofp(ntohs(oae->port));
 1107|  1.95k|    enqueue->queue = ntohl(oae->queue_id);
 1108|  1.95k|    if (ofp_to_u16(enqueue->port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  1.95k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.95k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1108:9): [True: 143, False: 1.80k]
  ------------------
 1109|  1.95k|        && enqueue->port != OFPP_IN_PORT
  ------------------
  |  |   39|    143|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.09k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1109:12): [True: 26, False: 117]
  ------------------
 1110|  1.95k|        && enqueue->port != OFPP_LOCAL) {
  ------------------
  |  |   46|     26|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|     26|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1110:12): [True: 15, False: 11]
  ------------------
 1111|     15|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1112|     15|    }
 1113|  1.93k|    return 0;
 1114|  1.95k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_LABEL:
 3773|  4.25k|{
 3774|  4.25k|    ofpact_put_SET_MPLS_LABEL(out)->label = label;
 3775|  4.25k|    return 0;
 3776|  4.25k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TC:
 3846|  3.23k|{
 3847|  3.23k|    ofpact_put_SET_MPLS_TC(out)->tc = tc;
 3848|  3.23k|    return 0;
 3849|  3.23k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TTL:
 3907|  7.62k|{
 3908|  7.62k|    ofpact_put_SET_MPLS_TTL(out)->ttl = ttl;
 3909|  7.62k|    return 0;
 3910|  7.62k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_MPLS_TTL:
 3963|  21.2k|{
 3964|  21.2k|    ofpact_put_DEC_MPLS_TTL(out);
 3965|  21.2k|    return 0;
 3966|  21.2k|}
ofp-actions.c:decode_OFPAT_RAW_PUSH_MPLS:
 4002|  4.77k|{
 4003|  4.77k|    struct ofpact_push_mpls *oam;
 4004|       |
 4005|  4.77k|    if (!eth_type_mpls(ethertype)) {
  ------------------
  |  Branch (4005:9): [True: 134, False: 4.64k]
  ------------------
 4006|    134|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4007|    134|    }
 4008|  4.64k|    oam = ofpact_put_PUSH_MPLS(out);
 4009|  4.64k|    oam->ethertype = ethertype;
 4010|       |
 4011|  4.64k|    return 0;
 4012|  4.77k|}
ofp-actions.c:decode_OFPAT_RAW_POP_MPLS:
 4067|  15.1k|{
 4068|  15.1k|    ofpact_put_POP_MPLS(out)->ethertype = ethertype;
 4069|  15.1k|    return 0;
 4070|  15.1k|}
ofp-actions.c:decode_OFPAT_RAW_SET_QUEUE:
 4276|  8.12k|{
 4277|  8.12k|    ofpact_put_SET_QUEUE(out)->queue_id = queue_id;
 4278|  8.12k|    return 0;
 4279|  8.12k|}
ofp-actions.c:decode_OFPAT_RAW_GROUP:
  725|  5.24k|{
  726|  5.24k|    ofpact_put_GROUP(out)->group_id = group_id;
  727|  5.24k|    return 0;
  728|  5.24k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_TTL:
 2258|  1.82k|{
 2259|  1.82k|    ofpact_put_SET_IP_TTL(out)->ttl = ttl;
 2260|  1.82k|    return 0;
 2261|  1.82k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_NW_TTL:
 3620|    218|{
 3621|    218|    uint16_t id = 0;
 3622|    218|    struct ofpact_cnt_ids *ids;
 3623|    218|    enum ofperr error = 0;
 3624|       |
 3625|    218|    ids = ofpact_put_DEC_TTL(out);
 3626|    218|    ids->n_controllers = 1;
 3627|    218|    ofpbuf_put(out, &id, sizeof id);
 3628|    218|    ids = out->header;
 3629|    218|    ofpact_finish_DEC_TTL(out, &ids);
 3630|    218|    return error;
 3631|    218|}
ofp-actions.c:decode_NXAST_RAW_DEC_TTL_CNT_IDS:
 3637|  4.09k|{
 3638|  4.09k|    struct ofpact_cnt_ids *ids;
 3639|  4.09k|    size_t ids_size;
 3640|  4.09k|    int i;
 3641|       |
 3642|  4.09k|    ids = ofpact_put_DEC_TTL(out);
 3643|  4.09k|    ids->ofpact.raw = NXAST_RAW_DEC_TTL_CNT_IDS;
 3644|  4.09k|    ids->n_controllers = ntohs(nac_ids->n_controllers);
 3645|  4.09k|    ids_size = ntohs(nac_ids->len) - sizeof *nac_ids;
 3646|       |
 3647|  4.09k|    if (!is_all_zeros(nac_ids->zeros, sizeof nac_ids->zeros)) {
  ------------------
  |  Branch (3647:9): [True: 563, False: 3.53k]
  ------------------
 3648|    563|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3649|    563|    }
 3650|       |
 3651|  3.53k|    if (ids_size < ids->n_controllers * sizeof(ovs_be16)) {
  ------------------
  |  Branch (3651:9): [True: 405, False: 3.12k]
  ------------------
 3652|    405|        VLOG_WARN_RL(&rl, "Nicira action dec_ttl_cnt_ids only has %"PRIuSIZE" "
  ------------------
  |  |  223|    405|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    405|    do {                                                                \
  |  |  |  |  287|    405|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    405|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 405]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    405|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3653|    405|                     "bytes allocated for controller ids.  %"PRIuSIZE" bytes "
 3654|    405|                     "are required for %u controllers.",
 3655|    405|                     ids_size, ids->n_controllers * sizeof(ovs_be16),
 3656|    405|                     ids->n_controllers);
 3657|    405|        return OFPERR_OFPBAC_BAD_LEN;
 3658|    405|    }
 3659|       |
 3660|  10.5k|    for (i = 0; i < ids->n_controllers; i++) {
  ------------------
  |  Branch (3660:17): [True: 7.40k, False: 3.12k]
  ------------------
 3661|  7.40k|        uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
 3662|  7.40k|        ofpbuf_put(out, &id, sizeof id);
 3663|  7.40k|        ids = out->header;
 3664|  7.40k|    }
 3665|       |
 3666|  3.12k|    ofpact_finish_DEC_TTL(out, &ids);
 3667|       |
 3668|  3.12k|    return 0;
 3669|  3.53k|}
ofp-actions.c:decode_OFPAT_RAW12_SET_FIELD:
 2858|  11.7k|{
 2859|  11.7k|    return decode_ofpat_set_field(oasf, false, vl_mff_map, tlv_bitmap,
 2860|  11.7k|                                  ofpacts);
 2861|  11.7k|}
ofp-actions.c:decode_ofpat_set_field:
 2797|  11.7k|{
 2798|  11.7k|    struct ofpbuf b = ofpbuf_const_initializer(oasf, ntohs(oasf->len));
 2799|  11.7k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad));
  ------------------
  |  |  104|  11.7k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2800|       |
 2801|  11.7k|    union mf_value value, mask;
 2802|  11.7k|    const struct mf_field *field;
 2803|  11.7k|    enum ofperr error;
 2804|  11.7k|    error  = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value,
 2805|  11.7k|                                     may_mask ? &mask : NULL, tlv_bitmap);
  ------------------
  |  Branch (2805:38): [True: 35, False: 11.7k]
  ------------------
 2806|  11.7k|    if (error) {
  ------------------
  |  Branch (2806:9): [True: 1.64k, False: 10.1k]
  ------------------
 2807|  1.64k|        return (error == OFPERR_OFPBMC_BAD_MASK
  ------------------
  |  Branch (2807:17): [True: 1.04k, False: 603]
  ------------------
 2808|  1.64k|                ? OFPERR_OFPBAC_BAD_SET_MASK
 2809|  1.64k|                : error);
 2810|  1.64k|    }
 2811|       |
 2812|  10.1k|    if (!may_mask) {
  ------------------
  |  Branch (2812:9): [True: 10.1k, False: 31]
  ------------------
 2813|  10.1k|        memset(&mask, 0xff, field->n_bytes);
 2814|  10.1k|    }
 2815|       |
 2816|  10.1k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2816:9): [True: 277, False: 9.86k]
  ------------------
 2817|    277|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2818|    277|    }
 2819|       |
 2820|       |    /* OpenFlow says specifically that one may not set OXM_OF_IN_PORT via
 2821|       |     * Set-Field. */
 2822|  9.86k|    if (field->id == MFF_IN_PORT_OXM) {
  ------------------
  |  Branch (2822:9): [True: 173, False: 9.69k]
  ------------------
 2823|    173|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2824|    173|    }
 2825|       |
 2826|       |    /* oxm_length is now validated to be compatible with mf_value. */
 2827|  9.69k|    if (!field->writable) {
  ------------------
  |  Branch (2827:9): [True: 10, False: 9.68k]
  ------------------
 2828|     10|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  223|     10|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     10|    do {                                                                \
  |  |  |  |  287|     10|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     10|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2829|     10|                     field->name);
 2830|     10|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2831|     10|    }
 2832|       |
 2833|       |    /* The value must be valid for match.  OpenFlow 1.5 also says,
 2834|       |     * "In an OXM_OF_VLAN_VID set-field action, the OFPVID_PRESENT bit must be
 2835|       |     * a 1-bit in oxm_value and in oxm_mask." */
 2836|  9.68k|    if (!mf_is_value_valid(field, &value)
  ------------------
  |  Branch (2836:9): [True: 26, False: 9.65k]
  ------------------
 2837|  9.68k|        || (field->id == MFF_VLAN_VID
  ------------------
  |  Branch (2837:13): [True: 34, False: 9.62k]
  ------------------
 2838|  9.65k|            && (!(mask.be16 & htons(OFPVID12_PRESENT))
  ------------------
  |  Branch (2838:17): [True: 0, False: 34]
  ------------------
 2839|     36|                || !(value.be16 & htons(OFPVID12_PRESENT))))) {
  ------------------
  |  Branch (2839:20): [True: 10, False: 24]
  ------------------
 2840|     36|        struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   44|     36|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 2841|     36|        mf_format(field, &value, NULL, NULL, &ds);
 2842|     36|        VLOG_WARN_RL(&rl, "Invalid value for set field %s: %s",
  ------------------
  |  |  223|     36|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     36|    do {                                                                \
  |  |  |  |  287|     36|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     36|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 36]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     36|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2843|     36|                     field->name, ds_cstr(&ds));
 2844|     36|        ds_destroy(&ds);
 2845|       |
 2846|     36|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2847|     36|    }
 2848|       |
 2849|  9.64k|    ofpact_put_set_field(ofpacts, field, &value, &mask);
 2850|  9.64k|    return 0;
 2851|  9.68k|}
ofp-actions.c:decode_OFPAT_RAW15_SET_FIELD:
 2868|     35|{
 2869|     35|    return decode_ofpat_set_field(oasf, true, vl_mff_map, tlv_bitmap, ofpacts);
 2870|     35|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD:
 2877|  11.8k|{
 2878|  11.8k|    struct mf_subfield dst;
 2879|  11.8k|    enum ofperr error;
 2880|       |
 2881|  11.8k|    dst.ofs = nxm_decode_ofs(narl->ofs_nbits);
 2882|  11.8k|    dst.n_bits = nxm_decode_n_bits(narl->ofs_nbits);
 2883|  11.8k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(narl->dst), vl_mff_map,
 2884|  11.8k|                                         &dst.field, tlv_bitmap);
 2885|  11.8k|    if (error) {
  ------------------
  |  Branch (2885:9): [True: 1.68k, False: 10.1k]
  ------------------
 2886|  1.68k|        return error;
 2887|  1.68k|    }
 2888|       |
 2889|  10.1k|    error = mf_check_dst(&dst, NULL);
 2890|  10.1k|    if (error) {
  ------------------
  |  Branch (2890:9): [True: 1.42k, False: 8.76k]
  ------------------
 2891|  1.42k|        return error;
 2892|  1.42k|    }
 2893|       |
 2894|       |    /* Reject 'narl' if a bit numbered 'n_bits' or higher is set to 1 in
 2895|       |     * narl->value. */
 2896|  8.76k|    if (dst.n_bits < 64 && ntohll(narl->value) >> dst.n_bits) {
  ------------------
  |  Branch (2896:9): [True: 7.91k, False: 850]
  |  Branch (2896:28): [True: 558, False: 7.35k]
  ------------------
 2897|    558|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2898|    558|    }
 2899|       |
 2900|  8.20k|    struct ofpact_set_field *sf = ofpact_put_reg_load(out, dst.field, NULL,
 2901|  8.20k|                                                      NULL);
 2902|  8.20k|    bitwise_put(ntohll(narl->value),
 2903|  8.20k|                sf->value, dst.field->n_bytes, dst.ofs,
 2904|  8.20k|                dst.n_bits);
 2905|  8.20k|    bitwise_put(UINT64_MAX,
 2906|  8.20k|                ofpact_set_field_mask(sf), dst.field->n_bytes, dst.ofs,
  ------------------
  |  |  563|  8.20k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|  8.20k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  8.20k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  8.20k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2907|  8.20k|                dst.n_bits);
 2908|  8.20k|    return 0;
 2909|  8.76k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD2:
 2916|  14.5k|{
 2917|  14.5k|    struct ofpbuf b = ofpbuf_const_initializer(eah, ntohs(eah->len));
 2918|  14.5k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(eah, pad));
  ------------------
  |  |  104|  14.5k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2919|       |
 2920|  14.5k|    union mf_value value, mask;
 2921|  14.5k|    const struct mf_field *field;
 2922|  14.5k|    enum ofperr error;
 2923|  14.5k|    error = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value, &mask,
 2924|  14.5k|                                    tlv_bitmap);
 2925|  14.5k|    if (error) {
  ------------------
  |  Branch (2925:9): [True: 6.27k, False: 8.28k]
  ------------------
 2926|  6.27k|        return error;
 2927|  6.27k|    }
 2928|       |
 2929|  8.28k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2929:9): [True: 23, False: 8.26k]
  ------------------
 2930|     23|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2931|     23|    }
 2932|       |
 2933|  8.26k|    if (!field->writable) {
  ------------------
  |  Branch (2933:9): [True: 10, False: 8.25k]
  ------------------
 2934|     10|        VLOG_WARN_RL(&rl, "destination field %s is not writable", field->name);
  ------------------
  |  |  223|     10|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     10|    do {                                                                \
  |  |  |  |  287|     10|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     10|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     10|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2935|     10|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2936|     10|    }
 2937|       |
 2938|       |    /* Put value and mask. */
 2939|  8.25k|    ofpact_put_reg_load2(out, field, &value, &mask);
 2940|  8.25k|    return 0;
 2941|  8.26k|}
ofp-actions.c:decode_OFPAT_RAW15_COPY_FIELD:
 2618|    233|{
 2619|    233|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2620|    233|                               oacf->n_bits, oacf, oacf->len,
 2621|    233|                               OBJECT_OFFSETOF(oacf, pad2), vl_mff_map,
  ------------------
  |  |  104|    233|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2622|    233|                               tlv_bitmap, ofpacts);
 2623|    233|}
ofp-actions.c:decode_copy_field__:
 2582|    233|{
 2583|    233|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2584|    233|    enum ofperr error;
 2585|       |
 2586|    233|    move->ofpact.raw = ONFACT_RAW13_COPY_FIELD;
 2587|    233|    move->src.ofs = ntohs(src_offset);
 2588|    233|    move->src.n_bits = ntohs(n_bits);
 2589|    233|    move->dst.ofs = ntohs(dst_offset);
 2590|    233|    move->dst.n_bits = ntohs(n_bits);
 2591|       |
 2592|    233|    struct ofpbuf b = ofpbuf_const_initializer(action, ntohs(action_len));
 2593|    233|    ofpbuf_pull(&b, oxm_offset);
 2594|       |
 2595|    233|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2596|    233|                                     tlv_bitmap);
 2597|    233|    if (error) {
  ------------------
  |  Branch (2597:9): [True: 17, False: 216]
  ------------------
 2598|     17|        return error;
 2599|     17|    }
 2600|    216|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2601|    216|                                     tlv_bitmap);
 2602|    216|    if (error) {
  ------------------
  |  Branch (2602:9): [True: 70, False: 146]
  ------------------
 2603|     70|        return error;
 2604|     70|    }
 2605|       |
 2606|    146|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2606:9): [True: 135, False: 11]
  ------------------
 2607|    135|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2608|    135|    }
 2609|       |
 2610|     11|    return nxm_reg_move_check(move, NULL);
 2611|    146|}
ofp-actions.c:decode_NXAST_RAW_REG_MOVE:
 2642|  1.90k|{
 2643|  1.90k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2644|  1.90k|    enum ofperr error;
 2645|       |
 2646|  1.90k|    move->ofpact.raw = NXAST_RAW_REG_MOVE;
 2647|  1.90k|    move->src.ofs = ntohs(narm->src_ofs);
 2648|  1.90k|    move->src.n_bits = ntohs(narm->n_bits);
 2649|  1.90k|    move->dst.ofs = ntohs(narm->dst_ofs);
 2650|  1.90k|    move->dst.n_bits = ntohs(narm->n_bits);
 2651|       |
 2652|  1.90k|    struct ofpbuf b = ofpbuf_const_initializer(narm, ntohs(narm->len));
 2653|  1.90k|    ofpbuf_pull(&b, sizeof *narm);
 2654|       |
 2655|  1.90k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2656|  1.90k|                                     tlv_bitmap);
 2657|  1.90k|    if (error) {
  ------------------
  |  Branch (2657:9): [True: 564, False: 1.34k]
  ------------------
 2658|    564|        return error;
 2659|    564|    }
 2660|       |
 2661|  1.34k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2662|  1.34k|                                     tlv_bitmap);
 2663|  1.34k|    if (error) {
  ------------------
  |  Branch (2663:9): [True: 226, False: 1.11k]
  ------------------
 2664|    226|        return error;
 2665|    226|    }
 2666|       |
 2667|  1.11k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2667:9): [True: 10, False: 1.10k]
  ------------------
 2668|     10|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2669|     10|    }
 2670|       |
 2671|  1.10k|    return nxm_reg_move_check(move, NULL);
 2672|  1.11k|}
ofp-actions.c:decode_OFPAT_RAW15_METER:
 7374|  11.8k|{
 7375|  11.8k|    struct ofpact_meter *om = ofpact_put_METER(out);
 7376|  11.8k|    om->meter_id = meter_id;
 7377|  11.8k|    om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 7378|  11.8k|    return 0;
 7379|  11.8k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT:
 4925|  1.00k|{
 4926|  1.00k|    struct ofpact_resubmit *resubmit;
 4927|       |
 4928|  1.00k|    resubmit = ofpact_put_RESUBMIT(out);
 4929|  1.00k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT;
 4930|  1.00k|    resubmit->in_port = u16_to_ofp(port);
 4931|  1.00k|    resubmit->table_id = 0xff;
 4932|  1.00k|    return 0;
 4933|  1.00k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE:
 4939|  5.85k|{
 4940|  5.85k|    struct ofpact_resubmit *resubmit;
 4941|       |
 4942|  5.85k|    if (nar->pad[0] || nar->pad[1] || nar->pad[2]) {
  ------------------
  |  Branch (4942:9): [True: 1.13k, False: 4.71k]
  |  Branch (4942:24): [True: 1.00k, False: 3.71k]
  |  Branch (4942:39): [True: 581, False: 3.13k]
  ------------------
 4943|  2.72k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4944|  2.72k|    }
 4945|       |
 4946|  3.13k|    resubmit = ofpact_put_RESUBMIT(out);
 4947|  3.13k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE;
 4948|  3.13k|    resubmit->in_port = u16_to_ofp(ntohs(nar->in_port));
 4949|  3.13k|    resubmit->table_id = nar->table;
 4950|  3.13k|    return 0;
 4951|  5.85k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE_CT:
 4957|  5.51k|{
 4958|  5.51k|    enum ofperr error = decode_NXAST_RAW_RESUBMIT_TABLE(nar, ofp_version, out);
 4959|  5.51k|    if (error) {
  ------------------
  |  Branch (4959:9): [True: 2.61k, False: 2.90k]
  ------------------
 4960|  2.61k|        return error;
 4961|  2.61k|    }
 4962|  2.90k|    struct ofpact_resubmit *resubmit = out->header;
 4963|  2.90k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE_CT;
 4964|  2.90k|    resubmit->with_ct_orig = true;
 4965|  2.90k|    return 0;
 4966|  5.51k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL:
 4119|  6.28k|{
 4120|  6.28k|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4121|  6.28k|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL;
 4122|  6.28k|    tunnel->tun_id = tun_id;
 4123|  6.28k|    return 0;
 4124|  6.28k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL64:
 4130|    302|{
 4131|    302|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4132|    302|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL64;
 4133|    302|    tunnel->tun_id = tun_id;
 4134|    302|    return 0;
 4135|    302|}
ofp-actions.c:decode_NXAST_RAW_POP_QUEUE:
 4313|  15.1k|{
 4314|  15.1k|    ofpact_put_POP_QUEUE(out);
 4315|  15.1k|    return 0;
 4316|  15.1k|}
ofp-actions.c:decode_NXAST_RAW_NOTE:
 5905|  24.1k|{
 5906|  24.1k|    struct ofpact_note *note;
 5907|  24.1k|    unsigned int length;
 5908|       |
 5909|  24.1k|    length = ntohs(nan->len) - offsetof(struct nx_action_note, note);
 5910|  24.1k|    note = ofpact_put_NOTE(out);
 5911|  24.1k|    note->length = length;
 5912|  24.1k|    ofpbuf_put(out, nan->note, length);
 5913|  24.1k|    note = out->header;
 5914|  24.1k|    ofpact_finish_NOTE(out, &note);
 5915|       |
 5916|  24.1k|    return 0;
 5917|  24.1k|}
ofp-actions.c:decode_NXAST_RAW_MULTIPATH:
 5810|  6.18k|{
 5811|  6.18k|    uint32_t n_links = ntohs(nam->max_link) + 1;
 5812|  6.18k|    size_t min_n_bits = log_2_ceil(n_links);
 5813|  6.18k|    struct ofpact_multipath *mp;
 5814|  6.18k|    enum ofperr error;
 5815|       |
 5816|  6.18k|    mp = ofpact_put_MULTIPATH(out);
 5817|  6.18k|    mp->fields = ntohs(nam->fields);
 5818|  6.18k|    mp->basis = ntohs(nam->basis);
 5819|  6.18k|    mp->algorithm = ntohs(nam->algorithm);
 5820|  6.18k|    mp->max_link = ntohs(nam->max_link);
 5821|  6.18k|    mp->arg = ntohl(nam->arg);
 5822|  6.18k|    mp->dst.ofs = nxm_decode_ofs(nam->ofs_nbits);
 5823|  6.18k|    mp->dst.n_bits = nxm_decode_n_bits(nam->ofs_nbits);
 5824|  6.18k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(nam->dst), vl_mff_map,
 5825|  6.18k|                                         &mp->dst.field, tlv_bitmap);
 5826|  6.18k|    if (error) {
  ------------------
  |  Branch (5826:9): [True: 1.16k, False: 5.02k]
  ------------------
 5827|  1.16k|        return error;
 5828|  1.16k|    }
 5829|       |
 5830|  5.02k|    if (!flow_hash_fields_valid(mp->fields)) {
  ------------------
  |  Branch (5830:9): [True: 182, False: 4.84k]
  ------------------
 5831|    182|        VLOG_WARN_RL(&rl, "unsupported fields %d", (int) mp->fields);
  ------------------
  |  |  223|    182|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    182|    do {                                                                \
  |  |  |  |  287|    182|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    182|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 182]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    182|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5832|    182|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5833|  4.84k|    } else if (mp->algorithm != NX_MP_ALG_MODULO_N
  ------------------
  |  Branch (5833:16): [True: 4.75k, False: 90]
  ------------------
 5834|  4.84k|               && mp->algorithm != NX_MP_ALG_HASH_THRESHOLD
  ------------------
  |  Branch (5834:19): [True: 4.59k, False: 151]
  ------------------
 5835|  4.84k|               && mp->algorithm != NX_MP_ALG_HRW
  ------------------
  |  Branch (5835:19): [True: 2.89k, False: 1.70k]
  ------------------
 5836|  4.84k|               && mp->algorithm != NX_MP_ALG_ITER_HASH) {
  ------------------
  |  Branch (5836:19): [True: 864, False: 2.03k]
  ------------------
 5837|    864|        VLOG_WARN_RL(&rl, "unsupported algorithm %d", (int) mp->algorithm);
  ------------------
  |  |  223|    864|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    864|    do {                                                                \
  |  |  |  |  287|    864|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    864|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 864]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    864|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5838|    864|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5839|  3.97k|    } else if (mp->dst.n_bits < min_n_bits) {
  ------------------
  |  Branch (5839:16): [True: 139, False: 3.83k]
  ------------------
 5840|    139|        VLOG_WARN_RL(&rl, "multipath action requires at least %"PRIuSIZE" bits for "
  ------------------
  |  |  223|    139|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    139|    do {                                                                \
  |  |  |  |  287|    139|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    139|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 139]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    139|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5841|    139|                     "%"PRIu32" links", min_n_bits, n_links);
 5842|    139|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5843|    139|    }
 5844|       |
 5845|  3.83k|    return multipath_check(mp, NULL);
 5846|  5.02k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE:
 1494|  8.26k|{
 1495|  8.26k|    return decode_bundle(false, nab, NULL, NULL, out);
 1496|  8.26k|}
ofp-actions.c:decode_bundle:
 1411|  14.2k|{
 1412|  14.2k|    static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  14.2k|        {                                                                 \
  |  |  111|  14.2k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  56.9k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  14.2k|            0,                              /* first_dropped */           \
  |  |  113|  14.2k|            0,                              /* last_dropped */            \
  |  |  114|  14.2k|            0,                              /* n_dropped */               \
  |  |  115|  14.2k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  14.2k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  14.2k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  14.2k|        }
  ------------------
 1413|  14.2k|    struct ofpact_bundle *bundle;
 1414|  14.2k|    uint32_t member_type;
 1415|  14.2k|    size_t members_size, i;
 1416|  14.2k|    enum ofperr error;
 1417|       |
 1418|  14.2k|    bundle = ofpact_put_BUNDLE(ofpacts);
 1419|       |
 1420|  14.2k|    bundle->n_members = ntohs(nab->n_members);
 1421|  14.2k|    bundle->basis = ntohs(nab->basis);
 1422|  14.2k|    bundle->fields = ntohs(nab->fields);
 1423|  14.2k|    bundle->algorithm = ntohs(nab->algorithm);
 1424|  14.2k|    member_type = ntohl(nab->member_type);
 1425|  14.2k|    members_size = ntohs(nab->len) - sizeof *nab;
 1426|       |
 1427|  14.2k|    error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1428|  14.2k|    if (!flow_hash_fields_valid(bundle->fields)) {
  ------------------
  |  Branch (1428:9): [True: 6.77k, False: 7.46k]
  ------------------
 1429|  6.77k|        VLOG_WARN_RL(&rll, "unsupported fields %d", (int) bundle->fields);
  ------------------
  |  |  223|  6.77k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  6.77k|    do {                                                                \
  |  |  |  |  287|  6.77k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  6.77k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 6.77k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  6.77k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1430|  7.46k|    } else if (bundle->n_members > BUNDLE_MAX_MEMBERS) {
  ------------------
  |  |   43|  7.46k|#define BUNDLE_MAX_MEMBERS 2048
  ------------------
  |  Branch (1430:16): [True: 218, False: 7.24k]
  ------------------
 1431|    218|        VLOG_WARN_RL(&rll, "too many members");
  ------------------
  |  |  223|    218|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    218|    do {                                                                \
  |  |  |  |  287|    218|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    218|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 218]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    218|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1432|  7.24k|    } else if (bundle->algorithm != NX_BD_ALG_HRW
  ------------------
  |  Branch (1432:16): [True: 7.21k, False: 35]
  ------------------
 1433|  7.24k|               && bundle->algorithm != NX_BD_ALG_ACTIVE_BACKUP) {
  ------------------
  |  Branch (1433:19): [True: 406, False: 6.80k]
  ------------------
 1434|    406|        VLOG_WARN_RL(&rll, "unsupported algorithm %d", (int) bundle->algorithm);
  ------------------
  |  |  223|    406|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    406|    do {                                                                \
  |  |  |  |  287|    406|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    406|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 406]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    406|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|  6.84k|    } else if (member_type != mf_nxm_header(MFF_IN_PORT)) {
  ------------------
  |  Branch (1435:16): [True: 3.47k, False: 3.36k]
  ------------------
 1436|  3.47k|        VLOG_WARN_RL(&rll, "unsupported member type %"PRIu32, member_type);
  ------------------
  |  |  223|  3.47k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  3.47k|    do {                                                                \
  |  |  |  |  287|  3.47k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  3.47k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 3.47k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  3.47k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1437|  3.47k|    } else {
 1438|  3.36k|        error = 0;
 1439|  3.36k|    }
 1440|       |
 1441|  14.2k|    if (!is_all_zeros(nab->zero, sizeof nab->zero)) {
  ------------------
  |  Branch (1441:9): [True: 10.4k, False: 3.76k]
  ------------------
 1442|  10.4k|        VLOG_WARN_RL(&rll, "reserved field is nonzero");
  ------------------
  |  |  223|  10.4k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  10.4k|    do {                                                                \
  |  |  |  |  287|  10.4k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  10.4k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10.4k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  10.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1443|  10.4k|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1444|  10.4k|    }
 1445|       |
 1446|  14.2k|    if (load) {
  ------------------
  |  Branch (1446:9): [True: 5.97k, False: 8.26k]
  ------------------
 1447|  5.97k|        bundle->dst.ofs = nxm_decode_ofs(nab->ofs_nbits);
 1448|  5.97k|        bundle->dst.n_bits = nxm_decode_n_bits(nab->ofs_nbits);
 1449|  5.97k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nab->dst), vl_mff_map,
 1450|  5.97k|                                             &bundle->dst.field, tlv_bitmap);
 1451|  5.97k|        if (error) {
  ------------------
  |  Branch (1451:13): [True: 928, False: 5.04k]
  ------------------
 1452|    928|            return error;
 1453|    928|        }
 1454|       |
 1455|  5.04k|        if (bundle->dst.n_bits < 16) {
  ------------------
  |  Branch (1455:13): [True: 12, False: 5.03k]
  ------------------
 1456|     12|            VLOG_WARN_RL(&rll, "bundle_load action requires at least 16 bit "
  ------------------
  |  |  223|     12|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     12|    do {                                                                \
  |  |  |  |  287|     12|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     12|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 12]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     12|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1457|     12|                         "destination.");
 1458|     12|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1459|     12|        }
 1460|  8.26k|    } else {
 1461|  8.26k|        if (nab->ofs_nbits || nab->dst) {
  ------------------
  |  Branch (1461:13): [True: 3.61k, False: 4.65k]
  |  Branch (1461:31): [True: 957, False: 3.70k]
  ------------------
 1462|  4.56k|            VLOG_WARN_RL(&rll, "bundle action has nonzero reserved fields");
  ------------------
  |  |  223|  4.56k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  4.56k|    do {                                                                \
  |  |  |  |  287|  4.56k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  4.56k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 4.56k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  4.56k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1463|  4.56k|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1464|  4.56k|        }
 1465|  8.26k|    }
 1466|       |
 1467|  13.3k|    if (members_size < bundle->n_members * sizeof(ovs_be16)) {
  ------------------
  |  Branch (1467:9): [True: 2.41k, False: 10.9k]
  ------------------
 1468|  2.41k|        VLOG_WARN_RL(&rll, "Nicira action %s only has %"PRIuSIZE" bytes "
  ------------------
  |  |  223|  2.41k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.41k|    do {                                                                \
  |  |  |  |  287|  2.41k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.41k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.41k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.41k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1469|  2.41k|                     "allocated for members.  %"PRIuSIZE" bytes are "
 1470|  2.41k|                     "required for %u members.",
 1471|  2.41k|                     load ? "bundle_load" : "bundle", members_size,
 1472|  2.41k|                     bundle->n_members * sizeof(ovs_be16), bundle->n_members);
 1473|  2.41k|        error = OFPERR_OFPBAC_BAD_LEN;
 1474|  10.9k|    } else {
 1475|  67.1k|        for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (1475:21): [True: 56.2k, False: 10.9k]
  ------------------
 1476|  56.2k|            ofp_port_t ofp_port
 1477|  56.2k|                = u16_to_ofp(ntohs(((ovs_be16 *)(nab + 1))[i]));
 1478|  56.2k|            ofpbuf_put(ofpacts, &ofp_port, sizeof ofp_port);
 1479|  56.2k|            bundle = ofpacts->header;
 1480|  56.2k|        }
 1481|  10.9k|    }
 1482|       |
 1483|  13.3k|    ofpact_finish_BUNDLE(ofpacts, &bundle);
 1484|  13.3k|    if (!error) {
  ------------------
  |  Branch (1484:9): [True: 8.24k, False: 5.06k]
  ------------------
 1485|  8.24k|        error = bundle_check(bundle, OFPP_MAX, NULL);
  ------------------
  |  |   33|  8.24k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  8.24k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 1486|  8.24k|    }
 1487|  13.3k|    return error;
 1488|  14.2k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE_LOAD:
 1503|  5.97k|{
 1504|  5.97k|    return decode_bundle(true, nab, vl_mff_map, tlv_bitmap, out);
 1505|  5.97k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG:
 1234|     40|{
 1235|     40|    struct ofpact_output_reg *output_reg;
 1236|     40|    enum ofperr error;
 1237|       |
 1238|     40|    if (!is_all_zeros(naor->zero, sizeof naor->zero)) {
  ------------------
  |  Branch (1238:9): [True: 10, False: 30]
  ------------------
 1239|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1240|     10|    }
 1241|       |
 1242|     30|    output_reg = ofpact_put_OUTPUT_REG(out);
 1243|     30|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG;
 1244|     30|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1245|     30|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1246|     30|    output_reg->max_len = ntohs(naor->max_len);
 1247|     30|    error = mf_vl_mff_mf_from_nxm_header(ntohl(naor->src), vl_mff_map,
 1248|     30|                                         &output_reg->src.field, tlv_bitmap);
 1249|     30|    if (error) {
  ------------------
  |  Branch (1249:9): [True: 18, False: 12]
  ------------------
 1250|     18|        return error;
 1251|     18|    }
 1252|       |
 1253|     12|    return mf_check_src(&output_reg->src, NULL);
 1254|     30|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG2:
 1261|    269|{
 1262|    269|    struct ofpact_output_reg *output_reg;
 1263|    269|    enum ofperr error;
 1264|       |
 1265|    269|    output_reg = ofpact_put_OUTPUT_REG(out);
 1266|    269|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG2;
 1267|    269|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1268|    269|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1269|    269|    output_reg->max_len = ntohs(naor->max_len);
 1270|       |
 1271|    269|    struct ofpbuf b = ofpbuf_const_initializer(naor, ntohs(naor->len));
 1272|    269|    ofpbuf_pull(&b, OBJECT_OFFSETOF(naor, pad));
  ------------------
  |  |  104|    269|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 1273|       |
 1274|    269|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &output_reg->src.field,
 1275|    269|                                     NULL, tlv_bitmap);
 1276|    269|    if (error) {
  ------------------
  |  Branch (1276:9): [True: 202, False: 67]
  ------------------
 1277|    202|        return error;
 1278|    202|    }
 1279|       |
 1280|     67|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (1280:9): [True: 47, False: 20]
  ------------------
 1281|     47|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1282|     47|    }
 1283|       |
 1284|     20|    return mf_check_src(&output_reg->src, NULL);
 1285|     67|}
ofp-actions.c:decode_NXAST_RAW_LEARN:
 5482|  46.2k|{
 5483|  46.2k|    struct ofpact_learn *learn;
 5484|  46.2k|    enum ofperr error;
 5485|       |
 5486|  46.2k|    learn = ofpact_put_LEARN(ofpacts);
 5487|       |
 5488|  46.2k|    error = decode_LEARN_common(nal, NXAST_RAW_LEARN, learn);
 5489|  46.2k|    if (error) {
  ------------------
  |  Branch (5489:9): [True: 4.23k, False: 42.0k]
  ------------------
 5490|  4.23k|        return error;
 5491|  4.23k|    }
 5492|       |
 5493|  42.0k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5493:9): [True: 927, False: 41.0k]
  ------------------
 5494|  42.0k|                         NX_LEARN_F_DELETE_LEARNED)) {
 5495|    927|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5496|    927|    }
 5497|       |
 5498|  41.0k|    return decode_LEARN_specs(nal + 1, (char *) nal + ntohs(nal->len),
 5499|  41.0k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5500|  42.0k|}
ofp-actions.c:decode_LEARN_common:
 5371|  49.5k|{
 5372|  49.5k|    if (nal->pad) {
  ------------------
  |  Branch (5372:9): [True: 4.49k, False: 45.0k]
  ------------------
 5373|  4.49k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5374|  4.49k|    }
 5375|       |
 5376|  45.0k|    learn->ofpact.raw = raw;
 5377|  45.0k|    learn->idle_timeout = ntohs(nal->idle_timeout);
 5378|  45.0k|    learn->hard_timeout = ntohs(nal->hard_timeout);
 5379|  45.0k|    learn->priority = ntohs(nal->priority);
 5380|  45.0k|    learn->cookie = nal->cookie;
 5381|  45.0k|    learn->table_id = nal->table_id;
 5382|  45.0k|    learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
 5383|  45.0k|    learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
 5384|  45.0k|    learn->flags = ntohs(nal->flags);
 5385|       |
 5386|  45.0k|    if (learn->table_id == 0xff) {
  ------------------
  |  Branch (5386:9): [True: 227, False: 44.8k]
  ------------------
 5387|    227|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5388|    227|    }
 5389|       |
 5390|  44.8k|    return 0;
 5391|  45.0k|}
ofp-actions.c:decode_LEARN_specs:
 5397|  43.3k|{
 5398|  43.3k|    struct ofpact_learn *learn = ofpacts->header;
 5399|       |
 5400|   108k|    while (p != end) {
  ------------------
  |  Branch (5400:12): [True: 99.5k, False: 8.70k]
  ------------------
 5401|  99.5k|        struct ofpact_learn_spec *spec;
 5402|  99.5k|        uint16_t header = ntohs(get_be16(&p));
 5403|       |
 5404|  99.5k|        if (!header) {
  ------------------
  |  Branch (5404:13): [True: 24.2k, False: 75.3k]
  ------------------
 5405|  24.2k|            break;
 5406|  24.2k|        }
 5407|       |
 5408|  75.3k|        spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
 5409|  75.3k|        learn = ofpacts->header;
 5410|       |
 5411|  75.3k|        spec->src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  75.3k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5412|  75.3k|        spec->dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  75.3k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5413|  75.3k|        spec->n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  75.3k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5414|       |
 5415|       |        /* Check for valid src and dst type combination. */
 5416|  75.3k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   150k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5416:13): [True: 65.4k, False: 9.93k]
  ------------------
 5417|  75.3k|            spec->dst_type == NX_LEARN_DST_LOAD ||
  ------------------
  |  |  826|  85.2k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5417:13): [True: 3.47k, False: 6.45k]
  ------------------
 5418|  75.3k|            (spec->dst_type == NX_LEARN_DST_OUTPUT &&
  ------------------
  |  |  827|  12.9k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (5418:14): [True: 3.49k, False: 2.96k]
  ------------------
 5419|  71.9k|             spec->src_type == NX_LEARN_SRC_FIELD)) {
  ------------------
  |  |  821|  3.49k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5419:14): [True: 3.04k, False: 454]
  ------------------
 5420|       |            /* OK. */
 5421|  71.9k|        } else {
 5422|  3.41k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 5423|  3.41k|        }
 5424|       |
 5425|       |        /* Check that the arguments don't overrun the end of the action. */
 5426|  71.9k|        if ((char *) end - (char *) p < learn_min_len(header)) {
  ------------------
  |  Branch (5426:13): [True: 1.17k, False: 70.7k]
  ------------------
 5427|  1.17k|            return OFPERR_OFPBAC_BAD_LEN;
 5428|  1.17k|        }
 5429|       |
 5430|       |        /* Get the source. */
 5431|  70.7k|        const uint8_t *imm = NULL;
 5432|  70.7k|        unsigned int imm_bytes = 0;
 5433|  70.7k|        enum ofperr error;
 5434|  70.7k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  70.7k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5434:13): [True: 4.17k, False: 66.6k]
  ------------------
 5435|  4.17k|            error = get_subfield(spec->n_bits, &p, &spec->src, vl_mff_map,
 5436|  4.17k|                                 tlv_bitmap);
 5437|  4.17k|            if (error) {
  ------------------
  |  Branch (5437:17): [True: 977, False: 3.19k]
  ------------------
 5438|    977|                return error;
 5439|    977|            }
 5440|  66.6k|        } else {
 5441|  66.6k|            int p_bytes = 2 * DIV_ROUND_UP(spec->n_bits, 16);
  ------------------
  |  |  296|  66.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5442|  66.6k|            p = (const uint8_t *) p + p_bytes;
 5443|       |
 5444|  66.6k|            imm_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  296|  66.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5445|  66.6k|            imm = (const uint8_t *) p - imm_bytes;
 5446|  66.6k|        }
 5447|       |
 5448|       |        /* Get the destination. */
 5449|  69.7k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   139k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5449:13): [True: 63.7k, False: 6.07k]
  ------------------
 5450|  69.7k|            spec->dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  6.07k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5450:13): [True: 3.33k, False: 2.74k]
  ------------------
 5451|  67.0k|            error = get_subfield(spec->n_bits, &p, &spec->dst, vl_mff_map,
 5452|  67.0k|                                 tlv_bitmap);
 5453|  67.0k|            if (error) {
  ------------------
  |  Branch (5453:17): [True: 4.86k, False: 62.1k]
  ------------------
 5454|  4.86k|                return error;
 5455|  4.86k|            }
 5456|  67.0k|        }
 5457|       |
 5458|  64.9k|        if (imm) {
  ------------------
  |  Branch (5458:13): [True: 62.0k, False: 2.89k]
  ------------------
 5459|  62.0k|            uint8_t *src_imm = ofpbuf_put_zeros(ofpacts,
 5460|  62.0k|                                                OFPACT_ALIGN(imm_bytes));
  ------------------
  |  |  205|  62.0k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  299|  62.0k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|  62.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5461|  62.0k|            memcpy(src_imm, imm, imm_bytes);
 5462|       |
 5463|  62.0k|            learn = ofpacts->header;
 5464|  62.0k|        }
 5465|  64.9k|    }
 5466|  32.9k|    ofpact_finish_LEARN(ofpacts, &learn);
 5467|       |
 5468|  32.9k|    if (!is_all_zeros(p, (char *) end - (char *) p)) {
  ------------------
  |  Branch (5468:9): [True: 557, False: 32.3k]
  ------------------
 5469|    557|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5470|    557|    }
 5471|       |
 5472|  32.3k|    return 0;
 5473|  32.9k|}
ofp-actions.c:get_be16:
 5315|   170k|{
 5316|   170k|    const ovs_be16 *p = *pp;
 5317|   170k|    ovs_be16 value = *p;
 5318|   170k|    *pp = p + 1;
 5319|   170k|    return value;
 5320|   170k|}
ofp-actions.c:learn_min_len:
 5346|  71.9k|{
 5347|  71.9k|    int n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  71.9k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5348|  71.9k|    int src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  71.9k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5349|  71.9k|    int dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  71.9k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5350|  71.9k|    unsigned int min_len;
 5351|       |
 5352|  71.9k|    min_len = 0;
 5353|  71.9k|    if (src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  71.9k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5353:9): [True: 4.92k, False: 67.0k]
  ------------------
 5354|  4.92k|        min_len += sizeof(ovs_be32); /* src_field */
 5355|  4.92k|        min_len += sizeof(ovs_be16); /* src_ofs */
 5356|  67.0k|    } else {
 5357|  67.0k|        min_len += 2 * DIV_ROUND_UP(n_bits, 16);
  ------------------
  |  |  296|  67.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5358|  67.0k|    }
 5359|  71.9k|    if (dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|   143k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5359:9): [True: 65.4k, False: 6.51k]
  ------------------
 5360|  71.9k|        dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  6.51k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5360:9): [True: 3.47k, False: 3.04k]
  ------------------
 5361|  68.9k|        min_len += sizeof(ovs_be32); /* dst_field */
 5362|  68.9k|        min_len += sizeof(ovs_be16); /* dst_ofs */
 5363|  68.9k|    }
 5364|  71.9k|    return min_len;
 5365|  71.9k|}
ofp-actions.c:get_subfield:
 5334|  71.2k|{
 5335|  71.2k|    enum ofperr error;
 5336|       |
 5337|  71.2k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(get_be32(p)), vl_mff_map,
 5338|  71.2k|                                         &sf->field, tlv_bitmap);
 5339|  71.2k|    sf->ofs = ntohs(get_be16(p));
 5340|  71.2k|    sf->n_bits = n_bits;
 5341|  71.2k|    return error;
 5342|  71.2k|}
ofp-actions.c:get_be32:
 5324|  71.2k|{
 5325|  71.2k|    const ovs_be32 *p = *pp;
 5326|  71.2k|    ovs_be32 value = get_unaligned_be32(p);
 5327|  71.2k|    *pp = p + 1;
 5328|  71.2k|    return value;
 5329|  71.2k|}
ofp-actions.c:decode_NXAST_RAW_LEARN2:
 5509|  3.81k|{
 5510|  3.81k|    struct ofpbuf b = ofpbuf_const_initializer(nal, ntohs(nal->up.len));
 5511|  3.81k|    struct ofpact_learn *learn;
 5512|  3.81k|    enum ofperr error;
 5513|       |
 5514|  3.81k|    if (nal->pad2) {
  ------------------
  |  Branch (5514:9): [True: 476, False: 3.33k]
  ------------------
 5515|    476|        return OFPERR_NXBAC_MUST_BE_ZERO;
 5516|    476|    }
 5517|       |
 5518|  3.33k|    learn = ofpact_put_LEARN(ofpacts);
 5519|  3.33k|    error = decode_LEARN_common(&nal->up, NXAST_RAW_LEARN2, learn);
 5520|  3.33k|    if (error) {
  ------------------
  |  Branch (5520:9): [True: 487, False: 2.84k]
  ------------------
 5521|    487|        return error;
 5522|    487|    }
 5523|       |
 5524|  2.84k|    learn->limit = ntohl(nal->limit);
 5525|       |
 5526|  2.84k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5526:9): [True: 302, False: 2.54k]
  ------------------
 5527|  2.84k|                         NX_LEARN_F_DELETE_LEARNED |
 5528|  2.84k|                         NX_LEARN_F_WRITE_RESULT)) {
 5529|    302|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5530|    302|    }
 5531|       |
 5532|  2.54k|    ofpbuf_pull(&b, sizeof *nal);
 5533|       |
 5534|  2.54k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (5534:9): [True: 1.03k, False: 1.50k]
  ------------------
 5535|  1.03k|        error = nx_pull_header(&b, vl_mff_map, &learn->result_dst.field, NULL);
 5536|  1.03k|        if (error) {
  ------------------
  |  Branch (5536:13): [True: 201, False: 838]
  ------------------
 5537|    201|            return error;
 5538|    201|        }
 5539|    838|        if (!learn->result_dst.field->writable) {
  ------------------
  |  Branch (5539:13): [True: 10, False: 828]
  ------------------
 5540|     10|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 5541|     10|        }
 5542|    828|        learn->result_dst.ofs = ntohs(nal->result_dst_ofs);
 5543|    828|        learn->result_dst.n_bits = 1;
 5544|  1.50k|    } else if (nal->result_dst_ofs) {
  ------------------
  |  Branch (5544:16): [True: 66, False: 1.44k]
  ------------------
 5545|     66|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5546|     66|    }
 5547|       |
 5548|  2.26k|    return decode_LEARN_specs(b.data, (char *) nal + ntohs(nal->up.len),
 5549|  2.26k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5550|  2.54k|}
ofp-actions.c:decode_NXAST_RAW_EXIT:
 5973|    668|{
 5974|    668|    ofpact_put_EXIT(out);
 5975|    668|    return 0;
 5976|    668|}
ofp-actions.c:decode_NXAST_RAW_FIN_TIMEOUT:
 4385|  2.07k|{
 4386|  2.07k|    struct ofpact_fin_timeout *oft;
 4387|       |
 4388|  2.07k|    oft = ofpact_put_FIN_TIMEOUT(out);
 4389|  2.07k|    oft->fin_idle_timeout = ntohs(naft->fin_idle_timeout);
 4390|  2.07k|    oft->fin_hard_timeout = ntohs(naft->fin_hard_timeout);
 4391|  2.07k|    return 0;
 4392|  2.07k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER:
  802|  2.77k|{
  803|  2.77k|    struct ofpact_controller *oc;
  804|       |
  805|  2.77k|    oc = ofpact_put_CONTROLLER(out);
  806|  2.77k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER;
  807|  2.77k|    oc->max_len = ntohs(nac->max_len);
  808|  2.77k|    oc->controller_id = ntohs(nac->controller_id);
  809|  2.77k|    oc->reason = nac->reason;
  810|  2.77k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  2.77k|#define NX_CTLR_NO_METER 0
  ------------------
  811|  2.77k|    ofpact_finish_CONTROLLER(out, &oc);
  812|       |
  813|  2.77k|    return 0;
  814|  2.77k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER2:
  820|  11.1k|{
  821|  11.1k|    if (!is_all_zeros(eah->pad, sizeof eah->pad)) {
  ------------------
  |  Branch (821:9): [True: 208, False: 10.9k]
  ------------------
  822|    208|        return OFPERR_NXBRC_MUST_BE_ZERO;
  823|    208|    }
  824|       |
  825|  10.9k|    size_t start_ofs = out->size;
  826|  10.9k|    struct ofpact_controller *oc = ofpact_put_CONTROLLER(out);
  827|  10.9k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER2;
  828|  10.9k|    oc->max_len = UINT16_MAX;
  829|  10.9k|    oc->reason = OFPR_ACTION;
  830|  10.9k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  10.9k|#define NX_CTLR_NO_METER 0
  ------------------
  831|       |
  832|  10.9k|    struct ofpbuf properties;
  833|  10.9k|    ofpbuf_use_const(&properties, eah, ntohs(eah->len));
  834|  10.9k|    ofpbuf_pull(&properties, sizeof *eah);
  835|       |
  836|  33.8k|    while (properties.size > 0) {
  ------------------
  |  Branch (836:12): [True: 28.6k, False: 5.26k]
  ------------------
  837|  28.6k|        struct ofpbuf payload;
  838|  28.6k|        uint64_t type;
  839|       |
  840|  28.6k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  841|  28.6k|        if (error) {
  ------------------
  |  Branch (841:13): [True: 3.67k, False: 24.9k]
  ------------------
  842|  3.67k|            return error;
  843|  3.67k|        }
  844|       |
  845|  24.9k|        switch (type) {
  846|  4.01k|        case NXAC2PT_MAX_LEN:
  ------------------
  |  Branch (846:9): [True: 4.01k, False: 20.9k]
  ------------------
  847|  4.01k|            error = ofpprop_parse_u16(&payload, &oc->max_len);
  848|  4.01k|            break;
  849|       |
  850|  2.99k|        case NXAC2PT_CONTROLLER_ID:
  ------------------
  |  Branch (850:9): [True: 2.99k, False: 21.9k]
  ------------------
  851|  2.99k|            error = ofpprop_parse_u16(&payload, &oc->controller_id);
  852|  2.99k|            break;
  853|       |
  854|  3.94k|        case NXAC2PT_REASON: {
  ------------------
  |  Branch (854:9): [True: 3.94k, False: 20.9k]
  ------------------
  855|  3.94k|            uint8_t u8;
  856|  3.94k|            error = ofpprop_parse_u8(&payload, &u8);
  857|  3.94k|            if (!error) {
  ------------------
  |  Branch (857:17): [True: 2.40k, False: 1.53k]
  ------------------
  858|  2.40k|                oc->reason = u8;
  859|  2.40k|            }
  860|  3.94k|            break;
  861|      0|        }
  862|       |
  863|  5.55k|        case NXAC2PT_USERDATA:
  ------------------
  |  Branch (863:9): [True: 5.55k, False: 19.3k]
  ------------------
  864|  5.55k|            out->size = start_ofs + sizeof(struct ofpact_controller);
  865|  5.55k|            ofpbuf_put(out, payload.msg, ofpbuf_msgsize(&payload));
  866|  5.55k|            oc = ofpbuf_at_assert(out, start_ofs, sizeof *oc);
  867|  5.55k|            oc->userdata_len = ofpbuf_msgsize(&payload);
  868|  5.55k|            break;
  869|       |
  870|  4.44k|        case NXAC2PT_PAUSE:
  ------------------
  |  Branch (870:9): [True: 4.44k, False: 20.4k]
  ------------------
  871|  4.44k|            oc->pause = true;
  872|  4.44k|            break;
  873|       |
  874|  3.48k|        case NXAC2PT_METER_ID:
  ------------------
  |  Branch (874:9): [True: 3.48k, False: 21.4k]
  ------------------
  875|  3.48k|            error = ofpprop_parse_u32(&payload, &oc->meter_id);
  876|  3.48k|            break;
  877|       |
  878|    500|        default:
  ------------------
  |  Branch (878:9): [True: 500, False: 24.4k]
  ------------------
  879|    500|            error = OFPPROP_UNKNOWN(false, "NXAST_RAW_CONTROLLER2", type);
  ------------------
  |  |  140|    500|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  880|    500|            break;
  881|  24.9k|        }
  882|  24.9k|        if (error) {
  ------------------
  |  Branch (882:13): [True: 2.05k, False: 22.8k]
  ------------------
  883|  2.05k|            return error;
  884|  2.05k|        }
  885|  24.9k|    }
  886|       |
  887|  5.26k|    ofpact_finish_CONTROLLER(out, &oc);
  888|       |
  889|  5.26k|    return 0;
  890|  10.9k|}
ofp-actions.c:decode_NXAST_RAW_WRITE_METADATA:
 7532|     44|{
 7533|     44|    struct ofpact_metadata *om;
 7534|       |
 7535|     44|    if (!is_all_zeros(nawm->zeros, sizeof nawm->zeros)) {
  ------------------
  |  Branch (7535:9): [True: 25, False: 19]
  ------------------
 7536|     25|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7537|     25|    }
 7538|       |
 7539|     19|    om = ofpact_put_WRITE_METADATA(out);
 7540|     19|    om->metadata = nawm->metadata;
 7541|     19|    om->mask = nawm->mask;
 7542|       |
 7543|     19|    return 0;
 7544|     44|}
ofp-actions.c:decode_NXAST_RAW_STACK_PUSH:
 3502|  9.99k|{
 3503|  9.99k|    struct ofpact_stack *push = ofpact_put_STACK_PUSH(ofpacts);
 3504|  9.99k|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3505|  9.99k|                                            push);
 3506|  9.99k|    return error ? error : nxm_stack_push_check(push, NULL);
  ------------------
  |  Branch (3506:12): [True: 1.59k, False: 8.39k]
  ------------------
 3507|  9.99k|}
ofp-actions.c:decode_stack_action:
 3475|  10.9k|{
 3476|  10.9k|    enum ofperr error;
 3477|  10.9k|    stack_action->subfield.ofs = ntohs(nasp->offset);
 3478|       |
 3479|  10.9k|    struct ofpbuf b = ofpbuf_const_initializer(nasp, sizeof *nasp);
 3480|  10.9k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nasp, pad));
  ------------------
  |  |  104|  10.9k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 3481|  10.9k|    error  = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 3482|  10.9k|                                      &stack_action->subfield.field, NULL,
 3483|  10.9k|                                      tlv_bitmap);
 3484|  10.9k|    if (error) {
  ------------------
  |  Branch (3484:9): [True: 933, False: 10.0k]
  ------------------
 3485|    933|        return error;
 3486|    933|    }
 3487|       |
 3488|  10.0k|    stack_action->subfield.n_bits = ntohs(*(const ovs_be16 *) b.data);
 3489|  10.0k|    ofpbuf_pull(&b, 2);
 3490|  10.0k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (3490:9): [True: 714, False: 9.28k]
  ------------------
 3491|    714|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3492|    714|    }
 3493|       |
 3494|  9.28k|    return 0;
 3495|  10.0k|}
ofp-actions.c:decode_NXAST_RAW_STACK_POP:
 3514|    942|{
 3515|    942|    struct ofpact_stack *pop = ofpact_put_STACK_POP(ofpacts);
 3516|    942|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3517|    942|                                            pop);
 3518|    942|    return error ? error : nxm_stack_pop_check(pop, NULL);
  ------------------
  |  Branch (3518:12): [True: 54, False: 888]
  ------------------
 3519|    942|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE:
 6193|     31|{
 6194|     31|    struct ofpact_sample *sample;
 6195|       |
 6196|     31|    sample = ofpact_put_SAMPLE(out);
 6197|     31|    sample->ofpact.raw = NXAST_RAW_SAMPLE;
 6198|     31|    sample->probability = ntohs(nas->probability);
 6199|     31|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6200|     31|    sample->obs_domain_id = ntohl(nas->obs_domain_id);
 6201|     31|    sample->obs_point_id = ntohl(nas->obs_point_id);
 6202|     31|    sample->sampling_port = OFPP_NONE;
  ------------------
  |  |   47|     31|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|     31|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 6203|     31|    sample->direction = NX_ACTION_SAMPLE_DEFAULT;
 6204|       |
 6205|     31|    if (sample->probability == 0) {
  ------------------
  |  Branch (6205:9): [True: 10, False: 21]
  ------------------
 6206|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6207|     10|    }
 6208|       |
 6209|     21|    return 0;
 6210|     31|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE2:
 6237|     47|{
 6238|     47|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE2, NX_ACTION_SAMPLE_DEFAULT,
 6239|     47|                          ofpact_put_SAMPLE(out));
 6240|     47|}
ofp-actions.c:decode_SAMPLE2:
 6217|  5.61k|{
 6218|  5.61k|    sample->ofpact.raw = raw;
 6219|  5.61k|    sample->probability = ntohs(nas->probability);
 6220|  5.61k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6221|  5.61k|    sample->obs_domain_id = ntohl(nas->obs_domain_id);
 6222|  5.61k|    sample->obs_point_id = ntohl(nas->obs_point_id);
 6223|  5.61k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6224|  5.61k|    sample->direction = direction;
 6225|       |
 6226|  5.61k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6226:9): [True: 1.73k, False: 3.87k]
  ------------------
 6227|  1.73k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6228|  1.73k|    }
 6229|       |
 6230|  3.87k|    return 0;
 6231|  5.61k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE3:
 6246|  7.66k|{
 6247|  7.66k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6248|  7.66k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6248:9): [True: 2.07k, False: 5.58k]
  ------------------
 6249|  2.07k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6250|  2.07k|    }
 6251|  5.58k|    if (nas->direction != NX_ACTION_SAMPLE_DEFAULT &&
  ------------------
  |  Branch (6251:9): [True: 1.59k, False: 3.99k]
  ------------------
 6252|  5.58k|        nas->direction != NX_ACTION_SAMPLE_INGRESS &&
  ------------------
  |  Branch (6252:9): [True: 1.58k, False: 8]
  ------------------
 6253|  5.58k|        nas->direction != NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6253:9): [True: 18, False: 1.56k]
  ------------------
 6254|     18|        VLOG_WARN_RL(&rl, "invalid sample direction %"PRIu8, nas->direction);
  ------------------
  |  |  223|     18|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     18|    do {                                                                \
  |  |  |  |  287|     18|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     18|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     18|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6255|     18|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6256|     18|    }
 6257|  5.57k|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE3, nas->direction, sample);
 6258|  5.58k|}
ofp-actions.c:decode_NXAST_RAW_CONJUNCTION:
 5684|  12.5k|{
 5685|  12.5k|    if (nac->n_clauses < 2 || nac->n_clauses > 64
  ------------------
  |  Branch (5685:9): [True: 22, False: 12.5k]
  |  Branch (5685:31): [True: 668, False: 11.8k]
  ------------------
 5686|  12.5k|        || nac->clause >= nac->n_clauses) {
  ------------------
  |  Branch (5686:12): [True: 1.47k, False: 10.3k]
  ------------------
 5687|  2.16k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 5688|  10.3k|    } else {
 5689|  10.3k|        add_conjunction(out, ntohl(nac->id), nac->clause, nac->n_clauses);
 5690|  10.3k|        return 0;
 5691|  10.3k|    }
 5692|  12.5k|}
ofp-actions.c:add_conjunction:
 5671|  10.3k|{
 5672|  10.3k|    struct ofpact_conjunction *oc;
 5673|       |
 5674|  10.3k|    oc = ofpact_put_CONJUNCTION(out);
 5675|  10.3k|    oc->id = id;
 5676|  10.3k|    oc->clause = clause;
 5677|  10.3k|    oc->n_clauses = n_clauses;
 5678|  10.3k|}
ofp-actions.c:decode_NXAST_RAW_CT:
 6637|  44.8k|{
 6638|  44.8k|    const size_t ct_offset = ofpacts_pull(out);
 6639|  44.8k|    struct ofpact_conntrack *conntrack = ofpact_put_CT(out);
 6640|  44.8k|    int error;
 6641|       |
 6642|  44.8k|    conntrack->flags = ntohs(nac->flags);
 6643|  44.8k|    if (conntrack->flags & NX_CT_F_FORCE &&
  ------------------
  |  Branch (6643:9): [True: 13.7k, False: 31.0k]
  ------------------
 6644|  44.8k|        !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6644:9): [True: 944, False: 12.8k]
  ------------------
 6645|    944|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6646|    944|        goto out;
 6647|    944|    }
 6648|       |
 6649|  43.8k|    error = decode_ct_zone(nac, conntrack, vl_mff_map, tlv_bitmap);
 6650|  43.8k|    if (error) {
  ------------------
  |  Branch (6650:9): [True: 6.17k, False: 37.6k]
  ------------------
 6651|  6.17k|        goto out;
 6652|  6.17k|    }
 6653|  37.6k|    conntrack->recirc_table = nac->recirc_table;
 6654|  37.6k|    conntrack->alg = ntohs(nac->alg);
 6655|       |
 6656|  37.6k|    ofpbuf_pull(out, sizeof(*conntrack));
 6657|       |
 6658|  37.6k|    struct ofpbuf openflow = ofpbuf_const_initializer(
 6659|  37.6k|        nac + 1, ntohs(nac->len) - sizeof(*nac));
 6660|  37.6k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6661|  37.6k|                                            ofp_version,
 6662|  37.6k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6663|  37.6k|                                            out, OFPACT_CT, vl_mff_map,
 6664|  37.6k|                                            tlv_bitmap);
 6665|  37.6k|    if (error) {
  ------------------
  |  Branch (6665:9): [True: 9.80k, False: 27.8k]
  ------------------
 6666|  9.80k|        return error;
 6667|  9.80k|    }
 6668|       |
 6669|  27.8k|    conntrack = ofpbuf_push_uninit(out, sizeof(*conntrack));
 6670|  27.8k|    out->header = &conntrack->ofpact;
 6671|  27.8k|    ofpact_finish_CT(out, &conntrack);
 6672|       |
 6673|  27.8k|    if (conntrack->ofpact.len > sizeof(*conntrack)
  ------------------
  |  Branch (6673:9): [True: 19.1k, False: 8.70k]
  ------------------
 6674|  27.8k|        && !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6674:12): [True: 602, False: 18.5k]
  ------------------
 6675|    602|        const struct ofpact *a;
 6676|    602|        size_t ofpacts_len = conntrack->ofpact.len - sizeof(*conntrack);
 6677|       |
 6678|    602|        OFPACT_FOR_EACH (a, conntrack->actions, ofpacts_len) {
  ------------------
  |  |  261|    756|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 602, False: 154]
  |  |  ------------------
  |  |  262|    602|         (POS) = ofpact_next(POS))
  ------------------
 6679|    602|            if (a->type != OFPACT_NAT || ofpact_get_NAT(a)->flags
  ------------------
  |  Branch (6679:17): [True: 10, False: 592]
  |  Branch (6679:42): [True: 280, False: 312]
  ------------------
 6680|    602|                || ofpact_get_NAT(a)->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (6680:20): [True: 158, False: 154]
  ------------------
 6681|    448|                VLOG_WARN_RL(&rl, "CT action requires commit flag if actions "
  ------------------
  |  |  223|    448|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    448|    do {                                                                \
  |  |  |  |  287|    448|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    448|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 448]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    448|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6682|    448|                             "other than NAT without arguments are specified.");
 6683|    448|                error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6684|    448|                goto out;
 6685|    448|            }
 6686|    602|        }
 6687|    602|    }
 6688|       |
 6689|  35.0k|out:
 6690|  35.0k|    ofpbuf_push_uninit(out, ct_offset);
 6691|  35.0k|    return error;
 6692|  27.8k|}
ofp-actions.c:ofpacts_pull:
  534|  46.8k|{
  535|  46.8k|    size_t ofs;
  536|       |
  537|  46.8k|    ofs = ofpacts->size;
  538|  46.8k|    ofpbuf_pull(ofpacts, ofs);
  539|       |
  540|  46.8k|    return ofs;
  541|  46.8k|}
ofp-actions.c:decode_ct_zone:
 6601|  43.8k|{
 6602|  43.8k|    if (nac->zone_src) {
  ------------------
  |  Branch (6602:9): [True: 12.2k, False: 31.6k]
  ------------------
 6603|  12.2k|        enum ofperr error;
 6604|       |
 6605|  12.2k|        out->zone_src.ofs = nxm_decode_ofs(nac->zone_ofs_nbits);
 6606|  12.2k|        out->zone_src.n_bits = nxm_decode_n_bits(nac->zone_ofs_nbits);
 6607|  12.2k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nac->zone_src),
 6608|  12.2k|                                             vl_mff_map, &out->zone_src.field,
 6609|  12.2k|                                             tlv_bitmap);
 6610|  12.2k|        if (error) {
  ------------------
  |  Branch (6610:13): [True: 3.04k, False: 9.19k]
  ------------------
 6611|  3.04k|            return error;
 6612|  3.04k|        }
 6613|       |
 6614|  9.19k|        error = mf_check_src(&out->zone_src, NULL);
 6615|  9.19k|        if (error) {
  ------------------
  |  Branch (6615:13): [True: 1.93k, False: 7.26k]
  ------------------
 6616|  1.93k|            return error;
 6617|  1.93k|        }
 6618|       |
 6619|  7.26k|        if (out->zone_src.n_bits != 16) {
  ------------------
  |  Branch (6619:13): [True: 1.20k, False: 6.06k]
  ------------------
 6620|  1.20k|            VLOG_WARN_RL(&rl, "zone n_bits %d not within valid range [16..16]",
  ------------------
  |  |  223|  1.20k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.20k|    do {                                                                \
  |  |  |  |  287|  1.20k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.20k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.20k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6621|  1.20k|                         out->zone_src.n_bits);
 6622|  1.20k|            return OFPERR_OFPBAC_BAD_SET_LEN;
 6623|  1.20k|        }
 6624|  31.6k|    } else {
 6625|  31.6k|        out->zone_src.field = NULL;
 6626|  31.6k|        out->zone_imm = ntohs(nac->zone_imm);
 6627|  31.6k|    }
 6628|       |
 6629|  37.6k|    return 0;
 6630|  43.8k|}
ofp-actions.c:decode_NXAST_RAW_NAT:
 7016|  33.9k|{
 7017|  33.9k|    struct ofpact_nat *nat;
 7018|  33.9k|    uint16_t range_present = ntohs(nan->range_present);
 7019|  33.9k|    const char *opts = (char *)(nan + 1);
 7020|  33.9k|    uint16_t len = ntohs(nan->len) - sizeof *nan;
 7021|       |
 7022|  33.9k|    nat = ofpact_put_NAT(out);
 7023|  33.9k|    nat->flags = ntohs(nan->flags);
 7024|       |
 7025|       |    /* Check for unknown or mutually exclusive flags. */
 7026|  33.9k|    if ((nat->flags & ~NX_NAT_F_MASK)
  ------------------
  |  Branch (7026:9): [True: 1.62k, False: 32.3k]
  ------------------
 7027|  33.9k|        || (nat->flags & NX_NAT_F_SRC && nat->flags & NX_NAT_F_DST)
  ------------------
  |  Branch (7027:13): [True: 13.9k, False: 18.3k]
  |  Branch (7027:42): [True: 36, False: 13.9k]
  ------------------
 7028|  33.9k|        || (nat->flags & NX_NAT_F_PROTO_HASH
  ------------------
  |  Branch (7028:13): [True: 16.4k, False: 15.8k]
  ------------------
 7029|  32.2k|            && nat->flags & NX_NAT_F_PROTO_RANDOM)) {
  ------------------
  |  Branch (7029:16): [True: 18, False: 16.4k]
  ------------------
 7030|  1.68k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7031|  1.68k|    }
 7032|       |
 7033|  32.2k|#define NX_NAT_GET_OPT(DST, SRC, LEN, TYPE)                     \
 7034|  32.2k|    (LEN >= sizeof(TYPE)                                        \
 7035|  32.2k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
 7036|  32.2k|        SRC += sizeof(TYPE))                                    \
 7037|  32.2k|     : NULL)
 7038|       |
 7039|  32.2k|    nat->range_af = AF_UNSPEC;
 7040|  32.2k|    if (range_present & NX_NAT_RANGE_IPV4_MIN) {
  ------------------
  |  Branch (7040:9): [True: 17.8k, False: 14.4k]
  ------------------
 7041|  17.8k|        if (range_present & (NX_NAT_RANGE_IPV6_MIN | NX_NAT_RANGE_IPV6_MAX)) {
  ------------------
  |  Branch (7041:13): [True: 504, False: 17.3k]
  ------------------
 7042|    504|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7043|    504|        }
 7044|       |
 7045|  17.3k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.min, opts, len, ovs_be32)
  ------------------
  |  | 7034|  34.6k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 17.1k, False: 189]
  |  |  ------------------
  |  | 7035|  34.6k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|  17.1k|        SRC += sizeof(TYPE))                                    \
  |  | 7037|  34.6k|     : NULL)
  ------------------
  |  Branch (7045:13): [True: 189, False: 17.1k]
  ------------------
 7046|  17.3k|            || !nat->range.addr.ipv4.min) {
  ------------------
  |  Branch (7046:16): [True: 2.10k, False: 15.0k]
  ------------------
 7047|  2.29k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7048|  2.29k|        }
 7049|       |
 7050|  15.0k|        nat->range_af = AF_INET;
 7051|       |
 7052|  15.0k|        if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7052:13): [True: 4.72k, False: 10.2k]
  ------------------
 7053|  4.72k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.max, opts, len,
  ------------------
  |  | 7034|  4.72k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 4.72k, False: 0]
  |  |  ------------------
  |  | 7035|  4.72k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|  4.72k|        SRC += sizeof(TYPE))                                    \
  |  | 7037|  4.72k|     : NULL)
  ------------------
  |  Branch (7053:17): [True: 0, False: 4.72k]
  ------------------
 7054|  4.72k|                                ovs_be32)) {
 7055|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7056|      0|            }
 7057|  4.72k|            if (ntohl(nat->range.addr.ipv4.max)
  ------------------
  |  Branch (7057:17): [True: 768, False: 3.95k]
  ------------------
 7058|  4.72k|                < ntohl(nat->range.addr.ipv4.min)) {
 7059|    768|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7060|    768|            }
 7061|  4.72k|        }
 7062|  15.0k|    } else if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7062:16): [True: 1.28k, False: 13.1k]
  ------------------
 7063|  1.28k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7064|  13.1k|    } else if (range_present & NX_NAT_RANGE_IPV6_MIN) {
  ------------------
  |  Branch (7064:16): [True: 6.96k, False: 6.21k]
  ------------------
 7065|  6.96k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.min, opts, len,
  ------------------
  |  | 7034|  13.9k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 6.94k, False: 19]
  |  |  ------------------
  |  | 7035|  13.9k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|  6.94k|        SRC += sizeof(TYPE))                                    \
  |  | 7037|  13.9k|     : NULL)
  ------------------
  |  Branch (7065:13): [True: 19, False: 6.94k]
  ------------------
 7066|  6.96k|                            struct in6_addr)
 7067|  6.96k|            || ipv6_mask_is_any(&nat->range.addr.ipv6.min)) {
  ------------------
  |  Branch (7067:16): [True: 1.97k, False: 4.97k]
  ------------------
 7068|  1.99k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7069|  1.99k|        }
 7070|       |
 7071|  4.97k|        nat->range_af = AF_INET6;
 7072|       |
 7073|  4.97k|        if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7073:13): [True: 749, False: 4.22k]
  ------------------
 7074|    749|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.max, opts, len,
  ------------------
  |  | 7034|    749|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 230, False: 519]
  |  |  ------------------
  |  | 7035|    749|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|    230|        SRC += sizeof(TYPE))                                    \
  |  | 7037|    749|     : NULL)
  ------------------
  |  Branch (7074:17): [True: 519, False: 230]
  ------------------
 7075|    749|                                struct in6_addr)) {
 7076|    519|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7077|    519|            }
 7078|    230|            if (memcmp(&nat->range.addr.ipv6.max, &nat->range.addr.ipv6.min,
  ------------------
  |  Branch (7078:17): [True: 149, False: 81]
  ------------------
 7079|    230|                       sizeof(struct in6_addr)) < 0) {
 7080|    149|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7081|    149|            }
 7082|    230|        }
 7083|  6.21k|    } else if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7083:16): [True: 1.93k, False: 4.27k]
  ------------------
 7084|  1.93k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7085|  1.93k|    }
 7086|       |
 7087|  22.8k|    if (range_present & NX_NAT_RANGE_PROTO_MIN) {
  ------------------
  |  Branch (7087:9): [True: 14.8k, False: 7.98k]
  ------------------
 7088|  14.8k|        ovs_be16 proto;
 7089|       |
 7090|  14.8k|        if (nat->range_af == AF_UNSPEC) {
  ------------------
  |  Branch (7090:13): [True: 266, False: 14.5k]
  ------------------
 7091|    266|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7092|    266|        }
 7093|  14.5k|        if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16) || proto == 0) {
  ------------------
  |  | 7034|  29.1k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 10.1k, False: 4.46k]
  |  |  ------------------
  |  | 7035|  29.1k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|  10.1k|        SRC += sizeof(TYPE))                                    \
  |  | 7037|  29.1k|     : NULL)
  ------------------
  |  Branch (7093:13): [True: 4.46k, False: 10.1k]
  |  Branch (7093:61): [True: 79, False: 10.0k]
  ------------------
 7094|  4.54k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7095|  4.54k|        }
 7096|  10.0k|        nat->range.proto.min = ntohs(proto);
 7097|  10.0k|        if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7097:13): [True: 4.35k, False: 5.67k]
  ------------------
 7098|  4.35k|            if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16)) {
  ------------------
  |  | 7034|  4.35k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7034:6): [True: 4.35k, False: 0]
  |  |  ------------------
  |  | 7035|  4.35k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7036|  4.35k|        SRC += sizeof(TYPE))                                    \
  |  | 7037|  4.35k|     : NULL)
  ------------------
  |  Branch (7098:17): [True: 0, False: 4.35k]
  ------------------
 7099|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7100|      0|            }
 7101|  4.35k|            nat->range.proto.max = ntohs(proto);
 7102|  4.35k|            if (nat->range.proto.max < nat->range.proto.min) {
  ------------------
  |  Branch (7102:17): [True: 29, False: 4.32k]
  ------------------
 7103|     29|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7104|     29|            }
 7105|  4.35k|        }
 7106|  10.0k|    } else if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7106:16): [True: 520, False: 7.46k]
  ------------------
 7107|    520|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7108|    520|    }
 7109|       |
 7110|  17.4k|    return 0;
 7111|  22.8k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_TRUNC:
 7314|    513|{
 7315|    513|    struct ofpact_output_trunc *output_trunc;
 7316|       |
 7317|    513|    output_trunc = ofpact_put_OUTPUT_TRUNC(out);
 7318|    513|    output_trunc->max_len = ntohl(natrc->max_len);
 7319|    513|    output_trunc->port = u16_to_ofp(ntohs(natrc->port));
 7320|       |
 7321|    513|    if (output_trunc->max_len < ETH_HEADER_LEN) {
  ------------------
  |  |  439|    513|#define ETH_HEADER_LEN 14
  ------------------
  |  Branch (7321:9): [True: 18, False: 495]
  ------------------
 7322|     18|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7323|     18|    }
 7324|    495|    return 0;
 7325|    513|}
ofp-actions.c:decode_NXAST_RAW_CLONE:
 6053|  2.04k|{
 6054|  2.04k|    int error;
 6055|  2.04k|    struct ofpbuf openflow;
 6056|  2.04k|    const size_t clone_offset = ofpacts_pull(out);
 6057|  2.04k|    struct ofpact_nest *clone = ofpact_put_CLONE(out);
 6058|       |
 6059|       |    /* decode action list */
 6060|  2.04k|    ofpbuf_pull(out, sizeof(*clone));
 6061|  2.04k|    openflow = ofpbuf_const_initializer(
 6062|  2.04k|                    eah + 1, ntohs(eah->len) - sizeof *eah);
 6063|  2.04k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6064|  2.04k|                                            ofp_version,
 6065|  2.04k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6066|  2.04k|                                            out, 0, vl_mff_map, tlv_bitmap);
 6067|  2.04k|    if (error) {
  ------------------
  |  Branch (6067:9): [True: 1.18k, False: 860]
  ------------------
 6068|  1.18k|        return error;
 6069|  1.18k|    }
 6070|    860|    clone = ofpbuf_push_uninit(out, sizeof *clone);
 6071|    860|    out->header = &clone->ofpact;
 6072|    860|    ofpact_finish_CLONE(out, &clone);
 6073|    860|    ofpbuf_push_uninit(out, clone_offset);
 6074|    860|    return error;
 6075|  2.04k|}
ofp-actions.c:decode_NXAST_RAW_CT_CLEAR:
 6901|    468|{
 6902|    468|    ofpact_put_CT_CLEAR(out);
 6903|    468|    return 0;
 6904|    468|}
ofp-actions.c:decode_NXAST_RAW_ENCAP:
 4473|  7.66k|{
 4474|  7.66k|    struct ofpact_encap *encap;
 4475|  7.66k|    const struct ofp_ed_prop_header *ofp_prop;
 4476|  7.66k|    const size_t encap_ofs = out->size;
 4477|  7.66k|    size_t props_len;
 4478|  7.66k|    uint16_t n_props = 0;
 4479|  7.66k|    int err;
 4480|       |
 4481|  7.66k|    encap = ofpact_put_ENCAP(out);
 4482|  7.66k|    encap->ofpact.raw = NXAST_RAW_ENCAP;
 4483|  7.66k|    switch (ntohl(nae->new_pkt_type)) {
 4484|  4.61k|    case PT_ETH:
  ------------------
  |  Branch (4484:5): [True: 4.61k, False: 3.04k]
  ------------------
 4485|  6.09k|    case PT_NSH:
  ------------------
  |  Branch (4485:5): [True: 1.48k, False: 6.18k]
  ------------------
 4486|  6.29k|    case PT_MPLS:
  ------------------
  |  Branch (4486:5): [True: 201, False: 7.46k]
  ------------------
 4487|  6.31k|    case PT_MPLS_MC:
  ------------------
  |  Branch (4487:5): [True: 16, False: 7.64k]
  ------------------
 4488|       |        /* Add supported encap header types here. */
 4489|  6.31k|        break;
 4490|  1.35k|    default:
  ------------------
  |  Branch (4490:5): [True: 1.35k, False: 6.31k]
  ------------------
 4491|  1.35k|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 4492|  7.66k|    }
 4493|  6.31k|    encap->new_pkt_type = nae->new_pkt_type;
 4494|  6.31k|    encap->hdr_size = ntohs(nae->hdr_size);
 4495|       |
 4496|  6.31k|    ofp_prop = nae->props;
 4497|  6.31k|    props_len = ntohs(nae->len) - offsetof(struct nx_action_encap, props);
 4498|  6.31k|    n_props = 0;
 4499|  10.3k|    while (props_len > 0) {
  ------------------
  |  Branch (4499:12): [True: 5.82k, False: 4.51k]
  ------------------
 4500|  5.82k|        err = decode_ed_prop(&ofp_prop, out, &props_len);
 4501|  5.82k|        if (err) {
  ------------------
  |  Branch (4501:13): [True: 1.79k, False: 4.02k]
  ------------------
 4502|  1.79k|            return err;
 4503|  1.79k|        }
 4504|  4.02k|        n_props++;
 4505|  4.02k|    }
 4506|  4.51k|    encap = ofpbuf_at_assert(out, encap_ofs, sizeof *encap);
 4507|  4.51k|    encap->n_props = n_props;
 4508|  4.51k|    out->header = &encap->ofpact;
 4509|  4.51k|    ofpact_finish_ENCAP(out, &encap);
 4510|       |
 4511|  4.51k|    return 0;
 4512|  6.31k|}
ofp-actions.c:decode_NXAST_RAW_DECAP:
 4704|  14.3k|{
 4705|  14.3k|    struct ofpact_decap * decap;
 4706|       |
 4707|  14.3k|    if (ntohs(nad->len) > sizeof *nad) {
  ------------------
  |  Branch (4707:9): [True: 98, False: 14.2k]
  ------------------
 4708|       |        /* No properties supported yet. */
 4709|     98|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 4710|     98|    }
 4711|       |
 4712|  14.2k|    decap = ofpact_put_DECAP(ofpacts);
 4713|  14.2k|    decap->ofpact.raw = NXAST_RAW_DECAP;
 4714|  14.2k|    decap->new_pkt_type = nad->new_pkt_type;
 4715|  14.2k|    return 0;
 4716|  14.3k|}
ofp-actions.c:decode_NXAST_RAW_DEC_NSH_TTL:
 4806|    477|{
 4807|    477|    ofpact_put_DEC_NSH_TTL(out);
 4808|    477|    return 0;
 4809|    477|}
ofp-actions.c:decode_NXAST_RAW_CHECK_PKT_LARGER:
 7630|    979|{
 7631|    979|    struct ofpact_check_pkt_larger *check_pkt_larger;
 7632|    979|    enum ofperr error;
 7633|       |
 7634|    979|    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
 7635|    979|    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
 7636|    979|    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
 7637|    979|    check_pkt_larger->dst.n_bits = 1;
 7638|       |
 7639|    979|    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
 7640|    979|    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));
  ------------------
  |  |  104|    979|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 7641|       |
 7642|    979|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 7643|    979|                                     &check_pkt_larger->dst.field,
 7644|    979|                                     NULL, tlv_bitmap);
 7645|    979|    if (error) {
  ------------------
  |  Branch (7645:9): [True: 343, False: 636]
  ------------------
 7646|    343|        return error;
 7647|    343|    }
 7648|       |
 7649|    636|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (7649:9): [True: 625, False: 11]
  ------------------
 7650|    625|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7651|    625|    }
 7652|       |
 7653|     11|    return mf_check_dst(&check_pkt_larger->dst, NULL);
 7654|    636|}
ofp-actions.c:decode_NXAST_RAW_DELETE_FIELD:
 4209|  1.56k|{
 4210|  1.56k|    struct ofpact_delete_field *delete_field;
 4211|  1.56k|    enum ofperr err;
 4212|       |
 4213|  1.56k|    delete_field = ofpact_put_DELETE_FIELD(out);
 4214|  1.56k|    delete_field->ofpact.raw = NXAST_RAW_DELETE_FIELD;
 4215|       |
 4216|  1.56k|    struct ofpbuf b = ofpbuf_const_initializer(nadf, ntohs(nadf->len));
 4217|  1.56k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nadf, pad));
  ------------------
  |  |  104|  1.56k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 4218|       |
 4219|  1.56k|    err = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &delete_field->field,
 4220|  1.56k|                                   NULL, tlv_bitmap);
 4221|  1.56k|    if (err) {
  ------------------
  |  Branch (4221:9): [True: 303, False: 1.25k]
  ------------------
 4222|    303|        return err;
 4223|    303|    }
 4224|       |
 4225|  1.25k|    return 0;
 4226|  1.56k|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_SLOW:
 6426|     70|{
 6427|     70|    if (!enable_debug) {
  ------------------
  |  Branch (6427:9): [True: 70, False: 0]
  ------------------
 6428|     70|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6429|     70|    }
 6430|       |
 6431|      0|    ofpact_put_DEBUG_SLOW(out);
 6432|      0|    return 0;
 6433|     70|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_RECIRC:
 6386|    771|{
 6387|    771|    if (!enable_debug) {
  ------------------
  |  Branch (6387:9): [True: 771, False: 0]
  ------------------
 6388|    771|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6389|    771|    }
 6390|       |
 6391|      0|    ofpact_put_DEBUG_RECIRC(out);
 6392|      0|    return 0;
 6393|    771|}
ofp-actions.c:log_bad_action:
 7778|   184k|{
 7779|   184k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  233|   184k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (7779:9): [True: 0, False: 184k]
  ------------------
 7780|      0|        struct ds s;
 7781|       |
 7782|      0|        ds_init(&s);
 7783|      0|        ds_put_hex_dump(&s, actions, actions_len, 0, false);
 7784|      0|        VLOG_WARN("bad action at offset %"PRIuSIZE" (%s):\n%s", action_offset,
  ------------------
  |  |  208|      0|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|      0|    do {                                                \
  |  |  |  |  280|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7785|      0|                  ofperr_get_name(error), ds_cstr(&s));
 7786|      0|        ds_destroy(&s);
 7787|      0|    }
 7788|   184k|}
ofp-actions.c:instruction_get_OFPIT11_CLEAR_ACTIONS:
  388|    348|    {                                                           \
  389|    348|        ovs_assert(inst->type == htons(ENUM));                  \
  ------------------
  |  |   58|    348|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  390|    348|        return ALIGNED_CAST(struct STRUCT *, inst);             \
  ------------------
  |  |  430|    348|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  391|    348|    }                                                           \
ofp-actions.c:ofpacts_decode_for_action_set:
 8135|  22.2k|{
 8136|  22.2k|    enum ofperr error;
 8137|  22.2k|    struct ofpact *a;
 8138|  22.2k|    size_t start = out->size;
 8139|       |
 8140|  22.2k|    error = ofpacts_decode(in, n_in, version, vl_mff_map, ofpacts_tlv_bitmap,
 8141|  22.2k|                           out);
 8142|       |
 8143|  22.2k|    if (error) {
  ------------------
  |  Branch (8143:9): [True: 5.23k, False: 17.0k]
  ------------------
 8144|  5.23k|        return error;
 8145|  5.23k|    }
 8146|       |
 8147|  55.9k|    OFPACT_FOR_EACH (a, ofpact_end(out->data, start), out->size - start) {
  ------------------
  |  |  261|  73.0k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 55.9k, False: 17.0k]
  |  |  ------------------
  |  |  262|  55.9k|         (POS) = ofpact_next(POS))
  ------------------
 8148|  55.9k|        if (!ofpact_is_allowed_in_actions_set(a)) {
  ------------------
  |  Branch (8148:13): [True: 23, False: 55.9k]
  ------------------
 8149|     23|            VLOG_WARN_RL(&rl, "disallowed action in action set");
  ------------------
  |  |  223|     23|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     23|    do {                                                                \
  |  |  |  |  287|     23|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     23|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 23]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     23|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8150|     23|            return OFPERR_OFPBAC_BAD_TYPE;
 8151|     23|        }
 8152|  55.9k|    }
 8153|       |
 8154|  17.0k|    return 0;
 8155|  17.0k|}
ofp-actions.c:ofpact_is_allowed_in_actions_set:
 8066|  55.9k|{
 8067|  55.9k|    return action_set_classify(a) != ACTION_SLOT_INVALID;
 8068|  55.9k|}
ofp-actions.c:instruction_get_OFPIT11_GOTO_TABLE:
  388|  1.88k|    {                                                           \
  389|  1.88k|        ovs_assert(inst->type == htons(ENUM));                  \
  ------------------
  |  |   58|  1.88k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  390|  1.88k|        return ALIGNED_CAST(struct STRUCT *, inst);             \
  ------------------
  |  |  430|  1.88k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  391|  1.88k|    }                                                           \
ofp-actions.c:ofpact_check__:
 8632|   302k|{
 8633|   302k|    switch (a->type) {
 8634|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME)                  \
 8635|      0|        case OFPACT_##ENUM:                                 \
 8636|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
 8637|      0|        OFPACTS
  ------------------
  |  |   64|  34.1k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 8635|  34.1k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 34.1k, False: 268k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  34.1k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   65|  34.1k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 8635|     30|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 30, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     30|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   66|     30|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 8635|     10|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 10, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     10|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   67|  1.62k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 8635|  1.62k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.62k, False: 300k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.62k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   68|  1.62k|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 8635|      1|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      1|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   69|  5.17k|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 8635|  5.17k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 5.17k, False: 297k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  5.17k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   70|  5.17k|                                                                        \
  |  |   71|  5.17k|    /* Header changes. */                                               \
  |  |   72|  5.17k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 8635|  5.07k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 5.07k, False: 297k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  5.07k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   73|  5.07k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 8635|  4.40k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 4.40k, False: 298k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  4.40k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   74|  4.40k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 8635|  1.25k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.25k, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.25k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   75|  15.1k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 8635|  15.1k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 15.1k, False: 287k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  15.1k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   76|  15.1k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 8635|  1.46k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.46k, False: 300k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.46k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   77|  1.46k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 8635|     36|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 36, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     36|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   78|     36|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 8635|     24|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 24, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     24|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   79|  2.56k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 8635|  2.56k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 2.56k, False: 299k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  2.56k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   80|  8.24k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 8635|  8.24k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 8.24k, False: 294k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  8.24k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   81|  12.5k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 8635|  12.5k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 12.5k, False: 289k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  12.5k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   82|  12.5k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 8635|  9.05k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 9.05k, False: 293k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  9.05k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   83|  9.05k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 8635|    934|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 934, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    934|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   84|  20.2k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 8635|  20.2k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 20.2k, False: 282k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  20.2k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   85|  20.2k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 8635|  20.0k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 20.0k, False: 282k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  20.0k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   86|  20.0k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 8635|    584|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 584, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    584|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   87|  4.83k|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 8635|  4.83k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 4.83k, False: 297k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  4.83k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   88|  4.83k|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 8635|    510|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 510, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    510|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   89|    510|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 8635|    207|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 207, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    207|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   90|  2.83k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 8635|  2.83k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 2.83k, False: 299k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  2.83k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   91|  3.16k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 8635|  3.16k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 3.16k, False: 299k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  3.16k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   92|  5.51k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8635|  5.51k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 5.51k, False: 296k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  5.51k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   93|  19.2k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8635|  19.2k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 19.2k, False: 283k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  19.2k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   94|  19.2k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 8635|  4.43k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 4.43k, False: 297k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  4.43k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   95|  13.1k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 8635|  13.1k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 13.1k, False: 289k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  13.1k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   96|  13.1k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 8635|    297|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 297, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    297|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   97|  1.25k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 8635|  1.25k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.25k, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.25k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   98|  1.25k|                                                                        \
  |  |   99|  1.25k|    /* Generic encap & decap */                                         \
  |  |  100|  3.48k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 8635|  3.48k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 3.48k, False: 298k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  3.48k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  101|  11.8k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 8635|  11.8k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 11.8k, False: 290k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  11.8k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  102|  11.8k|                                                                        \
  |  |  103|  11.8k|    /* Metadata. */                                                     \
  |  |  104|  11.8k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 8635|  1.25k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.25k, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.25k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  105|  6.92k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 8635|  6.92k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 6.92k, False: 295k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  6.92k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  106|  7.65k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 8635|  7.65k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 7.65k, False: 294k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  7.65k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  107|  7.65k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 8635|  1.79k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.79k, False: 300k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.79k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  108|  1.79k|                                                                        \
  |  |  109|  1.79k|    /* Flow table interaction. */                                       \
  |  |  110|  1.79k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 8635|    819|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 819, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    819|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  111|  28.9k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 8635|  28.9k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 28.9k, False: 273k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  28.9k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  112|  28.9k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 8635|      1|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      1|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  113|      1|                                                                        \
  |  |  114|      1|    /* Arithmetic. */                                                   \
  |  |  115|     18|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 8635|     18|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 18, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     18|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  116|     18|                                                                        \
  |  |  117|     18|    /* Other. */                                                        \
  |  |  118|    267|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 8635|    267|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 267, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    267|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  119|    267|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 8635|     11|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 11, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     11|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  120|     11|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 8635|     11|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 11, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|     11|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  121|     11|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 8635|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 0, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  122|  13.2k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 8635|  13.2k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 13.2k, False: 289k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  13.2k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  123|  13.2k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 8635|    446|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 446, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    446|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  124|  8.00k|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 8635|  8.00k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 8.00k, False: 294k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  8.00k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  125|  8.00k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 8635|    466|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 466, False: 301k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    466|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  126|    466|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 8635|    110|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 110, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    110|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  127|    110|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 8635|      1|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      1|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  128|      1|           "check_pkt_larger")                                          \
  |  |  129|      1|                                                                        \
  |  |  130|      1|    /* Debugging actions.                                               \
  |  |  131|      1|     *                                                                  \
  |  |  132|      1|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|      1|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|      1|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 8635|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 0, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 8635|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 0, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    123|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 8635|    123|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 123, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    123|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  139|    123|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 8635|    103|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 103, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    103|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  140|  16.7k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 8635|  16.7k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 16.7k, False: 285k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  16.7k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  141|  16.7k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 8635|    266|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 266, False: 302k]
  |  |  |  |  ------------------
  |  |  |  | 8636|    266|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  142|  1.87k|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 8635|  1.87k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8635:9): [True: 1.87k, False: 300k]
  |  |  |  |  ------------------
  |  |  |  | 8636|  1.87k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  ------------------
 8638|      0|#undef OFPACT
 8639|      0|    default:
  ------------------
  |  Branch (8639:5): [True: 0, False: 302k]
  ------------------
 8640|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8641|   302k|    }
 8642|   302k|}
ofp-actions.c:check_OUTPUT:
  715|  34.1k|{
  716|  34.1k|    return ofpact_check_output_port(a->port, cp->max_ports);
  717|  34.1k|}
ofp-actions.c:check_GROUP:
  754|     30|{
  755|     30|    return 0;
  756|     30|}
ofp-actions.c:check_CONTROLLER:
 1082|     10|{
 1083|     10|    return 0;
 1084|     10|}
ofp-actions.c:check_ENQUEUE:
 1169|  1.62k|{
 1170|  1.62k|    if (ofp_to_u16(a->port) >= ofp_to_u16(cp->max_ports)
  ------------------
  |  Branch (1170:9): [True: 121, False: 1.50k]
  ------------------
 1171|  1.62k|        && a->port != OFPP_IN_PORT
  ------------------
  |  |   39|    121|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  1.74k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1171:12): [True: 10, False: 111]
  ------------------
 1172|  1.62k|        && a->port != OFPP_LOCAL) {
  ------------------
  |  |   46|     10|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|     10|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1172:12): [True: 0, False: 10]
  ------------------
 1173|      0|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1174|      0|    }
 1175|  1.62k|    return 0;
 1176|  1.62k|}
ofp-actions.c:check_OUTPUT_REG:
 1334|      1|{
 1335|      1|    return mf_check_src(&a->src, cp->match);
 1336|      1|}
ofp-actions.c:check_BUNDLE:
 1560|  5.17k|{
 1561|  5.17k|    return bundle_check(a, cp->max_ports, cp->match);
 1562|  5.17k|}
ofp-actions.c:check_SET_FIELD:
 3360|  5.07k|{
 3361|  5.07k|    const struct mf_field *mf = a->field;
 3362|  5.07k|    struct flow *flow = &cp->match->flow;
 3363|  5.07k|    ovs_be16 *tci = &flow->vlans[0].tci;
 3364|       |
 3365|       |    /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */
 3366|  5.07k|    if (!mf_are_prereqs_ok(mf, flow, NULL)
  ------------------
  |  Branch (3366:9): [True: 3.91k, False: 1.15k]
  ------------------
 3367|  5.07k|        || (mf->id == MFF_VLAN_VID && !(*tci & htons(VLAN_CFI)))) {
  ------------------
  |  Branch (3367:13): [True: 28, False: 1.13k]
  |  Branch (3367:39): [True: 10, False: 18]
  ------------------
 3368|  3.92k|        VLOG_WARN_RL(&rl, "set_field %s lacks correct prerequisites",
  ------------------
  |  |  223|  3.92k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  3.92k|    do {                                                                \
  |  |  |  |  287|  3.92k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  3.92k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 3.92k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  3.92k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3369|  3.92k|                     mf->name);
 3370|  3.92k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 3371|  3.92k|    }
 3372|       |
 3373|       |    /* Remember if we saw a VLAN tag in the flow, to aid translating to
 3374|       |     * OpenFlow 1.1 if need be. */
 3375|  1.14k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 3376|  1.14k|    if (mf->id == MFF_VLAN_TCI) {
  ------------------
  |  Branch (3376:9): [True: 1, False: 1.14k]
  ------------------
 3377|       |        /* The set field may add or remove the VLAN tag,
 3378|       |         * Mark the status temporarily. */
 3379|      1|        *tci = a->value->be16;
 3380|      1|    }
 3381|       |
 3382|  1.14k|    return 0;
 3383|  5.07k|}
ofp-actions.c:check_SET_VLAN_VID:
 1657|  4.40k|{
 1658|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1659|       |     * 1.1+ if need be. */
 1660|  4.40k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1661|  4.40k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1662|  4.40k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1662:9): [True: 2.45k, False: 1.94k]
  |  Branch (1662:30): [True: 82, False: 2.37k]
  ------------------
 1663|     82|        inconsistent_match(&cp->usable_protocols);
 1664|     82|    }
 1665|       |
 1666|       |    /* Temporarily mark that we have a vlan tag. */
 1667|  4.40k|    *tci |= htons(VLAN_CFI);
 1668|       |
 1669|  4.40k|    return 0;
 1670|  4.40k|}
ofp-actions.c:inconsistent_match:
 8621|  75.1k|{
 8622|  75.1k|    *usable_protocols &= OFPUTIL_P_OF10_ANY;
  ------------------
  |  |   60|  75.1k|#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   58|  75.1k|#define OFPUTIL_P_OF10_STD_ANY (OFPUTIL_P_OF10_STD | OFPUTIL_P_OF10_STD_TID)
  |  |  ------------------
  |  |               #define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   59|  75.1k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  |  |  ------------------
  ------------------
 8623|  75.1k|}
ofp-actions.c:check_SET_VLAN_PCP:
 1765|  1.25k|{
 1766|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1767|       |     * 1.1+ if need be. */
 1768|  1.25k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1769|  1.25k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1770|  1.25k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1770:9): [True: 563, False: 691]
  |  Branch (1770:30): [True: 35, False: 528]
  ------------------
 1771|     35|        inconsistent_match(&cp->usable_protocols);
 1772|     35|    }
 1773|       |
 1774|       |    /* Temporarily mark that we have a vlan tag. */
 1775|  1.25k|    *tci |= htons(VLAN_CFI);
 1776|       |
 1777|  1.25k|    return 0;
 1778|  1.25k|}
ofp-actions.c:check_STRIP_VLAN:
 1834|  15.1k|{
 1835|  15.1k|    if (!(cp->match->flow.vlans[0].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (1835:9): [True: 12.0k, False: 3.16k]
  ------------------
 1836|  12.0k|        inconsistent_match(&cp->usable_protocols);
 1837|  12.0k|    }
 1838|  15.1k|    flow_pop_vlan(&cp->match->flow, NULL);
 1839|  15.1k|    return 0;
 1840|  15.1k|}
ofp-actions.c:check_PUSH_VLAN:
 1902|  1.46k|{
 1903|  1.46k|    struct flow *flow = &cp->match->flow;
 1904|  1.46k|    if (flow->vlans[FLOW_MAX_VLAN_HEADERS - 1].tci & htons(VLAN_CFI)) {
  ------------------
  |  |   75|  1.46k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1904:9): [True: 54, False: 1.40k]
  ------------------
 1905|       |        /* Support maximum (FLOW_MAX_VLAN_HEADERS) VLAN headers. */
 1906|     54|        return OFPERR_OFPBAC_BAD_TAG;
 1907|     54|    }
 1908|       |    /* Temporary mark that we have a vlan tag. */
 1909|  1.40k|    flow_push_vlan_uninit(flow, NULL);
 1910|  1.40k|    flow->vlans[0].tci |= htons(VLAN_CFI);
 1911|  1.40k|    return 0;
 1912|  1.46k|}
ofp-actions.c:check_SET_ETH_SRC:
 2006|     36|{
 2007|     36|    return 0;
 2008|     36|}
ofp-actions.c:check_SET_ETH_DST:
 2013|     24|{
 2014|     24|    return 0;
 2015|     24|}
ofp-actions.c:check_SET_IPV4_SRC:
 2108|  2.56k|{
 2109|  2.56k|    return check_set_ipv4(cp);
 2110|  2.56k|}
ofp-actions.c:check_set_ipv4:
 2097|  10.8k|{
 2098|  10.8k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 2099|  10.8k|    if (dl_type != htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (2099:9): [True: 3.75k, False: 7.05k]
  ------------------
 2100|  3.75k|        inconsistent_match(&cp->usable_protocols);
 2101|  3.75k|    }
 2102|  10.8k|    return 0;
 2103|  10.8k|}
ofp-actions.c:check_SET_IPV4_DST:
 2115|  8.24k|{
 2116|  8.24k|    return check_set_ipv4(cp);
 2117|  8.24k|}
ofp-actions.c:check_SET_IP_DSCP:
 2184|  12.5k|{
 2185|  12.5k|    return check_set_ip(cp);
 2186|  12.5k|}
ofp-actions.c:check_set_ip:
 2174|  22.6k|{
 2175|  22.6k|    if (!is_ip_any(&cp->match->flow)) {
  ------------------
  |  Branch (2175:9): [True: 6.45k, False: 16.2k]
  ------------------
 2176|  6.45k|        inconsistent_match(&cp->usable_protocols);
 2177|  6.45k|    }
 2178|  22.6k|    return 0;
 2179|  22.6k|}
ofp-actions.c:check_SET_IP_ECN:
 2248|  9.05k|{
 2249|  9.05k|    return check_set_ip(cp);
 2250|  9.05k|}
ofp-actions.c:check_SET_IP_TTL:
 2303|    934|{
 2304|    934|    return check_set_ip(cp);
 2305|    934|}
ofp-actions.c:check_SET_L4_SRC_PORT:
 2419|  20.2k|{
 2420|  20.2k|    return check_set_l4_port(a, cp);
 2421|  20.2k|}
ofp-actions.c:check_set_l4_port:
 2400|  40.3k|{
 2401|  40.3k|    const struct flow *flow = &cp->match->flow;
 2402|  40.3k|    if (!is_ip_any(flow)
  ------------------
  |  Branch (2402:9): [True: 10.8k, False: 29.5k]
  ------------------
 2403|  40.3k|        || flow->nw_frag & FLOW_NW_FRAG_LATER
  ------------------
  |  |   55|  69.8k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2403:12): [True: 0, False: 29.5k]
  ------------------
 2404|  40.3k|        || (flow->nw_proto != IPPROTO_TCP &&
  ------------------
  |  Branch (2404:13): [True: 22.1k, False: 7.39k]
  ------------------
 2405|  29.5k|            flow->nw_proto != IPPROTO_UDP &&
  ------------------
  |  Branch (2405:13): [True: 19.5k, False: 2.53k]
  ------------------
 2406|  29.5k|            flow->nw_proto != IPPROTO_SCTP)) {
  ------------------
  |  Branch (2406:13): [True: 6.41k, False: 13.1k]
  ------------------
 2407|  17.2k|        inconsistent_match(&cp->usable_protocols);
 2408|  17.2k|    }
 2409|       |
 2410|       |    /* Note the transport protocol in use, to allow this action to be converted
 2411|       |     * to an OF1.2 set_field action later if necessary. */
 2412|  40.3k|    a->flow_ip_proto = flow->nw_proto;
 2413|       |
 2414|  40.3k|    return 0;
 2415|  40.3k|}
ofp-actions.c:check_SET_L4_DST_PORT:
 2425|  20.0k|{
 2426|  20.0k|    return check_set_l4_port(a, cp);
 2427|  20.0k|}
ofp-actions.c:check_REG_MOVE:
 2730|    584|{
 2731|    584|    return nxm_reg_move_check(a, cp->match);
 2732|    584|}
ofp-actions.c:check_STACK_PUSH:
 3580|  4.83k|{
 3581|  4.83k|    return nxm_stack_push_check(a, cp->match);
 3582|  4.83k|}
ofp-actions.c:check_STACK_POP:
 3587|    510|{
 3588|    510|    return nxm_stack_pop_check(a, cp->match);
 3589|    510|}
ofp-actions.c:check_DEC_TTL:
 3763|    207|{
 3764|    207|    return check_set_ip(cp);
 3765|    207|}
ofp-actions.c:check_SET_MPLS_LABEL:
 3836|  2.83k|{
 3837|  2.83k|    return check_set_mpls(cp);
 3838|  2.83k|}
ofp-actions.c:check_set_mpls:
 3825|  30.7k|{
 3826|  30.7k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 3827|  30.7k|    if (!eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (3827:9): [True: 23.6k, False: 7.16k]
  ------------------
 3828|  23.6k|        inconsistent_match(&cp->usable_protocols);
 3829|  23.6k|    }
 3830|  30.7k|    return 0;
 3831|  30.7k|}
ofp-actions.c:check_SET_MPLS_TC:
 3897|  3.16k|{
 3898|  3.16k|    return check_set_mpls(cp);
 3899|  3.16k|}
ofp-actions.c:check_SET_MPLS_TTL:
 3955|  5.51k|{
 3956|  5.51k|    return check_set_mpls(cp);
 3957|  5.51k|}
ofp-actions.c:check_DEC_MPLS_TTL:
 3992|  19.2k|{
 3993|  19.2k|    return check_set_mpls(cp);
 3994|  19.2k|}
ofp-actions.c:check_PUSH_MPLS:
 4045|  4.43k|{
 4046|  4.43k|    struct flow *flow = &cp->match->flow;
 4047|       |
 4048|  4.43k|    if (flow->packet_type != htonl(PT_ETH)) {
  ------------------
  |  Branch (4048:9): [True: 11, False: 4.41k]
  ------------------
 4049|     11|        inconsistent_match(&cp->usable_protocols);
 4050|     11|    }
 4051|  4.43k|    flow->dl_type = a->ethertype;
 4052|       |
 4053|       |    /* The packet is now MPLS and the MPLS payload is opaque.
 4054|       |     * Thus nothing can be assumed about the network protocol.
 4055|       |     * Temporarily mark that we have no nw_proto. */
 4056|  4.43k|    flow->nw_proto = 0;
 4057|       |
 4058|  4.43k|    return 0;
 4059|  4.43k|}
ofp-actions.c:check_POP_MPLS:
 4102|  13.1k|{
 4103|  13.1k|    struct flow *flow = &cp->match->flow;
 4104|  13.1k|    ovs_be16 dl_type = get_dl_type(flow);
 4105|       |
 4106|  13.1k|    if (flow->packet_type != htonl(PT_ETH) || !eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (4106:9): [True: 19, False: 13.1k]
  |  Branch (4106:47): [True: 10.5k, False: 2.63k]
  ------------------
 4107|  10.5k|        inconsistent_match(&cp->usable_protocols);
 4108|  10.5k|    }
 4109|  13.1k|    flow->dl_type = a->ethertype;
 4110|  13.1k|    return 0;
 4111|  13.1k|}
ofp-actions.c:check_DEC_NSH_TTL:
 4835|    297|{
 4836|    297|    struct flow *flow = &cp->match->flow;
 4837|    297|    if (flow->packet_type != htonl(PT_NSH) &&
  ------------------
  |  Branch (4837:9): [True: 297, False: 0]
  ------------------
 4838|    297|        flow->dl_type != htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (4838:9): [True: 297, False: 0]
  ------------------
 4839|    297|        inconsistent_match(&cp->usable_protocols);
 4840|    297|    }
 4841|    297|    return 0;
 4842|    297|}
ofp-actions.c:check_DELETE_FIELD:
 4262|  1.25k|{
 4263|  1.25k|    if (odf->field->id < MFF_TUN_METADATA0 ||
  ------------------
  |  Branch (4263:9): [True: 649, False: 606]
  ------------------
 4264|  1.25k|        odf->field->id > MFF_TUN_METADATA63) {
  ------------------
  |  Branch (4264:9): [True: 186, False: 420]
  ------------------
 4265|    835|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4266|    835|    }
 4267|    420|    return 0;
 4268|  1.25k|}
ofp-actions.c:check_ENCAP:
 4670|  3.48k|{
 4671|  3.48k|    struct flow *flow = &cp->match->flow;
 4672|  3.48k|    flow->packet_type = a->new_pkt_type;
 4673|  3.48k|    if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (4673:9): [True: 1.62k, False: 1.86k]
  ------------------
 4674|  1.62k|        flow->dl_type = htons(pt_ns_type(flow->packet_type));
 4675|  1.62k|    }
 4676|  3.48k|    if (!is_ip_any(flow)) {
  ------------------
  |  Branch (4676:9): [True: 3.48k, False: 0]
  ------------------
 4677|  3.48k|        flow->nw_proto = 0;
 4678|  3.48k|    }
 4679|  3.48k|    return 0;
 4680|  3.48k|}
ofp-actions.c:check_DECAP:
 4787|  11.8k|{
 4788|  11.8k|    struct flow *flow = &cp->match->flow;
 4789|  11.8k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (4789:9): [True: 11.5k, False: 263]
  ------------------
 4790|       |        /* Adjust the packet_type to allow subsequent actions. */
 4791|  11.5k|        flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
  ------------------
  |  | 1521|  11.5k|#define PACKET_TYPE_BE(NS, NS_TYPE) (htonl((NS) << 16 | (NS_TYPE)))
  ------------------
 4792|  11.5k|                                           ntohs(flow->dl_type));
 4793|  11.5k|    } else {
 4794|       |        /* The actual packet_type is only known after decapsulation.
 4795|       |         * Do not allow subsequent actions that depend on packet headers. */
 4796|    263|        flow->packet_type = htonl(PT_UNKNOWN);
 4797|    263|        flow->dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|    263|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 4798|    263|    }
 4799|  11.8k|    return 0;
 4800|  11.8k|}
ofp-actions.c:check_SET_TUNNEL:
 4185|  1.25k|{
 4186|  1.25k|    return 0;
 4187|  1.25k|}
ofp-actions.c:check_SET_QUEUE:
 4305|  6.92k|{
 4306|  6.92k|    return 0;
 4307|  6.92k|}
ofp-actions.c:check_POP_QUEUE:
 4343|  7.65k|{
 4344|  7.65k|    return 0;
 4345|  7.65k|}
ofp-actions.c:check_FIN_TIMEOUT:
 4450|  1.79k|{
 4451|  1.79k|    if (cp->match->flow.nw_proto != IPPROTO_TCP) {
  ------------------
  |  Branch (4451:9): [True: 1.08k, False: 710]
  ------------------
 4452|  1.08k|        inconsistent_match(&cp->usable_protocols);
 4453|  1.08k|    }
 4454|  1.79k|    return 0;
 4455|  1.79k|}
ofp-actions.c:check_RESUBMIT:
 5057|    819|{
 5058|    819|    if (a->with_ct_orig && !is_ct_valid(&cp->match->flow, &cp->match->wc,
  ------------------
  |  Branch (5058:9): [True: 11, False: 808]
  |  Branch (5058:28): [True: 11, False: 0]
  ------------------
 5059|     11|                                        NULL)) {
 5060|     11|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 5061|     11|    }
 5062|    808|    return 0;
 5063|    819|}
ofp-actions.c:check_LEARN:
 5652|  28.9k|{
 5653|  28.9k|    return learn_check(a, cp->match);
 5654|  28.9k|}
ofp-actions.c:check_CONJUNCTION:
 5745|      1|{
 5746|      1|    return 0;
 5747|      1|}
ofp-actions.c:check_MULTIPATH:
 5879|     18|{
 5880|     18|    return multipath_check(a, cp->match);
 5881|     18|}
ofp-actions.c:check_NOTE:
 5965|    267|{
 5966|    267|    return 0;
 5967|    267|}
ofp-actions.c:check_EXIT:
 6002|     11|{
 6003|     11|    return 0;
 6004|     11|}
ofp-actions.c:check_SAMPLE:
 6370|     11|{
 6371|     11|    return 0;
 6372|     11|}
ofp-actions.c:check_CT:
 6877|  13.2k|{
 6878|  13.2k|    struct flow *flow = &cp->match->flow;
 6879|       |
 6880|  13.2k|    if (!dl_type_is_ip_any(get_dl_type(flow))
  ------------------
  |  Branch (6880:9): [True: 3.18k, False: 10.0k]
  ------------------
 6881|  13.2k|        || (flow->ct_state & CS_INVALID && a->flags & NX_CT_F_COMMIT)
  ------------------
  |  Branch (6881:13): [True: 0, False: 10.0k]
  |  Branch (6881:44): [True: 0, False: 0]
  ------------------
 6882|  13.2k|        || (a->alg == IPPORT_FTP && flow->nw_proto != IPPROTO_TCP)
  ------------------
  |  |  695|  20.0k|#define IPPORT_FTP  21
  ------------------
  |  Branch (6882:13): [True: 69, False: 9.97k]
  |  Branch (6882:37): [True: 23, False: 46]
  ------------------
 6883|  13.2k|        || (a->alg == IPPORT_TFTP && flow->nw_proto != IPPROTO_UDP)) {
  ------------------
  |  |  699|  20.0k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (6883:13): [True: 29, False: 9.99k]
  |  Branch (6883:38): [True: 11, False: 18]
  ------------------
 6884|       |        /* We can't downgrade to OF1.0 and expect inconsistent CT actions
 6885|       |         * be silently discarded.  Instead, datapath flow install fails, so
 6886|       |         * it is better to flag inconsistent CT actions as hard errors. */
 6887|  3.22k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 6888|  3.22k|    }
 6889|       |
 6890|  10.0k|    if (a->zone_src.field) {
  ------------------
  |  Branch (6890:9): [True: 1.95k, False: 8.06k]
  ------------------
 6891|  1.95k|        return mf_check_src(&a->zone_src, cp->match);
 6892|  1.95k|    }
 6893|       |
 6894|  8.06k|    return check_subactions(a->actions, ofpact_ct_get_action_len(a), cp);
 6895|  10.0k|}
ofp-actions.c:check_subactions:
 6129|  8.17k|{
 6130|  8.17k|    struct ofpact_check_params sub = *cp;
 6131|  8.17k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, &sub);
 6132|  8.17k|    cp->usable_protocols &= sub.usable_protocols;
 6133|  8.17k|    return error;
 6134|  8.17k|}
ofp-actions.c:check_CT_CLEAR:
 6931|    446|{
 6932|    446|    return 0;
 6933|    446|}
ofp-actions.c:check_NAT:
 7289|  8.00k|{
 7290|  8.00k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 7291|  8.00k|    if (!dl_type_is_ip_any(dl_type) ||
  ------------------
  |  Branch (7291:9): [True: 0, False: 8.00k]
  ------------------
 7292|  8.00k|        (a->range_af == AF_INET && dl_type != htons(ETH_TYPE_IP)) ||
  ------------------
  |  Branch (7292:10): [True: 5.31k, False: 2.69k]
  |  Branch (7292:36): [True: 18, False: 5.29k]
  ------------------
 7293|  8.00k|        (a->range_af == AF_INET6 && dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (7293:10): [True: 0, False: 7.98k]
  |  Branch (7293:37): [True: 0, False: 0]
  ------------------
 7294|     18|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7295|     18|    }
 7296|  7.98k|    return 0;
 7297|  8.00k|}
ofp-actions.c:check_OUTPUT_TRUNC:
 7359|    466|{
 7360|    466|    return ofpact_check_output_port(a->port, cp->max_ports);
 7361|    466|}
ofp-actions.c:check_CLONE:
 6138|    110|{
 6139|    110|    return check_subactions(a->actions, ofpact_nest_get_action_len(a), cp);
 6140|    110|}
ofp-actions.c:check_CHECK_PKT_LARGER:
 7720|      1|{
 7721|      1|    return 0;
 7722|      1|}
ofp-actions.c:check_METER:
 7410|    123|{
 7411|    123|    uint32_t mid = a->meter_id;
 7412|    123|    return mid == 0 || mid > OFPM13_MAX ? OFPERR_OFPMMFC_INVALID_METER : 0;
  ------------------
  |  Branch (7412:12): [True: 10, False: 113]
  |  Branch (7412:24): [True: 4, False: 109]
  ------------------
 7413|    123|}
ofp-actions.c:check_CLEAR_ACTIONS:
 7444|    103|{
 7445|    103|    return 0;
 7446|    103|}
ofp-actions.c:check_WRITE_ACTIONS:
 7507|  16.7k|{
 7508|       |    /* Use a temporary copy of 'cp' to avoid updating 'cp->usable_protocols',
 7509|       |     * since we can't check consistency of an action set. */
 7510|  16.7k|    struct ofpact_check_params tmp = *cp;
 7511|  16.7k|    return ofpacts_check(a->actions, ofpact_nest_get_action_len(a), &tmp);
 7512|  16.7k|}
ofp-actions.c:check_WRITE_METADATA:
 7603|    266|{
 7604|    266|    return 0;
 7605|    266|}
ofp-actions.c:check_GOTO_TABLE:
 7767|  1.87k|{
 7768|  1.87k|    if ((cp->table_id != 255 && a->table_id <= cp->table_id)
  ------------------
  |  Branch (7768:10): [True: 370, False: 1.50k]
  |  Branch (7768:33): [True: 117, False: 253]
  ------------------
 7769|  1.87k|        || (cp->n_tables != 255 && a->table_id >= cp->n_tables)) {
  ------------------
  |  Branch (7769:13): [True: 0, False: 1.75k]
  |  Branch (7769:36): [True: 0, False: 0]
  ------------------
 7770|    117|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 7771|    117|    }
 7772|  1.75k|    return 0;
 7773|  1.87k|}
ofp-actions.c:ofpacts_verify:
 8815|   278k|{
 8816|   278k|    const struct ofpact *a;
 8817|   278k|    enum ovs_instruction_type inst;
 8818|       |
 8819|   278k|    inst = OVSINST_OFPIT13_METER;
 8820|   398k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   663k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 398k, False: 265k]
  |  |  ------------------
  |  |  262|   385k|         (POS) = ofpact_next(POS))
  ------------------
 8821|   398k|        enum ovs_instruction_type next;
 8822|   398k|        enum ofperr error;
 8823|       |
 8824|   398k|        if (a->type == OFPACT_CONJUNCTION) {
  ------------------
  |  Branch (8824:13): [True: 10.2k, False: 388k]
  ------------------
 8825|  22.1k|            OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|  27.0k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 22.1k, False: 4.81k]
  |  |  ------------------
  |  |  262|  16.7k|         (POS) = ofpact_next(POS))
  ------------------
 8826|  22.1k|                if (a->type != OFPACT_CONJUNCTION && a->type != OFPACT_NOTE) {
  ------------------
  |  Branch (8826:21): [True: 17.1k, False: 5.05k]
  |  Branch (8826:54): [True: 5.44k, False: 11.6k]
  ------------------
 8827|  5.44k|                    verify_error(errorp, "\"conjunction\" actions may be used "
 8828|  5.44k|                                 "along with \"note\" but not any other kind "
 8829|  5.44k|                                 "of action (such as the \"%s\" action used "
 8830|  5.44k|                                 "here)", ofpact_name(a->type));
 8831|  5.44k|                    return OFPERR_NXBAC_BAD_CONJUNCTION;
 8832|  5.44k|                }
 8833|  22.1k|            }
 8834|  4.81k|            return 0;
 8835|  10.2k|        }
 8836|       |
 8837|   388k|        error = ofpacts_verify_nested(a, outer_action, errorp);
 8838|   388k|        if (error) {
  ------------------
  |  Branch (8838:13): [True: 2.67k, False: 385k]
  ------------------
 8839|  2.67k|            return error;
 8840|  2.67k|        }
 8841|       |
 8842|   385k|        next = ovs_instruction_type_from_ofpact_type(a->type, version);
 8843|   385k|        if (a > ofpacts
  ------------------
  |  Branch (8843:13): [True: 190k, False: 195k]
  ------------------
 8844|   385k|            && (inst == OVSINST_OFPIT11_APPLY_ACTIONS
  ------------------
  |  Branch (8844:16): [True: 1, False: 190k]
  |  Branch (8844:17): [True: 188k, False: 1.94k]
  ------------------
 8845|   190k|                ? next < inst
 8846|   190k|                : next <= inst)) {
 8847|      1|            const char *name = ovs_instruction_name_from_type(inst);
 8848|      1|            const char *next_name = ovs_instruction_name_from_type(next);
 8849|       |
 8850|      1|            if (next == inst) {
  ------------------
  |  Branch (8850:17): [True: 0, False: 1]
  ------------------
 8851|      0|                verify_error(errorp, "duplicate %s instruction not allowed, "
 8852|      0|                             "for OpenFlow 1.1+ compatibility", name);
 8853|      1|            } else {
 8854|      1|                verify_error(errorp, "invalid instruction ordering: "
 8855|      1|                             "%s must appear before %s, "
 8856|      1|                             "for OpenFlow 1.1+ compatibility",
 8857|      1|                             next_name, name);
 8858|      1|            }
 8859|      1|            return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 8860|      1|        }
 8861|   385k|        if (!((1u << next) & allowed_ovsinsts)) {
  ------------------
  |  Branch (8861:13): [True: 18, False: 385k]
  ------------------
 8862|     18|            const char *name = ovs_instruction_name_from_type(next);
 8863|       |
 8864|     18|            if (next == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8864:17): [True: 0, False: 18]
  |  Branch (8864:50): [True: 0, False: 0]
  ------------------
 8865|      0|                verify_error(errorp, "%s action not allowed here", name);
 8866|      0|                return OFPERR_OFPBAC_BAD_TYPE;
 8867|     18|            } else {
 8868|     18|                verify_error(errorp, "%s instruction not allowed here", name);
 8869|     18|                return OFPERR_OFPBIC_UNSUP_INST;
 8870|     18|            }
 8871|     18|        }
 8872|       |
 8873|   385k|        inst = next;
 8874|   385k|    }
 8875|       |
 8876|   265k|    return 0;
 8877|   278k|}
ofp-actions.c:verify_error:
 8725|  8.14k|{
 8726|  8.14k|    va_list args;
 8727|  8.14k|    va_start(args, format);
 8728|  8.14k|    char *error = xvasprintf(format, args);
 8729|  8.14k|    va_end(args);
 8730|       |
 8731|  8.14k|    if (errorp) {
  ------------------
  |  Branch (8731:9): [True: 0, False: 8.14k]
  ------------------
 8732|      0|        *errorp = error;
 8733|  8.14k|    } else {
 8734|  8.14k|        VLOG_WARN("%s", error);
  ------------------
  |  |  208|  8.14k|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|  8.14k|    do {                                                \
  |  |  |  |  280|  8.14k|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|  8.14k|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 8.14k]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|  8.14k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8735|  8.14k|        free(error);
 8736|  8.14k|    }
 8737|  8.14k|}
ofp-actions.c:ofpacts_verify_nested:
 8758|   388k|{
 8759|   388k|    const struct mf_field *field = ofpact_get_mf_dst(a);
 8760|       |
 8761|   388k|    if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8761:9): [True: 20.5k, False: 367k]
  |  Branch (8761:18): [True: 2.68k, False: 17.8k]
  |  Branch (8761:50): [True: 195, False: 2.49k]
  ------------------
 8762|    195|        verify_error(errorp, "cannot set CT fields outside of ct action");
 8763|    195|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8764|    195|    }
 8765|   388k|    if (a->type == OFPACT_NAT) {
  ------------------
  |  Branch (8765:9): [True: 17.4k, False: 370k]
  ------------------
 8766|  17.4k|        if (outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8766:13): [True: 755, False: 16.6k]
  ------------------
 8767|    755|            verify_error(errorp,
 8768|    755|                         "Cannot have NAT action outside of \"ct\" action");
 8769|    755|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8770|    755|        }
 8771|  16.6k|        return 0;
 8772|  17.4k|    }
 8773|       |
 8774|   370k|    if (outer_action) {
  ------------------
  |  Branch (8774:9): [True: 4.22k, False: 366k]
  ------------------
 8775|  4.22k|        ovs_assert(outer_action == OFPACT_WRITE_ACTIONS
  ------------------
  |  |   58|  12.6k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 0, False: 4.22k]
  |  |  |  Branch (58:40): [True: 4.22k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 8776|  4.22k|                   || outer_action == OFPACT_CT
 8777|  4.22k|                   || outer_action == OFPACT_CLONE);
 8778|       |
 8779|  4.22k|        if (outer_action == OFPACT_CT) {
  ------------------
  |  Branch (8779:13): [True: 4.22k, False: 0]
  ------------------
 8780|  4.22k|            if (!field) {
  ------------------
  |  Branch (8780:17): [True: 1.02k, False: 3.19k]
  ------------------
 8781|  1.02k|                return unsupported_nesting(a->type, outer_action, errorp);
 8782|  3.19k|            } else if (!field_requires_ct(field->id)) {
  ------------------
  |  Branch (8782:24): [True: 699, False: 2.49k]
  ------------------
 8783|    699|                verify_error(errorp,
 8784|    699|                             "%s action doesn't support nested modification "
 8785|    699|                             "of %s", ofpact_name(outer_action), field->name);
 8786|    699|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 8787|    699|            }
 8788|  4.22k|        }
 8789|       |
 8790|  2.49k|        if (a->type == OFPACT_METER) {
  ------------------
  |  Branch (8790:13): [True: 0, False: 2.49k]
  ------------------
 8791|      0|            return unsupported_nesting(a->type, outer_action, errorp);
 8792|      0|        }
 8793|  2.49k|    }
 8794|       |
 8795|   368k|    return 0;
 8796|   370k|}
ofp-actions.c:field_requires_ct:
 8750|  23.7k|{
 8751|  23.7k|    return field == MFF_CT_MARK || field == MFF_CT_LABEL;
  ------------------
  |  Branch (8751:12): [True: 5.18k, False: 18.5k]
  |  Branch (8751:36): [True: 0, False: 18.5k]
  ------------------
 8752|  23.7k|}
ofp-actions.c:unsupported_nesting:
 8742|  1.02k|{
 8743|  1.02k|    verify_error(errorp, "%s action doesn't support nested action %s",
 8744|  1.02k|                 ofpact_name(outer_action), ofpact_name(action));
 8745|  1.02k|    return OFPERR_OFPBAC_BAD_ARGUMENT;
 8746|  1.02k|}
ofp-actions.c:next_load_segment:
 2975|  14.2k|{
 2976|  14.2k|    int n_bits = sf->field->n_bits;
 2977|  14.2k|    int n_bytes = sf->field->n_bytes;
 2978|  14.2k|    int start = dst->ofs + dst->n_bits;
 2979|       |
 2980|  14.2k|    if (start < n_bits) {
  ------------------
  |  Branch (2980:9): [True: 12.2k, False: 1.99k]
  ------------------
 2981|  12.2k|        dst->field = sf->field;
 2982|  12.2k|        dst->ofs = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 1, start,
  ------------------
  |  |  563|  12.2k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|  12.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  12.2k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  12.2k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2983|  12.2k|                                n_bits);
 2984|  12.2k|        if (dst->ofs < n_bits) {
  ------------------
  |  Branch (2984:13): [True: 7.11k, False: 5.11k]
  ------------------
 2985|  7.11k|            dst->n_bits = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 0,
  ------------------
  |  |  563|  7.11k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|  7.11k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  7.11k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  7.11k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2986|  7.11k|                                       dst->ofs + 1,
 2987|  7.11k|                                       MIN(dst->ofs + 64, n_bits)) - dst->ofs;
  ------------------
  |  |   96|  7.11k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 4.55k, False: 2.56k]
  |  |  ------------------
  ------------------
 2988|  7.11k|            *value = bitwise_get(sf->value, n_bytes, dst->ofs, dst->n_bits);
 2989|  7.11k|            return true;
 2990|  7.11k|        }
 2991|  12.2k|    }
 2992|  7.11k|    return false;
 2993|  14.2k|}
ofp-actions.c:get_ofpact_map:
 8967|  64.1k|{
 8968|       |    /* OpenFlow 1.0 actions. */
 8969|  64.1k|    static const struct ofpact_map of10[] = {
 8970|  64.1k|        { OFPACT_OUTPUT, 0 },
 8971|  64.1k|        { OFPACT_SET_VLAN_VID, 1 },
 8972|  64.1k|        { OFPACT_SET_VLAN_PCP, 2 },
 8973|  64.1k|        { OFPACT_STRIP_VLAN, 3 },
 8974|  64.1k|        { OFPACT_SET_ETH_SRC, 4 },
 8975|  64.1k|        { OFPACT_SET_ETH_DST, 5 },
 8976|  64.1k|        { OFPACT_SET_IPV4_SRC, 6 },
 8977|  64.1k|        { OFPACT_SET_IPV4_DST, 7 },
 8978|  64.1k|        { OFPACT_SET_IP_DSCP, 8 },
 8979|  64.1k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 8980|  64.1k|        { OFPACT_SET_L4_DST_PORT, 10 },
 8981|  64.1k|        { OFPACT_ENQUEUE, 11 },
 8982|  64.1k|        { 0, -1 },
 8983|  64.1k|    };
 8984|       |
 8985|       |    /* OpenFlow 1.1 actions. */
 8986|  64.1k|    static const struct ofpact_map of11[] = {
 8987|  64.1k|        { OFPACT_OUTPUT, 0 },
 8988|  64.1k|        { OFPACT_SET_VLAN_VID, 1 },
 8989|  64.1k|        { OFPACT_SET_VLAN_PCP, 2 },
 8990|  64.1k|        { OFPACT_SET_ETH_SRC, 3 },
 8991|  64.1k|        { OFPACT_SET_ETH_DST, 4 },
 8992|  64.1k|        { OFPACT_SET_IPV4_SRC, 5 },
 8993|  64.1k|        { OFPACT_SET_IPV4_DST, 6 },
 8994|  64.1k|        { OFPACT_SET_IP_DSCP, 7 },
 8995|  64.1k|        { OFPACT_SET_IP_ECN, 8 },
 8996|  64.1k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 8997|  64.1k|        { OFPACT_SET_L4_DST_PORT, 10 },
 8998|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 8999|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9000|  64.1k|        { OFPACT_SET_MPLS_LABEL, 13 },
 9001|  64.1k|        { OFPACT_SET_MPLS_TC, 14 },
 9002|  64.1k|        { OFPACT_SET_MPLS_TTL, 15 },
 9003|  64.1k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9004|  64.1k|        { OFPACT_PUSH_VLAN, 17 },
 9005|  64.1k|        { OFPACT_STRIP_VLAN, 18 },
 9006|  64.1k|        { OFPACT_PUSH_MPLS, 19 },
 9007|  64.1k|        { OFPACT_POP_MPLS, 20 },
 9008|  64.1k|        { OFPACT_SET_QUEUE, 21 },
 9009|  64.1k|        { OFPACT_GROUP, 22 },
 9010|  64.1k|        { OFPACT_SET_IP_TTL, 23 },
 9011|  64.1k|        { OFPACT_DEC_TTL, 24 },
 9012|  64.1k|        { 0, -1 },
 9013|  64.1k|    };
 9014|       |
 9015|       |    /* OpenFlow 1.2, 1.3, and 1.4 actions. */
 9016|  64.1k|    static const struct ofpact_map of12[] = {
 9017|  64.1k|        { OFPACT_OUTPUT, 0 },
 9018|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9019|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9020|  64.1k|        { OFPACT_SET_MPLS_TTL, 15 },
 9021|  64.1k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9022|  64.1k|        { OFPACT_PUSH_VLAN, 17 },
 9023|  64.1k|        { OFPACT_STRIP_VLAN, 18 },
 9024|  64.1k|        { OFPACT_PUSH_MPLS, 19 },
 9025|  64.1k|        { OFPACT_POP_MPLS, 20 },
 9026|  64.1k|        { OFPACT_SET_QUEUE, 21 },
 9027|  64.1k|        { OFPACT_GROUP, 22 },
 9028|  64.1k|        { OFPACT_SET_IP_TTL, 23 },
 9029|  64.1k|        { OFPACT_DEC_TTL, 24 },
 9030|  64.1k|        { OFPACT_SET_FIELD, 25 },
 9031|       |        /* OF1.3+ OFPAT_PUSH_PBB (26) not supported. */
 9032|       |        /* OF1.3+ OFPAT_POP_PBB (27) not supported. */
 9033|  64.1k|        { 0, -1 },
 9034|  64.1k|    };
 9035|       |
 9036|  64.1k|    switch (version) {
 9037|  2.54k|    case OFP10_VERSION:
  ------------------
  |  Branch (9037:5): [True: 2.54k, False: 61.6k]
  ------------------
 9038|  2.54k|        return of10;
 9039|       |
 9040|  16.3k|    case OFP11_VERSION:
  ------------------
  |  Branch (9040:5): [True: 16.3k, False: 47.7k]
  ------------------
 9041|  16.3k|        return of11;
 9042|       |
 9043|  37.8k|    case OFP12_VERSION:
  ------------------
  |  Branch (9043:5): [True: 37.8k, False: 26.3k]
  ------------------
 9044|  38.0k|    case OFP13_VERSION:
  ------------------
  |  Branch (9044:5): [True: 239, False: 63.9k]
  ------------------
 9045|  40.4k|    case OFP14_VERSION:
  ------------------
  |  Branch (9045:5): [True: 2.45k, False: 61.6k]
  ------------------
 9046|  45.2k|    case OFP15_VERSION:
  ------------------
  |  Branch (9046:5): [True: 4.71k, False: 59.4k]
  ------------------
 9047|  45.2k|    default:
  ------------------
  |  Branch (9047:5): [True: 0, False: 64.1k]
  ------------------
 9048|  45.2k|        return of12;
 9049|  64.1k|    }
 9050|  64.1k|}
ofp-actions.c:ofpact_format:
 9274|   351k|{
 9275|   351k|    switch (a->type) {
 9276|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME)                              \
 9277|      0|        case OFPACT_##ENUM:                                             \
 9278|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
 9279|      0|            break;
 9280|      0|        OFPACTS
  ------------------
  |  |   64|  35.5k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9277|  35.5k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 35.5k, False: 315k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  35.5k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  35.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  35.5k|            break;
  |  |  ------------------
  |  |   65|  35.5k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9277|  5.21k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 5.21k, False: 346k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  5.21k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  5.21k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  5.21k|            break;
  |  |  ------------------
  |  |   66|  7.78k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9277|  7.78k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 7.78k, False: 343k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  7.78k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  7.78k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  7.78k|            break;
  |  |  ------------------
  |  |   67|  7.78k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9277|  1.64k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.64k, False: 349k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.64k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.64k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.64k|            break;
  |  |  ------------------
  |  |   68|  1.64k|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9277|     31|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 31, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|     31|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|     31|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|     31|            break;
  |  |  ------------------
  |  |   69|  6.24k|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9277|  6.24k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 6.24k, False: 345k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  6.24k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  6.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  6.24k|            break;
  |  |  ------------------
  |  |   70|  6.24k|                                                                        \
  |  |   71|  6.24k|    /* Header changes. */                                               \
  |  |   72|  15.0k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9277|  15.0k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 15.0k, False: 336k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  15.0k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  15.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  15.0k|            break;
  |  |  ------------------
  |  |   73|  15.0k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9277|  6.24k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 6.24k, False: 345k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  6.24k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  6.24k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  6.24k|            break;
  |  |  ------------------
  |  |   74|  6.24k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9277|  1.70k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.70k, False: 349k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.70k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.70k|            break;
  |  |  ------------------
  |  |   75|  16.2k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9277|  16.2k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 16.2k, False: 335k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  16.2k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  16.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  16.2k|            break;
  |  |  ------------------
  |  |   76|  16.2k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9277|  2.99k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 2.99k, False: 348k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  2.99k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  2.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  2.99k|            break;
  |  |  ------------------
  |  |   77|  2.99k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9277|     46|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 46, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|     46|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|     46|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|     46|            break;
  |  |  ------------------
  |  |   78|     48|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9277|     48|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 48, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|     48|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|     48|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|     48|            break;
  |  |  ------------------
  |  |   79|  3.49k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9277|  3.49k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 3.49k, False: 347k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  3.49k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  3.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  3.49k|            break;
  |  |  ------------------
  |  |   80|  7.45k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9277|  7.45k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 7.45k, False: 343k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  7.45k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  7.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  7.45k|            break;
  |  |  ------------------
  |  |   81|  10.5k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9277|  10.5k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 10.5k, False: 340k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  10.5k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  10.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  10.5k|            break;
  |  |  ------------------
  |  |   82|  10.5k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9277|  9.06k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 9.06k, False: 342k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  9.06k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  9.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  9.06k|            break;
  |  |  ------------------
  |  |   83|  9.06k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9277|  1.70k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.70k, False: 349k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.70k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.70k|            break;
  |  |  ------------------
  |  |   84|  25.0k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9277|  25.0k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 25.0k, False: 326k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  25.0k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  25.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  25.0k|            break;
  |  |  ------------------
  |  |   85|  25.0k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9277|  20.0k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 20.0k, False: 331k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  20.0k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  20.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  20.0k|            break;
  |  |  ------------------
  |  |   86|  20.0k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9277|    590|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 590, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    590|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    590|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    590|            break;
  |  |  ------------------
  |  |   87|  4.79k|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9277|  4.79k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 4.79k, False: 346k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  4.79k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  4.79k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  4.79k|            break;
  |  |  ------------------
  |  |   88|  4.79k|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9277|    510|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 510, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    510|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    510|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    510|            break;
  |  |  ------------------
  |  |   89|  1.31k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9277|  1.31k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.31k, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.31k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.31k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.31k|            break;
  |  |  ------------------
  |  |   90|  1.32k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9277|  1.32k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.32k, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.32k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.32k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.32k|            break;
  |  |  ------------------
  |  |   91|  1.32k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9277|    714|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 714, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    714|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    714|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    714|            break;
  |  |  ------------------
  |  |   92|  7.16k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9277|  7.16k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 7.16k, False: 344k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  7.16k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  7.16k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  7.16k|            break;
  |  |  ------------------
  |  |   93|  7.16k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9277|  4.66k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 4.66k, False: 346k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  4.66k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  4.66k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  4.66k|            break;
  |  |  ------------------
  |  |   94|  4.66k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9277|  4.42k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 4.42k, False: 346k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  4.42k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  4.42k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  4.42k|            break;
  |  |  ------------------
  |  |   95|  13.1k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9277|  13.1k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 13.1k, False: 338k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  13.1k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  13.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  13.1k|            break;
  |  |  ------------------
  |  |   96|  13.1k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9277|    456|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 456, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    456|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    456|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    456|            break;
  |  |  ------------------
  |  |   97|    456|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9277|    421|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 421, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    421|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    421|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    421|            break;
  |  |  ------------------
  |  |   98|    421|                                                                        \
  |  |   99|    421|    /* Generic encap & decap */                                         \
  |  |  100|  3.76k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9277|  3.76k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 3.76k, False: 347k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  3.76k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  3.76k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  3.76k|            break;
  |  |  ------------------
  |  |  101|  3.76k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9277|    332|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 332, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    332|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    332|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    332|            break;
  |  |  ------------------
  |  |  102|    332|                                                                        \
  |  |  103|    332|    /* Metadata. */                                                     \
  |  |  104|    998|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9277|    998|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 998, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    998|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    998|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    998|            break;
  |  |  ------------------
  |  |  105|  6.93k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9277|  6.93k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 6.93k, False: 344k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  6.93k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  6.93k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  6.93k|            break;
  |  |  ------------------
  |  |  106|  6.93k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9277|  2.67k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 2.67k, False: 348k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  2.67k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  2.67k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  2.67k|            break;
  |  |  ------------------
  |  |  107|  2.67k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9277|  2.06k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 2.06k, False: 349k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  2.06k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  2.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  2.06k|            break;
  |  |  ------------------
  |  |  108|  2.06k|                                                                        \
  |  |  109|  2.06k|    /* Flow table interaction. */                                       \
  |  |  110|  2.73k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9277|  2.73k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 2.73k, False: 348k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  2.73k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  2.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  2.73k|            break;
  |  |  ------------------
  |  |  111|  26.4k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9277|  26.4k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 26.4k, False: 324k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  26.4k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  26.4k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  26.4k|            break;
  |  |  ------------------
  |  |  112|  26.4k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9277|  4.82k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 4.82k, False: 346k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  4.82k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  4.82k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  4.82k|            break;
  |  |  ------------------
  |  |  113|  4.82k|                                                                        \
  |  |  114|  4.82k|    /* Arithmetic. */                                                   \
  |  |  115|  4.82k|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9277|  2.43k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 2.43k, False: 348k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  2.43k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  2.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  2.43k|            break;
  |  |  ------------------
  |  |  116|  2.43k|                                                                        \
  |  |  117|  2.43k|    /* Other. */                                                        \
  |  |  118|  14.5k|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9277|  14.5k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 14.5k, False: 336k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  14.5k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  14.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  14.5k|            break;
  |  |  ------------------
  |  |  119|  14.5k|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9277|    660|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 660, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    660|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    660|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    660|            break;
  |  |  ------------------
  |  |  120|  3.90k|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9277|  3.90k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 3.90k, False: 347k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  3.90k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  3.90k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  3.90k|            break;
  |  |  ------------------
  |  |  121|  8.89k|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9277|  8.89k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 8.89k, False: 342k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  8.89k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  8.89k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  8.89k|            break;
  |  |  ------------------
  |  |  122|  21.9k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9277|  21.9k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 21.9k, False: 329k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  21.9k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  21.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  21.9k|            break;
  |  |  ------------------
  |  |  123|  21.9k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9277|    457|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 457, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    457|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    457|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    457|            break;
  |  |  ------------------
  |  |  124|    457|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9277|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 0, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|      0|            break;
  |  |  ------------------
  |  |  125|    314|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9277|    314|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 314, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    314|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    314|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    314|            break;
  |  |  ------------------
  |  |  126|    827|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9277|    827|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 827, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    827|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    827|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    827|            break;
  |  |  ------------------
  |  |  127|    827|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9277|     11|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 11, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|     11|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|     11|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|     11|            break;
  |  |  ------------------
  |  |  128|     11|           "check_pkt_larger")                                          \
  |  |  129|     11|                                                                        \
  |  |  130|     11|    /* Debugging actions.                                               \
  |  |  131|     11|     *                                                                  \
  |  |  132|     11|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|     11|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|     11|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9277|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 0, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|      0|            break;
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 9277|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 0, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|      0|            break;
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|  11.3k|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9277|  11.3k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 11.3k, False: 340k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  11.3k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  11.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  11.3k|            break;
  |  |  ------------------
  |  |  139|  11.3k|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9277|    102|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 102, False: 351k]
  |  |  |  |  ------------------
  |  |  |  | 9278|    102|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|    102|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|    102|            break;
  |  |  ------------------
  |  |  140|  16.6k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9277|  16.6k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 16.6k, False: 334k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  16.6k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  16.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  16.6k|            break;
  |  |  ------------------
  |  |  141|  16.6k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9277|  1.18k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.18k, False: 350k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.18k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.18k|            break;
  |  |  ------------------
  |  |  142|  1.74k|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9277|  1.74k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9277:9): [True: 1.74k, False: 349k]
  |  |  |  |  ------------------
  |  |  |  | 9278|  1.74k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  430|  1.74k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9279|  1.74k|            break;
  |  |  ------------------
  ------------------
 9281|      0|#undef OFPACT
 9282|      0|    default:
  ------------------
  |  Branch (9282:5): [True: 0, False: 351k]
  ------------------
 9283|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 9284|   351k|    }
 9285|   351k|}
ofp-actions.c:format_OUTPUT:
  702|  35.5k|{
  703|  35.5k|    if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|  35.5k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  35.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (703:9): [True: 16.0k, False: 19.4k]
  ------------------
  704|  16.0k|        ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
  705|  16.0k|    }
  706|  35.5k|    ofputil_format_port(a->port, fp->port_map, fp->s);
  707|  35.5k|    if (a->port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  35.5k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  35.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (707:9): [True: 5.58k, False: 29.9k]
  ------------------
  708|  5.58k|        ds_put_format(fp->s, ":%"PRIu16, a->max_len);
  709|  5.58k|    }
  710|  35.5k|}
ofp-actions.c:format_GROUP:
  746|  5.21k|{
  747|  5.21k|    ds_put_format(fp->s, "%sgroup:%s%"PRIu32,
  748|  5.21k|                  colors.special, colors.end, a->group_id);
  749|  5.21k|}
ofp-actions.c:format_CONTROLLER:
 1038|  7.78k|{
 1039|  7.78k|    if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len
  ------------------
  |  Branch (1039:9): [True: 4.17k, False: 3.60k]
  |  Branch (1039:37): [True: 3.92k, False: 258]
  |  Branch (1039:58): [True: 2.58k, False: 1.33k]
  ------------------
 1040|  7.78k|        && !a->pause && a->meter_id == NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  1.53k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1040:12): [True: 1.53k, False: 1.04k]
  |  Branch (1040:25): [True: 172, False: 1.36k]
  ------------------
 1041|    172|        ds_put_format(fp->s, "%sCONTROLLER:%s%"PRIu16,
 1042|    172|                      colors.special, colors.end, a->max_len);
 1043|  7.61k|    } else {
 1044|  7.61k|        enum ofp_packet_in_reason reason = a->reason;
 1045|       |
 1046|  7.61k|        ds_put_format(fp->s, "%scontroller(%s", colors.paren, colors.end);
 1047|  7.61k|        if (reason != OFPR_ACTION) {
  ------------------
  |  Branch (1047:13): [True: 3.60k, False: 4.00k]
  ------------------
 1048|  3.60k|            char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
 1049|       |
 1050|  3.60k|            ds_put_format(fp->s, "%sreason=%s%s,", colors.param, colors.end,
 1051|  3.60k|                          ofputil_packet_in_reason_to_string(
 1052|  3.60k|                              reason, reasonbuf, sizeof reasonbuf));
 1053|  3.60k|        }
 1054|  7.61k|        if (a->max_len != UINT16_MAX) {
  ------------------
  |  Branch (1054:13): [True: 4.30k, False: 3.31k]
  ------------------
 1055|  4.30k|            ds_put_format(fp->s, "%smax_len=%s%"PRIu16",",
 1056|  4.30k|                          colors.param, colors.end, a->max_len);
 1057|  4.30k|        }
 1058|  7.61k|        if (a->controller_id != 0) {
  ------------------
  |  Branch (1058:13): [True: 2.59k, False: 5.01k]
  ------------------
 1059|  2.59k|            ds_put_format(fp->s, "%sid=%s%"PRIu16",",
 1060|  2.59k|                          colors.param, colors.end, a->controller_id);
 1061|  2.59k|        }
 1062|  7.61k|        if (a->userdata_len) {
  ------------------
  |  Branch (1062:13): [True: 1.34k, False: 6.27k]
  ------------------
 1063|  1.34k|            ds_put_format(fp->s, "%suserdata=%s", colors.param, colors.end);
 1064|  1.34k|            format_hex_arg(fp->s, a->userdata, a->userdata_len);
 1065|  1.34k|            ds_put_char(fp->s, ',');
 1066|  1.34k|        }
 1067|  7.61k|        if (a->pause) {
  ------------------
  |  Branch (1067:13): [True: 2.58k, False: 5.03k]
  ------------------
 1068|  2.58k|            ds_put_format(fp->s, "%spause%s,", colors.value, colors.end);
 1069|  2.58k|        }
 1070|  7.61k|        if (a->meter_id != NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  7.61k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1070:13): [True: 2.78k, False: 4.82k]
  ------------------
 1071|  2.78k|            ds_put_format(fp->s, "%smeter_id=%s%"PRIu32",",
 1072|  2.78k|                          colors.param, colors.end, a->meter_id);
 1073|  2.78k|        }
 1074|  7.61k|        ds_chomp(fp->s, ',');
 1075|  7.61k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 1076|  7.61k|    }
 1077|  7.78k|}
ofp-actions.c:format_hex_arg:
 1026|  15.8k|{
 1027|   128k|    for (size_t i = 0; i < len; i++) {
  ------------------
  |  Branch (1027:24): [True: 112k, False: 15.8k]
  ------------------
 1028|   112k|        if (i) {
  ------------------
  |  Branch (1028:13): [True: 96.8k, False: 15.8k]
  ------------------
 1029|  96.8k|            ds_put_char(s, '.');
 1030|  96.8k|        }
 1031|   112k|        ds_put_format(s, "%02"PRIx8, data[i]);
 1032|   112k|    }
 1033|  15.8k|}
ofp-actions.c:format_ENQUEUE:
 1160|  1.64k|{
 1161|  1.64k|    ds_put_format(fp->s, "%senqueue:%s", colors.param, colors.end);
 1162|  1.64k|    ofputil_format_port(a->port, fp->port_map, fp->s);
 1163|  1.64k|    ds_put_format(fp->s, ":%"PRIu32, a->queue);
 1164|  1.64k|}
ofp-actions.c:format_OUTPUT_REG:
 1326|     31|{
 1327|     31|    ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
 1328|     31|    mf_format_subfield(&a->src, fp->s);
 1329|     31|}
ofp-actions.c:format_BUNDLE:
 1553|  6.24k|{
 1554|  6.24k|    bundle_format(a, fp->port_map, fp->s);
 1555|  6.24k|}
ofp-actions.c:format_SET_FIELD:
 3334|  15.0k|{
 3335|  15.0k|    if (a->ofpact.raw == NXAST_RAW_REG_LOAD) {
  ------------------
  |  Branch (3335:9): [True: 7.11k, False: 7.96k]
  ------------------
 3336|  7.11k|        struct mf_subfield dst;
 3337|  7.11k|        uint64_t value;
 3338|       |
 3339|  7.11k|        dst.ofs = dst.n_bits = 0;
 3340|  14.2k|        while (next_load_segment(a, &dst, &value)) {
  ------------------
  |  Branch (3340:16): [True: 7.11k, False: 7.11k]
  ------------------
 3341|  7.11k|            ds_put_format(fp->s, "%sload:%s%#"PRIx64"%s->%s",
 3342|  7.11k|                          colors.special, colors.end, value,
 3343|  7.11k|                          colors.special, colors.end);
 3344|  7.11k|            mf_format_subfield(&dst, fp->s);
 3345|  7.11k|            ds_put_char(fp->s, ',');
 3346|  7.11k|        }
 3347|  7.11k|        ds_chomp(fp->s, ',');
 3348|  7.96k|    } else {
 3349|  7.96k|        ds_put_format(fp->s, "%sset_field:%s", colors.special, colors.end);
 3350|  7.96k|        mf_format(a->field, a->value, ofpact_set_field_mask(a),
  ------------------
  |  |  563|  7.96k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  430|  7.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  7.96k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  7.96k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3351|  7.96k|                  fp->port_map, fp->s);
 3352|  7.96k|        ds_put_format(fp->s, "%s->%s%s",
 3353|  7.96k|                      colors.special, colors.end, a->field->name);
 3354|  7.96k|    }
 3355|  15.0k|}
ofp-actions.c:format_SET_VLAN_VID:
 1649|  6.24k|{
 1650|  6.24k|    ds_put_format(fp->s, "%s%s:%s%"PRIu16, colors.param,
 1651|  6.24k|                  a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid",
  ------------------
  |  Branch (1651:19): [True: 5.75k, False: 492]
  ------------------
 1652|  6.24k|                  colors.end, a->vlan_vid);
 1653|  6.24k|}
ofp-actions.c:format_SET_VLAN_PCP:
 1757|  1.70k|{
 1758|  1.70k|    ds_put_format(fp->s, "%s%s:%s%"PRIu8, colors.param,
 1759|  1.70k|                  a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp",
  ------------------
  |  Branch (1759:19): [True: 1.24k, False: 463]
  ------------------
 1760|  1.70k|                  colors.end, a->vlan_pcp);
 1761|  1.70k|}
ofp-actions.c:format_STRIP_VLAN:
 1824|  16.2k|{
 1825|  16.2k|    ds_put_format(fp->s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN
  ------------------
  |  Branch (1825:27): [True: 3.21k, False: 12.9k]
  ------------------
 1826|  16.2k|                    ? "%spop_vlan%s"
 1827|  16.2k|                    : "%sstrip_vlan%s"),
 1828|  16.2k|                  colors.value, colors.end);
 1829|  16.2k|}
ofp-actions.c:format_PUSH_VLAN:
 1894|  2.99k|{
 1895|  2.99k|    ds_put_format(fp->s, "%spush_vlan:%s%#"PRIx16,
 1896|  2.99k|                  colors.param, colors.end, ntohs(push_vlan->ethertype));
 1897|  2.99k|}
ofp-actions.c:format_SET_ETH_SRC:
 1990|     46|{
 1991|     46|    ds_put_format(fp->s, "%smod_dl_src:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|     46|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1992|     46|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|     46|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|     46|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1993|     46|}
ofp-actions.c:format_SET_ETH_DST:
 1998|     48|{
 1999|     48|    ds_put_format(fp->s, "%smod_dl_dst:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|     48|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 2000|     48|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|     48|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|     48|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 2001|     48|}
ofp-actions.c:format_SET_IPV4_SRC:
 2082|  3.49k|{
 2083|  3.49k|    ds_put_format(fp->s, "%smod_nw_src:%s"IP_FMT,
  ------------------
  |  |  628|  3.49k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2084|  3.49k|                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  3.49k|    ntohl(ip) >> 24,                            \
  |  |  631|  3.49k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  3.49k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  3.49k|    ntohl(ip) & 0xff
  ------------------
 2085|  3.49k|}
ofp-actions.c:format_SET_IPV4_DST:
 2090|  7.45k|{
 2091|  7.45k|    ds_put_format(fp->s, "%smod_nw_dst:%s"IP_FMT,
  ------------------
  |  |  628|  7.45k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2092|  7.45k|                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  7.45k|    ntohl(ip) >> 24,                            \
  |  |  631|  7.45k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  7.45k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  7.45k|    ntohl(ip) & 0xff
  ------------------
 2093|  7.45k|}
ofp-actions.c:format_SET_IP_DSCP:
 2167|  10.5k|{
 2168|  10.5k|    ds_put_format(fp->s, "%smod_nw_tos:%s%d",
 2169|  10.5k|                  colors.param, colors.end, a->dscp);
 2170|  10.5k|}
ofp-actions.c:format_SET_IP_ECN:
 2240|  9.06k|{
 2241|  9.06k|    ds_put_format(fp->s, "%smod_nw_ecn:%s%d",
 2242|  9.06k|                  colors.param, colors.end, a->ecn);
 2243|  9.06k|}
ofp-actions.c:format_SET_IP_TTL:
 2295|  1.70k|{
 2296|  1.70k|    ds_put_format(fp->s, "%smod_nw_ttl:%s%d",
 2297|  1.70k|                  colors.param, colors.end, a->ttl);
 2298|  1.70k|}
ofp-actions.c:format_SET_L4_SRC_PORT:
 2385|  25.0k|{
 2386|  25.0k|    ds_put_format(fp->s, "%smod_tp_src:%s%d",
 2387|  25.0k|                  colors.param, colors.end, a->port);
 2388|  25.0k|}
ofp-actions.c:format_SET_L4_DST_PORT:
 2393|  20.0k|{
 2394|  20.0k|    ds_put_format(fp->s, "%smod_tp_dst:%s%d",
 2395|  20.0k|                  colors.param, colors.end, a->port);
 2396|  20.0k|}
ofp-actions.c:format_REG_MOVE:
 2723|    590|{
 2724|    590|    nxm_format_reg_move(a, fp->s);
 2725|    590|}
ofp-actions.c:format_STACK_PUSH:
 3566|  4.79k|{
 3567|  4.79k|    nxm_format_stack_push(a, fp->s);
 3568|  4.79k|}
ofp-actions.c:format_STACK_POP:
 3573|    510|{
 3574|    510|    nxm_format_stack_pop(a, fp->s);
 3575|    510|}
ofp-actions.c:format_DEC_TTL:
 3744|  1.31k|{
 3745|  1.31k|    size_t i;
 3746|       |
 3747|  1.31k|    ds_put_format(fp->s, "%sdec_ttl%s", colors.paren, colors.end);
 3748|  1.31k|    if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) {
  ------------------
  |  Branch (3748:9): [True: 1.09k, False: 211]
  ------------------
 3749|  1.09k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 3750|  4.45k|        for (i = 0; i < a->n_controllers; i++) {
  ------------------
  |  Branch (3750:21): [True: 3.35k, False: 1.09k]
  ------------------
 3751|  3.35k|            if (i) {
  ------------------
  |  Branch (3751:17): [True: 2.26k, False: 1.08k]
  ------------------
 3752|  2.26k|                ds_put_cstr(fp->s, ",");
 3753|  2.26k|            }
 3754|  3.35k|            ds_put_format(fp->s, "%"PRIu16, a->cnt_ids[i]);
 3755|  3.35k|        }
 3756|  1.09k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 3757|  1.09k|    }
 3758|  1.31k|}
ofp-actions.c:format_SET_MPLS_LABEL:
 3817|  1.32k|{
 3818|  1.32k|    ds_put_format(fp->s, "%sset_mpls_label(%s%"PRIu32"%s)%s",
 3819|  1.32k|                  colors.paren, colors.end, ntohl(a->label),
 3820|  1.32k|                  colors.paren, colors.end);
 3821|  1.32k|}
ofp-actions.c:format_SET_MPLS_TC:
 3888|    714|{
 3889|    714|    ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s",
 3890|    714|                  colors.paren, colors.end, a->tc,
 3891|    714|                  colors.paren, colors.end);
 3892|    714|}
ofp-actions.c:format_SET_MPLS_TTL:
 3946|  7.16k|{
 3947|  7.16k|    ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s",
 3948|  7.16k|                  colors.paren, colors.end, a->ttl,
 3949|  7.16k|                  colors.paren, colors.end);
 3950|  7.16k|}
ofp-actions.c:format_DEC_MPLS_TTL:
 3985|  4.66k|{
 3986|  4.66k|    ds_put_format(fp->s, "%sdec_mpls_ttl%s", colors.value, colors.end);
 3987|  4.66k|}
ofp-actions.c:format_PUSH_MPLS:
 4037|  4.42k|{
 4038|  4.42k|    ds_put_format(fp->s, "%spush_mpls:%s0x%04"PRIx16,
 4039|  4.42k|                  colors.param, colors.end, ntohs(a->ethertype));
 4040|  4.42k|}
ofp-actions.c:format_POP_MPLS:
 4095|  13.1k|{
 4096|  13.1k|    ds_put_format(fp->s, "%spop_mpls:%s0x%04"PRIx16,
 4097|  13.1k|                  colors.param, colors.end, ntohs(a->ethertype));
 4098|  13.1k|}
ofp-actions.c:format_DEC_NSH_TTL:
 4828|    456|{
 4829|    456|    ds_put_format(fp->s, "%sdec_nsh_ttl%s", colors.special, colors.end);
 4830|    456|}
ofp-actions.c:format_DELETE_FIELD:
 4253|    421|{
 4254|    421|    ds_put_format(fp->s, "%sdelete_field:%s", colors.param,
 4255|    421|                  colors.end);
 4256|    421|    ds_put_format(fp->s, "%s", odf->field->name);
 4257|    421|}
ofp-actions.c:format_ENCAP:
 4657|  3.76k|{
 4658|  3.76k|    ds_put_format(fp->s, "%sencap(%s", colors.paren, colors.end);
 4659|  3.76k|    ds_put_format(fp->s, "%s", format_encap_pkt_type(a->new_pkt_type));
 4660|  3.76k|    if (a->n_props > 0) {
  ------------------
  |  Branch (4660:9): [True: 283, False: 3.48k]
  ------------------
 4661|    283|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 4662|    283|        format_ed_props(fp->s, a->n_props, a->props);
 4663|    283|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4664|    283|    }
 4665|  3.76k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4666|  3.76k|}
ofp-actions.c:format_encap_pkt_type:
 4618|  3.76k|{
 4619|  3.76k|    switch (ntohl(pkt_type)) {
 4620|  2.14k|    case PT_ETH:
  ------------------
  |  Branch (4620:5): [True: 2.14k, False: 1.62k]
  ------------------
 4621|  2.14k|        return "ethernet";
 4622|  1.43k|    case PT_NSH:
  ------------------
  |  Branch (4622:5): [True: 1.43k, False: 2.33k]
  ------------------
 4623|  1.43k|        return "nsh";
 4624|    173|    case PT_MPLS:
  ------------------
  |  Branch (4624:5): [True: 173, False: 3.59k]
  ------------------
 4625|    173|        return "mpls";
 4626|     16|    case PT_MPLS_MC:
  ------------------
  |  Branch (4626:5): [True: 16, False: 3.75k]
  ------------------
 4627|     16|        return "mpls_mc";
 4628|      0|    default:
  ------------------
  |  Branch (4628:5): [True: 0, False: 3.76k]
  ------------------
 4629|      0|        return "UNKNOWN";
 4630|  3.76k|    }
 4631|  3.76k|}
ofp-actions.c:format_ed_props:
 4636|    283|{
 4637|    283|    const uint8_t *p = (uint8_t *) prop;
 4638|    283|    int i;
 4639|       |
 4640|    283|    if (n_props == 0) {
  ------------------
  |  Branch (4640:9): [True: 0, False: 283]
  ------------------
 4641|      0|        return;
 4642|      0|    }
 4643|  1.35k|    for (i = 0; i < n_props; i++) {
  ------------------
  |  Branch (4643:17): [True: 1.07k, False: 283]
  ------------------
 4644|  1.07k|        format_ed_prop(s, prop);
 4645|  1.07k|        ds_put_char(s, ',');
 4646|  1.07k|        p += ROUND_UP(prop->len, 8);
  ------------------
  |  |  299|  1.07k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  1.07k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 4647|  1.07k|        prop = ALIGNED_CAST(const struct ofpact_ed_prop *, p);
  ------------------
  |  |  430|  1.07k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4648|  1.07k|    }
 4649|    283|    if (n_props > 0) {
  ------------------
  |  Branch (4649:9): [True: 283, False: 0]
  ------------------
 4650|    283|        ds_chomp(s, ',');
 4651|    283|    }
 4652|    283|}
ofp-actions.c:format_DECAP:
 4774|    332|{
 4775|    332|    ds_put_format(fp->s, "%sdecap(%s", colors.paren, colors.end);
 4776|    332|    if (a->new_pkt_type != htonl(PT_USE_NEXT_PROTO)) {
  ------------------
  |  Branch (4776:9): [True: 284, False: 48]
  ------------------
 4777|    284|        ds_put_format(fp->s, "packet_type(ns=%"PRIu16",type=%#"PRIx16")",
 4778|    284|                      pt_ns(a->new_pkt_type),
 4779|    284|                      pt_ns_type(a->new_pkt_type));
 4780|    284|    }
 4781|    332|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4782|    332|}
ofp-actions.c:format_SET_TUNNEL:
 4175|    998|{
 4176|    998|    ds_put_format(fp->s, "%sset_tunnel%s:%s%#"PRIx64, colors.param,
 4177|    998|                  (a->tun_id > UINT32_MAX
  ------------------
  |  Branch (4177:20): [True: 207, False: 791]
  ------------------
 4178|    998|                   || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""),
  ------------------
  |  Branch (4178:23): [True: 95, False: 696]
  ------------------
 4179|    998|                  colors.end, a->tun_id);
 4180|    998|}
ofp-actions.c:format_SET_QUEUE:
 4297|  6.93k|{
 4298|  6.93k|    ds_put_format(fp->s, "%sset_queue:%s%"PRIu32,
 4299|  6.93k|                  colors.param, colors.end, a->queue_id);
 4300|  6.93k|}
ofp-actions.c:format_POP_QUEUE:
 4336|  2.67k|{
 4337|  2.67k|    ds_put_format(fp->s, "%spop_queue%s", colors.value, colors.end);
 4338|  2.67k|}
ofp-actions.c:format_FIN_TIMEOUT:
 4432|  2.06k|{
 4433|  2.06k|    ds_put_format(fp->s, "%sfin_timeout(%s", colors.paren, colors.end);
 4434|  2.06k|    if (a->fin_idle_timeout) {
  ------------------
  |  Branch (4434:9): [True: 1.81k, False: 251]
  ------------------
 4435|  1.81k|        ds_put_format(fp->s, "%sidle_timeout=%s%"PRIu16",",
 4436|  1.81k|                      colors.param, colors.end, a->fin_idle_timeout);
 4437|  1.81k|    }
 4438|  2.06k|    if (a->fin_hard_timeout) {
  ------------------
  |  Branch (4438:9): [True: 1.92k, False: 141]
  ------------------
 4439|  1.92k|        ds_put_format(fp->s, "%shard_timeout=%s%"PRIu16",",
 4440|  1.92k|                      colors.param, colors.end, a->fin_hard_timeout);
 4441|  1.92k|    }
 4442|  2.06k|    ds_chomp(fp->s, ',');
 4443|  2.06k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4444|  2.06k|}
ofp-actions.c:format_RESUBMIT:
 5034|  2.73k|{
 5035|  2.73k|    if (a->in_port != OFPP_IN_PORT && a->table_id == 255) {
  ------------------
  |  |   39|  2.73k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  5.46k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5035:9): [True: 2.62k, False: 106]
  |  Branch (5035:39): [True: 839, False: 1.78k]
  ------------------
 5036|    839|        ds_put_format(fp->s, "%sresubmit:%s", colors.special, colors.end);
 5037|    839|        ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5038|  1.89k|    } else {
 5039|  1.89k|        ds_put_format(fp->s, "%sresubmit(%s", colors.paren, colors.end);
 5040|  1.89k|        if (a->in_port != OFPP_IN_PORT) {
  ------------------
  |  |   39|  1.89k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  1.89k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5040:13): [True: 1.78k, False: 106]
  ------------------
 5041|  1.78k|            ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5042|  1.78k|        }
 5043|  1.89k|        ds_put_char(fp->s, ',');
 5044|  1.89k|        if (a->table_id != 255) {
  ------------------
  |  Branch (5044:13): [True: 1.88k, False: 11]
  ------------------
 5045|  1.88k|            ofputil_format_table(a->table_id, fp->table_map, fp->s);
 5046|  1.88k|        }
 5047|  1.89k|        if (a->with_ct_orig) {
  ------------------
  |  Branch (5047:13): [True: 1.65k, False: 236]
  ------------------
 5048|  1.65k|            ds_put_cstr(fp->s, ",ct");
 5049|  1.65k|        }
 5050|  1.89k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 5051|  1.89k|    }
 5052|  2.73k|}
ofp-actions.c:format_LEARN:
 5645|  26.4k|{
 5646|  26.4k|    learn_format(a, fp->port_map, fp->table_map, fp->s);
 5647|  26.4k|}
ofp-actions.c:format_CONJUNCTION:
 5707|  4.82k|{
 5708|  4.82k|    ds_put_format(fp->s, "%sconjunction(%s%"PRIu32",%d/%"PRIu8"%s)%s",
 5709|  4.82k|                  colors.paren, colors.end,
 5710|  4.82k|                  oc->id, oc->clause + 1, oc->n_clauses,
 5711|  4.82k|                  colors.paren, colors.end);
 5712|  4.82k|}
ofp-actions.c:format_MULTIPATH:
 5872|  2.43k|{
 5873|  2.43k|    multipath_format(a, fp->s);
 5874|  2.43k|}
ofp-actions.c:format_NOTE:
 5957|  14.5k|{
 5958|  14.5k|    ds_put_format(fp->s, "%snote:%s", colors.param, colors.end);
 5959|  14.5k|    format_hex_arg(fp->s, a->data, a->length);
 5960|  14.5k|}
ofp-actions.c:format_EXIT:
 5995|    660|{
 5996|    660|    ds_put_format(fp->s, "%sexit%s", colors.special, colors.end);
 5997|    660|}
ofp-actions.c:format_SAMPLE:
 6345|  3.90k|{
 6346|  3.90k|    ds_put_format(fp->s, "%ssample(%s%sprobability=%s%"PRIu16
 6347|  3.90k|                  ",%scollector_set_id=%s%"PRIu32
 6348|  3.90k|                  ",%sobs_domain_id=%s%"PRIu32
 6349|  3.90k|                  ",%sobs_point_id=%s%"PRIu32,
 6350|  3.90k|                  colors.paren, colors.end,
 6351|  3.90k|                  colors.param, colors.end, a->probability,
 6352|  3.90k|                  colors.param, colors.end, a->collector_set_id,
 6353|  3.90k|                  colors.param, colors.end, a->obs_domain_id,
 6354|  3.90k|                  colors.param, colors.end, a->obs_point_id);
 6355|  3.90k|    if (a->sampling_port != OFPP_NONE) {
  ------------------
  |  |   47|  3.90k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  3.90k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (6355:9): [True: 3.86k, False: 36]
  ------------------
 6356|  3.86k|        ds_put_format(fp->s, ",%ssampling_port=%s", colors.param, colors.end);
 6357|  3.86k|        ofputil_format_port(a->sampling_port, fp->port_map, fp->s);
 6358|  3.86k|    }
 6359|  3.90k|    if (a->direction == NX_ACTION_SAMPLE_INGRESS) {
  ------------------
  |  Branch (6359:9): [True: 7, False: 3.89k]
  ------------------
 6360|      7|        ds_put_format(fp->s, ",%singress%s", colors.param, colors.end);
 6361|  3.89k|    } else if (a->direction == NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6361:16): [True: 1.56k, False: 2.32k]
  ------------------
 6362|  1.56k|        ds_put_format(fp->s, ",%segress%s", colors.param, colors.end);
 6363|  1.56k|    }
 6364|  3.90k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6365|  3.90k|}
ofp-actions.c:format_UNROLL_XLATE:
 6027|  8.89k|{
 6028|  8.89k|    ds_put_format(fp->s, "%sunroll_xlate(%s%stable=%s",
 6029|  8.89k|                  colors.paren,   colors.end,
 6030|  8.89k|                  colors.special, colors.end);
 6031|  8.89k|    ofputil_format_table(a->rule_table_id, fp->table_map, fp->s);
 6032|  8.89k|    ds_put_format(fp->s, ", %scookie=%s%"PRIu64"%s)%s",
 6033|  8.89k|                  colors.param,   colors.end, ntohll(a->rule_cookie),
 6034|  8.89k|                  colors.paren,   colors.end);
 6035|  8.89k|}
ofp-actions.c:format_CT:
 6834|  21.9k|{
 6835|  21.9k|    ds_put_format(fp->s, "%sct(%s", colors.paren, colors.end);
 6836|  21.9k|    if (a->flags & NX_CT_F_COMMIT) {
  ------------------
  |  Branch (6836:9): [True: 19.0k, False: 2.90k]
  ------------------
 6837|  19.0k|        ds_put_format(fp->s, "%scommit%s,", colors.value, colors.end);
 6838|  19.0k|    }
 6839|  21.9k|    if (a->flags & NX_CT_F_FORCE) {
  ------------------
  |  Branch (6839:9): [True: 6.65k, False: 15.2k]
  ------------------
 6840|  6.65k|        ds_put_format(fp->s, "%sforce%s,", colors.value, colors.end);
 6841|  6.65k|    }
 6842|  21.9k|    if (a->recirc_table != NX_CT_RECIRC_NONE) {
  ------------------
  |  |  692|  21.9k|#define NX_CT_RECIRC_NONE OFPTT_ALL
  ------------------
  |  Branch (6842:9): [True: 19.8k, False: 2.11k]
  ------------------
 6843|  19.8k|        ds_put_format(fp->s, "%stable=%s", colors.special, colors.end);
 6844|  19.8k|        ofputil_format_table(a->recirc_table, fp->table_map, fp->s);
 6845|  19.8k|        ds_put_char(fp->s, ',');
 6846|  19.8k|    }
 6847|  21.9k|    if (a->zone_src.field) {
  ------------------
  |  Branch (6847:9): [True: 2.55k, False: 19.3k]
  ------------------
 6848|  2.55k|        ds_put_format(fp->s, "%szone=%s", colors.param, colors.end);
 6849|  2.55k|        mf_format_subfield(&a->zone_src, fp->s);
 6850|  2.55k|        ds_put_char(fp->s, ',');
 6851|  19.3k|    } else if (a->zone_imm) {
  ------------------
  |  Branch (6851:16): [True: 13.1k, False: 6.27k]
  ------------------
 6852|  13.1k|        ds_put_format(fp->s, "%szone=%s%"PRIu16",",
 6853|  13.1k|                      colors.param, colors.end, a->zone_imm);
 6854|  13.1k|    }
 6855|       |    /* If the first action is a NAT action, format it outside of the 'exec'
 6856|       |     * envelope. */
 6857|  21.9k|    const struct ofpact *action = a->actions;
 6858|  21.9k|    size_t actions_len = ofpact_ct_get_action_len(a);
 6859|  21.9k|    if (actions_len && action->type == OFPACT_NAT) {
  ------------------
  |  Branch (6859:9): [True: 17.9k, False: 3.97k]
  |  Branch (6859:24): [True: 15.4k, False: 2.48k]
  ------------------
 6860|  15.4k|        format_NAT(ofpact_get_NAT(action), fp);
 6861|  15.4k|        ds_put_char(fp->s, ',');
 6862|  15.4k|        actions_len -= OFPACT_ALIGN(action->len);
  ------------------
  |  |  205|  15.4k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  299|  15.4k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  296|  15.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6863|  15.4k|        action = ofpact_next(action);
 6864|  15.4k|    }
 6865|  21.9k|    if (actions_len) {
  ------------------
  |  Branch (6865:9): [True: 2.48k, False: 19.4k]
  ------------------
 6866|  2.48k|        ds_put_format(fp->s, "%sexec(%s", colors.paren, colors.end);
 6867|  2.48k|        ofpacts_format(action, actions_len, fp);
 6868|  2.48k|        ds_put_format(fp->s, "%s),%s", colors.paren, colors.end);
 6869|  2.48k|    }
 6870|  21.9k|    format_alg(a->alg, fp->s);
 6871|  21.9k|    ds_chomp(fp->s, ',');
 6872|  21.9k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6873|  21.9k|}
ofp-actions.c:format_alg:
 6811|  21.9k|{
 6812|  21.9k|    switch(port) {
 6813|     50|    case IPPORT_FTP:
  ------------------
  |  |  695|     50|#define IPPORT_FTP  21
  ------------------
  |  Branch (6813:5): [True: 50, False: 21.8k]
  ------------------
 6814|     50|        ds_put_format(s, "%salg=%sftp,", colors.param, colors.end);
 6815|     50|        break;
 6816|    575|    case IPPORT_TFTP:
  ------------------
  |  |  699|    575|#define IPPORT_TFTP  69
  ------------------
  |  Branch (6816:5): [True: 575, False: 21.3k]
  ------------------
 6817|    575|        ds_put_format(s, "%salg=%stftp,", colors.param, colors.end);
 6818|    575|        break;
 6819|  3.73k|    case 0:
  ------------------
  |  Branch (6819:5): [True: 3.73k, False: 18.2k]
  ------------------
 6820|       |        /* Don't print. */
 6821|  3.73k|        break;
 6822|  17.5k|    default:
  ------------------
  |  Branch (6822:5): [True: 17.5k, False: 4.36k]
  ------------------
 6823|  17.5k|        ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port);
 6824|  17.5k|        break;
 6825|  21.9k|    }
 6826|  21.9k|}
ofp-actions.c:format_CT_CLEAR:
 6924|    457|{
 6925|    457|    ds_put_format(fp->s, "%sct_clear%s", colors.value, colors.end);
 6926|    457|}
ofp-actions.c:format_NAT:
 7115|  15.4k|{
 7116|  15.4k|    ds_put_format(fp->s, "%snat%s", colors.paren, colors.end);
 7117|       |
 7118|  15.4k|    if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) {
  ------------------
  |  Branch (7118:9): [True: 14.5k, False: 981]
  ------------------
 7119|  14.5k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 7120|  14.5k|        ds_put_format(fp->s, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s",
  ------------------
  |  Branch (7120:30): [True: 9.55k, False: 4.95k]
  ------------------
 7121|  14.5k|                      colors.param, colors.end);
 7122|       |
 7123|  14.5k|        if (a->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (7123:13): [True: 11.8k, False: 2.68k]
  ------------------
 7124|  11.8k|            ds_put_format(fp->s, "%s=%s", colors.param, colors.end);
 7125|       |
 7126|  11.8k|            if (a->range_af == AF_INET) {
  ------------------
  |  Branch (7126:17): [True: 11.8k, False: 0]
  ------------------
 7127|  11.8k|                ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  628|  11.8k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                              ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  630|  11.8k|    ntohl(ip) >> 24,                            \
  |  |  631|  11.8k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  11.8k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  11.8k|    ntohl(ip) & 0xff
  ------------------
 7128|       |
 7129|  11.8k|                if (a->range.addr.ipv4.max
  ------------------
  |  Branch (7129:21): [True: 2.71k, False: 9.10k]
  ------------------
 7130|  11.8k|                    && a->range.addr.ipv4.max != a->range.addr.ipv4.min) {
  ------------------
  |  Branch (7130:24): [True: 1.59k, False: 1.12k]
  ------------------
 7131|  1.59k|                    ds_put_format(fp->s, "-"IP_FMT,
  ------------------
  |  |  628|  1.59k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 7132|  1.59k|                                  IP_ARGS(a->range.addr.ipv4.max));
  ------------------
  |  |  630|  1.59k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.59k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.59k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.59k|    ntohl(ip) & 0xff
  ------------------
 7133|  1.59k|                }
 7134|  11.8k|            } else if (a->range_af == AF_INET6) {
  ------------------
  |  Branch (7134:24): [True: 0, False: 0]
  ------------------
 7135|      0|                ipv6_format_addr_bracket(&a->range.addr.ipv6.min, fp->s,
 7136|      0|                                        a->range.proto.min);
 7137|       |
 7138|      0|                if (!ipv6_mask_is_any(&a->range.addr.ipv6.max)
  ------------------
  |  Branch (7138:21): [True: 0, False: 0]
  ------------------
 7139|      0|                    && memcmp(&a->range.addr.ipv6.max, &a->range.addr.ipv6.min,
  ------------------
  |  Branch (7139:24): [True: 0, False: 0]
  ------------------
 7140|      0|                              sizeof(struct in6_addr)) != 0) {
 7141|      0|                    ds_put_char(fp->s, '-');
 7142|      0|                    ipv6_format_addr_bracket(&a->range.addr.ipv6.max, fp->s,
 7143|      0|                                            a->range.proto.min);
 7144|      0|                }
 7145|      0|            }
 7146|  11.8k|            if (a->range.proto.min) {
  ------------------
  |  Branch (7146:17): [True: 9.08k, False: 2.73k]
  ------------------
 7147|  9.08k|                ds_put_char(fp->s, ':');
 7148|  9.08k|                ds_put_format(fp->s, "%"PRIu16, a->range.proto.min);
 7149|       |
 7150|  9.08k|                if (a->range.proto.max
  ------------------
  |  Branch (7150:21): [True: 3.82k, False: 5.26k]
  ------------------
 7151|  9.08k|                    && a->range.proto.max != a->range.proto.min) {
  ------------------
  |  Branch (7151:24): [True: 2.29k, False: 1.52k]
  ------------------
 7152|  2.29k|                    ds_put_format(fp->s, "-%"PRIu16, a->range.proto.max);
 7153|  2.29k|                }
 7154|  9.08k|            }
 7155|  11.8k|            ds_put_char(fp->s, ',');
 7156|       |
 7157|  11.8k|            if (a->flags & NX_NAT_F_PERSISTENT) {
  ------------------
  |  Branch (7157:17): [True: 4.60k, False: 7.21k]
  ------------------
 7158|  4.60k|                ds_put_format(fp->s, "%spersistent%s,",
 7159|  4.60k|                              colors.value, colors.end);
 7160|  4.60k|            }
 7161|  11.8k|            if (a->flags & NX_NAT_F_PROTO_HASH) {
  ------------------
  |  Branch (7161:17): [True: 2.33k, False: 9.48k]
  ------------------
 7162|  2.33k|                ds_put_format(fp->s, "%shash%s,", colors.value, colors.end);
 7163|  2.33k|            }
 7164|  11.8k|            if (a->flags & NX_NAT_F_PROTO_RANDOM) {
  ------------------
  |  Branch (7164:17): [True: 5.01k, False: 6.80k]
  ------------------
 7165|  5.01k|                ds_put_format(fp->s, "%srandom%s,", colors.value, colors.end);
 7166|  5.01k|            }
 7167|  11.8k|        }
 7168|  14.5k|        ds_chomp(fp->s, ',');
 7169|  14.5k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7170|  14.5k|    }
 7171|  15.4k|}
ofp-actions.c:format_OUTPUT_TRUNC:
 7350|    314|{
 7351|    314|    ds_put_format(fp->s, "%soutput%s(port=", colors.special, colors.end);
 7352|    314|    ofputil_format_port(a->port, fp->port_map, fp->s);
 7353|    314|    ds_put_format(fp->s, ",max_len=%"PRIu32")", a->max_len);
 7354|    314|}
ofp-actions.c:format_CLONE:
 6120|    827|{
 6121|    827|    ds_put_format(fp->s, "%sclone(%s", colors.paren, colors.end);
 6122|    827|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 6123|    827|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6124|    827|}
ofp-actions.c:format_CHECK_PKT_LARGER:
 7711|     11|{
 7712|     11|    ds_put_format(fp->s, "%scheck_pkt_larger(%s%"PRIu32")->",
 7713|     11|                  colors.param, colors.end, a->pkt_len);
 7714|     11|    mf_format_subfield(&a->dst, fp->s);
 7715|     11|}
ofp-actions.c:format_METER:
 7402|  11.3k|{
 7403|  11.3k|    ds_put_format(fp->s, "%smeter:%s%"PRIu32,
 7404|  11.3k|                  colors.param, colors.end, a->meter_id);
 7405|  11.3k|}
ofp-actions.c:format_CLEAR_ACTIONS:
 7437|    102|{
 7438|    102|    ds_put_format(fp->s, "%sclear_actions%s", colors.value, colors.end);
 7439|    102|}
ofp-actions.c:format_WRITE_ACTIONS:
 7498|  16.6k|{
 7499|  16.6k|    ds_put_format(fp->s, "%swrite_actions(%s", colors.paren, colors.end);
 7500|  16.6k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 7501|  16.6k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7502|  16.6k|}
ofp-actions.c:format_WRITE_METADATA:
 7592|  1.18k|{
 7593|  1.18k|    ds_put_format(fp->s, "%swrite_metadata:%s%#"PRIx64,
 7594|  1.18k|                  colors.param, colors.end, ntohll(a->metadata));
 7595|  1.18k|    if (a->mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|  1.18k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (7595:9): [True: 812, False: 368]
  ------------------
 7596|    812|        ds_put_format(fp->s, "/%#"PRIx64, ntohll(a->mask));
 7597|    812|    }
 7598|  1.18k|}
ofp-actions.c:format_GOTO_TABLE:
 7759|  1.74k|{
 7760|  1.74k|    ds_put_format(fp->s, "%sgoto_table:%s", colors.param, colors.end);
 7761|  1.74k|    ofputil_format_table(a->table_id, fp->table_map, fp->s);
 7762|  1.74k|}

ofp-actions.c:ofpact_decode:
 4573|   604k|{
 4574|   604k|    switch (raw) {
 4575|  49.3k|    case OFPAT_RAW10_OUTPUT:
  ------------------
  |  Branch (4575:5): [True: 49.3k, False: 554k]
  ------------------
 4576|  49.3k|        return decode_OFPAT_RAW10_OUTPUT(ALIGNED_CAST(const struct ofp10_action_output *, a), version, out);
  ------------------
  |  |  430|  49.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4577|       |
 4578|  1.66k|    case OFPAT_RAW11_OUTPUT:
  ------------------
  |  Branch (4578:5): [True: 1.66k, False: 602k]
  ------------------
 4579|  1.66k|        return decode_OFPAT_RAW11_OUTPUT(ALIGNED_CAST(const struct ofp11_action_output *, a), version, out);
  ------------------
  |  |  430|  1.66k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4580|       |
 4581|  10.4k|    case OFPAT_RAW10_SET_VLAN_VID:
  ------------------
  |  Branch (4581:5): [True: 10.4k, False: 593k]
  ------------------
 4582|  10.4k|        return decode_OFPAT_RAW10_SET_VLAN_VID(arg, version, out);
 4583|       |
 4584|  1.52k|    case OFPAT_RAW10_SET_VLAN_PCP:
  ------------------
  |  Branch (4584:5): [True: 1.52k, False: 602k]
  ------------------
 4585|  1.52k|        return decode_OFPAT_RAW10_SET_VLAN_PCP(arg, version, out);
 4586|       |
 4587|    734|    case OFPAT_RAW11_SET_VLAN_VID:
  ------------------
  |  Branch (4587:5): [True: 734, False: 603k]
  ------------------
 4588|    734|        return decode_OFPAT_RAW11_SET_VLAN_VID(arg, version, out);
 4589|       |
 4590|    677|    case OFPAT_RAW11_SET_VLAN_PCP:
  ------------------
  |  Branch (4590:5): [True: 677, False: 603k]
  ------------------
 4591|    677|        return decode_OFPAT_RAW11_SET_VLAN_PCP(arg, version, out);
 4592|       |
 4593|  5.05k|    case OFPAT_RAW11_PUSH_VLAN:
  ------------------
  |  Branch (4593:5): [True: 5.05k, False: 599k]
  ------------------
 4594|  5.05k|        return decode_OFPAT_RAW11_PUSH_VLAN(htons(arg), version, out);
 4595|       |
 4596|  16.9k|    case OFPAT_RAW10_STRIP_VLAN:
  ------------------
  |  Branch (4596:5): [True: 16.9k, False: 587k]
  ------------------
 4597|  16.9k|        return decode_OFPAT_RAW10_STRIP_VLAN(out);
 4598|       |
 4599|  3.49k|    case OFPAT_RAW11_POP_VLAN:
  ------------------
  |  Branch (4599:5): [True: 3.49k, False: 600k]
  ------------------
 4600|  3.49k|        return decode_OFPAT_RAW11_POP_VLAN(out);
 4601|       |
 4602|     54|    case OFPAT_RAW_SET_DL_SRC:
  ------------------
  |  Branch (4602:5): [True: 54, False: 604k]
  ------------------
 4603|     54|        return decode_OFPAT_RAW_SET_DL_SRC(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  430|     54|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4604|       |
 4605|     71|    case OFPAT_RAW_SET_DL_DST:
  ------------------
  |  Branch (4605:5): [True: 71, False: 604k]
  ------------------
 4606|     71|        return decode_OFPAT_RAW_SET_DL_DST(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  430|     71|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4607|       |
 4608|  5.78k|    case OFPAT_RAW_SET_NW_SRC:
  ------------------
  |  Branch (4608:5): [True: 5.78k, False: 598k]
  ------------------
 4609|  5.78k|        return decode_OFPAT_RAW_SET_NW_SRC(htonl(arg), version, out);
 4610|       |
 4611|  10.1k|    case OFPAT_RAW_SET_NW_DST:
  ------------------
  |  Branch (4611:5): [True: 10.1k, False: 593k]
  ------------------
 4612|  10.1k|        return decode_OFPAT_RAW_SET_NW_DST(htonl(arg), version, out);
 4613|       |
 4614|  17.7k|    case OFPAT_RAW_SET_NW_TOS:
  ------------------
  |  Branch (4614:5): [True: 17.7k, False: 586k]
  ------------------
 4615|  17.7k|        return decode_OFPAT_RAW_SET_NW_TOS(arg, version, out);
 4616|       |
 4617|  9.58k|    case OFPAT_RAW11_SET_NW_ECN:
  ------------------
  |  Branch (4617:5): [True: 9.58k, False: 594k]
  ------------------
 4618|  9.58k|        return decode_OFPAT_RAW11_SET_NW_ECN(arg, version, out);
 4619|       |
 4620|  37.2k|    case OFPAT_RAW_SET_TP_SRC:
  ------------------
  |  Branch (4620:5): [True: 37.2k, False: 566k]
  ------------------
 4621|  37.2k|        return decode_OFPAT_RAW_SET_TP_SRC(htons(arg), version, out);
 4622|       |
 4623|  24.5k|    case OFPAT_RAW_SET_TP_DST:
  ------------------
  |  Branch (4623:5): [True: 24.5k, False: 579k]
  ------------------
 4624|  24.5k|        return decode_OFPAT_RAW_SET_TP_DST(htons(arg), version, out);
 4625|       |
 4626|  1.95k|    case OFPAT_RAW10_ENQUEUE:
  ------------------
  |  Branch (4626:5): [True: 1.95k, False: 602k]
  ------------------
 4627|  1.95k|        return decode_OFPAT_RAW10_ENQUEUE(ALIGNED_CAST(const struct ofp10_action_enqueue *, a), version, out);
  ------------------
  |  |  430|  1.95k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4628|       |
 4629|  4.25k|    case OFPAT_RAW_SET_MPLS_LABEL:
  ------------------
  |  Branch (4629:5): [True: 4.25k, False: 599k]
  ------------------
 4630|  4.25k|        return decode_OFPAT_RAW_SET_MPLS_LABEL(htonl(arg), version, out);
 4631|       |
 4632|  3.23k|    case OFPAT_RAW_SET_MPLS_TC:
  ------------------
  |  Branch (4632:5): [True: 3.23k, False: 600k]
  ------------------
 4633|  3.23k|        return decode_OFPAT_RAW_SET_MPLS_TC(arg, version, out);
 4634|       |
 4635|  7.62k|    case OFPAT_RAW_SET_MPLS_TTL:
  ------------------
  |  Branch (4635:5): [True: 7.62k, False: 596k]
  ------------------
 4636|  7.62k|        return decode_OFPAT_RAW_SET_MPLS_TTL(arg, version, out);
 4637|       |
 4638|  21.2k|    case OFPAT_RAW_DEC_MPLS_TTL:
  ------------------
  |  Branch (4638:5): [True: 21.2k, False: 582k]
  ------------------
 4639|  21.2k|        return decode_OFPAT_RAW_DEC_MPLS_TTL(out);
 4640|       |
 4641|  4.77k|    case OFPAT_RAW_PUSH_MPLS:
  ------------------
  |  Branch (4641:5): [True: 4.77k, False: 599k]
  ------------------
 4642|  4.77k|        return decode_OFPAT_RAW_PUSH_MPLS(htons(arg), version, out);
 4643|       |
 4644|  15.1k|    case OFPAT_RAW_POP_MPLS:
  ------------------
  |  Branch (4644:5): [True: 15.1k, False: 588k]
  ------------------
 4645|  15.1k|        return decode_OFPAT_RAW_POP_MPLS(htons(arg), version, out);
 4646|       |
 4647|  8.12k|    case OFPAT_RAW_SET_QUEUE:
  ------------------
  |  Branch (4647:5): [True: 8.12k, False: 596k]
  ------------------
 4648|  8.12k|        return decode_OFPAT_RAW_SET_QUEUE(arg, version, out);
 4649|       |
 4650|  5.24k|    case OFPAT_RAW_GROUP:
  ------------------
  |  Branch (4650:5): [True: 5.24k, False: 598k]
  ------------------
 4651|  5.24k|        return decode_OFPAT_RAW_GROUP(arg, version, out);
 4652|       |
 4653|  1.82k|    case OFPAT_RAW11_SET_NW_TTL:
  ------------------
  |  Branch (4653:5): [True: 1.82k, False: 602k]
  ------------------
 4654|  1.82k|        return decode_OFPAT_RAW11_SET_NW_TTL(arg, version, out);
 4655|       |
 4656|    218|    case OFPAT_RAW_DEC_NW_TTL:
  ------------------
  |  Branch (4656:5): [True: 218, False: 603k]
  ------------------
 4657|    218|        return decode_OFPAT_RAW_DEC_NW_TTL(out);
 4658|       |
 4659|  4.09k|    case NXAST_RAW_DEC_TTL_CNT_IDS:
  ------------------
  |  Branch (4659:5): [True: 4.09k, False: 600k]
  ------------------
 4660|  4.09k|        return decode_NXAST_RAW_DEC_TTL_CNT_IDS(ALIGNED_CAST(const struct nx_action_cnt_ids *, a), version, out);
  ------------------
  |  |  430|  4.09k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4661|       |
 4662|  11.7k|    case OFPAT_RAW12_SET_FIELD:
  ------------------
  |  Branch (4662:5): [True: 11.7k, False: 592k]
  ------------------
 4663|  11.7k|        return decode_OFPAT_RAW12_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  11.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4664|       |
 4665|     35|    case OFPAT_RAW15_SET_FIELD:
  ------------------
  |  Branch (4665:5): [True: 35, False: 604k]
  ------------------
 4666|     35|        return decode_OFPAT_RAW15_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|     35|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4667|       |
 4668|  11.8k|    case NXAST_RAW_REG_LOAD:
  ------------------
  |  Branch (4668:5): [True: 11.8k, False: 592k]
  ------------------
 4669|  11.8k|        return decode_NXAST_RAW_REG_LOAD(ALIGNED_CAST(const struct nx_action_reg_load *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  11.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4670|       |
 4671|  14.5k|    case NXAST_RAW_REG_LOAD2:
  ------------------
  |  Branch (4671:5): [True: 14.5k, False: 589k]
  ------------------
 4672|  14.5k|        return decode_NXAST_RAW_REG_LOAD2(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  14.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4673|       |
 4674|    233|    case OFPAT_RAW15_COPY_FIELD:
  ------------------
  |  Branch (4674:5): [True: 233, False: 603k]
  ------------------
 4675|    233|        return decode_OFPAT_RAW15_COPY_FIELD(ALIGNED_CAST(const struct ofp15_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|    233|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4676|       |
 4677|      0|    case ONFACT_RAW13_COPY_FIELD:
  ------------------
  |  Branch (4677:5): [True: 0, False: 604k]
  ------------------
 4678|      0|        return decode_ONFACT_RAW13_COPY_FIELD(ALIGNED_CAST(const struct onf_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4679|       |
 4680|  1.90k|    case NXAST_RAW_REG_MOVE:
  ------------------
  |  Branch (4680:5): [True: 1.90k, False: 602k]
  ------------------
 4681|  1.90k|        return decode_NXAST_RAW_REG_MOVE(ALIGNED_CAST(const struct nx_action_reg_move *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  1.90k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4682|       |
 4683|  11.8k|    case OFPAT_RAW15_METER:
  ------------------
  |  Branch (4683:5): [True: 11.8k, False: 592k]
  ------------------
 4684|  11.8k|        return decode_OFPAT_RAW15_METER(arg, version, out);
 4685|       |
 4686|  1.00k|    case NXAST_RAW_RESUBMIT:
  ------------------
  |  Branch (4686:5): [True: 1.00k, False: 603k]
  ------------------
 4687|  1.00k|        return decode_NXAST_RAW_RESUBMIT(arg, version, out);
 4688|       |
 4689|    337|    case NXAST_RAW_RESUBMIT_TABLE:
  ------------------
  |  Branch (4689:5): [True: 337, False: 603k]
  ------------------
 4690|    337|        return decode_NXAST_RAW_RESUBMIT_TABLE(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  430|    337|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4691|       |
 4692|  5.51k|    case NXAST_RAW_RESUBMIT_TABLE_CT:
  ------------------
  |  Branch (4692:5): [True: 5.51k, False: 598k]
  ------------------
 4693|  5.51k|        return decode_NXAST_RAW_RESUBMIT_TABLE_CT(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  430|  5.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4694|       |
 4695|  6.28k|    case NXAST_RAW_SET_TUNNEL:
  ------------------
  |  Branch (4695:5): [True: 6.28k, False: 597k]
  ------------------
 4696|  6.28k|        return decode_NXAST_RAW_SET_TUNNEL(arg, version, out);
 4697|       |
 4698|    302|    case NXAST_RAW_SET_TUNNEL64:
  ------------------
  |  Branch (4698:5): [True: 302, False: 603k]
  ------------------
 4699|    302|        return decode_NXAST_RAW_SET_TUNNEL64(arg, version, out);
 4700|       |
 4701|  15.1k|    case NXAST_RAW_POP_QUEUE:
  ------------------
  |  Branch (4701:5): [True: 15.1k, False: 589k]
  ------------------
 4702|  15.1k|        return decode_NXAST_RAW_POP_QUEUE(out);
 4703|       |
 4704|  24.1k|    case NXAST_RAW_NOTE:
  ------------------
  |  Branch (4704:5): [True: 24.1k, False: 579k]
  ------------------
 4705|  24.1k|        return decode_NXAST_RAW_NOTE(ALIGNED_CAST(const struct nx_action_note *, a), version, out);
  ------------------
  |  |  430|  24.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4706|       |
 4707|  6.18k|    case NXAST_RAW_MULTIPATH:
  ------------------
  |  Branch (4707:5): [True: 6.18k, False: 597k]
  ------------------
 4708|  6.18k|        return decode_NXAST_RAW_MULTIPATH(ALIGNED_CAST(const struct nx_action_multipath *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  6.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4709|       |
 4710|  8.26k|    case NXAST_RAW_BUNDLE:
  ------------------
  |  Branch (4710:5): [True: 8.26k, False: 595k]
  ------------------
 4711|  8.26k|        return decode_NXAST_RAW_BUNDLE(ALIGNED_CAST(const struct nx_action_bundle *, a), version, out);
  ------------------
  |  |  430|  8.26k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4712|       |
 4713|  5.97k|    case NXAST_RAW_BUNDLE_LOAD:
  ------------------
  |  Branch (4713:5): [True: 5.97k, False: 598k]
  ------------------
 4714|  5.97k|        return decode_NXAST_RAW_BUNDLE_LOAD(ALIGNED_CAST(const struct nx_action_bundle *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  5.97k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4715|       |
 4716|     40|    case NXAST_RAW_OUTPUT_REG:
  ------------------
  |  Branch (4716:5): [True: 40, False: 604k]
  ------------------
 4717|     40|        return decode_NXAST_RAW_OUTPUT_REG(ALIGNED_CAST(const struct nx_action_output_reg *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|     40|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4718|       |
 4719|    269|    case NXAST_RAW_OUTPUT_REG2:
  ------------------
  |  Branch (4719:5): [True: 269, False: 603k]
  ------------------
 4720|    269|        return decode_NXAST_RAW_OUTPUT_REG2(ALIGNED_CAST(const struct nx_action_output_reg2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|    269|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4721|       |
 4722|  46.2k|    case NXAST_RAW_LEARN:
  ------------------
  |  Branch (4722:5): [True: 46.2k, False: 557k]
  ------------------
 4723|  46.2k|        return decode_NXAST_RAW_LEARN(ALIGNED_CAST(const struct nx_action_learn *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  46.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4724|       |
 4725|  3.81k|    case NXAST_RAW_LEARN2:
  ------------------
  |  Branch (4725:5): [True: 3.81k, False: 600k]
  ------------------
 4726|  3.81k|        return decode_NXAST_RAW_LEARN2(ALIGNED_CAST(const struct nx_action_learn2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  3.81k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4727|       |
 4728|    668|    case NXAST_RAW_EXIT:
  ------------------
  |  Branch (4728:5): [True: 668, False: 603k]
  ------------------
 4729|    668|        return decode_NXAST_RAW_EXIT(out);
 4730|       |
 4731|  2.07k|    case NXAST_RAW_FIN_TIMEOUT:
  ------------------
  |  Branch (4731:5): [True: 2.07k, False: 602k]
  ------------------
 4732|  2.07k|        return decode_NXAST_RAW_FIN_TIMEOUT(ALIGNED_CAST(const struct nx_action_fin_timeout *, a), version, out);
  ------------------
  |  |  430|  2.07k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4733|       |
 4734|  2.77k|    case NXAST_RAW_CONTROLLER:
  ------------------
  |  Branch (4734:5): [True: 2.77k, False: 601k]
  ------------------
 4735|  2.77k|        return decode_NXAST_RAW_CONTROLLER(ALIGNED_CAST(const struct nx_action_controller *, a), version, out);
  ------------------
  |  |  430|  2.77k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4736|       |
 4737|  11.1k|    case NXAST_RAW_CONTROLLER2:
  ------------------
  |  Branch (4737:5): [True: 11.1k, False: 592k]
  ------------------
 4738|  11.1k|        return decode_NXAST_RAW_CONTROLLER2(ALIGNED_CAST(const struct ext_action_header *, a), version, out);
  ------------------
  |  |  430|  11.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4739|       |
 4740|     44|    case NXAST_RAW_WRITE_METADATA:
  ------------------
  |  Branch (4740:5): [True: 44, False: 604k]
  ------------------
 4741|     44|        return decode_NXAST_RAW_WRITE_METADATA(ALIGNED_CAST(const struct nx_action_write_metadata *, a), version, out);
  ------------------
  |  |  430|     44|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4742|       |
 4743|  9.99k|    case NXAST_RAW_STACK_PUSH:
  ------------------
  |  Branch (4743:5): [True: 9.99k, False: 594k]
  ------------------
 4744|  9.99k|        return decode_NXAST_RAW_STACK_PUSH(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  9.99k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4745|       |
 4746|    942|    case NXAST_RAW_STACK_POP:
  ------------------
  |  Branch (4746:5): [True: 942, False: 603k]
  ------------------
 4747|    942|        return decode_NXAST_RAW_STACK_POP(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|    942|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4748|       |
 4749|     31|    case NXAST_RAW_SAMPLE:
  ------------------
  |  Branch (4749:5): [True: 31, False: 604k]
  ------------------
 4750|     31|        return decode_NXAST_RAW_SAMPLE(ALIGNED_CAST(const struct nx_action_sample *, a), version, out);
  ------------------
  |  |  430|     31|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4751|       |
 4752|     47|    case NXAST_RAW_SAMPLE2:
  ------------------
  |  Branch (4752:5): [True: 47, False: 604k]
  ------------------
 4753|     47|        return decode_NXAST_RAW_SAMPLE2(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  430|     47|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4754|       |
 4755|  7.66k|    case NXAST_RAW_SAMPLE3:
  ------------------
  |  Branch (4755:5): [True: 7.66k, False: 596k]
  ------------------
 4756|  7.66k|        return decode_NXAST_RAW_SAMPLE3(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  430|  7.66k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4757|       |
 4758|  12.5k|    case NXAST_RAW_CONJUNCTION:
  ------------------
  |  Branch (4758:5): [True: 12.5k, False: 591k]
  ------------------
 4759|  12.5k|        return decode_NXAST_RAW_CONJUNCTION(ALIGNED_CAST(const struct nx_action_conjunction *, a), version, out);
  ------------------
  |  |  430|  12.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4760|       |
 4761|  44.8k|    case NXAST_RAW_CT:
  ------------------
  |  Branch (4761:5): [True: 44.8k, False: 559k]
  ------------------
 4762|  44.8k|        return decode_NXAST_RAW_CT(ALIGNED_CAST(const struct nx_action_conntrack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  44.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4763|       |
 4764|  33.9k|    case NXAST_RAW_NAT:
  ------------------
  |  Branch (4764:5): [True: 33.9k, False: 570k]
  ------------------
 4765|  33.9k|        return decode_NXAST_RAW_NAT(ALIGNED_CAST(const struct nx_action_nat *, a), version, out);
  ------------------
  |  |  430|  33.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4766|       |
 4767|    513|    case NXAST_RAW_OUTPUT_TRUNC:
  ------------------
  |  Branch (4767:5): [True: 513, False: 603k]
  ------------------
 4768|    513|        return decode_NXAST_RAW_OUTPUT_TRUNC(ALIGNED_CAST(const struct nx_action_output_trunc *, a), version, out);
  ------------------
  |  |  430|    513|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4769|       |
 4770|  2.04k|    case NXAST_RAW_CLONE:
  ------------------
  |  Branch (4770:5): [True: 2.04k, False: 602k]
  ------------------
 4771|  2.04k|        return decode_NXAST_RAW_CLONE(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  2.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4772|       |
 4773|    468|    case NXAST_RAW_CT_CLEAR:
  ------------------
  |  Branch (4773:5): [True: 468, False: 603k]
  ------------------
 4774|    468|        return decode_NXAST_RAW_CT_CLEAR(out);
 4775|       |
 4776|  7.66k|    case NXAST_RAW_ENCAP:
  ------------------
  |  Branch (4776:5): [True: 7.66k, False: 596k]
  ------------------
 4777|  7.66k|        return decode_NXAST_RAW_ENCAP(ALIGNED_CAST(const struct nx_action_encap *, a), version, out);
  ------------------
  |  |  430|  7.66k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4778|       |
 4779|  14.3k|    case NXAST_RAW_DECAP:
  ------------------
  |  Branch (4779:5): [True: 14.3k, False: 589k]
  ------------------
 4780|  14.3k|        return decode_NXAST_RAW_DECAP(ALIGNED_CAST(const struct nx_action_decap *, a), version, out);
  ------------------
  |  |  430|  14.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4781|       |
 4782|    477|    case NXAST_RAW_DEC_NSH_TTL:
  ------------------
  |  Branch (4782:5): [True: 477, False: 603k]
  ------------------
 4783|    477|        return decode_NXAST_RAW_DEC_NSH_TTL(out);
 4784|       |
 4785|    979|    case NXAST_RAW_CHECK_PKT_LARGER:
  ------------------
  |  Branch (4785:5): [True: 979, False: 603k]
  ------------------
 4786|    979|        return decode_NXAST_RAW_CHECK_PKT_LARGER(ALIGNED_CAST(const struct nx_action_check_pkt_larger *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|    979|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4787|       |
 4788|  1.56k|    case NXAST_RAW_DELETE_FIELD:
  ------------------
  |  Branch (4788:5): [True: 1.56k, False: 602k]
  ------------------
 4789|  1.56k|        return decode_NXAST_RAW_DELETE_FIELD(ALIGNED_CAST(const struct nx_action_delete_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  430|  1.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4790|       |
 4791|     70|    case NXAST_RAW_DEBUG_SLOW:
  ------------------
  |  Branch (4791:5): [True: 70, False: 604k]
  ------------------
 4792|     70|        return decode_NXAST_RAW_DEBUG_SLOW(out);
 4793|       |
 4794|    771|    case NXAST_RAW_DEBUG_RECIRC:
  ------------------
  |  Branch (4794:5): [True: 771, False: 603k]
  ------------------
 4795|    771|        return decode_NXAST_RAW_DEBUG_RECIRC(out);
 4796|       |
 4797|      0|    default:
  ------------------
  |  Branch (4797:5): [True: 0, False: 604k]
  ------------------
 4798|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 4799|   604k|    }
 4800|   604k|}

ofputil_decode_bundle_ctrl:
   85|    561|{
   86|    561|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   87|    561|    enum ofpraw raw = ofpraw_pull_assert(&b);
   88|    561|    ovs_assert(raw == OFPRAW_OFPT14_BUNDLE_CONTROL
  ------------------
  |  |   58|    561|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 561, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
   89|    561|               || raw == OFPRAW_ONFT13_BUNDLE_CONTROL);
   90|       |
   91|    561|    const struct ofp14_bundle_ctrl_msg *m = b.msg;
   92|    561|    msg->bundle_id = ntohl(m->bundle_id);
   93|    561|    msg->type = ntohs(m->type);
   94|    561|    msg->flags = ntohs(m->flags);
   95|       |
   96|    561|    return 0;
   97|    561|}
ofputil_format_bundle_ctrl_request:
  147|    561|{
  148|    561|    ds_put_char(s, '\n');
  149|    561|    ds_put_format(s, " bundle_id=%#"PRIx32" type=",  bctrl->bundle_id);
  150|    561|    switch (bctrl->type) {
  ------------------
  |  Branch (150:13): [True: 135, False: 426]
  ------------------
  151|     95|    case OFPBCT_OPEN_REQUEST:
  ------------------
  |  Branch (151:5): [True: 95, False: 466]
  ------------------
  152|     95|        ds_put_cstr(s, "OPEN_REQUEST");
  153|     95|        break;
  154|      4|    case OFPBCT_OPEN_REPLY:
  ------------------
  |  Branch (154:5): [True: 4, False: 557]
  ------------------
  155|      4|        ds_put_cstr(s, "OPEN_REPLY");
  156|      4|        break;
  157|      0|    case OFPBCT_CLOSE_REQUEST:
  ------------------
  |  Branch (157:5): [True: 0, False: 561]
  ------------------
  158|      0|        ds_put_cstr(s, "CLOSE_REQUEST");
  159|      0|        break;
  160|      0|    case OFPBCT_CLOSE_REPLY:
  ------------------
  |  Branch (160:5): [True: 0, False: 561]
  ------------------
  161|      0|        ds_put_cstr(s, "CLOSE_REPLY");
  162|      0|        break;
  163|      0|    case OFPBCT_COMMIT_REQUEST:
  ------------------
  |  Branch (163:5): [True: 0, False: 561]
  ------------------
  164|      0|        ds_put_cstr(s, "COMMIT_REQUEST");
  165|      0|        break;
  166|    213|    case OFPBCT_COMMIT_REPLY:
  ------------------
  |  Branch (166:5): [True: 213, False: 348]
  ------------------
  167|    213|        ds_put_cstr(s, "COMMIT_REPLY");
  168|    213|        break;
  169|      0|    case OFPBCT_DISCARD_REQUEST:
  ------------------
  |  Branch (169:5): [True: 0, False: 561]
  ------------------
  170|      0|        ds_put_cstr(s, "DISCARD_REQUEST");
  171|      0|        break;
  172|    114|    case OFPBCT_DISCARD_REPLY:
  ------------------
  |  Branch (172:5): [True: 114, False: 447]
  ------------------
  173|    114|        ds_put_cstr(s, "DISCARD_REPLY");
  174|    114|        break;
  175|    561|    }
  176|       |
  177|    561|    ds_put_cstr(s, " flags=");
  178|    561|    ofp_print_bit_names(s, bctrl->flags, bundle_flags_to_name, ' ');
  179|    561|}
ofputil_decode_bundle_add:
  306|  22.2k|{
  307|  22.2k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  308|       |
  309|       |    /* Pull the outer ofp_header. */
  310|  22.2k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  311|  22.2k|    ovs_assert(raw == OFPRAW_OFPT14_BUNDLE_ADD_MESSAGE
  ------------------
  |  |   58|  22.2k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 22.2k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  312|  22.2k|               || raw == OFPRAW_ONFT13_BUNDLE_ADD_MESSAGE);
  313|       |
  314|       |    /* Pull the bundle_ctrl header. */
  315|  22.2k|    const struct ofp14_bundle_ctrl_msg *m = ofpbuf_pull(&b, sizeof *m);
  316|  22.2k|    msg->bundle_id = ntohl(m->bundle_id);
  317|  22.2k|    msg->flags = ntohs(m->flags);
  318|       |
  319|       |    /* Pull the inner ofp_header. */
  320|  22.2k|    if (b.size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (320:9): [True: 108, False: 22.1k]
  ------------------
  321|    108|        return OFPERR_OFPBFC_MSG_BAD_LEN;
  322|    108|    }
  323|  22.1k|    msg->msg = b.data;
  324|  22.1k|    if (msg->msg->version != oh->version) {
  ------------------
  |  Branch (324:9): [True: 4.34k, False: 17.7k]
  ------------------
  325|  4.34k|        return OFPERR_OFPBFC_BAD_VERSION;
  326|  4.34k|    }
  327|  17.7k|    size_t inner_len = ntohs(msg->msg->length);
  328|  17.7k|    if (inner_len < sizeof(struct ofp_header) || inner_len > b.size) {
  ------------------
  |  Branch (328:9): [True: 183, False: 17.5k]
  |  Branch (328:50): [True: 819, False: 16.7k]
  ------------------
  329|  1.00k|        return OFPERR_OFPBFC_MSG_BAD_LEN;
  330|  1.00k|    }
  331|  16.7k|    if (msg->msg->xid != oh->xid) {
  ------------------
  |  Branch (331:9): [True: 1.61k, False: 15.1k]
  ------------------
  332|  1.61k|        return OFPERR_OFPBFC_MSG_BAD_XID;
  333|  1.61k|    }
  334|       |
  335|       |    /* Reject unbundlable messages. */
  336|  15.1k|    enum ofptype type;
  337|  15.1k|    enum ofperr error = ofptype_decode(&type, msg->msg);
  338|  15.1k|    if (error) {
  ------------------
  |  Branch (338:9): [True: 191, False: 14.9k]
  ------------------
  339|    191|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|    191|        {                                                                 \
  |  |  111|    191|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|    764|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|    191|            0,                              /* first_dropped */           \
  |  |  113|    191|            0,                              /* last_dropped */            \
  |  |  114|    191|            0,                              /* n_dropped */               \
  |  |  115|    191|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|    191|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|    191|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|    191|        }
  ------------------
  340|    191|        VLOG_WARN_RL(&rl, "OFPT14_BUNDLE_ADD_MESSAGE contained "
  ------------------
  |  |  223|    191|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    191|    do {                                                                \
  |  |  |  |  287|    191|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    191|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 191]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    191|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  341|    191|                     "message is unparsable (%s)", ofperr_get_name(error));
  342|    191|        return OFPERR_OFPBFC_MSG_UNSUP; /* 'error' would be confusing. */
  343|    191|    }
  344|       |
  345|  14.9k|    if (!ofputil_is_bundlable(type)) {
  ------------------
  |  Branch (345:9): [True: 38, False: 14.9k]
  ------------------
  346|     38|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|     38|        {                                                                 \
  |  |  111|     38|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|    152|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|     38|            0,                              /* first_dropped */           \
  |  |  113|     38|            0,                              /* last_dropped */            \
  |  |  114|     38|            0,                              /* n_dropped */               \
  |  |  115|     38|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|     38|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|     38|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|     38|        }
  ------------------
  347|     38|        VLOG_WARN_RL(&rl, "%s message not allowed inside "
  ------------------
  |  |  223|     38|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     38|    do {                                                                \
  |  |  |  |  287|     38|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     38|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 38]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     38|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  348|     38|                     "OFPT14_BUNDLE_ADD_MESSAGE", ofptype_get_name(type));
  349|     38|        return OFPERR_OFPBFC_MSG_UNSUP;
  350|     38|    }
  351|  14.9k|    if (typep) {
  ------------------
  |  Branch (351:9): [True: 0, False: 14.9k]
  ------------------
  352|      0|        *typep = type;
  353|      0|    }
  354|       |
  355|  14.9k|    return 0;
  356|  14.9k|}
ofputil_format_bundle_add:
  492|  14.9k|{
  493|  14.9k|    ds_put_char(s, '\n');
  494|  14.9k|    ds_put_format(s, " bundle_id=%#"PRIx32, badd->bundle_id);
  495|  14.9k|    ds_put_cstr(s, " flags=");
  496|  14.9k|    ofp_print_bit_names(s, badd->flags, bundle_flags_to_name, ' ');
  497|       |
  498|  14.9k|    ds_put_char(s, '\n');
  499|  14.9k|    char *msg = ofp_to_string(badd->msg, ntohs(badd->msg->length), port_map,
  500|  14.9k|                              table_map, verbosity);
  501|  14.9k|    ds_put_and_free_cstr(s, msg);
  502|  14.9k|}
ofp-bundle.c:bundle_flags_to_name:
  133|  3.70k|{
  134|  3.70k|    switch (bit) {
  135|    238|    case OFPBF_ATOMIC:
  ------------------
  |  Branch (135:5): [True: 238, False: 3.46k]
  ------------------
  136|    238|        return "atomic";
  137|    605|    case OFPBF_ORDERED:
  ------------------
  |  Branch (137:5): [True: 605, False: 3.09k]
  ------------------
  138|    605|        return "ordered";
  139|  2.85k|    default:
  ------------------
  |  Branch (139:5): [True: 2.85k, False: 843]
  ------------------
  140|  2.85k|        return NULL;
  141|  3.70k|    }
  142|  3.70k|}
ofp-bundle.c:ofputil_is_bundlable:
  205|  14.9k|{
  206|  14.9k|    switch (type) {
  ------------------
  |  Branch (206:13): [True: 0, False: 14.9k]
  ------------------
  207|       |        /* Minimum required by OpenFlow 1.4. */
  208|      0|    case OFPTYPE_PORT_MOD:
  ------------------
  |  Branch (208:5): [True: 0, False: 14.9k]
  ------------------
  209|      0|    case OFPTYPE_FLOW_MOD:
  ------------------
  |  Branch (209:5): [True: 0, False: 14.9k]
  ------------------
  210|       |        /* Other supported types. */
  211|  14.9k|    case OFPTYPE_GROUP_MOD:
  ------------------
  |  Branch (211:5): [True: 14.9k, False: 38]
  ------------------
  212|  14.9k|    case OFPTYPE_PACKET_OUT:
  ------------------
  |  Branch (212:5): [True: 0, False: 14.9k]
  ------------------
  213|  14.9k|        return true;
  214|       |
  215|       |        /* Nice to have later. */
  216|      0|    case OFPTYPE_FLOW_MOD_TABLE_ID:
  ------------------
  |  Branch (216:5): [True: 0, False: 14.9k]
  ------------------
  217|      0|    case OFPTYPE_TABLE_MOD:
  ------------------
  |  Branch (217:5): [True: 0, False: 14.9k]
  ------------------
  218|      0|    case OFPTYPE_METER_MOD:
  ------------------
  |  Branch (218:5): [True: 0, False: 14.9k]
  ------------------
  219|      0|    case OFPTYPE_NXT_TLV_TABLE_MOD:
  ------------------
  |  Branch (219:5): [True: 0, False: 14.9k]
  ------------------
  220|       |
  221|       |        /* Not to be bundlable. */
  222|      0|    case OFPTYPE_ECHO_REQUEST:
  ------------------
  |  Branch (222:5): [True: 0, False: 14.9k]
  ------------------
  223|      0|    case OFPTYPE_FEATURES_REQUEST:
  ------------------
  |  Branch (223:5): [True: 0, False: 14.9k]
  ------------------
  224|      0|    case OFPTYPE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (224:5): [True: 0, False: 14.9k]
  ------------------
  225|      0|    case OFPTYPE_SET_CONFIG:
  ------------------
  |  Branch (225:5): [True: 0, False: 14.9k]
  ------------------
  226|      0|    case OFPTYPE_BARRIER_REQUEST:
  ------------------
  |  Branch (226:5): [True: 0, False: 14.9k]
  ------------------
  227|      0|    case OFPTYPE_ROLE_REQUEST:
  ------------------
  |  Branch (227:5): [True: 0, False: 14.9k]
  ------------------
  228|      0|    case OFPTYPE_ECHO_REPLY:
  ------------------
  |  Branch (228:5): [True: 0, False: 14.9k]
  ------------------
  229|      0|    case OFPTYPE_SET_FLOW_FORMAT:
  ------------------
  |  Branch (229:5): [True: 0, False: 14.9k]
  ------------------
  230|      0|    case OFPTYPE_SET_PACKET_IN_FORMAT:
  ------------------
  |  Branch (230:5): [True: 0, False: 14.9k]
  ------------------
  231|      0|    case OFPTYPE_SET_CONTROLLER_ID:
  ------------------
  |  Branch (231:5): [True: 0, False: 14.9k]
  ------------------
  232|      0|    case OFPTYPE_FLOW_AGE:
  ------------------
  |  Branch (232:5): [True: 0, False: 14.9k]
  ------------------
  233|      0|    case OFPTYPE_FLOW_MONITOR_CANCEL:
  ------------------
  |  Branch (233:5): [True: 0, False: 14.9k]
  ------------------
  234|      0|    case OFPTYPE_SET_ASYNC_CONFIG:
  ------------------
  |  Branch (234:5): [True: 0, False: 14.9k]
  ------------------
  235|      0|    case OFPTYPE_GET_ASYNC_REQUEST:
  ------------------
  |  Branch (235:5): [True: 0, False: 14.9k]
  ------------------
  236|      0|    case OFPTYPE_DESC_STATS_REQUEST:
  ------------------
  |  Branch (236:5): [True: 0, False: 14.9k]
  ------------------
  237|      0|    case OFPTYPE_FLOW_STATS_REQUEST:
  ------------------
  |  Branch (237:5): [True: 0, False: 14.9k]
  ------------------
  238|      0|    case OFPTYPE_AGGREGATE_STATS_REQUEST:
  ------------------
  |  Branch (238:5): [True: 0, False: 14.9k]
  ------------------
  239|      0|    case OFPTYPE_TABLE_STATS_REQUEST:
  ------------------
  |  Branch (239:5): [True: 0, False: 14.9k]
  ------------------
  240|      0|    case OFPTYPE_TABLE_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (240:5): [True: 0, False: 14.9k]
  ------------------
  241|      0|    case OFPTYPE_TABLE_DESC_REQUEST:
  ------------------
  |  Branch (241:5): [True: 0, False: 14.9k]
  ------------------
  242|      0|    case OFPTYPE_PORT_STATS_REQUEST:
  ------------------
  |  Branch (242:5): [True: 0, False: 14.9k]
  ------------------
  243|      0|    case OFPTYPE_QUEUE_STATS_REQUEST:
  ------------------
  |  Branch (243:5): [True: 0, False: 14.9k]
  ------------------
  244|      0|    case OFPTYPE_PORT_DESC_STATS_REQUEST:
  ------------------
  |  Branch (244:5): [True: 0, False: 14.9k]
  ------------------
  245|      0|    case OFPTYPE_FLOW_MONITOR_STATS_REQUEST:
  ------------------
  |  Branch (245:5): [True: 0, False: 14.9k]
  ------------------
  246|      0|    case OFPTYPE_METER_STATS_REQUEST:
  ------------------
  |  Branch (246:5): [True: 0, False: 14.9k]
  ------------------
  247|      0|    case OFPTYPE_METER_CONFIG_STATS_REQUEST:
  ------------------
  |  Branch (247:5): [True: 0, False: 14.9k]
  ------------------
  248|      0|    case OFPTYPE_METER_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (248:5): [True: 0, False: 14.9k]
  ------------------
  249|      0|    case OFPTYPE_GROUP_STATS_REQUEST:
  ------------------
  |  Branch (249:5): [True: 0, False: 14.9k]
  ------------------
  250|      0|    case OFPTYPE_GROUP_DESC_STATS_REQUEST:
  ------------------
  |  Branch (250:5): [True: 0, False: 14.9k]
  ------------------
  251|      0|    case OFPTYPE_GROUP_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (251:5): [True: 0, False: 14.9k]
  ------------------
  252|      0|    case OFPTYPE_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (252:5): [True: 0, False: 14.9k]
  ------------------
  253|      3|    case OFPTYPE_BUNDLE_CONTROL:
  ------------------
  |  Branch (253:5): [True: 3, False: 14.9k]
  ------------------
  254|     26|    case OFPTYPE_BUNDLE_ADD_MESSAGE:
  ------------------
  |  Branch (254:5): [True: 23, False: 14.9k]
  ------------------
  255|     27|    case OFPTYPE_HELLO:
  ------------------
  |  Branch (255:5): [True: 1, False: 14.9k]
  ------------------
  256|     29|    case OFPTYPE_ERROR:
  ------------------
  |  Branch (256:5): [True: 2, False: 14.9k]
  ------------------
  257|     29|    case OFPTYPE_FEATURES_REPLY:
  ------------------
  |  Branch (257:5): [True: 0, False: 14.9k]
  ------------------
  258|     29|    case OFPTYPE_GET_CONFIG_REPLY:
  ------------------
  |  Branch (258:5): [True: 0, False: 14.9k]
  ------------------
  259|     29|    case OFPTYPE_PACKET_IN:
  ------------------
  |  Branch (259:5): [True: 0, False: 14.9k]
  ------------------
  260|     29|    case OFPTYPE_FLOW_REMOVED:
  ------------------
  |  Branch (260:5): [True: 0, False: 14.9k]
  ------------------
  261|     29|    case OFPTYPE_PORT_STATUS:
  ------------------
  |  Branch (261:5): [True: 0, False: 14.9k]
  ------------------
  262|     29|    case OFPTYPE_BARRIER_REPLY:
  ------------------
  |  Branch (262:5): [True: 0, False: 14.9k]
  ------------------
  263|     29|    case OFPTYPE_QUEUE_GET_CONFIG_REPLY:
  ------------------
  |  Branch (263:5): [True: 0, False: 14.9k]
  ------------------
  264|     29|    case OFPTYPE_DESC_STATS_REPLY:
  ------------------
  |  Branch (264:5): [True: 0, False: 14.9k]
  ------------------
  265|     29|    case OFPTYPE_FLOW_STATS_REPLY:
  ------------------
  |  Branch (265:5): [True: 0, False: 14.9k]
  ------------------
  266|     29|    case OFPTYPE_QUEUE_STATS_REPLY:
  ------------------
  |  Branch (266:5): [True: 0, False: 14.9k]
  ------------------
  267|     29|    case OFPTYPE_PORT_STATS_REPLY:
  ------------------
  |  Branch (267:5): [True: 0, False: 14.9k]
  ------------------
  268|     29|    case OFPTYPE_TABLE_STATS_REPLY:
  ------------------
  |  Branch (268:5): [True: 0, False: 14.9k]
  ------------------
  269|     29|    case OFPTYPE_AGGREGATE_STATS_REPLY:
  ------------------
  |  Branch (269:5): [True: 0, False: 14.9k]
  ------------------
  270|     29|    case OFPTYPE_PORT_DESC_STATS_REPLY:
  ------------------
  |  Branch (270:5): [True: 0, False: 14.9k]
  ------------------
  271|     29|    case OFPTYPE_ROLE_REPLY:
  ------------------
  |  Branch (271:5): [True: 0, False: 14.9k]
  ------------------
  272|     29|    case OFPTYPE_FLOW_MONITOR_PAUSED:
  ------------------
  |  Branch (272:5): [True: 0, False: 14.9k]
  ------------------
  273|     29|    case OFPTYPE_FLOW_MONITOR_RESUMED:
  ------------------
  |  Branch (273:5): [True: 0, False: 14.9k]
  ------------------
  274|     29|    case OFPTYPE_FLOW_MONITOR_STATS_REPLY:
  ------------------
  |  Branch (274:5): [True: 0, False: 14.9k]
  ------------------
  275|     30|    case OFPTYPE_GET_ASYNC_REPLY:
  ------------------
  |  Branch (275:5): [True: 1, False: 14.9k]
  ------------------
  276|     30|    case OFPTYPE_GROUP_STATS_REPLY:
  ------------------
  |  Branch (276:5): [True: 0, False: 14.9k]
  ------------------
  277|     30|    case OFPTYPE_GROUP_DESC_STATS_REPLY:
  ------------------
  |  Branch (277:5): [True: 0, False: 14.9k]
  ------------------
  278|     30|    case OFPTYPE_GROUP_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (278:5): [True: 0, False: 14.9k]
  ------------------
  279|     30|    case OFPTYPE_METER_STATS_REPLY:
  ------------------
  |  Branch (279:5): [True: 0, False: 14.9k]
  ------------------
  280|     30|    case OFPTYPE_METER_CONFIG_STATS_REPLY:
  ------------------
  |  Branch (280:5): [True: 0, False: 14.9k]
  ------------------
  281|     30|    case OFPTYPE_METER_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (281:5): [True: 0, False: 14.9k]
  ------------------
  282|     30|    case OFPTYPE_TABLE_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (282:5): [True: 0, False: 14.9k]
  ------------------
  283|     30|    case OFPTYPE_TABLE_DESC_REPLY:
  ------------------
  |  Branch (283:5): [True: 0, False: 14.9k]
  ------------------
  284|     30|    case OFPTYPE_ROLE_STATUS:
  ------------------
  |  Branch (284:5): [True: 0, False: 14.9k]
  ------------------
  285|     38|    case OFPTYPE_REQUESTFORWARD:
  ------------------
  |  Branch (285:5): [True: 8, False: 14.9k]
  ------------------
  286|     38|    case OFPTYPE_TABLE_STATUS:
  ------------------
  |  Branch (286:5): [True: 0, False: 14.9k]
  ------------------
  287|     38|    case OFPTYPE_NXT_TLV_TABLE_REQUEST:
  ------------------
  |  Branch (287:5): [True: 0, False: 14.9k]
  ------------------
  288|     38|    case OFPTYPE_NXT_TLV_TABLE_REPLY:
  ------------------
  |  Branch (288:5): [True: 0, False: 14.9k]
  ------------------
  289|     38|    case OFPTYPE_NXT_RESUME:
  ------------------
  |  Branch (289:5): [True: 0, False: 14.9k]
  ------------------
  290|     38|    case OFPTYPE_IPFIX_BRIDGE_STATS_REQUEST:
  ------------------
  |  Branch (290:5): [True: 0, False: 14.9k]
  ------------------
  291|     38|    case OFPTYPE_IPFIX_BRIDGE_STATS_REPLY:
  ------------------
  |  Branch (291:5): [True: 0, False: 14.9k]
  ------------------
  292|     38|    case OFPTYPE_IPFIX_FLOW_STATS_REQUEST:
  ------------------
  |  Branch (292:5): [True: 0, False: 14.9k]
  ------------------
  293|     38|    case OFPTYPE_IPFIX_FLOW_STATS_REPLY:
  ------------------
  |  Branch (293:5): [True: 0, False: 14.9k]
  ------------------
  294|     38|    case OFPTYPE_CT_FLUSH_ZONE:
  ------------------
  |  Branch (294:5): [True: 0, False: 14.9k]
  ------------------
  295|     38|    case OFPTYPE_CT_FLUSH:
  ------------------
  |  Branch (295:5): [True: 0, False: 14.9k]
  ------------------
  296|     38|        break;
  297|  14.9k|    }
  298|       |
  299|     38|    return false;
  300|  14.9k|}

ofputil_decode_role_message:
   42|  13.7k|{
   43|  13.7k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   44|  13.7k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   45|  13.7k|    if (raw == OFPRAW_OFPT12_ROLE_REQUEST ||
  ------------------
  |  Branch (45:9): [True: 3.07k, False: 10.6k]
  ------------------
   46|  13.7k|        raw == OFPRAW_OFPT12_ROLE_REPLY) {
  ------------------
  |  Branch (46:9): [True: 10.3k, False: 391]
  ------------------
   47|  13.3k|        const struct ofp12_role_request *orr = b.msg;
   48|       |
   49|  13.3k|        if (orr->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (49:13): [True: 9.72k, False: 3.64k]
  ------------------
   50|  13.3k|            orr->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (50:13): [True: 3.95k, False: 5.77k]
  ------------------
   51|  13.3k|            orr->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (51:13): [True: 3.85k, False: 99]
  ------------------
   52|  13.3k|            orr->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (52:13): [True: 3.75k, False: 94]
  ------------------
   53|  3.75k|            return OFPERR_OFPRRFC_BAD_ROLE;
   54|  3.75k|        }
   55|       |
   56|  9.61k|        rr->role = ntohl(orr->role);
   57|  9.61k|        if (raw == OFPRAW_OFPT12_ROLE_REQUEST
  ------------------
  |  Branch (57:13): [True: 2.61k, False: 7.00k]
  |  Branch (57:13): [True: 2.68k, False: 6.92k]
  ------------------
   58|  9.61k|            ? orr->role == htonl(OFPCR12_ROLE_NOCHANGE)
   59|  9.61k|            : orr->generation_id == OVS_BE64_MAX) {
  ------------------
  |  |   44|  7.00k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
   60|  2.68k|            rr->have_generation_id = false;
   61|  2.68k|            rr->generation_id = 0;
   62|  6.92k|        } else {
   63|  6.92k|            rr->have_generation_id = true;
   64|  6.92k|            rr->generation_id = ntohll(orr->generation_id);
   65|  6.92k|        }
   66|  9.61k|    } else if (raw == OFPRAW_NXT_ROLE_REQUEST ||
  ------------------
  |  Branch (66:16): [True: 312, False: 79]
  ------------------
   67|    391|               raw == OFPRAW_NXT_ROLE_REPLY) {
  ------------------
  |  Branch (67:16): [True: 79, False: 0]
  ------------------
   68|    391|        const struct nx_role_request *nrr = b.msg;
   69|       |
   70|    391|        BUILD_ASSERT(NX_ROLE_OTHER + 1 == OFPCR12_ROLE_EQUAL);
  ------------------
  |  |  270|    391|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   71|    391|        BUILD_ASSERT(NX_ROLE_PRIMARY + 1 == OFPCR12_ROLE_PRIMARY);
  ------------------
  |  |  270|    391|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   72|    391|        BUILD_ASSERT(NX_ROLE_SECONDARY + 1 == OFPCR12_ROLE_SECONDARY);
  ------------------
  |  |  270|    391|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   73|       |
   74|    391|        if (nrr->role != htonl(NX_ROLE_OTHER) &&
  ------------------
  |  Branch (74:13): [True: 373, False: 18]
  ------------------
   75|    391|            nrr->role != htonl(NX_ROLE_PRIMARY) &&
  ------------------
  |  Branch (75:13): [True: 339, False: 34]
  ------------------
   76|    391|            nrr->role != htonl(NX_ROLE_SECONDARY)) {
  ------------------
  |  Branch (76:13): [True: 190, False: 149]
  ------------------
   77|    190|            return OFPERR_OFPRRFC_BAD_ROLE;
   78|    190|        }
   79|       |
   80|    201|        rr->role = ntohl(nrr->role) + 1;
   81|    201|        rr->have_generation_id = false;
   82|    201|        rr->generation_id = 0;
   83|    201|    } else {
   84|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   85|      0|    }
   86|       |
   87|  9.81k|    return 0;
   88|  13.7k|}
ofputil_format_role_message:
  121|  9.81k|{
  122|  9.81k|    format_role_generic(string, rr->role, (rr->have_generation_id
  ------------------
  |  Branch (122:44): [True: 6.92k, False: 2.88k]
  ------------------
  123|  9.81k|                                           ? rr->generation_id
  124|  9.81k|                                           : UINT64_MAX));
  125|  9.81k|}
ofputil_decode_role_status:
  191|  1.07k|{
  192|  1.07k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  193|  1.07k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  194|  1.07k|    ovs_assert(raw == OFPRAW_OFPT14_ROLE_STATUS ||
  ------------------
  |  |   58|  1.07k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 1.07k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
  195|  1.07k|               raw == OFPRAW_ONFT13_ROLE_STATUS);
  196|       |
  197|  1.07k|    const struct ofp14_role_status *r = b.msg;
  198|  1.07k|    if (r->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (198:9): [True: 987, False: 88]
  ------------------
  199|  1.07k|        r->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (199:9): [True: 910, False: 77]
  ------------------
  200|  1.07k|        r->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (200:9): [True: 710, False: 200]
  ------------------
  201|  1.07k|        r->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (201:9): [True: 523, False: 187]
  ------------------
  202|    523|        return OFPERR_OFPRRFC_BAD_ROLE;
  203|    523|    }
  204|       |
  205|    552|    rs->role = ntohl(r->role);
  206|    552|    rs->generation_id = ntohll(r->generation_id);
  207|    552|    rs->reason = r->reason;
  208|       |
  209|    552|    return 0;
  210|  1.07k|}
ofputil_format_role_status:
  215|    552|{
  216|    552|    format_role_generic(string, rs->role, rs->generation_id);
  217|       |
  218|    552|    ds_put_cstr(string, " reason=");
  219|       |
  220|    552|    switch (rs->reason) {
  221|    123|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (221:5): [True: 123, False: 429]
  ------------------
  222|    123|        ds_put_cstr(string, "primary_request");
  223|    123|        break;
  224|      2|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (224:5): [True: 2, False: 550]
  ------------------
  225|      2|        ds_put_cstr(string, "configuration_changed");
  226|      2|        break;
  227|      7|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (227:5): [True: 7, False: 545]
  ------------------
  228|      7|        ds_put_cstr(string, "experimenter_data_changed");
  229|      7|        break;
  230|      1|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (230:5): [True: 1, False: 551]
  ------------------
  231|    420|    default:
  ------------------
  |  Branch (231:5): [True: 419, False: 133]
  ------------------
  232|    420|        ds_put_cstr(string, "(unknown)");
  233|    420|        break;
  234|    552|    }
  235|    552|}
ofputil_async_msg_type_to_string:
  239|   107k|{
  240|   107k|    switch (type) {
  241|  17.8k|    case OAM_PACKET_IN:      return "PACKET_IN";
  ------------------
  |  Branch (241:5): [True: 17.8k, False: 89.3k]
  ------------------
  242|  17.8k|    case OAM_PORT_STATUS:    return "PORT_STATUS";
  ------------------
  |  Branch (242:5): [True: 17.8k, False: 89.3k]
  ------------------
  243|  17.8k|    case OAM_FLOW_REMOVED:   return "FLOW_REMOVED";
  ------------------
  |  Branch (243:5): [True: 17.8k, False: 89.3k]
  ------------------
  244|  17.8k|    case OAM_ROLE_STATUS:    return "ROLE_STATUS";
  ------------------
  |  Branch (244:5): [True: 17.8k, False: 89.3k]
  ------------------
  245|  17.8k|    case OAM_TABLE_STATUS:   return "TABLE_STATUS";
  ------------------
  |  Branch (245:5): [True: 17.8k, False: 89.3k]
  ------------------
  246|  17.8k|    case OAM_REQUESTFORWARD: return "REQUESTFORWARD";
  ------------------
  |  Branch (246:5): [True: 17.8k, False: 89.3k]
  ------------------
  247|       |
  248|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (248:5): [True: 0, False: 107k]
  ------------------
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 107k]
  ------------------
  250|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  251|   107k|    }
  252|   107k|}
ofputil_decode_set_async_config:
  427|  16.0k|{
  428|  16.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  429|  16.0k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  430|       |
  431|  16.0k|    if (raw == OFPRAW_OFPT13_SET_ASYNC ||
  ------------------
  |  Branch (431:9): [True: 281, False: 15.7k]
  ------------------
  432|  16.0k|        raw == OFPRAW_NXT_SET_ASYNC_CONFIG ||
  ------------------
  |  Branch (432:9): [True: 2.92k, False: 12.8k]
  ------------------
  433|  16.0k|        raw == OFPRAW_OFPT13_GET_ASYNC_REPLY) {
  ------------------
  |  Branch (433:9): [True: 1.42k, False: 11.4k]
  ------------------
  434|  4.63k|        const struct nx_async_config *msg = ofpmsg_body(oh);
  435|       |
  436|  4.63k|        *ac = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  4.63k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  437|  4.63k|        decode_legacy_async_masks(msg->packet_in_mask, OAM_PACKET_IN,
  438|  4.63k|                                  oh->version, ac);
  439|  4.63k|        decode_legacy_async_masks(msg->port_status_mask, OAM_PORT_STATUS,
  440|  4.63k|                                  oh->version, ac);
  441|  4.63k|        decode_legacy_async_masks(msg->flow_removed_mask, OAM_FLOW_REMOVED,
  442|  4.63k|                                  oh->version, ac);
  443|  11.4k|    } else if (raw == OFPRAW_OFPT14_SET_ASYNC ||
  ------------------
  |  Branch (443:16): [True: 3.00k, False: 8.40k]
  ------------------
  444|  11.4k|               raw == OFPRAW_OFPT14_GET_ASYNC_REPLY ||
  ------------------
  |  Branch (444:16): [True: 4.40k, False: 3.99k]
  ------------------
  445|  11.4k|               raw == OFPRAW_NXT_SET_ASYNC_CONFIG2) {
  ------------------
  |  Branch (445:16): [True: 3.99k, False: 0]
  ------------------
  446|  11.4k|        *ac = *basis;
  447|  16.6k|        while (b.size > 0) {
  ------------------
  |  Branch (447:16): [True: 12.3k, False: 4.30k]
  ------------------
  448|  12.3k|            struct ofpbuf property;
  449|  12.3k|            enum ofperr error;
  450|  12.3k|            uint64_t type;
  451|       |
  452|  12.3k|            error = ofpprop_pull__(&b, &property, 8, 0xfffe, &type);
  453|  12.3k|            if (error) {
  ------------------
  |  Branch (453:17): [True: 5.59k, False: 6.75k]
  ------------------
  454|  5.59k|                return error;
  455|  5.59k|            }
  456|       |
  457|  6.75k|            const struct ofp14_async_prop *ap
  458|  6.75k|                = get_ofp14_async_config_prop_by_prop_type(type);
  459|  6.75k|            error = (ap
  ------------------
  |  Branch (459:22): [True: 5.83k, False: 914]
  ------------------
  460|  6.75k|                     ? parse_async_tlv(&property, ap, ac, oh->version, loose)
  461|  6.75k|                     : OFPPROP_UNKNOWN(loose, "async config", type));
  ------------------
  |  |  140|    914|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  462|  6.75k|            if (error) {
  ------------------
  |  Branch (462:17): [True: 1.49k, False: 5.25k]
  ------------------
  463|       |                /* Most messages use OFPBPC_BAD_TYPE but async has its own (who
  464|       |                 * knows why, it's OpenFlow. */
  465|  1.49k|                if (error == OFPERR_OFPBPC_BAD_TYPE) {
  ------------------
  |  Branch (465:21): [True: 172, False: 1.32k]
  ------------------
  466|    172|                    error = OFPERR_OFPACFC_UNSUPPORTED;
  467|    172|                }
  468|  1.49k|                return error;
  469|  1.49k|            }
  470|  6.75k|        }
  471|  11.4k|    } else {
  472|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  473|      0|    }
  474|  8.93k|    return 0;
  475|  16.0k|}
ofputil_format_set_async_config:
  667|  8.93k|{
  668|  26.8k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (668:21): [True: 17.8k, False: 8.93k]
  ------------------
  669|  17.8k|        ds_put_format(string, "\n %s:\n", i == 0 ? "primary" : "secondary");
  ------------------
  |  Branch (669:43): [True: 8.93k, False: 8.93k]
  ------------------
  670|   125k|        for (uint32_t type = 0; type < OAM_N_TYPES; type++) {
  ------------------
  |  Branch (670:33): [True: 107k, False: 17.8k]
  ------------------
  671|   107k|            ds_put_format(string, "%16s:",
  672|   107k|                          ofputil_async_msg_type_to_string(type));
  673|       |
  674|   107k|            uint32_t role = i == 0 ? ac->primary[type] : ac->secondary[type];
  ------------------
  |  Branch (674:29): [True: 53.6k, False: 53.6k]
  ------------------
  675|  3.53M|            for (int j = 0; j < 32; j++) {
  ------------------
  |  Branch (675:29): [True: 3.43M, False: 107k]
  ------------------
  676|  3.43M|                if (role & (1u << j)) {
  ------------------
  |  Branch (676:21): [True: 29.3k, False: 3.40M]
  ------------------
  677|  29.3k|                    char reasonbuf[INT_STRLEN(int) + 1];
  678|  29.3k|                    const char *reason;
  679|       |
  680|  29.3k|                    reason = ofp_async_config_reason_to_string(
  681|  29.3k|                        j, type, reasonbuf, sizeof reasonbuf);
  682|  29.3k|                    if (reason[0]) {
  ------------------
  |  Branch (682:25): [True: 27.2k, False: 2.09k]
  ------------------
  683|  27.2k|                        ds_put_format(string, " %s", reason);
  684|  27.2k|                    }
  685|  29.3k|                }
  686|  3.43M|            }
  687|   107k|            if (!role) {
  ------------------
  |  Branch (687:17): [True: 93.0k, False: 14.1k]
  ------------------
  688|  93.0k|                ds_put_cstr(string, " (off)");
  689|  93.0k|            }
  690|   107k|            ds_put_char(string, '\n');
  691|   107k|        }
  692|  17.8k|    }
  693|  8.93k|}
ofp-connection.c:format_role_generic:
   93|  10.3k|{
   94|  10.3k|    ds_put_cstr(string, " role=");
   95|       |
   96|  10.3k|    switch (role) {
   97|  3.73k|    case OFPCR12_ROLE_NOCHANGE:
  ------------------
  |  Branch (97:5): [True: 3.73k, False: 6.63k]
  ------------------
   98|  3.73k|        ds_put_cstr(string, "nochange");
   99|  3.73k|        break;
  100|  5.87k|    case OFPCR12_ROLE_EQUAL:
  ------------------
  |  Branch (100:5): [True: 5.87k, False: 4.49k]
  ------------------
  101|  5.87k|        ds_put_cstr(string, "equal"); /* OF 1.2 wording */
  102|  5.87k|        break;
  103|    333|    case OFPCR12_ROLE_PRIMARY:
  ------------------
  |  Branch (103:5): [True: 333, False: 10.0k]
  ------------------
  104|    333|        ds_put_cstr(string, "primary");
  105|    333|        break;
  106|    430|    case OFPCR12_ROLE_SECONDARY:
  ------------------
  |  Branch (106:5): [True: 430, False: 9.93k]
  ------------------
  107|    430|        ds_put_cstr(string, "secondary");
  108|    430|        break;
  109|      0|    default:
  ------------------
  |  Branch (109:5): [True: 0, False: 10.3k]
  ------------------
  110|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  111|  10.3k|    }
  112|       |
  113|  10.3k|    if (generation_id != UINT64_MAX) {
  ------------------
  |  Branch (113:9): [True: 7.47k, False: 2.88k]
  ------------------
  114|  7.47k|        ds_put_format(string, " generation_id=%"PRIu64, generation_id);
  115|  7.47k|    }
  116|  10.3k|}
ofp-connection.c:decode_legacy_async_masks:
  393|  13.8k|{
  394|  41.6k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (394:21): [True: 27.7k, False: 13.8k]
  ------------------
  395|  27.7k|        bool primary = i == 0;
  396|  27.7k|        const struct ofp14_async_prop *ap
  397|  27.7k|            = get_ofp14_async_config_prop_by_oam(oam, primary);
  398|  27.7k|        decode_async_mask(masks[i], ap, version, true, dst);
  399|  27.7k|    }
  400|  13.8k|}
ofp-connection.c:get_ofp14_async_config_prop_by_oam:
  292|  27.7k|{
  293|  97.2k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  27.7k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  97.2k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  293|  97.2k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  97.2k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   42|  97.2k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   48|  97.2k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   38|  97.2k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  97.2k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 97.2k, False: 0]
  |  |  ------------------
  ------------------
  294|  97.2k|        if (ap->oam == oam && ap->primary == primary) {
  ------------------
  |  Branch (294:13): [True: 41.6k, False: 55.5k]
  |  Branch (294:31): [True: 27.7k, False: 13.8k]
  ------------------
  295|  27.7k|            return ap;
  296|  27.7k|        }
  297|  97.2k|    }
  298|      0|    return NULL;
  299|  27.7k|}
ofp-connection.c:decode_async_mask:
  323|  33.4k|{
  324|  33.4k|    uint32_t mask = ntohl(src);
  325|  33.4k|    uint32_t allowed = ofp14_async_prop_allowed(ap, version);
  326|  33.4k|    if (mask & ~allowed) {
  ------------------
  |  Branch (326:9): [True: 29.2k, False: 4.23k]
  ------------------
  327|  29.2k|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  29.2k|        {                                                                 \
  |  |  111|  29.2k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   116k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  29.2k|            0,                              /* first_dropped */           \
  |  |  113|  29.2k|            0,                              /* last_dropped */            \
  |  |  114|  29.2k|            0,                              /* n_dropped */               \
  |  |  115|  29.2k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  29.2k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  29.2k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  29.2k|        }
  ------------------
  328|  29.2k|        OFPPROP_LOG(&rl, loose,
  ------------------
  |  |  135|  29.2k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  29.2k|    do {                                                                \
  |  |  |  |  287|  58.4k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [True: 28.1k, False: 1.13k]
  |  |  |  |  ------------------
  |  |  |  |  288|  29.2k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 29.2k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  29.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  29.2k|                    "bad value %#x for %s (allowed mask %#x)",
  330|  29.2k|                    mask, ofputil_async_msg_type_to_string(ap->oam),
  331|  29.2k|                    allowed);
  332|  29.2k|        mask &= allowed;
  333|  29.2k|        if (!loose) {
  ------------------
  |  Branch (333:13): [True: 1.13k, False: 28.1k]
  ------------------
  334|  1.13k|            return OFPERR_OFPACFC_INVALID;
  335|  1.13k|        }
  336|  29.2k|    }
  337|       |
  338|  32.3k|    if (ap->oam == OAM_PACKET_IN) {
  ------------------
  |  Branch (338:9): [True: 11.1k, False: 21.1k]
  ------------------
  339|  11.1k|        if (mask & (1u << OFPR_NO_MATCH)) {
  ------------------
  |  Branch (339:13): [True: 2.08k, False: 9.10k]
  ------------------
  340|  2.08k|            mask |= 1u << OFPR_EXPLICIT_MISS;
  341|  2.08k|            if (version < OFP13_VERSION) {
  ------------------
  |  Branch (341:17): [True: 94, False: 1.99k]
  ------------------
  342|     94|                mask |= 1u << OFPR_IMPLICIT_MISS;
  343|     94|            }
  344|  2.08k|        }
  345|  11.1k|    }
  346|       |
  347|  32.3k|    uint32_t *array = ap->primary ? dst->primary : dst->secondary;
  ------------------
  |  Branch (347:23): [True: 15.3k, False: 16.9k]
  ------------------
  348|  32.3k|    array[ap->oam] = mask;
  349|  32.3k|    return 0;
  350|  33.4k|}
ofp-connection.c:ofp14_async_prop_allowed:
  304|  33.4k|{
  305|  33.4k|    return version >= OFP14_VERSION ? prop->allowed14 : prop->allowed10;
  ------------------
  |  Branch (305:12): [True: 5.95k, False: 27.5k]
  ------------------
  306|  33.4k|}
ofp-connection.c:get_ofp14_async_config_prop_by_prop_type:
  280|  6.75k|{
  281|  39.8k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  6.75k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  40.7k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  293|  40.7k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  40.7k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   42|  40.7k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   48|  40.7k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   38|  40.7k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   45|  40.7k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 39.8k, False: 914]
  |  |  ------------------
  ------------------
  282|  39.8k|        if (prop_type == ap->prop_type) {
  ------------------
  |  Branch (282:13): [True: 5.83k, False: 33.9k]
  ------------------
  283|  5.83k|            return ap;
  284|  5.83k|        }
  285|  39.8k|    }
  286|    914|    return NULL;
  287|  6.75k|}
ofp-connection.c:parse_async_tlv:
  357|  5.83k|{
  358|  5.83k|    enum ofperr error;
  359|  5.83k|    ovs_be32 mask;
  360|       |
  361|  5.83k|    error  = ofpprop_parse_be32(property, &mask);
  362|  5.83k|    if (error) {
  ------------------
  |  Branch (362:9): [True: 143, False: 5.69k]
  ------------------
  363|    143|        return error;
  364|    143|    }
  365|       |
  366|  5.69k|    if (ofpprop_is_experimenter(ap->prop_type)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 5.69k]
  ------------------
  367|       |        /* For experimenter properties, whether a property is for the primary or
  368|       |         * secondary role is indicated by both 'type' and 'exp_type' in struct
  369|       |         * ofp_prop_experimenter.  Check that these are consistent. */
  370|      0|        const struct ofp_prop_experimenter *ope = property->data;
  371|      0|        bool should_be_primary = ope->type == htons(0xffff);
  372|      0|        if (should_be_primary != ap->primary) {
  ------------------
  |  Branch (372:13): [True: 0, False: 0]
  ------------------
  373|      0|            static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|      0|        {                                                                 \
  |  |  111|      0|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|      0|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      0|            0,                              /* first_dropped */           \
  |  |  113|      0|            0,                              /* last_dropped */            \
  |  |  114|      0|            0,                              /* n_dropped */               \
  |  |  115|      0|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|      0|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|      0|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|      0|        }
  ------------------
  374|      0|            VLOG_WARN_RL(&rl, "async property type %#"PRIx16" "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:56): [True: 0, False: 0]
  |  |  |  |  |  Branch (289:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  375|      0|                         "indicates %s role but exp_type %"PRIu32" indicates "
  376|      0|                         "%s role",
  377|      0|                         ntohs(ope->type),
  378|      0|                         should_be_primary ? "primary" : "secondary",
  379|      0|                         ntohl(ope->exp_type),
  380|      0|                         ap->primary ? "primary" : "secondary");
  381|      0|            return OFPERR_OFPBPC_BAD_EXP_TYPE;
  382|      0|        }
  383|      0|    }
  384|       |
  385|  5.69k|    return decode_async_mask(mask, ap, version, loose, ac);
  386|  5.69k|}
ofp-connection.c:ofp_async_config_reason_to_string:
  638|  29.3k|{
  639|  29.3k|    switch (type) {
  640|  10.1k|    case OAM_PACKET_IN:
  ------------------
  |  Branch (640:5): [True: 10.1k, False: 19.1k]
  ------------------
  641|  10.1k|        return ofputil_packet_in_reason_to_string(reason, reasonbuf, bufsize);
  642|       |
  643|  3.61k|    case OAM_PORT_STATUS:
  ------------------
  |  Branch (643:5): [True: 3.61k, False: 25.7k]
  ------------------
  644|  3.61k|        return ofp_port_reason_to_string(reason, reasonbuf, bufsize);
  645|       |
  646|  11.7k|    case OAM_FLOW_REMOVED:
  ------------------
  |  Branch (646:5): [True: 11.7k, False: 17.6k]
  ------------------
  647|  11.7k|        return ofp_flow_removed_reason_to_string(reason, reasonbuf, bufsize);
  648|       |
  649|    880|    case OAM_ROLE_STATUS:
  ------------------
  |  Branch (649:5): [True: 880, False: 28.4k]
  ------------------
  650|    880|        return ofp_role_reason_to_string(reason, reasonbuf, bufsize);
  651|       |
  652|  1.22k|    case OAM_TABLE_STATUS:
  ------------------
  |  Branch (652:5): [True: 1.22k, False: 28.0k]
  ------------------
  653|  1.22k|        return ofp_table_reason_to_string(reason, reasonbuf, bufsize);
  654|       |
  655|  1.74k|    case OAM_REQUESTFORWARD:
  ------------------
  |  Branch (655:5): [True: 1.74k, False: 27.5k]
  ------------------
  656|  1.74k|        return ofp_requestforward_reason_to_string(reason, reasonbuf, bufsize);
  657|       |
  658|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (658:5): [True: 0, False: 29.3k]
  ------------------
  659|      0|    default:
  ------------------
  |  Branch (659:5): [True: 0, False: 29.3k]
  ------------------
  660|      0|        return "Unknown asynchronous configuration message type";
  661|  29.3k|    }
  662|  29.3k|}
ofp-connection.c:ofp_port_reason_to_string:
  571|  3.61k|{
  572|  3.61k|    switch (reason) {
  573|  1.15k|    case OFPPR_ADD:
  ------------------
  |  Branch (573:5): [True: 1.15k, False: 2.45k]
  ------------------
  574|  1.15k|        return "add";
  575|       |
  576|  1.24k|    case OFPPR_DELETE:
  ------------------
  |  Branch (576:5): [True: 1.24k, False: 2.36k]
  ------------------
  577|  1.24k|        return "delete";
  578|       |
  579|  1.21k|    case OFPPR_MODIFY:
  ------------------
  |  Branch (579:5): [True: 1.21k, False: 2.39k]
  ------------------
  580|  1.21k|        return "modify";
  581|       |
  582|      0|    case OFPPR_N_REASONS:
  ------------------
  |  Branch (582:5): [True: 0, False: 3.61k]
  ------------------
  583|      0|    default:
  ------------------
  |  Branch (583:5): [True: 0, False: 3.61k]
  ------------------
  584|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  585|      0|        return reasonbuf;
  586|  3.61k|    }
  587|  3.61k|}
ofp-connection.c:ofp_role_reason_to_string:
  595|    880|{
  596|    880|    switch (reason) {
  597|     47|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (597:5): [True: 47, False: 833]
  ------------------
  598|     47|        return "primary_request";
  599|       |
  600|    705|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (600:5): [True: 705, False: 175]
  ------------------
  601|    705|        return "configuration_changed";
  602|       |
  603|    128|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (603:5): [True: 128, False: 752]
  ------------------
  604|    128|        return "experimenter_data_changed";
  605|       |
  606|      0|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (606:5): [True: 0, False: 880]
  ------------------
  607|      0|    default:
  ------------------
  |  Branch (607:5): [True: 0, False: 880]
  ------------------
  608|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  609|      0|        return reasonbuf;
  610|    880|    }
  611|    880|}
ofp-connection.c:ofp_requestforward_reason_to_string:
  619|  1.74k|{
  620|  1.74k|    switch (reason) {
  621|    919|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (621:5): [True: 919, False: 823]
  ------------------
  622|    919|        return "group_mod_request";
  623|       |
  624|    823|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (624:5): [True: 823, False: 919]
  ------------------
  625|    823|        return "meter_mod_request";
  626|       |
  627|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (627:5): [True: 0, False: 1.74k]
  ------------------
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 1.74k]
  ------------------
  629|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  630|      0|        return reasonbuf;
  631|  1.74k|    }
  632|  1.74k|}

ofp_ct_match_format:
   88|  4.62k|{
   89|  4.62k|    ds_put_cstr(ds, "'");
   90|  4.62k|    ofp_ct_tuple_format(ds, &match->tuple_orig, match->ip_proto,
   91|  4.62k|                        match->l3_type);
   92|  4.62k|    ds_put_format(ds, ",ct_nw_proto=%u' '", match->ip_proto);
   93|  4.62k|    ofp_ct_tuple_format(ds, &match->tuple_reply, match->ip_proto,
   94|  4.62k|                        match->l3_type);
   95|  4.62k|    ds_put_cstr(ds, "'");
   96|  4.62k|}
ofp_ct_match_decode:
  339|  11.6k|{
  340|  11.6k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  341|  11.6k|    ofpraw_pull_assert(&msg);
  342|       |
  343|  11.6k|    const struct nx_ct_flush *nx_flush = ofpbuf_pull(&msg, sizeof *nx_flush);
  344|       |
  345|  11.6k|    if (!is_all_zeros(nx_flush->pad, sizeof nx_flush->pad)) {
  ------------------
  |  Branch (345:9): [True: 1.51k, False: 10.1k]
  ------------------
  346|  1.51k|        return OFPERR_NXBRC_MUST_BE_ZERO;
  347|  1.51k|    }
  348|       |
  349|  10.1k|    match->ip_proto = nx_flush->ip_proto;
  350|       |
  351|  10.1k|    struct ofp_ct_tuple *orig = &match->tuple_orig;
  352|  10.1k|    struct ofp_ct_tuple *reply = &match->tuple_reply;
  353|       |
  354|  17.6k|    while (msg.size) {
  ------------------
  |  Branch (354:12): [True: 13.0k, False: 4.62k]
  ------------------
  355|  13.0k|        struct ofpbuf property;
  356|  13.0k|        uint64_t type;
  357|       |
  358|  13.0k|        enum ofperr error = ofpprop_pull(&msg, &property, &type);
  359|  13.0k|        if (error) {
  ------------------
  |  Branch (359:13): [True: 828, False: 12.2k]
  ------------------
  360|    828|            return error;
  361|    828|        }
  362|       |
  363|  12.2k|        switch (type) {
  ------------------
  |  Branch (363:17): [True: 2.12k, False: 10.1k]
  ------------------
  364|  6.96k|        case NXT_CT_ORIG_TUPLE:
  ------------------
  |  Branch (364:9): [True: 6.96k, False: 5.27k]
  ------------------
  365|  6.96k|            error = ofp_ct_tuple_decode_nested(&property, orig,
  366|  6.96k|                                               &match->l3_type);
  367|  6.96k|            break;
  368|       |
  369|  2.94k|        case NXT_CT_REPLY_TUPLE:
  ------------------
  |  Branch (369:9): [True: 2.94k, False: 9.29k]
  ------------------
  370|  2.94k|            error = ofp_ct_tuple_decode_nested(&property, reply,
  371|  2.94k|                                               &match->l3_type);
  372|  2.94k|            break;
  373|       |
  374|    205|        case NXT_CT_ZONE_ID:
  ------------------
  |  Branch (374:9): [True: 205, False: 12.0k]
  ------------------
  375|    205|            if (with_zone) {
  ------------------
  |  Branch (375:17): [True: 0, False: 205]
  ------------------
  376|      0|                *with_zone = true;
  377|      0|            }
  378|    205|            error = ofpprop_parse_u16(&property, zone_id);
  379|    205|            break;
  380|  12.2k|        }
  381|       |
  382|  12.2k|        if (error) {
  ------------------
  |  Branch (382:13): [True: 4.70k, False: 7.53k]
  ------------------
  383|  4.70k|            return error;
  384|  4.70k|        }
  385|  12.2k|    }
  386|       |
  387|  4.62k|    return 0;
  388|  10.1k|}
ofp-ct.c:ofp_ct_tuple_format:
   38|  9.25k|{
   39|  9.25k|    ds_put_cstr(ds, l3_type == AF_INET ? "ct_nw_src=": "ct_ipv6_src=");
  ------------------
  |  Branch (39:21): [True: 2.23k, False: 7.02k]
  ------------------
   40|  9.25k|    ipv6_format_mapped(&tuple->src, ds);
   41|  9.25k|    ds_put_cstr(ds, l3_type == AF_INET ? ",ct_nw_dst=": ",ct_ipv6_dst=");
  ------------------
  |  Branch (41:21): [True: 2.23k, False: 7.02k]
  ------------------
   42|  9.25k|    ipv6_format_mapped(&tuple->dst, ds);
   43|  9.25k|    if (ip_proto == IPPROTO_ICMP || ip_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (43:9): [True: 7.74k, False: 1.51k]
  |  Branch (43:37): [True: 98, False: 1.41k]
  ------------------
   44|  7.84k|        ds_put_format(ds, ",icmp_id=%u,icmp_type=%u,icmp_code=%u",
   45|  7.84k|                      ntohs(tuple->icmp_id), tuple->icmp_type,
   46|  7.84k|                      tuple->icmp_code);
   47|  7.84k|    } else {
   48|  1.41k|        ds_put_format(ds, ",ct_tp_src=%u,ct_tp_dst=%u", ntohs(tuple->src_port),
   49|  1.41k|                      ntohs(tuple->dst_port));
   50|  1.41k|    }
   51|  9.25k|}
ofp-ct.c:ofp_ct_tuple_decode_nested:
  246|  9.91k|{
  247|  9.91k|    struct ofpbuf nested;
  248|  9.91k|    enum ofperr error = ofpprop_parse_nested(property, &nested);
  249|  9.91k|    if (error) {
  ------------------
  |  Branch (249:9): [True: 67, False: 9.84k]
  ------------------
  250|     67|        return error;
  251|     67|    }
  252|       |
  253|  23.2k|    while (nested.size) {
  ------------------
  |  Branch (253:12): [True: 17.9k, False: 5.20k]
  ------------------
  254|  17.9k|        struct ofpbuf inner;
  255|  17.9k|        uint64_t type;
  256|       |
  257|  17.9k|        error = ofpprop_pull(&nested, &inner, &type);
  258|  17.9k|        if (error) {
  ------------------
  |  Branch (258:13): [True: 2.76k, False: 15.2k]
  ------------------
  259|  2.76k|            return error;
  260|  2.76k|        }
  261|  15.2k|        switch (type) {
  ------------------
  |  Branch (261:17): [True: 2.41k, False: 12.8k]
  ------------------
  262|  6.08k|        case NXT_CT_TUPLE_SRC:
  ------------------
  |  Branch (262:9): [True: 6.08k, False: 9.15k]
  ------------------
  263|  6.08k|            error = ofpprop_pull_ipv6(&inner, &tuple->src, l3_type);
  264|  6.08k|            break;
  265|       |
  266|  4.24k|        case NXT_CT_TUPLE_DST:
  ------------------
  |  Branch (266:9): [True: 4.24k, False: 10.9k]
  ------------------
  267|  4.24k|            error = ofpprop_pull_ipv6(&inner, &tuple->dst, l3_type);
  268|  4.24k|            break;
  269|       |
  270|    648|        case NXT_CT_TUPLE_SRC_PORT:
  ------------------
  |  Branch (270:9): [True: 648, False: 14.5k]
  ------------------
  271|    648|            error = ofpprop_parse_be16(&inner, &tuple->src_port);
  272|    648|            break;
  273|       |
  274|  1.51k|        case NXT_CT_TUPLE_DST_PORT:
  ------------------
  |  Branch (274:9): [True: 1.51k, False: 13.7k]
  ------------------
  275|  1.51k|            error = ofpprop_parse_be16(&inner, &tuple->dst_port);
  276|  1.51k|            break;
  277|       |
  278|     13|        case NXT_CT_TUPLE_ICMP_ID:
  ------------------
  |  Branch (278:9): [True: 13, False: 15.2k]
  ------------------
  279|     13|            error = ofpprop_parse_be16(&inner, &tuple->icmp_id);
  280|     13|            break;
  281|       |
  282|    149|        case NXT_CT_TUPLE_ICMP_TYPE:
  ------------------
  |  Branch (282:9): [True: 149, False: 15.0k]
  ------------------
  283|    149|            error = ofpprop_parse_u8(&inner, &tuple->icmp_type);
  284|    149|            break;
  285|       |
  286|    173|        case NXT_CT_TUPLE_ICMP_CODE:
  ------------------
  |  Branch (286:9): [True: 173, False: 15.0k]
  ------------------
  287|    173|            error = ofpprop_parse_u8(&inner, &tuple->icmp_code);
  288|    173|            break;
  289|  15.2k|        }
  290|       |
  291|  15.2k|        if (error) {
  ------------------
  |  Branch (291:13): [True: 1.87k, False: 13.3k]
  ------------------
  292|  1.87k|            return error;
  293|  1.87k|        }
  294|  15.2k|    }
  295|       |
  296|  5.20k|    return 0;
  297|  9.84k|}
ofp-ct.c:ofpprop_pull_ipv6:
  222|  10.3k|{
  223|  10.3k|    if (ofpbuf_msgsize(property) < sizeof *addr) {
  ------------------
  |  Branch (223:9): [True: 1.60k, False: 8.72k]
  ------------------
  224|  1.60k|        return OFPERR_OFPBPC_BAD_LEN;
  225|  1.60k|    }
  226|       |
  227|  8.72k|    memcpy(addr, property->msg, sizeof *addr);
  228|       |
  229|  8.72k|    uint16_t l3 = 0;
  230|  8.72k|    if (!ipv6_is_zero(addr)) {
  ------------------
  |  Branch (230:9): [True: 7.63k, False: 1.09k]
  ------------------
  231|  7.63k|        l3 = IN6_IS_ADDR_V4MAPPED(addr) ? AF_INET : AF_INET6;
  232|  7.63k|    }
  233|       |
  234|  8.72k|    if (*l3_type && l3 && *l3_type != l3) {
  ------------------
  |  Branch (234:9): [True: 993, False: 7.72k]
  |  Branch (234:21): [True: 567, False: 426]
  |  Branch (234:27): [True: 270, False: 297]
  ------------------
  235|    270|        return OFPERR_OFPBPC_BAD_VALUE;
  236|    270|    }
  237|       |
  238|  8.45k|    *l3_type = l3;
  239|       |
  240|  8.45k|    return 0;
  241|  8.72k|}

decode_ed_prop:
   32|  5.82k|{
   33|  5.82k|    uint16_t prop_class = ntohs((*ofp_prop)->prop_class);
   34|  5.82k|    uint8_t prop_type = (*ofp_prop)->type;
   35|  5.82k|    size_t len = (*ofp_prop)->len;
   36|  5.82k|    size_t pad_len = ROUND_UP(len, 8);
  ------------------
  |  |  299|  5.82k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  5.82k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   37|       |
   38|  5.82k|    if (len < sizeof **ofp_prop || pad_len > *remaining) {
  ------------------
  |  Branch (38:9): [True: 346, False: 5.47k]
  |  Branch (38:36): [True: 223, False: 5.25k]
  ------------------
   39|    569|        return OFPERR_OFPBAC_BAD_LEN;
   40|    569|    }
   41|       |
   42|  5.25k|    switch (prop_class) {
   43|  4.80k|    case OFPPPC_NSH: {
  ------------------
  |  Branch (43:5): [True: 4.80k, False: 444]
  ------------------
   44|  4.80k|        switch (prop_type) {
   45|  2.84k|        case OFPPPT_PROP_NSH_MDTYPE: {
  ------------------
  |  Branch (45:9): [True: 2.84k, False: 1.96k]
  ------------------
   46|  2.84k|            struct ofp_ed_prop_nsh_md_type *opnmt =
   47|  2.84k|                ALIGNED_CAST(struct ofp_ed_prop_nsh_md_type *, *ofp_prop);
  ------------------
  |  |  430|  2.84k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   48|  2.84k|            if (len > sizeof(*opnmt) || len > *remaining) {
  ------------------
  |  Branch (48:17): [True: 35, False: 2.80k]
  |  Branch (48:41): [True: 0, False: 2.80k]
  ------------------
   49|     35|                return OFPERR_NXBAC_BAD_ED_PROP;
   50|     35|            }
   51|  2.80k|            struct ofpact_ed_prop_nsh_md_type *pnmt =
   52|  2.80k|                    ofpbuf_put_zeros(out, sizeof *pnmt);
   53|  2.80k|            pnmt->header.prop_class = prop_class;
   54|  2.80k|            pnmt->header.type = prop_type;
   55|  2.80k|            pnmt->header.len = len;
   56|  2.80k|            pnmt->md_type = opnmt->md_type;
   57|  2.80k|            break;
   58|  2.84k|        }
   59|  1.41k|        case OFPPPT_PROP_NSH_TLV: {
  ------------------
  |  Branch (59:9): [True: 1.41k, False: 3.39k]
  ------------------
   60|  1.41k|            struct ofp_ed_prop_nsh_tlv *opnt =
   61|  1.41k|                ALIGNED_CAST(struct ofp_ed_prop_nsh_tlv *, *ofp_prop);
  ------------------
  |  |  430|  1.41k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   62|  1.41k|            size_t tlv_pad_len = ROUND_UP(opnt->tlv_len, 8);
  ------------------
  |  |  299|  1.41k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  1.41k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   63|  1.41k|            if (len != sizeof(*opnt) + tlv_pad_len || len > *remaining) {
  ------------------
  |  Branch (63:17): [True: 193, False: 1.21k]
  |  Branch (63:55): [True: 0, False: 1.21k]
  ------------------
   64|    193|                return OFPERR_NXBAC_BAD_ED_PROP;
   65|    193|            }
   66|  1.21k|            struct ofpact_ed_prop_nsh_tlv *pnt =
   67|  1.21k|                    ofpbuf_put_uninit(out, sizeof(*pnt));
   68|  1.21k|            pnt->header.prop_class = prop_class;
   69|  1.21k|            pnt->header.type = prop_type;
   70|  1.21k|            pnt->header.len = len;
   71|  1.21k|            pnt->tlv_class = opnt->tlv_class;
   72|  1.21k|            pnt->tlv_type = opnt->tlv_type;
   73|  1.21k|            pnt->tlv_len = opnt->tlv_len;
   74|  1.21k|            ofpbuf_put(out, opnt->data, tlv_pad_len);
   75|  1.21k|            break;
   76|  1.41k|        }
   77|    556|        default:
  ------------------
  |  Branch (77:9): [True: 556, False: 4.25k]
  ------------------
   78|    556|            return OFPERR_NXBAC_UNKNOWN_ED_PROP;
   79|  4.80k|        }
   80|  4.02k|        break;
   81|  4.80k|    }
   82|  4.02k|    default:
  ------------------
  |  Branch (82:5): [True: 444, False: 4.80k]
  ------------------
   83|    444|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
   84|  5.25k|    }
   85|       |
   86|  4.02k|    *remaining -= pad_len;
   87|  4.02k|    *ofp_prop = ALIGNED_CAST(const struct ofp_ed_prop_header *,
  ------------------
  |  |  430|  4.02k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   88|  4.02k|                             ((char *)(*ofp_prop) + pad_len));
   89|  4.02k|    return 0;
   90|  5.25k|}
format_ed_prop_type:
  293|  1.07k|{
  294|  1.07k|    switch (prop->prop_class) {
  295|  1.07k|    case OFPPPC_NSH:
  ------------------
  |  Branch (295:5): [True: 1.07k, False: 0]
  ------------------
  296|  1.07k|        switch (prop->type) {
  297|    800|        case OFPPPT_PROP_NSH_MDTYPE:
  ------------------
  |  Branch (297:9): [True: 800, False: 272]
  ------------------
  298|    800|            return "md_type";
  299|    272|        case OFPPPT_PROP_NSH_TLV:
  ------------------
  |  Branch (299:9): [True: 272, False: 800]
  ------------------
  300|    272|            return "tlv";
  301|      0|        default:
  ------------------
  |  Branch (301:9): [True: 0, False: 1.07k]
  ------------------
  302|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  303|  1.07k|        }
  304|      0|        break;
  305|      0|    default:
  ------------------
  |  Branch (305:5): [True: 0, False: 1.07k]
  ------------------
  306|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  307|  1.07k|    }
  308|  1.07k|}
format_ed_prop:
  313|  1.07k|{
  314|  1.07k|    switch (prop->prop_class) {
  315|  1.07k|    case OFPPPC_NSH:
  ------------------
  |  Branch (315:5): [True: 1.07k, False: 0]
  ------------------
  316|  1.07k|        switch (prop->type) {
  317|    800|        case OFPPPT_PROP_NSH_MDTYPE: {
  ------------------
  |  Branch (317:9): [True: 800, False: 272]
  ------------------
  318|    800|            struct ofpact_ed_prop_nsh_md_type *pnmt =
  319|    800|                ALIGNED_CAST(struct ofpact_ed_prop_nsh_md_type *, prop);
  ------------------
  |  |  430|    800|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  320|    800|            ds_put_format(s, "%s=%d", format_ed_prop_type(prop),
  321|    800|                          pnmt->md_type);
  322|    800|            return;
  323|      0|        }
  324|    272|        case OFPPPT_PROP_NSH_TLV: {
  ------------------
  |  Branch (324:9): [True: 272, False: 800]
  ------------------
  325|    272|            struct ofpact_ed_prop_nsh_tlv *pnt =
  326|    272|                ALIGNED_CAST(struct ofpact_ed_prop_nsh_tlv *, prop);
  ------------------
  |  |  430|    272|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  327|    272|            ds_put_format(s, "%s(0x%04x,%d,",
  328|    272|                          format_ed_prop_type(prop),
  329|    272|                          ntohs(pnt->tlv_class), pnt->tlv_type);
  330|    272|            ds_put_hex(s, pnt->data, pnt->tlv_len);
  331|    272|            ds_put_cstr(s,")");
  332|    272|            return;
  333|      0|        }
  334|      0|        default:
  ------------------
  |  Branch (334:9): [True: 0, False: 1.07k]
  ------------------
  335|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  336|  1.07k|        }
  337|      0|    default:
  ------------------
  |  Branch (337:5): [True: 0, False: 1.07k]
  ------------------
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|  1.07k|    }
  340|  1.07k|}

ofperr_is_valid:
   76|  4.42M|{
   77|  4.42M|    return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  8.85M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  4.39M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |    3|  8.82M|#define OFPERR_N_ERRORS 198
  ------------------
  |  Branch (77:12): [True: 4.39M, False: 28.7k]
  |  Branch (77:35): [True: 4.39M, False: 85]
  ------------------
   78|  4.42M|}
ofperr_get_name:
   98|  4.42M|{
   99|  4.42M|    return (ofperr_is_valid(error)
  ------------------
  |  Branch (99:13): [True: 4.39M, False: 28.8k]
  ------------------
  100|  4.42M|            ? error_names[error - OFPERR_OFS]
  ------------------
  |  |   52|  4.39M|#define OFPERR_OFS (1 << 30)
  ------------------
  101|  4.42M|            : "<invalid>");
  102|  4.42M|}
ofperr_msg_format:
  248|  1.13M|{
  249|  1.13M|    ds_put_format(string, " %s\n", ofperr_get_name(error));
  250|       |
  251|  1.13M|    if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
  ------------------
  |  Branch (251:9): [True: 26.6k, False: 1.10M]
  |  Branch (251:48): [True: 7.82k, False: 1.09M]
  ------------------
  252|  34.5k|        ds_put_printable(string, payload->data, payload->size);
  253|  1.09M|    } else {
  254|  1.09M|        char *s = ofp_to_string(payload->data, payload->size,
  255|  1.09M|                                port_map, table_map, 1);
  256|  1.09M|        ds_put_cstr(string, s);
  257|  1.09M|        free(s);
  258|  1.09M|    }
  259|  1.13M|}
ofperr_decode_msg:
  303|  1.88M|{
  304|  1.88M|    const struct ofp_error_msg *oem;
  305|  1.88M|    enum ofpraw raw;
  306|  1.88M|    uint16_t type, code;
  307|  1.88M|    uint32_t vendor;
  308|       |
  309|  1.88M|    if (payload) {
  ------------------
  |  Branch (309:9): [True: 1.88M, False: 0]
  ------------------
  310|  1.88M|        memset(payload, 0, sizeof *payload);
  311|  1.88M|    }
  312|       |
  313|       |    /* Pull off the error message. */
  314|  1.88M|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  315|  1.88M|    enum ofperr error = ofpraw_pull(&raw, &b);
  316|  1.88M|    if (error) {
  ------------------
  |  Branch (316:9): [True: 0, False: 1.88M]
  ------------------
  317|      0|        return 0;
  318|      0|    }
  319|  1.88M|    oem = ofpbuf_pull(&b, sizeof *oem);
  320|       |
  321|       |    /* Get the error type and code. */
  322|  1.88M|    vendor = 0;
  323|  1.88M|    type = ntohs(oem->type);
  324|  1.88M|    code = ntohs(oem->code);
  325|  1.88M|    if (type == NXET_VENDOR && code == NXVC_VENDOR_ERROR) {
  ------------------
  |  |   54|  3.76M|#define NXET_VENDOR 0xb0c2
  ------------------
  |  Branch (325:9): [True: 208k, False: 1.67M]
  |  Branch (325:32): [True: 178k, False: 30.2k]
  ------------------
  326|   178k|        const struct nx_vendor_error *nve = ofpbuf_try_pull(&b, sizeof *nve);
  327|   178k|        if (!nve) {
  ------------------
  |  Branch (327:13): [True: 37, False: 178k]
  ------------------
  328|     37|            return 0;
  329|     37|        }
  330|       |
  331|   178k|        vendor = ntohl(nve->vendor);
  332|   178k|        type = ntohs(nve->type);
  333|   178k|        code = ntohs(nve->code);
  334|  1.70M|    } else if (type == OFPET12_EXPERIMENTER) {
  ------------------
  |  |   59|  1.70M|#define OFPET12_EXPERIMENTER 0xffff
  ------------------
  |  Branch (334:16): [True: 200k, False: 1.50M]
  ------------------
  335|   200k|        const ovs_be32 *vendorp = ofpbuf_try_pull(&b, sizeof *vendorp);
  336|   200k|        if (!vendorp) {
  ------------------
  |  Branch (336:13): [True: 35.3k, False: 165k]
  ------------------
  337|  35.3k|            return 0;
  338|  35.3k|        }
  339|       |
  340|   165k|        vendor = ntohl(*vendorp);
  341|   165k|        type = code;
  342|   165k|        code = 0;
  343|   165k|    }
  344|       |
  345|       |    /* Translate the error type and code into an ofperr. */
  346|  1.84M|    error = ofperr_decode(oh->version, vendor, type, code);
  347|  1.84M|    if (error && payload) {
  ------------------
  |  Branch (347:9): [True: 1.13M, False: 713k]
  |  Branch (347:18): [True: 1.13M, False: 0]
  ------------------
  348|  1.13M|        ofpbuf_init(payload, b.size);
  349|  1.13M|        ofpbuf_push(payload, b.data, b.size);
  350|  1.13M|        ofpbuf_trim(payload);
  351|  1.13M|    }
  352|  1.84M|    return error;
  353|  1.88M|}
ofp-errors.c:ofperr_domain_from_version:
   46|  1.84M|{
   47|  1.84M|    switch (version) {
   48|   225k|    case OFP10_VERSION:
  ------------------
  |  Branch (48:5): [True: 225k, False: 1.62M]
  ------------------
   49|   225k|        return &ofperr_of10;
   50|   221k|    case OFP11_VERSION:
  ------------------
  |  Branch (50:5): [True: 221k, False: 1.62M]
  ------------------
   51|   221k|        return &ofperr_of11;
   52|   393k|    case OFP12_VERSION:
  ------------------
  |  Branch (52:5): [True: 393k, False: 1.45M]
  ------------------
   53|   393k|        return &ofperr_of12;
   54|   236k|    case OFP13_VERSION:
  ------------------
  |  Branch (54:5): [True: 236k, False: 1.61M]
  ------------------
   55|   236k|        return &ofperr_of13;
   56|   380k|    case OFP14_VERSION:
  ------------------
  |  Branch (56:5): [True: 380k, False: 1.46M]
  ------------------
   57|   380k|        return &ofperr_of14;
   58|   273k|    case OFP15_VERSION:
  ------------------
  |  Branch (58:5): [True: 273k, False: 1.57M]
  ------------------
   59|   273k|        return &ofperr_of15;
   60|   115k|    default:
  ------------------
  |  Branch (60:5): [True: 115k, False: 1.73M]
  ------------------
   61|   115k|        return NULL;
   62|  1.84M|    }
   63|  1.84M|}
ofp-errors.c:ofperr_decode:
   86|  1.84M|{
   87|  1.84M|    const struct ofperr_domain *domain = ofperr_domain_from_version(version);
   88|  1.84M|    return domain ? domain->decode(vendor, type, code) : 0;
  ------------------
  |  Branch (88:12): [True: 1.73M, False: 115k]
  ------------------
   89|  1.84M|}

ofp-errors.c:ofperr_of10_decode:
  416|   225k|{
  417|   225k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (417:13): [True: 92.2k, False: 133k]
  ------------------
  418|  7.55k|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (418:5): [True: 7.55k, False: 217k]
  ------------------
  419|  7.55k|        return OFPERR_OFPHFC_INCOMPATIBLE;
  420|    987|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (420:5): [True: 987, False: 224k]
  ------------------
  421|    987|        return OFPERR_OFPHFC_EPERM;
  422|    490|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (422:5): [True: 490, False: 224k]
  ------------------
  423|    490|        return OFPERR_OFPBRC_BAD_VERSION;
  424|     96|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (424:5): [True: 96, False: 225k]
  ------------------
  425|     96|        return OFPERR_OFPBRC_BAD_TYPE;
  426|  1.84k|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (426:5): [True: 1.84k, False: 223k]
  ------------------
  427|  1.84k|        return OFPERR_OFPBRC_BAD_STAT;
  428|     97|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (428:5): [True: 97, False: 225k]
  ------------------
  429|     97|        return OFPERR_OFPBRC_BAD_VENDOR;
  430|  1.20k|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (430:5): [True: 1.20k, False: 224k]
  ------------------
  431|  1.20k|        return OFPERR_OFPBRC_BAD_SUBTYPE;
  432|    100|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (432:5): [True: 100, False: 225k]
  ------------------
  433|    100|        return OFPERR_OFPBRC_EPERM;
  434|    145|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (434:5): [True: 145, False: 225k]
  ------------------
  435|    145|        return OFPERR_OFPBRC_BAD_LEN;
  436|    758|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (436:5): [True: 758, False: 224k]
  ------------------
  437|    758|        return OFPERR_OFPBRC_BUFFER_EMPTY;
  438|  1.29k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (438:5): [True: 1.29k, False: 224k]
  ------------------
  439|  1.29k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
  440|    659|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 512:
  ------------------
  |  Branch (440:5): [True: 659, False: 224k]
  ------------------
  441|    659|        return OFPERR_OFPBRC_BAD_TABLE_ID;
  442|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 514:
  ------------------
  |  Branch (442:5): [True: 18, False: 225k]
  ------------------
  443|     18|        return OFPERR_OFPBRC_BAD_PORT;
  444|    325|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 256:
  ------------------
  |  Branch (444:5): [True: 325, False: 225k]
  ------------------
  445|    325|        return OFPERR_NXBRC_NXM_INVALID;
  446|  14.6k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 257:
  ------------------
  |  Branch (446:5): [True: 14.6k, False: 210k]
  ------------------
  447|  14.6k|        return OFPERR_NXBRC_NXM_BAD_TYPE;
  448|    391|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 515:
  ------------------
  |  Branch (448:5): [True: 391, False: 225k]
  ------------------
  449|    391|        return OFPERR_NXBRC_MUST_BE_ZERO;
  450|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 516:
  ------------------
  |  Branch (450:5): [True: 10, False: 225k]
  ------------------
  451|     10|        return OFPERR_NXBRC_BAD_REASON;
  452|  2.21k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 520:
  ------------------
  |  Branch (452:5): [True: 2.21k, False: 223k]
  ------------------
  453|  2.21k|        return OFPERR_NXBRC_FM_BAD_EVENT;
  454|     34|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 521:
  ------------------
  |  Branch (454:5): [True: 34, False: 225k]
  ------------------
  455|     34|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
  456|    504|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (456:5): [True: 504, False: 224k]
  ------------------
  457|    504|        return OFPERR_OFPBAC_BAD_TYPE;
  458|    135|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (458:5): [True: 135, False: 225k]
  ------------------
  459|    135|        return OFPERR_OFPBAC_BAD_LEN;
  460|    269|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (460:5): [True: 269, False: 225k]
  ------------------
  461|    269|        return OFPERR_OFPBAC_BAD_VENDOR;
  462|  1.54k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (462:5): [True: 1.54k, False: 223k]
  ------------------
  463|  1.54k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
  464|  1.88k|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (464:5): [True: 1.88k, False: 223k]
  ------------------
  465|  1.88k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  466|  3.70k|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (466:5): [True: 3.70k, False: 221k]
  ------------------
  467|  3.70k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
  468|  1.31k|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (468:5): [True: 1.31k, False: 224k]
  ------------------
  469|  1.31k|        return OFPERR_OFPBAC_EPERM;
  470|    729|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (470:5): [True: 729, False: 224k]
  ------------------
  471|    729|        return OFPERR_OFPBAC_TOO_MANY;
  472|  13.2k|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (472:5): [True: 13.2k, False: 212k]
  ------------------
  473|  13.2k|        return OFPERR_OFPBAC_BAD_QUEUE;
  474|     66|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (474:5): [True: 66, False: 225k]
  ------------------
  475|     66|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
  476|  1.42k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 522:
  ------------------
  |  Branch (476:5): [True: 1.42k, False: 223k]
  ------------------
  477|  1.42k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
  478|     30|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 523:
  ------------------
  |  Branch (478:5): [True: 30, False: 225k]
  ------------------
  479|     30|        return OFPERR_OFPBAC_BAD_SET_TYPE;
  480|    145|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 524:
  ------------------
  |  Branch (480:5): [True: 145, False: 225k]
  ------------------
  481|    145|        return OFPERR_OFPBAC_BAD_SET_LEN;
  482|    584|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 525:
  ------------------
  |  Branch (482:5): [True: 584, False: 224k]
  ------------------
  483|    584|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
  484|     10|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 256:
  ------------------
  |  Branch (484:5): [True: 10, False: 225k]
  ------------------
  485|     10|        return OFPERR_NXBAC_MUST_BE_ZERO;
  486|     18|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 526:
  ------------------
  |  Branch (486:5): [True: 18, False: 225k]
  ------------------
  487|     18|        return OFPERR_NXBAC_BAD_CONJUNCTION;
  488|     35|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 265:
  ------------------
  |  Branch (488:5): [True: 35, False: 225k]
  ------------------
  489|     35|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
  490|     10|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 257:
  ------------------
  |  Branch (490:5): [True: 10, False: 225k]
  ------------------
  491|     10|        return OFPERR_OFPBIC_UNSUP_INST;
  492|  5.76k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 262:
  ------------------
  |  Branch (492:5): [True: 5.76k, False: 219k]
  ------------------
  493|  5.76k|        return OFPERR_OFPBMC_BAD_WILDCARDS;
  494|     10|    case (0x2320ULL << 32) |  ((uint32_t) 0 << 16) | 263:
  ------------------
  |  Branch (494:5): [True: 10, False: 225k]
  ------------------
  495|     10|        return OFPERR_OFPBMC_BAD_FIELD;
  496|  1.22k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 258:
  ------------------
  |  Branch (496:5): [True: 1.22k, False: 224k]
  ------------------
  497|  1.22k|        return OFPERR_OFPBMC_BAD_VALUE;
  498|     98|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 259:
  ------------------
  |  Branch (498:5): [True: 98, False: 225k]
  ------------------
  499|     98|        return OFPERR_OFPBMC_BAD_MASK;
  500|  18.4k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 260:
  ------------------
  |  Branch (500:5): [True: 18.4k, False: 206k]
  ------------------
  501|  18.4k|        return OFPERR_OFPBMC_BAD_PREREQ;
  502|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 261:
  ------------------
  |  Branch (502:5): [True: 10, False: 225k]
  ------------------
  503|     10|        return OFPERR_OFPBMC_DUP_FIELD;
  504|    223|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 264:
  ------------------
  |  Branch (504:5): [True: 223, False: 225k]
  ------------------
  505|    223|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
  506|    436|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (506:5): [True: 436, False: 224k]
  ------------------
  507|    436|        return OFPERR_OFPFMFC_TABLE_FULL;
  508|    195|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (508:5): [True: 195, False: 225k]
  ------------------
  509|    195|        return OFPERR_OFPFMFC_OVERLAP;
  510|  3.57k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (510:5): [True: 3.57k, False: 221k]
  ------------------
  511|  3.57k|        return OFPERR_OFPFMFC_EPERM;
  512|  2.75k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (512:5): [True: 2.75k, False: 222k]
  ------------------
  513|  2.75k|        return OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT;
  514|  5.83k|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (514:5): [True: 5.83k, False: 219k]
  ------------------
  515|  5.83k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  516|    110|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 258:
  ------------------
  |  Branch (516:5): [True: 110, False: 225k]
  ------------------
  517|    110|        return OFPERR_OFPFMFC_BAD_FLAGS;
  518|    197|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (518:5): [True: 197, False: 225k]
  ------------------
  519|    197|        return OFPERR_OFPFMFC_UNSUPPORTED;
  520|     18|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 256:
  ------------------
  |  Branch (520:5): [True: 18, False: 225k]
  ------------------
  521|     18|        return OFPERR_NXFMFC_HARDWARE;
  522|    155|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 257:
  ------------------
  |  Branch (522:5): [True: 155, False: 225k]
  ------------------
  523|    155|        return OFPERR_NXFMFC_BAD_TABLE_ID;
  524|     34|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 536:
  ------------------
  |  Branch (524:5): [True: 34, False: 225k]
  ------------------
  525|     34|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
  526|  1.96k|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (526:5): [True: 1.96k, False: 223k]
  ------------------
  527|  1.96k|        return OFPERR_OFPGMFC_GROUP_EXISTS;
  528|    235|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (528:5): [True: 235, False: 225k]
  ------------------
  529|    235|        return OFPERR_OFPGMFC_INVALID_GROUP;
  530|    132|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (530:5): [True: 132, False: 225k]
  ------------------
  531|    132|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
  532|    851|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (532:5): [True: 851, False: 224k]
  ------------------
  533|    851|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
  534|     35|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (534:5): [True: 35, False: 225k]
  ------------------
  535|     35|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
  536|     10|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (536:5): [True: 10, False: 225k]
  ------------------
  537|     10|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
  538|  2.50k|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (538:5): [True: 2.50k, False: 222k]
  ------------------
  539|  2.50k|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
  540|     10|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (540:5): [True: 10, False: 225k]
  ------------------
  541|     10|        return OFPERR_OFPGMFC_LOOP;
  542|     10|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (542:5): [True: 10, False: 225k]
  ------------------
  543|     10|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
  544|     18|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 9:
  ------------------
  |  Branch (544:5): [True: 18, False: 225k]
  ------------------
  545|     18|        return OFPERR_OFPGMFC_CHAINED_GROUP;
  546|     10|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 10:
  ------------------
  |  Branch (546:5): [True: 10, False: 225k]
  ------------------
  547|     10|        return OFPERR_OFPGMFC_BAD_TYPE;
  548|     34|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 11:
  ------------------
  |  Branch (548:5): [True: 34, False: 225k]
  ------------------
  549|     34|        return OFPERR_OFPGMFC_BAD_COMMAND;
  550|  1.89k|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 12:
  ------------------
  |  Branch (550:5): [True: 1.89k, False: 223k]
  ------------------
  551|  1.89k|        return OFPERR_OFPGMFC_BAD_BUCKET;
  552|     18|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 13:
  ------------------
  |  Branch (552:5): [True: 18, False: 225k]
  ------------------
  553|     18|        return OFPERR_OFPGMFC_BAD_WATCH;
  554|     10|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 14:
  ------------------
  |  Branch (554:5): [True: 10, False: 225k]
  ------------------
  555|     10|        return OFPERR_OFPGMFC_EPERM;
  556|     34|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 15:
  ------------------
  |  Branch (556:5): [True: 34, False: 225k]
  ------------------
  557|     34|        return OFPERR_OFPGMFC_UNKNOWN_BUCKET;
  558|     36|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 16:
  ------------------
  |  Branch (558:5): [True: 36, False: 225k]
  ------------------
  559|     36|        return OFPERR_OFPGMFC_BUCKET_EXISTS;
  560|    285|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (560:5): [True: 285, False: 225k]
  ------------------
  561|    285|        return OFPERR_OFPPMFC_BAD_PORT;
  562|    101|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (562:5): [True: 101, False: 225k]
  ------------------
  563|    101|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
  564|     28|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (564:5): [True: 28, False: 225k]
  ------------------
  565|     28|        return OFPERR_OFPQOFC_BAD_PORT;
  566|  2.98k|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (566:5): [True: 2.98k, False: 222k]
  ------------------
  567|  2.98k|        return OFPERR_OFPQOFC_BAD_QUEUE;
  568|  1.16k|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (568:5): [True: 1.16k, False: 224k]
  ------------------
  569|  1.16k|        return OFPERR_OFPQOFC_EPERM;
  570|  1.31k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 513:
  ------------------
  |  Branch (570:5): [True: 1.31k, False: 224k]
  ------------------
  571|  1.31k|        return OFPERR_OFPRRFC_BAD_ROLE;
  572|    302|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 2:
  ------------------
  |  Branch (572:5): [True: 302, False: 225k]
  ------------------
  573|    302|        return OFPERR_OFPBPC_BAD_TYPE;
  574|  6.33k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 3:
  ------------------
  |  Branch (574:5): [True: 6.33k, False: 219k]
  ------------------
  575|  6.33k|        return OFPERR_OFPBPC_BAD_LEN;
  576|     22|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 4:
  ------------------
  |  Branch (576:5): [True: 22, False: 225k]
  ------------------
  577|     22|        return OFPERR_OFPBPC_BAD_VALUE;
  578|     10|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 3:
  ------------------
  |  Branch (578:5): [True: 10, False: 225k]
  ------------------
  579|     10|        return OFPERR_OFPBPC_TOO_MANY;
  580|     24|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 4:
  ------------------
  |  Branch (580:5): [True: 24, False: 225k]
  ------------------
  581|     24|        return OFPERR_OFPBPC_DUP_TYPE;
  582|  1.73k|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 5:
  ------------------
  |  Branch (582:5): [True: 1.73k, False: 223k]
  ------------------
  583|  1.73k|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  584|    965|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 6:
  ------------------
  |  Branch (584:5): [True: 965, False: 224k]
  ------------------
  585|    965|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
  586|    507|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 7:
  ------------------
  |  Branch (586:5): [True: 507, False: 224k]
  ------------------
  587|    507|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
  588|     10|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 8:
  ------------------
  |  Branch (588:5): [True: 10, False: 225k]
  ------------------
  589|     10|        return OFPERR_OFPBPC_EPERM;
  590|  4.55k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 517:
  ------------------
  |  Branch (590:5): [True: 4.55k, False: 220k]
  ------------------
  591|  4.55k|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
  592|  3.85k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 519:
  ------------------
  |  Branch (592:5): [True: 3.85k, False: 221k]
  ------------------
  593|  3.85k|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
  594|    426|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 518:
  ------------------
  |  Branch (594:5): [True: 426, False: 224k]
  ------------------
  595|    426|        return OFPERR_OFPMOFC_BAD_FLAGS;
  596|  1.72k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 527:
  ------------------
  |  Branch (596:5): [True: 1.72k, False: 223k]
  ------------------
  597|  1.72k|        return OFPERR_NXTTMFC_BAD_COMMAND;
  598|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 528:
  ------------------
  |  Branch (598:5): [True: 10, False: 225k]
  ------------------
  599|     10|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
  600|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 529:
  ------------------
  |  Branch (600:5): [True: 10, False: 225k]
  ------------------
  601|     10|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  602|    435|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 530:
  ------------------
  |  Branch (602:5): [True: 435, False: 224k]
  ------------------
  603|    435|        return OFPERR_NXTTMFC_TABLE_FULL;
  604|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 531:
  ------------------
  |  Branch (604:5): [True: 18, False: 225k]
  ------------------
  605|     18|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
  606|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 532:
  ------------------
  |  Branch (606:5): [True: 18, False: 225k]
  ------------------
  607|     18|        return OFPERR_NXTTMFC_DUP_ENTRY;
  608|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 537:
  ------------------
  |  Branch (608:5): [True: 18, False: 225k]
  ------------------
  609|     18|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
  610|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 533:
  ------------------
  |  Branch (610:5): [True: 18, False: 225k]
  ------------------
  611|     18|        return OFPERR_NXR_NOT_SUPPORTED;
  612|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 534:
  ------------------
  |  Branch (612:5): [True: 10, False: 225k]
  ------------------
  613|     10|        return OFPERR_NXR_STALE;
  614|    856|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 535:
  ------------------
  |  Branch (614:5): [True: 856, False: 224k]
  ------------------
  615|    856|        return OFPERR_NXST_NOT_CONFIGURED;
  616|   225k|    }
  617|       |
  618|  92.2k|    return 0;
  619|   225k|}
ofp-errors.c:ofperr_of11_decode:
  829|   221k|{
  830|   221k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (830:13): [True: 76.7k, False: 145k]
  ------------------
  831|    730|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (831:5): [True: 730, False: 221k]
  ------------------
  832|    730|        return OFPERR_OFPHFC_INCOMPATIBLE;
  833|     87|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (833:5): [True: 87, False: 221k]
  ------------------
  834|     87|        return OFPERR_OFPHFC_EPERM;
  835|     44|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (835:5): [True: 44, False: 221k]
  ------------------
  836|     44|        return OFPERR_OFPBRC_BAD_VERSION;
  837|     66|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (837:5): [True: 66, False: 221k]
  ------------------
  838|     66|        return OFPERR_OFPBRC_BAD_TYPE;
  839|     38|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (839:5): [True: 38, False: 221k]
  ------------------
  840|     38|        return OFPERR_OFPBRC_BAD_STAT;
  841|     86|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (841:5): [True: 86, False: 221k]
  ------------------
  842|     86|        return OFPERR_OFPBRC_BAD_VENDOR;
  843|     79|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (843:5): [True: 79, False: 221k]
  ------------------
  844|     79|        return OFPERR_OFPBRC_BAD_SUBTYPE;
  845|     93|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (845:5): [True: 93, False: 221k]
  ------------------
  846|     93|        return OFPERR_OFPBRC_EPERM;
  847|     68|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (847:5): [True: 68, False: 221k]
  ------------------
  848|     68|        return OFPERR_OFPBRC_BAD_LEN;
  849|     69|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (849:5): [True: 69, False: 221k]
  ------------------
  850|     69|        return OFPERR_OFPBRC_BUFFER_EMPTY;
  851|  2.05k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (851:5): [True: 2.05k, False: 219k]
  ------------------
  852|  2.05k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
  853|    678|    case  ((uint32_t) 1 << 16) | 9:
  ------------------
  |  Branch (853:5): [True: 678, False: 221k]
  ------------------
  854|    678|        return OFPERR_OFPBRC_BAD_TABLE_ID;
  855|     19|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 514:
  ------------------
  |  Branch (855:5): [True: 19, False: 221k]
  ------------------
  856|     19|        return OFPERR_OFPBRC_BAD_PORT;
  857|  3.76k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 256:
  ------------------
  |  Branch (857:5): [True: 3.76k, False: 218k]
  ------------------
  858|  3.76k|        return OFPERR_NXBRC_NXM_INVALID;
  859|  3.92k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 257:
  ------------------
  |  Branch (859:5): [True: 3.92k, False: 217k]
  ------------------
  860|  3.92k|        return OFPERR_NXBRC_NXM_BAD_TYPE;
  861|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 515:
  ------------------
  |  Branch (861:5): [True: 18, False: 221k]
  ------------------
  862|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
  863|  4.13k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 516:
  ------------------
  |  Branch (863:5): [True: 4.13k, False: 217k]
  ------------------
  864|  4.13k|        return OFPERR_NXBRC_BAD_REASON;
  865|     71|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 520:
  ------------------
  |  Branch (865:5): [True: 71, False: 221k]
  ------------------
  866|     71|        return OFPERR_NXBRC_FM_BAD_EVENT;
  867|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 521:
  ------------------
  |  Branch (867:5): [True: 18, False: 221k]
  ------------------
  868|     18|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
  869|     97|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (869:5): [True: 97, False: 221k]
  ------------------
  870|     97|        return OFPERR_OFPBAC_BAD_TYPE;
  871|     98|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (871:5): [True: 98, False: 221k]
  ------------------
  872|     98|        return OFPERR_OFPBAC_BAD_LEN;
  873|  4.16k|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (873:5): [True: 4.16k, False: 217k]
  ------------------
  874|  4.16k|        return OFPERR_OFPBAC_BAD_VENDOR;
  875|  1.01k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (875:5): [True: 1.01k, False: 220k]
  ------------------
  876|  1.01k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
  877|  1.21k|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (877:5): [True: 1.21k, False: 220k]
  ------------------
  878|  1.21k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  879|  1.81k|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (879:5): [True: 1.81k, False: 220k]
  ------------------
  880|  1.81k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
  881|  1.24k|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (881:5): [True: 1.24k, False: 220k]
  ------------------
  882|  1.24k|        return OFPERR_OFPBAC_EPERM;
  883|     59|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (883:5): [True: 59, False: 221k]
  ------------------
  884|     59|        return OFPERR_OFPBAC_TOO_MANY;
  885|  7.61k|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (885:5): [True: 7.61k, False: 214k]
  ------------------
  886|  7.61k|        return OFPERR_OFPBAC_BAD_QUEUE;
  887|  1.44k|    case  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (887:5): [True: 1.44k, False: 220k]
  ------------------
  888|  1.44k|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
  889|  3.90k|    case  ((uint32_t) 2 << 16) | 10:
  ------------------
  |  Branch (889:5): [True: 3.90k, False: 217k]
  ------------------
  890|  3.90k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
  891|     34|    case  ((uint32_t) 2 << 16) | 11:
  ------------------
  |  Branch (891:5): [True: 34, False: 221k]
  ------------------
  892|     34|        return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
  893|  2.29k|    case  ((uint32_t) 2 << 16) | 12:
  ------------------
  |  Branch (893:5): [True: 2.29k, False: 219k]
  ------------------
  894|  2.29k|        return OFPERR_OFPBAC_BAD_TAG;
  895|     34|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 523:
  ------------------
  |  Branch (895:5): [True: 34, False: 221k]
  ------------------
  896|     34|        return OFPERR_OFPBAC_BAD_SET_TYPE;
  897|  3.80k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 524:
  ------------------
  |  Branch (897:5): [True: 3.80k, False: 218k]
  ------------------
  898|  3.80k|        return OFPERR_OFPBAC_BAD_SET_LEN;
  899|    611|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 525:
  ------------------
  |  Branch (899:5): [True: 611, False: 221k]
  ------------------
  900|    611|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
  901|     18|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 256:
  ------------------
  |  Branch (901:5): [True: 18, False: 221k]
  ------------------
  902|     18|        return OFPERR_NXBAC_MUST_BE_ZERO;
  903|     18|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 526:
  ------------------
  |  Branch (903:5): [True: 18, False: 221k]
  ------------------
  904|     18|        return OFPERR_NXBAC_BAD_CONJUNCTION;
  905|     76|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 265:
  ------------------
  |  Branch (905:5): [True: 76, False: 221k]
  ------------------
  906|     76|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
  907|    734|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (907:5): [True: 734, False: 221k]
  ------------------
  908|    734|        return OFPERR_OFPBIC_UNKNOWN_INST;
  909|    422|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (909:5): [True: 422, False: 221k]
  ------------------
  910|    422|        return OFPERR_OFPBIC_UNSUP_INST;
  911|  3.86k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (911:5): [True: 3.86k, False: 217k]
  ------------------
  912|  3.86k|        return OFPERR_OFPBIC_BAD_TABLE_ID;
  913|  4.95k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (913:5): [True: 4.95k, False: 216k]
  ------------------
  914|  4.95k|        return OFPERR_OFPBIC_UNSUP_METADATA;
  915|    616|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (915:5): [True: 616, False: 221k]
  ------------------
  916|    616|        return OFPERR_OFPBIC_UNSUP_METADATA_MASK;
  917|     34|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (917:5): [True: 34, False: 221k]
  ------------------
  918|     34|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
  919|     18|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 256:
  ------------------
  |  Branch (919:5): [True: 18, False: 221k]
  ------------------
  920|     18|        return OFPERR_OFPBIC_DUP_INST;
  921|  1.72k|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (921:5): [True: 1.72k, False: 220k]
  ------------------
  922|  1.72k|        return OFPERR_OFPBMC_BAD_TYPE;
  923|  1.46k|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (923:5): [True: 1.46k, False: 220k]
  ------------------
  924|  1.46k|        return OFPERR_OFPBMC_BAD_LEN;
  925|    172|    case  ((uint32_t) 4 << 16) | 2:
  ------------------
  |  Branch (925:5): [True: 172, False: 221k]
  ------------------
  926|    172|        return OFPERR_OFPBMC_BAD_TAG;
  927|  1.50k|    case  ((uint32_t) 4 << 16) | 3:
  ------------------
  |  Branch (927:5): [True: 1.50k, False: 220k]
  ------------------
  928|  1.50k|        return OFPERR_OFPBMC_BAD_DL_ADDR_MASK;
  929|     68|    case  ((uint32_t) 4 << 16) | 4:
  ------------------
  |  Branch (929:5): [True: 68, False: 221k]
  ------------------
  930|     68|        return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
  931|    330|    case  ((uint32_t) 4 << 16) | 5:
  ------------------
  |  Branch (931:5): [True: 330, False: 221k]
  ------------------
  932|    330|        return OFPERR_OFPBMC_BAD_WILDCARDS;
  933|  1.67k|    case  ((uint32_t) 4 << 16) | 6:
  ------------------
  |  Branch (933:5): [True: 1.67k, False: 220k]
  ------------------
  934|  1.67k|        return OFPERR_OFPBMC_BAD_FIELD;
  935|    637|    case  ((uint32_t) 4 << 16) | 7:
  ------------------
  |  Branch (935:5): [True: 637, False: 221k]
  ------------------
  936|    637|        return OFPERR_OFPBMC_BAD_VALUE;
  937|     66|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 259:
  ------------------
  |  Branch (937:5): [True: 66, False: 221k]
  ------------------
  938|     66|        return OFPERR_OFPBMC_BAD_MASK;
  939|  11.3k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 260:
  ------------------
  |  Branch (939:5): [True: 11.3k, False: 210k]
  ------------------
  940|  11.3k|        return OFPERR_OFPBMC_BAD_PREREQ;
  941|    476|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 261:
  ------------------
  |  Branch (941:5): [True: 476, False: 221k]
  ------------------
  942|    476|        return OFPERR_OFPBMC_DUP_FIELD;
  943|  3.73k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 264:
  ------------------
  |  Branch (943:5): [True: 3.73k, False: 218k]
  ------------------
  944|  3.73k|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
  945|    509|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (945:5): [True: 509, False: 221k]
  ------------------
  946|    509|        return OFPERR_OFPFMFC_UNKNOWN;
  947|  13.9k|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (947:5): [True: 13.9k, False: 207k]
  ------------------
  948|  13.9k|        return OFPERR_OFPFMFC_TABLE_FULL;
  949|     21|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (949:5): [True: 21, False: 221k]
  ------------------
  950|     21|        return OFPERR_OFPFMFC_BAD_TABLE_ID;
  951|     71|    case  ((uint32_t) 5 << 16) | 3:
  ------------------
  |  Branch (951:5): [True: 71, False: 221k]
  ------------------
  952|     71|        return OFPERR_OFPFMFC_OVERLAP;
  953|     78|    case  ((uint32_t) 5 << 16) | 4:
  ------------------
  |  Branch (953:5): [True: 78, False: 221k]
  ------------------
  954|     78|        return OFPERR_OFPFMFC_EPERM;
  955|    179|    case  ((uint32_t) 5 << 16) | 5:
  ------------------
  |  Branch (955:5): [True: 179, False: 221k]
  ------------------
  956|    179|        return OFPERR_OFPFMFC_BAD_TIMEOUT;
  957|    107|    case  ((uint32_t) 5 << 16) | 6:
  ------------------
  |  Branch (957:5): [True: 107, False: 221k]
  ------------------
  958|    107|        return OFPERR_OFPFMFC_BAD_COMMAND;
  959|     18|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 258:
  ------------------
  |  Branch (959:5): [True: 18, False: 221k]
  ------------------
  960|     18|        return OFPERR_OFPFMFC_BAD_FLAGS;
  961|     28|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 256:
  ------------------
  |  Branch (961:5): [True: 28, False: 221k]
  ------------------
  962|     28|        return OFPERR_NXFMFC_HARDWARE;
  963|    480|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 257:
  ------------------
  |  Branch (963:5): [True: 480, False: 221k]
  ------------------
  964|    480|        return OFPERR_NXFMFC_BAD_TABLE_ID;
  965|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 536:
  ------------------
  |  Branch (965:5): [True: 18, False: 221k]
  ------------------
  966|     18|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
  967|    786|    case  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (967:5): [True: 786, False: 221k]
  ------------------
  968|    786|        return OFPERR_OFPGMFC_GROUP_EXISTS;
  969|    612|    case  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (969:5): [True: 612, False: 221k]
  ------------------
  970|    612|        return OFPERR_OFPGMFC_INVALID_GROUP;
  971|  1.25k|    case  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (971:5): [True: 1.25k, False: 220k]
  ------------------
  972|  1.25k|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
  973|     67|    case  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (973:5): [True: 67, False: 221k]
  ------------------
  974|     67|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
  975|  12.1k|    case  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (975:5): [True: 12.1k, False: 209k]
  ------------------
  976|  12.1k|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
  977|  7.21k|    case  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (977:5): [True: 7.21k, False: 214k]
  ------------------
  978|  7.21k|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
  979|     71|    case  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (979:5): [True: 71, False: 221k]
  ------------------
  980|     71|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
  981|     36|    case  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (981:5): [True: 36, False: 221k]
  ------------------
  982|     36|        return OFPERR_OFPGMFC_LOOP;
  983|    860|    case  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (983:5): [True: 860, False: 220k]
  ------------------
  984|    860|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
  985|     66|    case  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (985:5): [True: 66, False: 221k]
  ------------------
  986|     66|        return OFPERR_OFPPMFC_BAD_PORT;
  987|    117|    case  ((uint32_t) 7 << 16) | 1:
  ------------------
  |  Branch (987:5): [True: 117, False: 221k]
  ------------------
  988|    117|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
  989|     49|    case  ((uint32_t) 7 << 16) | 2:
  ------------------
  |  Branch (989:5): [True: 49, False: 221k]
  ------------------
  990|     49|        return OFPERR_OFPPMFC_BAD_CONFIG;
  991|  2.12k|    case  ((uint32_t) 7 << 16) | 3:
  ------------------
  |  Branch (991:5): [True: 2.12k, False: 219k]
  ------------------
  992|  2.12k|        return OFPERR_OFPPMFC_BAD_ADVERTISE;
  993|    105|    case  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (993:5): [True: 105, False: 221k]
  ------------------
  994|    105|        return OFPERR_OFPTMFC_BAD_TABLE;
  995|    794|    case  ((uint32_t) 8 << 16) | 1:
  ------------------
  |  Branch (995:5): [True: 794, False: 221k]
  ------------------
  996|    794|        return OFPERR_OFPTMFC_BAD_CONFIG;
  997|     35|    case  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (997:5): [True: 35, False: 221k]
  ------------------
  998|     35|        return OFPERR_OFPQOFC_BAD_PORT;
  999|    231|    case  ((uint32_t) 9 << 16) | 1:
  ------------------
  |  Branch (999:5): [True: 231, False: 221k]
  ------------------
 1000|    231|        return OFPERR_OFPQOFC_BAD_QUEUE;
 1001|    545|    case  ((uint32_t) 9 << 16) | 2:
  ------------------
  |  Branch (1001:5): [True: 545, False: 221k]
  ------------------
 1002|    545|        return OFPERR_OFPQOFC_EPERM;
 1003|     79|    case  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (1003:5): [True: 79, False: 221k]
  ------------------
 1004|     79|        return OFPERR_OFPSCFC_BAD_FLAGS;
 1005|     70|    case  ((uint32_t) 10 << 16) | 1:
  ------------------
  |  Branch (1005:5): [True: 70, False: 221k]
  ------------------
 1006|     70|        return OFPERR_OFPSCFC_BAD_LEN;
 1007|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 513:
  ------------------
  |  Branch (1007:5): [True: 10, False: 221k]
  ------------------
 1008|     10|        return OFPERR_OFPRRFC_BAD_ROLE;
 1009|  7.20k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 2:
  ------------------
  |  Branch (1009:5): [True: 7.20k, False: 214k]
  ------------------
 1010|  7.20k|        return OFPERR_OFPBPC_BAD_TYPE;
 1011|  9.32k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 3:
  ------------------
  |  Branch (1011:5): [True: 9.32k, False: 212k]
  ------------------
 1012|  9.32k|        return OFPERR_OFPBPC_BAD_LEN;
 1013|     10|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 4:
  ------------------
  |  Branch (1013:5): [True: 10, False: 221k]
  ------------------
 1014|     10|        return OFPERR_OFPBPC_BAD_VALUE;
 1015|     10|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 3:
  ------------------
  |  Branch (1015:5): [True: 10, False: 221k]
  ------------------
 1016|     10|        return OFPERR_OFPBPC_TOO_MANY;
 1017|     18|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 4:
  ------------------
  |  Branch (1017:5): [True: 18, False: 221k]
  ------------------
 1018|     18|        return OFPERR_OFPBPC_DUP_TYPE;
 1019|    715|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 5:
  ------------------
  |  Branch (1019:5): [True: 715, False: 221k]
  ------------------
 1020|    715|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
 1021|  1.27k|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 6:
  ------------------
  |  Branch (1021:5): [True: 1.27k, False: 220k]
  ------------------
 1022|  1.27k|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
 1023|     19|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 7:
  ------------------
  |  Branch (1023:5): [True: 19, False: 221k]
  ------------------
 1024|     19|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
 1025|     18|    case (0x2320ULL << 32) |  ((uint32_t) 14 << 16) | 8:
  ------------------
  |  Branch (1025:5): [True: 18, False: 221k]
  ------------------
 1026|     18|        return OFPERR_OFPBPC_EPERM;
 1027|     10|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 517:
  ------------------
  |  Branch (1027:5): [True: 10, False: 221k]
  ------------------
 1028|     10|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
 1029|     19|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 519:
  ------------------
  |  Branch (1029:5): [True: 19, False: 221k]
  ------------------
 1030|     19|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
 1031|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 518:
  ------------------
  |  Branch (1031:5): [True: 18, False: 221k]
  ------------------
 1032|     18|        return OFPERR_OFPMOFC_BAD_FLAGS;
 1033|     20|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 527:
  ------------------
  |  Branch (1033:5): [True: 20, False: 221k]
  ------------------
 1034|     20|        return OFPERR_NXTTMFC_BAD_COMMAND;
 1035|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 528:
  ------------------
  |  Branch (1035:5): [True: 18, False: 221k]
  ------------------
 1036|     18|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
 1037|  1.72k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 529:
  ------------------
  |  Branch (1037:5): [True: 1.72k, False: 220k]
  ------------------
 1038|  1.72k|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
 1039|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 530:
  ------------------
  |  Branch (1039:5): [True: 18, False: 221k]
  ------------------
 1040|     18|        return OFPERR_NXTTMFC_TABLE_FULL;
 1041|    215|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 531:
  ------------------
  |  Branch (1041:5): [True: 215, False: 221k]
  ------------------
 1042|    215|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
 1043|     35|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 532:
  ------------------
  |  Branch (1043:5): [True: 35, False: 221k]
  ------------------
 1044|     35|        return OFPERR_NXTTMFC_DUP_ENTRY;
 1045|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 537:
  ------------------
  |  Branch (1045:5): [True: 18, False: 221k]
  ------------------
 1046|     18|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
 1047|    381|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 533:
  ------------------
  |  Branch (1047:5): [True: 381, False: 221k]
  ------------------
 1048|    381|        return OFPERR_NXR_NOT_SUPPORTED;
 1049|     18|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 534:
  ------------------
  |  Branch (1049:5): [True: 18, False: 221k]
  ------------------
 1050|     18|        return OFPERR_NXR_STALE;
 1051|  1.94k|    case (0x2320ULL << 32) |  ((uint32_t) 1 << 16) | 535:
  ------------------
  |  Branch (1051:5): [True: 1.94k, False: 219k]
  ------------------
 1052|  1.94k|        return OFPERR_NXST_NOT_CONFIGURED;
 1053|   221k|    }
 1054|       |
 1055|  76.7k|    return 0;
 1056|   221k|}
ofp-errors.c:ofperr_of12_decode:
 1266|   393k|{
 1267|   393k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (1267:13): [True: 148k, False: 245k]
  ------------------
 1268|  4.59k|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (1268:5): [True: 4.59k, False: 389k]
  ------------------
 1269|  4.59k|        return OFPERR_OFPHFC_INCOMPATIBLE;
 1270|    187|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (1270:5): [True: 187, False: 393k]
  ------------------
 1271|    187|        return OFPERR_OFPHFC_EPERM;
 1272|    804|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (1272:5): [True: 804, False: 393k]
  ------------------
 1273|    804|        return OFPERR_OFPBRC_BAD_VERSION;
 1274|  2.23k|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (1274:5): [True: 2.23k, False: 391k]
  ------------------
 1275|  2.23k|        return OFPERR_OFPBRC_BAD_TYPE;
 1276|  4.03k|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (1276:5): [True: 4.03k, False: 389k]
  ------------------
 1277|  4.03k|        return OFPERR_OFPBRC_BAD_STAT;
 1278|  2.15k|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (1278:5): [True: 2.15k, False: 391k]
  ------------------
 1279|  2.15k|        return OFPERR_OFPBRC_BAD_VENDOR;
 1280|  1.28k|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (1280:5): [True: 1.28k, False: 392k]
  ------------------
 1281|  1.28k|        return OFPERR_OFPBRC_BAD_SUBTYPE;
 1282|  1.52k|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (1282:5): [True: 1.52k, False: 392k]
  ------------------
 1283|  1.52k|        return OFPERR_OFPBRC_EPERM;
 1284|  3.35k|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (1284:5): [True: 3.35k, False: 390k]
  ------------------
 1285|  3.35k|        return OFPERR_OFPBRC_BAD_LEN;
 1286|     80|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (1286:5): [True: 80, False: 393k]
  ------------------
 1287|     80|        return OFPERR_OFPBRC_BUFFER_EMPTY;
 1288|  6.26k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (1288:5): [True: 6.26k, False: 387k]
  ------------------
 1289|  6.26k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
 1290|     18|    case  ((uint32_t) 1 << 16) | 9:
  ------------------
  |  Branch (1290:5): [True: 18, False: 393k]
  ------------------
 1291|     18|        return OFPERR_OFPBRC_BAD_TABLE_ID;
 1292|    133|    case  ((uint32_t) 1 << 16) | 10:
  ------------------
  |  Branch (1292:5): [True: 133, False: 393k]
  ------------------
 1293|    133|        return OFPERR_OFPBRC_IS_SECONDARY;
 1294|     70|    case  ((uint32_t) 1 << 16) | 11:
  ------------------
  |  Branch (1294:5): [True: 70, False: 393k]
  ------------------
 1295|     70|        return OFPERR_OFPBRC_BAD_PORT;
 1296|  5.30k|    case  ((uint32_t) 1 << 16) | 12:
  ------------------
  |  Branch (1296:5): [True: 5.30k, False: 388k]
  ------------------
 1297|  5.30k|        return OFPERR_OFPBRC_BAD_PACKET;
 1298|     19|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (1298:5): [True: 19, False: 393k]
  ------------------
 1299|     19|        return OFPERR_NXBRC_NXM_INVALID;
 1300|  1.52k|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (1300:5): [True: 1.52k, False: 392k]
  ------------------
 1301|  1.52k|        return OFPERR_NXBRC_NXM_BAD_TYPE;
 1302|     18|    case (0x2320ULL << 32) |  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (1302:5): [True: 18, False: 393k]
  ------------------
 1303|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1304|    440|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (1304:5): [True: 440, False: 393k]
  ------------------
 1305|    440|        return OFPERR_NXBRC_BAD_REASON;
 1306|  5.52k|    case (0x2320ULL << 32) |  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (1306:5): [True: 5.52k, False: 388k]
  ------------------
 1307|  5.52k|        return OFPERR_NXBRC_FM_BAD_EVENT;
 1308|  4.09k|    case (0x2320ULL << 32) |  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (1308:5): [True: 4.09k, False: 389k]
  ------------------
 1309|  4.09k|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
 1310|  1.47k|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (1310:5): [True: 1.47k, False: 392k]
  ------------------
 1311|  1.47k|        return OFPERR_OFPBAC_BAD_TYPE;
 1312|  2.07k|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (1312:5): [True: 2.07k, False: 391k]
  ------------------
 1313|  2.07k|        return OFPERR_OFPBAC_BAD_LEN;
 1314|  12.5k|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (1314:5): [True: 12.5k, False: 381k]
  ------------------
 1315|  12.5k|        return OFPERR_OFPBAC_BAD_VENDOR;
 1316|  3.19k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (1316:5): [True: 3.19k, False: 390k]
  ------------------
 1317|  3.19k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 1318|     76|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (1318:5): [True: 76, False: 393k]
  ------------------
 1319|     76|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1320|    187|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (1320:5): [True: 187, False: 393k]
  ------------------
 1321|    187|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1322|  1.35k|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (1322:5): [True: 1.35k, False: 392k]
  ------------------
 1323|  1.35k|        return OFPERR_OFPBAC_EPERM;
 1324|     25|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (1324:5): [True: 25, False: 393k]
  ------------------
 1325|     25|        return OFPERR_OFPBAC_TOO_MANY;
 1326|  1.39k|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (1326:5): [True: 1.39k, False: 392k]
  ------------------
 1327|  1.39k|        return OFPERR_OFPBAC_BAD_QUEUE;
 1328|  1.87k|    case  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (1328:5): [True: 1.87k, False: 391k]
  ------------------
 1329|  1.87k|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
 1330|  6.36k|    case  ((uint32_t) 2 << 16) | 10:
  ------------------
  |  Branch (1330:5): [True: 6.36k, False: 387k]
  ------------------
 1331|  6.36k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 1332|     52|    case  ((uint32_t) 2 << 16) | 11:
  ------------------
  |  Branch (1332:5): [True: 52, False: 393k]
  ------------------
 1333|     52|        return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 1334|     94|    case  ((uint32_t) 2 << 16) | 12:
  ------------------
  |  Branch (1334:5): [True: 94, False: 393k]
  ------------------
 1335|     94|        return OFPERR_OFPBAC_BAD_TAG;
 1336|     67|    case  ((uint32_t) 2 << 16) | 13:
  ------------------
  |  Branch (1336:5): [True: 67, False: 393k]
  ------------------
 1337|     67|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 1338|  1.18k|    case  ((uint32_t) 2 << 16) | 14:
  ------------------
  |  Branch (1338:5): [True: 1.18k, False: 392k]
  ------------------
 1339|  1.18k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 1340|     34|    case  ((uint32_t) 2 << 16) | 15:
  ------------------
  |  Branch (1340:5): [True: 34, False: 393k]
  ------------------
 1341|     34|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 1342|     10|    case (0x2320ULL << 32) |  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (1342:5): [True: 10, False: 393k]
  ------------------
 1343|     10|        return OFPERR_NXBAC_MUST_BE_ZERO;
 1344|     18|    case (0x2320ULL << 32) |  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (1344:5): [True: 18, False: 393k]
  ------------------
 1345|     18|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 1346|    487|    case (0x2320ULL << 32) |  ((uint32_t) 42 << 16) | 0:
  ------------------
  |  Branch (1346:5): [True: 487, False: 393k]
  ------------------
 1347|    487|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
 1348|     35|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (1348:5): [True: 35, False: 393k]
  ------------------
 1349|     35|        return OFPERR_OFPBIC_UNKNOWN_INST;
 1350|    231|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (1350:5): [True: 231, False: 393k]
  ------------------
 1351|    231|        return OFPERR_OFPBIC_UNSUP_INST;
 1352|  8.90k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (1352:5): [True: 8.90k, False: 384k]
  ------------------
 1353|  8.90k|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 1354|  3.18k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (1354:5): [True: 3.18k, False: 390k]
  ------------------
 1355|  3.18k|        return OFPERR_OFPBIC_UNSUP_METADATA;
 1356|  1.68k|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (1356:5): [True: 1.68k, False: 392k]
  ------------------
 1357|  1.68k|        return OFPERR_OFPBIC_UNSUP_METADATA_MASK;
 1358|     34|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (1358:5): [True: 34, False: 393k]
  ------------------
 1359|     34|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 1360|    807|    case  ((uint32_t) 3 << 16) | 6:
  ------------------
  |  Branch (1360:5): [True: 807, False: 393k]
  ------------------
 1361|    807|        return OFPERR_OFPBIC_BAD_EXP_TYPE;
 1362|  5.61k|    case  ((uint32_t) 3 << 16) | 7:
  ------------------
  |  Branch (1362:5): [True: 5.61k, False: 388k]
  ------------------
 1363|  5.61k|        return OFPERR_OFPBIC_BAD_LEN;
 1364|  13.4k|    case  ((uint32_t) 3 << 16) | 8:
  ------------------
  |  Branch (1364:5): [True: 13.4k, False: 380k]
  ------------------
 1365|  13.4k|        return OFPERR_OFPBIC_EPERM;
 1366|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2600 << 16) | 0:
  ------------------
  |  Branch (1366:5): [True: 10, False: 393k]
  ------------------
 1367|     10|        return OFPERR_OFPBIC_DUP_INST;
 1368|    117|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (1368:5): [True: 117, False: 393k]
  ------------------
 1369|    117|        return OFPERR_OFPBMC_BAD_TYPE;
 1370|    219|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (1370:5): [True: 219, False: 393k]
  ------------------
 1371|    219|        return OFPERR_OFPBMC_BAD_LEN;
 1372|     83|    case  ((uint32_t) 4 << 16) | 2:
  ------------------
  |  Branch (1372:5): [True: 83, False: 393k]
  ------------------
 1373|     83|        return OFPERR_OFPBMC_BAD_TAG;
 1374|     75|    case  ((uint32_t) 4 << 16) | 3:
  ------------------
  |  Branch (1374:5): [True: 75, False: 393k]
  ------------------
 1375|     75|        return OFPERR_OFPBMC_BAD_DL_ADDR_MASK;
 1376|    750|    case  ((uint32_t) 4 << 16) | 4:
  ------------------
  |  Branch (1376:5): [True: 750, False: 393k]
  ------------------
 1377|    750|        return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
 1378|    155|    case  ((uint32_t) 4 << 16) | 5:
  ------------------
  |  Branch (1378:5): [True: 155, False: 393k]
  ------------------
 1379|    155|        return OFPERR_OFPBMC_BAD_WILDCARDS;
 1380|  1.31k|    case  ((uint32_t) 4 << 16) | 6:
  ------------------
  |  Branch (1380:5): [True: 1.31k, False: 392k]
  ------------------
 1381|  1.31k|        return OFPERR_OFPBMC_BAD_FIELD;
 1382|    139|    case  ((uint32_t) 4 << 16) | 7:
  ------------------
  |  Branch (1382:5): [True: 139, False: 393k]
  ------------------
 1383|    139|        return OFPERR_OFPBMC_BAD_VALUE;
 1384|  4.69k|    case  ((uint32_t) 4 << 16) | 8:
  ------------------
  |  Branch (1384:5): [True: 4.69k, False: 389k]
  ------------------
 1385|  4.69k|        return OFPERR_OFPBMC_BAD_MASK;
 1386|  1.23k|    case  ((uint32_t) 4 << 16) | 9:
  ------------------
  |  Branch (1386:5): [True: 1.23k, False: 392k]
  ------------------
 1387|  1.23k|        return OFPERR_OFPBMC_BAD_PREREQ;
 1388|  14.6k|    case  ((uint32_t) 4 << 16) | 10:
  ------------------
  |  Branch (1388:5): [True: 14.6k, False: 379k]
  ------------------
 1389|  14.6k|        return OFPERR_OFPBMC_DUP_FIELD;
 1390|     66|    case  ((uint32_t) 4 << 16) | 11:
  ------------------
  |  Branch (1390:5): [True: 66, False: 393k]
  ------------------
 1391|     66|        return OFPERR_OFPBMC_EPERM;
 1392|     12|    case (0x2320ULL << 32) |  ((uint32_t) 43 << 16) | 0:
  ------------------
  |  Branch (1392:5): [True: 12, False: 393k]
  ------------------
 1393|     12|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
 1394|  1.64k|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (1394:5): [True: 1.64k, False: 392k]
  ------------------
 1395|  1.64k|        return OFPERR_OFPFMFC_UNKNOWN;
 1396|  1.37k|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (1396:5): [True: 1.37k, False: 392k]
  ------------------
 1397|  1.37k|        return OFPERR_OFPFMFC_TABLE_FULL;
 1398|  3.21k|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (1398:5): [True: 3.21k, False: 390k]
  ------------------
 1399|  3.21k|        return OFPERR_OFPFMFC_BAD_TABLE_ID;
 1400|     66|    case  ((uint32_t) 5 << 16) | 3:
  ------------------
  |  Branch (1400:5): [True: 66, False: 393k]
  ------------------
 1401|     66|        return OFPERR_OFPFMFC_OVERLAP;
 1402|    786|    case  ((uint32_t) 5 << 16) | 4:
  ------------------
  |  Branch (1402:5): [True: 786, False: 393k]
  ------------------
 1403|    786|        return OFPERR_OFPFMFC_EPERM;
 1404|    778|    case  ((uint32_t) 5 << 16) | 5:
  ------------------
  |  Branch (1404:5): [True: 778, False: 393k]
  ------------------
 1405|    778|        return OFPERR_OFPFMFC_BAD_TIMEOUT;
 1406|    395|    case  ((uint32_t) 5 << 16) | 6:
  ------------------
  |  Branch (1406:5): [True: 395, False: 393k]
  ------------------
 1407|    395|        return OFPERR_OFPFMFC_BAD_COMMAND;
 1408|    439|    case  ((uint32_t) 5 << 16) | 7:
  ------------------
  |  Branch (1408:5): [True: 439, False: 393k]
  ------------------
 1409|    439|        return OFPERR_OFPFMFC_BAD_FLAGS;
 1410|    450|    case (0x2320ULL << 32) |  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (1410:5): [True: 450, False: 393k]
  ------------------
 1411|    450|        return OFPERR_NXFMFC_HARDWARE;
 1412|  2.58k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (1412:5): [True: 2.58k, False: 391k]
  ------------------
 1413|  2.58k|        return OFPERR_NXFMFC_BAD_TABLE_ID;
 1414|     68|    case (0x2320ULL << 32) |  ((uint32_t) 37 << 16) | 0:
  ------------------
  |  Branch (1414:5): [True: 68, False: 393k]
  ------------------
 1415|     68|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 1416|  1.69k|    case  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (1416:5): [True: 1.69k, False: 392k]
  ------------------
 1417|  1.69k|        return OFPERR_OFPGMFC_GROUP_EXISTS;
 1418|  2.14k|    case  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (1418:5): [True: 2.14k, False: 391k]
  ------------------
 1419|  2.14k|        return OFPERR_OFPGMFC_INVALID_GROUP;
 1420|    683|    case  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (1420:5): [True: 683, False: 393k]
  ------------------
 1421|    683|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
 1422|    196|    case  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (1422:5): [True: 196, False: 393k]
  ------------------
 1423|    196|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
 1424|  10.9k|    case  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (1424:5): [True: 10.9k, False: 382k]
  ------------------
 1425|  10.9k|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
 1426|  5.85k|    case  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (1426:5): [True: 5.85k, False: 388k]
  ------------------
 1427|  5.85k|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
 1428|    449|    case  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (1428:5): [True: 449, False: 393k]
  ------------------
 1429|    449|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 1430|  1.04k|    case  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (1430:5): [True: 1.04k, False: 392k]
  ------------------
 1431|  1.04k|        return OFPERR_OFPGMFC_LOOP;
 1432|  1.46k|    case  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (1432:5): [True: 1.46k, False: 392k]
  ------------------
 1433|  1.46k|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
 1434|  1.27k|    case  ((uint32_t) 6 << 16) | 9:
  ------------------
  |  Branch (1434:5): [True: 1.27k, False: 392k]
  ------------------
 1435|  1.27k|        return OFPERR_OFPGMFC_CHAINED_GROUP;
 1436|  1.67k|    case  ((uint32_t) 6 << 16) | 10:
  ------------------
  |  Branch (1436:5): [True: 1.67k, False: 392k]
  ------------------
 1437|  1.67k|        return OFPERR_OFPGMFC_BAD_TYPE;
 1438|     34|    case  ((uint32_t) 6 << 16) | 11:
  ------------------
  |  Branch (1438:5): [True: 34, False: 393k]
  ------------------
 1439|     34|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1440|    488|    case  ((uint32_t) 6 << 16) | 12:
  ------------------
  |  Branch (1440:5): [True: 488, False: 393k]
  ------------------
 1441|    488|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1442|  13.7k|    case  ((uint32_t) 6 << 16) | 13:
  ------------------
  |  Branch (1442:5): [True: 13.7k, False: 380k]
  ------------------
 1443|  13.7k|        return OFPERR_OFPGMFC_BAD_WATCH;
 1444|    196|    case  ((uint32_t) 6 << 16) | 14:
  ------------------
  |  Branch (1444:5): [True: 196, False: 393k]
  ------------------
 1445|    196|        return OFPERR_OFPGMFC_EPERM;
 1446|  2.27k|    case  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (1446:5): [True: 2.27k, False: 391k]
  ------------------
 1447|  2.27k|        return OFPERR_OFPPMFC_BAD_PORT;
 1448|     70|    case  ((uint32_t) 7 << 16) | 1:
  ------------------
  |  Branch (1448:5): [True: 70, False: 393k]
  ------------------
 1449|     70|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
 1450|    327|    case  ((uint32_t) 7 << 16) | 2:
  ------------------
  |  Branch (1450:5): [True: 327, False: 393k]
  ------------------
 1451|    327|        return OFPERR_OFPPMFC_BAD_CONFIG;
 1452|     66|    case  ((uint32_t) 7 << 16) | 3:
  ------------------
  |  Branch (1452:5): [True: 66, False: 393k]
  ------------------
 1453|     66|        return OFPERR_OFPPMFC_BAD_ADVERTISE;
 1454|  1.46k|    case  ((uint32_t) 7 << 16) | 4:
  ------------------
  |  Branch (1454:5): [True: 1.46k, False: 392k]
  ------------------
 1455|  1.46k|        return OFPERR_OFPPMFC_EPERM;
 1456|  3.98k|    case  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (1456:5): [True: 3.98k, False: 389k]
  ------------------
 1457|  3.98k|        return OFPERR_OFPTMFC_BAD_TABLE;
 1458|  5.32k|    case  ((uint32_t) 8 << 16) | 1:
  ------------------
  |  Branch (1458:5): [True: 5.32k, False: 388k]
  ------------------
 1459|  5.32k|        return OFPERR_OFPTMFC_BAD_CONFIG;
 1460|    769|    case  ((uint32_t) 8 << 16) | 2:
  ------------------
  |  Branch (1460:5): [True: 769, False: 393k]
  ------------------
 1461|    769|        return OFPERR_OFPTMFC_EPERM;
 1462|  1.52k|    case  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (1462:5): [True: 1.52k, False: 392k]
  ------------------
 1463|  1.52k|        return OFPERR_OFPQOFC_BAD_PORT;
 1464|  2.27k|    case  ((uint32_t) 9 << 16) | 1:
  ------------------
  |  Branch (1464:5): [True: 2.27k, False: 391k]
  ------------------
 1465|  2.27k|        return OFPERR_OFPQOFC_BAD_QUEUE;
 1466|    186|    case  ((uint32_t) 9 << 16) | 2:
  ------------------
  |  Branch (1466:5): [True: 186, False: 393k]
  ------------------
 1467|    186|        return OFPERR_OFPQOFC_EPERM;
 1468|     82|    case  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (1468:5): [True: 82, False: 393k]
  ------------------
 1469|     82|        return OFPERR_OFPSCFC_BAD_FLAGS;
 1470|     35|    case  ((uint32_t) 10 << 16) | 1:
  ------------------
  |  Branch (1470:5): [True: 35, False: 393k]
  ------------------
 1471|     35|        return OFPERR_OFPSCFC_BAD_LEN;
 1472|     66|    case  ((uint32_t) 10 << 16) | 2:
  ------------------
  |  Branch (1472:5): [True: 66, False: 393k]
  ------------------
 1473|     66|        return OFPERR_OFPSCFC_EPERM;
 1474|     66|    case  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (1474:5): [True: 66, False: 393k]
  ------------------
 1475|     66|        return OFPERR_OFPRRFC_STALE;
 1476|     46|    case  ((uint32_t) 11 << 16) | 1:
  ------------------
  |  Branch (1476:5): [True: 46, False: 393k]
  ------------------
 1477|     46|        return OFPERR_OFPRRFC_UNSUP;
 1478|  4.81k|    case  ((uint32_t) 11 << 16) | 2:
  ------------------
  |  Branch (1478:5): [True: 4.81k, False: 389k]
  ------------------
 1479|  4.81k|        return OFPERR_OFPRRFC_BAD_ROLE;
 1480|  7.18k|    case (0x2320ULL << 32) |  ((uint32_t) 25 << 16) | 0:
  ------------------
  |  Branch (1480:5): [True: 7.18k, False: 386k]
  ------------------
 1481|  7.18k|        return OFPERR_OFPBPC_BAD_TYPE;
 1482|  5.28k|    case (0x2320ULL << 32) |  ((uint32_t) 26 << 16) | 0:
  ------------------
  |  Branch (1482:5): [True: 5.28k, False: 388k]
  ------------------
 1483|  5.28k|        return OFPERR_OFPBPC_BAD_LEN;
 1484|     34|    case (0x2320ULL << 32) |  ((uint32_t) 27 << 16) | 0:
  ------------------
  |  Branch (1484:5): [True: 34, False: 393k]
  ------------------
 1485|     34|        return OFPERR_OFPBPC_BAD_VALUE;
 1486|    808|    case (0x2320ULL << 32) |  ((uint32_t) 28 << 16) | 0:
  ------------------
  |  Branch (1486:5): [True: 808, False: 393k]
  ------------------
 1487|    808|        return OFPERR_OFPBPC_TOO_MANY;
 1488|     18|    case (0x2320ULL << 32) |  ((uint32_t) 29 << 16) | 0:
  ------------------
  |  Branch (1488:5): [True: 18, False: 393k]
  ------------------
 1489|     18|        return OFPERR_OFPBPC_DUP_TYPE;
 1490|     18|    case (0x2320ULL << 32) |  ((uint32_t) 30 << 16) | 0:
  ------------------
  |  Branch (1490:5): [True: 18, False: 393k]
  ------------------
 1491|     18|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
 1492|     18|    case (0x2320ULL << 32) |  ((uint32_t) 31 << 16) | 0:
  ------------------
  |  Branch (1492:5): [True: 18, False: 393k]
  ------------------
 1493|     18|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
 1494|     53|    case (0x2320ULL << 32) |  ((uint32_t) 32 << 16) | 0:
  ------------------
  |  Branch (1494:5): [True: 53, False: 393k]
  ------------------
 1495|     53|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
 1496|  3.12k|    case (0x2320ULL << 32) |  ((uint32_t) 33 << 16) | 0:
  ------------------
  |  Branch (1496:5): [True: 3.12k, False: 390k]
  ------------------
 1497|  3.12k|        return OFPERR_OFPBPC_EPERM;
 1498|  2.29k|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (1498:5): [True: 2.29k, False: 391k]
  ------------------
 1499|  2.29k|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
 1500|    131|    case (0x2320ULL << 32) |  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (1500:5): [True: 131, False: 393k]
  ------------------
 1501|    131|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
 1502|    259|    case (0x2320ULL << 32) |  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (1502:5): [True: 259, False: 393k]
  ------------------
 1503|    259|        return OFPERR_OFPMOFC_BAD_FLAGS;
 1504|  8.39k|    case (0x2320ULL << 32) |  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (1504:5): [True: 8.39k, False: 385k]
  ------------------
 1505|  8.39k|        return OFPERR_NXTTMFC_BAD_COMMAND;
 1506|     78|    case (0x2320ULL << 32) |  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (1506:5): [True: 78, False: 393k]
  ------------------
 1507|     78|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
 1508|  2.79k|    case (0x2320ULL << 32) |  ((uint32_t) 18 << 16) | 0:
  ------------------
  |  Branch (1508:5): [True: 2.79k, False: 391k]
  ------------------
 1509|  2.79k|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
 1510|  3.84k|    case (0x2320ULL << 32) |  ((uint32_t) 19 << 16) | 0:
  ------------------
  |  Branch (1510:5): [True: 3.84k, False: 390k]
  ------------------
 1511|  3.84k|        return OFPERR_NXTTMFC_TABLE_FULL;
 1512|     34|    case (0x2320ULL << 32) |  ((uint32_t) 20 << 16) | 0:
  ------------------
  |  Branch (1512:5): [True: 34, False: 393k]
  ------------------
 1513|     34|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
 1514|     60|    case (0x2320ULL << 32) |  ((uint32_t) 21 << 16) | 0:
  ------------------
  |  Branch (1514:5): [True: 60, False: 393k]
  ------------------
 1515|     60|        return OFPERR_NXTTMFC_DUP_ENTRY;
 1516|     19|    case (0x2320ULL << 32) |  ((uint32_t) 38 << 16) | 0:
  ------------------
  |  Branch (1516:5): [True: 19, False: 393k]
  ------------------
 1517|     19|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
 1518|    150|    case (0x2320ULL << 32) |  ((uint32_t) 34 << 16) | 0:
  ------------------
  |  Branch (1518:5): [True: 150, False: 393k]
  ------------------
 1519|    150|        return OFPERR_NXR_NOT_SUPPORTED;
 1520|     20|    case (0x2320ULL << 32) |  ((uint32_t) 35 << 16) | 0:
  ------------------
  |  Branch (1520:5): [True: 20, False: 393k]
  ------------------
 1521|     20|        return OFPERR_NXR_STALE;
 1522|     66|    case (0x2320ULL << 32) |  ((uint32_t) 36 << 16) | 0:
  ------------------
  |  Branch (1522:5): [True: 66, False: 393k]
  ------------------
 1523|     66|        return OFPERR_NXST_NOT_CONFIGURED;
 1524|   393k|    }
 1525|       |
 1526|   148k|    return 0;
 1527|   393k|}
ofp-errors.c:ofperr_of13_decode:
 1737|   236k|{
 1738|   236k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (1738:13): [True: 84.7k, False: 151k]
  ------------------
 1739|  2.91k|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (1739:5): [True: 2.91k, False: 233k]
  ------------------
 1740|  2.91k|        return OFPERR_OFPHFC_INCOMPATIBLE;
 1741|  2.80k|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (1741:5): [True: 2.80k, False: 233k]
  ------------------
 1742|  2.80k|        return OFPERR_OFPHFC_EPERM;
 1743|     69|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (1743:5): [True: 69, False: 236k]
  ------------------
 1744|     69|        return OFPERR_OFPBRC_BAD_VERSION;
 1745|    816|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (1745:5): [True: 816, False: 235k]
  ------------------
 1746|    816|        return OFPERR_OFPBRC_BAD_TYPE;
 1747|    201|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (1747:5): [True: 201, False: 236k]
  ------------------
 1748|    201|        return OFPERR_OFPBRC_BAD_STAT;
 1749|  2.69k|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (1749:5): [True: 2.69k, False: 233k]
  ------------------
 1750|  2.69k|        return OFPERR_OFPBRC_BAD_VENDOR;
 1751|    667|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (1751:5): [True: 667, False: 235k]
  ------------------
 1752|    667|        return OFPERR_OFPBRC_BAD_SUBTYPE;
 1753|  1.48k|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (1753:5): [True: 1.48k, False: 235k]
  ------------------
 1754|  1.48k|        return OFPERR_OFPBRC_EPERM;
 1755|  1.99k|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (1755:5): [True: 1.99k, False: 234k]
  ------------------
 1756|  1.99k|        return OFPERR_OFPBRC_BAD_LEN;
 1757|    174|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (1757:5): [True: 174, False: 236k]
  ------------------
 1758|    174|        return OFPERR_OFPBRC_BUFFER_EMPTY;
 1759|  2.71k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (1759:5): [True: 2.71k, False: 233k]
  ------------------
 1760|  2.71k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
 1761|    245|    case  ((uint32_t) 1 << 16) | 9:
  ------------------
  |  Branch (1761:5): [True: 245, False: 236k]
  ------------------
 1762|    245|        return OFPERR_OFPBRC_BAD_TABLE_ID;
 1763|     93|    case  ((uint32_t) 1 << 16) | 10:
  ------------------
  |  Branch (1763:5): [True: 93, False: 236k]
  ------------------
 1764|     93|        return OFPERR_OFPBRC_IS_SECONDARY;
 1765|     69|    case  ((uint32_t) 1 << 16) | 11:
  ------------------
  |  Branch (1765:5): [True: 69, False: 236k]
  ------------------
 1766|     69|        return OFPERR_OFPBRC_BAD_PORT;
 1767|    334|    case  ((uint32_t) 1 << 16) | 12:
  ------------------
  |  Branch (1767:5): [True: 334, False: 236k]
  ------------------
 1768|    334|        return OFPERR_OFPBRC_BAD_PACKET;
 1769|    736|    case  ((uint32_t) 1 << 16) | 13:
  ------------------
  |  Branch (1769:5): [True: 736, False: 235k]
  ------------------
 1770|    736|        return OFPERR_OFPBRC_MULTIPART_BUFFER_OVERFLOW;
 1771|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2640 << 16) | 0:
  ------------------
  |  Branch (1771:5): [True: 18, False: 236k]
  ------------------
 1772|     18|        return OFPERR_OFPBRC_MULTIPART_REQUEST_TIMEOUT;
 1773|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2641 << 16) | 0:
  ------------------
  |  Branch (1773:5): [True: 10, False: 236k]
  ------------------
 1774|     10|        return OFPERR_OFPBRC_MULTIPART_REPLY_TIMEOUT;
 1775|  1.80k|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (1775:5): [True: 1.80k, False: 234k]
  ------------------
 1776|  1.80k|        return OFPERR_NXBRC_NXM_INVALID;
 1777|    514|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (1777:5): [True: 514, False: 236k]
  ------------------
 1778|    514|        return OFPERR_NXBRC_NXM_BAD_TYPE;
 1779|     18|    case (0x2320ULL << 32) |  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (1779:5): [True: 18, False: 236k]
  ------------------
 1780|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1781|    703|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (1781:5): [True: 703, False: 235k]
  ------------------
 1782|    703|        return OFPERR_NXBRC_BAD_REASON;
 1783|    420|    case (0x2320ULL << 32) |  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (1783:5): [True: 420, False: 236k]
  ------------------
 1784|    420|        return OFPERR_NXBRC_FM_BAD_EVENT;
 1785|  1.49k|    case (0x2320ULL << 32) |  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (1785:5): [True: 1.49k, False: 235k]
  ------------------
 1786|  1.49k|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
 1787|     96|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (1787:5): [True: 96, False: 236k]
  ------------------
 1788|     96|        return OFPERR_OFPBAC_BAD_TYPE;
 1789|  1.05k|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (1789:5): [True: 1.05k, False: 235k]
  ------------------
 1790|  1.05k|        return OFPERR_OFPBAC_BAD_LEN;
 1791|  4.42k|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (1791:5): [True: 4.42k, False: 232k]
  ------------------
 1792|  4.42k|        return OFPERR_OFPBAC_BAD_VENDOR;
 1793|  6.16k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (1793:5): [True: 6.16k, False: 230k]
  ------------------
 1794|  6.16k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 1795|    965|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (1795:5): [True: 965, False: 235k]
  ------------------
 1796|    965|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1797|  4.16k|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (1797:5): [True: 4.16k, False: 232k]
  ------------------
 1798|  4.16k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1799|     55|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (1799:5): [True: 55, False: 236k]
  ------------------
 1800|     55|        return OFPERR_OFPBAC_EPERM;
 1801|    215|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (1801:5): [True: 215, False: 236k]
  ------------------
 1802|    215|        return OFPERR_OFPBAC_TOO_MANY;
 1803|     60|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (1803:5): [True: 60, False: 236k]
  ------------------
 1804|     60|        return OFPERR_OFPBAC_BAD_QUEUE;
 1805|     83|    case  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (1805:5): [True: 83, False: 236k]
  ------------------
 1806|     83|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
 1807|    681|    case  ((uint32_t) 2 << 16) | 10:
  ------------------
  |  Branch (1807:5): [True: 681, False: 235k]
  ------------------
 1808|    681|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 1809|     35|    case  ((uint32_t) 2 << 16) | 11:
  ------------------
  |  Branch (1809:5): [True: 35, False: 236k]
  ------------------
 1810|     35|        return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 1811|    900|    case  ((uint32_t) 2 << 16) | 12:
  ------------------
  |  Branch (1811:5): [True: 900, False: 235k]
  ------------------
 1812|    900|        return OFPERR_OFPBAC_BAD_TAG;
 1813|     94|    case  ((uint32_t) 2 << 16) | 13:
  ------------------
  |  Branch (1813:5): [True: 94, False: 236k]
  ------------------
 1814|     94|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 1815|  7.45k|    case  ((uint32_t) 2 << 16) | 14:
  ------------------
  |  Branch (1815:5): [True: 7.45k, False: 229k]
  ------------------
 1816|  7.45k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 1817|     18|    case  ((uint32_t) 2 << 16) | 15:
  ------------------
  |  Branch (1817:5): [True: 18, False: 236k]
  ------------------
 1818|     18|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 1819|     34|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4250 << 16) | 0:
  ------------------
  |  Branch (1819:5): [True: 34, False: 236k]
  ------------------
 1820|     34|        return OFPERR_OFPBAC_BAD_SET_MASK;
 1821|  1.04k|    case (0x2320ULL << 32) |  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (1821:5): [True: 1.04k, False: 235k]
  ------------------
 1822|  1.04k|        return OFPERR_NXBAC_MUST_BE_ZERO;
 1823|    422|    case (0x2320ULL << 32) |  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (1823:5): [True: 422, False: 236k]
  ------------------
 1824|    422|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 1825|     28|    case (0x2320ULL << 32) |  ((uint32_t) 39 << 16) | 0:
  ------------------
  |  Branch (1825:5): [True: 28, False: 236k]
  ------------------
 1826|     28|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 1827|    201|    case (0x2320ULL << 32) |  ((uint32_t) 40 << 16) | 0:
  ------------------
  |  Branch (1827:5): [True: 201, False: 236k]
  ------------------
 1828|    201|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 1829|  1.22k|    case (0x2320ULL << 32) |  ((uint32_t) 41 << 16) | 0:
  ------------------
  |  Branch (1829:5): [True: 1.22k, False: 235k]
  ------------------
 1830|  1.22k|        return OFPERR_NXBAC_BAD_ED_PROP;
 1831|     40|    case (0x2320ULL << 32) |  ((uint32_t) 42 << 16) | 0:
  ------------------
  |  Branch (1831:5): [True: 40, False: 236k]
  ------------------
 1832|     40|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
 1833|     67|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (1833:5): [True: 67, False: 236k]
  ------------------
 1834|     67|        return OFPERR_OFPBIC_UNKNOWN_INST;
 1835|     82|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (1835:5): [True: 82, False: 236k]
  ------------------
 1836|     82|        return OFPERR_OFPBIC_UNSUP_INST;
 1837|  4.45k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (1837:5): [True: 4.45k, False: 232k]
  ------------------
 1838|  4.45k|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 1839|  1.56k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (1839:5): [True: 1.56k, False: 234k]
  ------------------
 1840|  1.56k|        return OFPERR_OFPBIC_UNSUP_METADATA;
 1841|  1.06k|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (1841:5): [True: 1.06k, False: 235k]
  ------------------
 1842|  1.06k|        return OFPERR_OFPBIC_UNSUP_METADATA_MASK;
 1843|     73|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (1843:5): [True: 73, False: 236k]
  ------------------
 1844|     73|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 1845|  2.06k|    case  ((uint32_t) 3 << 16) | 6:
  ------------------
  |  Branch (1845:5): [True: 2.06k, False: 234k]
  ------------------
 1846|  2.06k|        return OFPERR_OFPBIC_BAD_EXP_TYPE;
 1847|     86|    case  ((uint32_t) 3 << 16) | 7:
  ------------------
  |  Branch (1847:5): [True: 86, False: 236k]
  ------------------
 1848|     86|        return OFPERR_OFPBIC_BAD_LEN;
 1849|    659|    case  ((uint32_t) 3 << 16) | 8:
  ------------------
  |  Branch (1849:5): [True: 659, False: 235k]
  ------------------
 1850|    659|        return OFPERR_OFPBIC_EPERM;
 1851|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2600 << 16) | 0:
  ------------------
  |  Branch (1851:5): [True: 10, False: 236k]
  ------------------
 1852|     10|        return OFPERR_OFPBIC_DUP_INST;
 1853|    149|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (1853:5): [True: 149, False: 236k]
  ------------------
 1854|    149|        return OFPERR_OFPBMC_BAD_TYPE;
 1855|     69|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (1855:5): [True: 69, False: 236k]
  ------------------
 1856|     69|        return OFPERR_OFPBMC_BAD_LEN;
 1857|  1.54k|    case  ((uint32_t) 4 << 16) | 2:
  ------------------
  |  Branch (1857:5): [True: 1.54k, False: 234k]
  ------------------
 1858|  1.54k|        return OFPERR_OFPBMC_BAD_TAG;
 1859|     92|    case  ((uint32_t) 4 << 16) | 3:
  ------------------
  |  Branch (1859:5): [True: 92, False: 236k]
  ------------------
 1860|     92|        return OFPERR_OFPBMC_BAD_DL_ADDR_MASK;
 1861|    727|    case  ((uint32_t) 4 << 16) | 4:
  ------------------
  |  Branch (1861:5): [True: 727, False: 235k]
  ------------------
 1862|    727|        return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
 1863|     72|    case  ((uint32_t) 4 << 16) | 5:
  ------------------
  |  Branch (1863:5): [True: 72, False: 236k]
  ------------------
 1864|     72|        return OFPERR_OFPBMC_BAD_WILDCARDS;
 1865|     68|    case  ((uint32_t) 4 << 16) | 6:
  ------------------
  |  Branch (1865:5): [True: 68, False: 236k]
  ------------------
 1866|     68|        return OFPERR_OFPBMC_BAD_FIELD;
 1867|    594|    case  ((uint32_t) 4 << 16) | 7:
  ------------------
  |  Branch (1867:5): [True: 594, False: 235k]
  ------------------
 1868|    594|        return OFPERR_OFPBMC_BAD_VALUE;
 1869|  1.03k|    case  ((uint32_t) 4 << 16) | 8:
  ------------------
  |  Branch (1869:5): [True: 1.03k, False: 235k]
  ------------------
 1870|  1.03k|        return OFPERR_OFPBMC_BAD_MASK;
 1871|     92|    case  ((uint32_t) 4 << 16) | 9:
  ------------------
  |  Branch (1871:5): [True: 92, False: 236k]
  ------------------
 1872|     92|        return OFPERR_OFPBMC_BAD_PREREQ;
 1873|    153|    case  ((uint32_t) 4 << 16) | 10:
  ------------------
  |  Branch (1873:5): [True: 153, False: 236k]
  ------------------
 1874|    153|        return OFPERR_OFPBMC_DUP_FIELD;
 1875|     34|    case  ((uint32_t) 4 << 16) | 11:
  ------------------
  |  Branch (1875:5): [True: 34, False: 236k]
  ------------------
 1876|     34|        return OFPERR_OFPBMC_EPERM;
 1877|     19|    case (0x2320ULL << 32) |  ((uint32_t) 43 << 16) | 0:
  ------------------
  |  Branch (1877:5): [True: 19, False: 236k]
  ------------------
 1878|     19|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
 1879|     66|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (1879:5): [True: 66, False: 236k]
  ------------------
 1880|     66|        return OFPERR_OFPFMFC_UNKNOWN;
 1881|    329|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (1881:5): [True: 329, False: 236k]
  ------------------
 1882|    329|        return OFPERR_OFPFMFC_TABLE_FULL;
 1883|     69|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (1883:5): [True: 69, False: 236k]
  ------------------
 1884|     69|        return OFPERR_OFPFMFC_BAD_TABLE_ID;
 1885|     35|    case  ((uint32_t) 5 << 16) | 3:
  ------------------
  |  Branch (1885:5): [True: 35, False: 236k]
  ------------------
 1886|     35|        return OFPERR_OFPFMFC_OVERLAP;
 1887|     39|    case  ((uint32_t) 5 << 16) | 4:
  ------------------
  |  Branch (1887:5): [True: 39, False: 236k]
  ------------------
 1888|     39|        return OFPERR_OFPFMFC_EPERM;
 1889|  1.07k|    case  ((uint32_t) 5 << 16) | 5:
  ------------------
  |  Branch (1889:5): [True: 1.07k, False: 235k]
  ------------------
 1890|  1.07k|        return OFPERR_OFPFMFC_BAD_TIMEOUT;
 1891|  8.82k|    case  ((uint32_t) 5 << 16) | 6:
  ------------------
  |  Branch (1891:5): [True: 8.82k, False: 227k]
  ------------------
 1892|  8.82k|        return OFPERR_OFPFMFC_BAD_COMMAND;
 1893|    104|    case  ((uint32_t) 5 << 16) | 7:
  ------------------
  |  Branch (1893:5): [True: 104, False: 236k]
  ------------------
 1894|    104|        return OFPERR_OFPFMFC_BAD_FLAGS;
 1895|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2360 << 16) | 0:
  ------------------
  |  Branch (1895:5): [True: 18, False: 236k]
  ------------------
 1896|     18|        return OFPERR_OFPFMFC_BAD_PRIORITY;
 1897|    508|    case (0x2320ULL << 32) |  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (1897:5): [True: 508, False: 236k]
  ------------------
 1898|    508|        return OFPERR_NXFMFC_HARDWARE;
 1899|  3.56k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (1899:5): [True: 3.56k, False: 232k]
  ------------------
 1900|  3.56k|        return OFPERR_NXFMFC_BAD_TABLE_ID;
 1901|  1.16k|    case (0x2320ULL << 32) |  ((uint32_t) 37 << 16) | 0:
  ------------------
  |  Branch (1901:5): [True: 1.16k, False: 235k]
  ------------------
 1902|  1.16k|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 1903|  5.06k|    case  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (1903:5): [True: 5.06k, False: 231k]
  ------------------
 1904|  5.06k|        return OFPERR_OFPGMFC_GROUP_EXISTS;
 1905|  4.22k|    case  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (1905:5): [True: 4.22k, False: 232k]
  ------------------
 1906|  4.22k|        return OFPERR_OFPGMFC_INVALID_GROUP;
 1907|  6.21k|    case  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (1907:5): [True: 6.21k, False: 230k]
  ------------------
 1908|  6.21k|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
 1909|    289|    case  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (1909:5): [True: 289, False: 236k]
  ------------------
 1910|    289|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
 1911|    696|    case  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (1911:5): [True: 696, False: 235k]
  ------------------
 1912|    696|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
 1913|  7.70k|    case  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (1913:5): [True: 7.70k, False: 228k]
  ------------------
 1914|  7.70k|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
 1915|     35|    case  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (1915:5): [True: 35, False: 236k]
  ------------------
 1916|     35|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 1917|  2.18k|    case  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (1917:5): [True: 2.18k, False: 234k]
  ------------------
 1918|  2.18k|        return OFPERR_OFPGMFC_LOOP;
 1919|  3.03k|    case  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (1919:5): [True: 3.03k, False: 233k]
  ------------------
 1920|  3.03k|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
 1921|  7.51k|    case  ((uint32_t) 6 << 16) | 9:
  ------------------
  |  Branch (1921:5): [True: 7.51k, False: 229k]
  ------------------
 1922|  7.51k|        return OFPERR_OFPGMFC_CHAINED_GROUP;
 1923|     21|    case  ((uint32_t) 6 << 16) | 10:
  ------------------
  |  Branch (1923:5): [True: 21, False: 236k]
  ------------------
 1924|     21|        return OFPERR_OFPGMFC_BAD_TYPE;
 1925|  1.07k|    case  ((uint32_t) 6 << 16) | 11:
  ------------------
  |  Branch (1925:5): [True: 1.07k, False: 235k]
  ------------------
 1926|  1.07k|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1927|     86|    case  ((uint32_t) 6 << 16) | 12:
  ------------------
  |  Branch (1927:5): [True: 86, False: 236k]
  ------------------
 1928|     86|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1929|    730|    case  ((uint32_t) 6 << 16) | 13:
  ------------------
  |  Branch (1929:5): [True: 730, False: 235k]
  ------------------
 1930|    730|        return OFPERR_OFPGMFC_BAD_WATCH;
 1931|  3.54k|    case  ((uint32_t) 6 << 16) | 14:
  ------------------
  |  Branch (1931:5): [True: 3.54k, False: 232k]
  ------------------
 1932|  3.54k|        return OFPERR_OFPGMFC_EPERM;
 1933|    613|    case  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (1933:5): [True: 613, False: 235k]
  ------------------
 1934|    613|        return OFPERR_OFPPMFC_BAD_PORT;
 1935|    665|    case  ((uint32_t) 7 << 16) | 1:
  ------------------
  |  Branch (1935:5): [True: 665, False: 235k]
  ------------------
 1936|    665|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
 1937|  3.35k|    case  ((uint32_t) 7 << 16) | 2:
  ------------------
  |  Branch (1937:5): [True: 3.35k, False: 233k]
  ------------------
 1938|  3.35k|        return OFPERR_OFPPMFC_BAD_CONFIG;
 1939|    137|    case  ((uint32_t) 7 << 16) | 3:
  ------------------
  |  Branch (1939:5): [True: 137, False: 236k]
  ------------------
 1940|    137|        return OFPERR_OFPPMFC_BAD_ADVERTISE;
 1941|  4.50k|    case  ((uint32_t) 7 << 16) | 4:
  ------------------
  |  Branch (1941:5): [True: 4.50k, False: 232k]
  ------------------
 1942|  4.50k|        return OFPERR_OFPPMFC_EPERM;
 1943|    112|    case  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (1943:5): [True: 112, False: 236k]
  ------------------
 1944|    112|        return OFPERR_OFPTMFC_BAD_TABLE;
 1945|    251|    case  ((uint32_t) 8 << 16) | 1:
  ------------------
  |  Branch (1945:5): [True: 251, False: 236k]
  ------------------
 1946|    251|        return OFPERR_OFPTMFC_BAD_CONFIG;
 1947|     28|    case  ((uint32_t) 8 << 16) | 2:
  ------------------
  |  Branch (1947:5): [True: 28, False: 236k]
  ------------------
 1948|     28|        return OFPERR_OFPTMFC_EPERM;
 1949|    173|    case  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (1949:5): [True: 173, False: 236k]
  ------------------
 1950|    173|        return OFPERR_OFPQOFC_BAD_PORT;
 1951|     34|    case  ((uint32_t) 9 << 16) | 1:
  ------------------
  |  Branch (1951:5): [True: 34, False: 236k]
  ------------------
 1952|     34|        return OFPERR_OFPQOFC_BAD_QUEUE;
 1953|     35|    case  ((uint32_t) 9 << 16) | 2:
  ------------------
  |  Branch (1953:5): [True: 35, False: 236k]
  ------------------
 1954|     35|        return OFPERR_OFPQOFC_EPERM;
 1955|     67|    case  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (1955:5): [True: 67, False: 236k]
  ------------------
 1956|     67|        return OFPERR_OFPSCFC_BAD_FLAGS;
 1957|    276|    case  ((uint32_t) 10 << 16) | 1:
  ------------------
  |  Branch (1957:5): [True: 276, False: 236k]
  ------------------
 1958|    276|        return OFPERR_OFPSCFC_BAD_LEN;
 1959|    205|    case  ((uint32_t) 10 << 16) | 2:
  ------------------
  |  Branch (1959:5): [True: 205, False: 236k]
  ------------------
 1960|    205|        return OFPERR_OFPSCFC_EPERM;
 1961|     70|    case  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (1961:5): [True: 70, False: 236k]
  ------------------
 1962|     70|        return OFPERR_OFPRRFC_STALE;
 1963|    343|    case  ((uint32_t) 11 << 16) | 1:
  ------------------
  |  Branch (1963:5): [True: 343, False: 236k]
  ------------------
 1964|    343|        return OFPERR_OFPRRFC_UNSUP;
 1965|    799|    case  ((uint32_t) 11 << 16) | 2:
  ------------------
  |  Branch (1965:5): [True: 799, False: 235k]
  ------------------
 1966|    799|        return OFPERR_OFPRRFC_BAD_ROLE;
 1967|    211|    case  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (1967:5): [True: 211, False: 236k]
  ------------------
 1968|    211|        return OFPERR_OFPMMFC_UNKNOWN;
 1969|    631|    case  ((uint32_t) 12 << 16) | 1:
  ------------------
  |  Branch (1969:5): [True: 631, False: 235k]
  ------------------
 1970|    631|        return OFPERR_OFPMMFC_METER_EXISTS;
 1971|    403|    case  ((uint32_t) 12 << 16) | 2:
  ------------------
  |  Branch (1971:5): [True: 403, False: 236k]
  ------------------
 1972|    403|        return OFPERR_OFPMMFC_INVALID_METER;
 1973|     63|    case  ((uint32_t) 12 << 16) | 3:
  ------------------
  |  Branch (1973:5): [True: 63, False: 236k]
  ------------------
 1974|     63|        return OFPERR_OFPMMFC_UNKNOWN_METER;
 1975|     69|    case  ((uint32_t) 12 << 16) | 4:
  ------------------
  |  Branch (1975:5): [True: 69, False: 236k]
  ------------------
 1976|     69|        return OFPERR_OFPMMFC_BAD_COMMAND;
 1977|     22|    case  ((uint32_t) 12 << 16) | 5:
  ------------------
  |  Branch (1977:5): [True: 22, False: 236k]
  ------------------
 1978|     22|        return OFPERR_OFPMMFC_BAD_FLAGS;
 1979|     35|    case  ((uint32_t) 12 << 16) | 6:
  ------------------
  |  Branch (1979:5): [True: 35, False: 236k]
  ------------------
 1980|     35|        return OFPERR_OFPMMFC_BAD_RATE;
 1981|    136|    case  ((uint32_t) 12 << 16) | 7:
  ------------------
  |  Branch (1981:5): [True: 136, False: 236k]
  ------------------
 1982|    136|        return OFPERR_OFPMMFC_BAD_BURST;
 1983|    969|    case  ((uint32_t) 12 << 16) | 8:
  ------------------
  |  Branch (1983:5): [True: 969, False: 235k]
  ------------------
 1984|    969|        return OFPERR_OFPMMFC_BAD_BAND;
 1985|     66|    case  ((uint32_t) 12 << 16) | 9:
  ------------------
  |  Branch (1985:5): [True: 66, False: 236k]
  ------------------
 1986|     66|        return OFPERR_OFPMMFC_BAD_BAND_VALUE;
 1987|    125|    case  ((uint32_t) 12 << 16) | 10:
  ------------------
  |  Branch (1987:5): [True: 125, False: 236k]
  ------------------
 1988|    125|        return OFPERR_OFPMMFC_OUT_OF_METERS;
 1989|    574|    case  ((uint32_t) 12 << 16) | 11:
  ------------------
  |  Branch (1989:5): [True: 574, False: 235k]
  ------------------
 1990|    574|        return OFPERR_OFPMMFC_OUT_OF_BANDS;
 1991|    151|    case  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (1991:5): [True: 151, False: 236k]
  ------------------
 1992|    151|        return OFPERR_OFPTFFC_BAD_TABLE;
 1993|     83|    case  ((uint32_t) 13 << 16) | 1:
  ------------------
  |  Branch (1993:5): [True: 83, False: 236k]
  ------------------
 1994|     83|        return OFPERR_OFPTFFC_BAD_METADATA;
 1995|    194|    case  ((uint32_t) 13 << 16) | 5:
  ------------------
  |  Branch (1995:5): [True: 194, False: 236k]
  ------------------
 1996|    194|        return OFPERR_OFPTFFC_EPERM;
 1997|     10|    case (0x2320ULL << 32) |  ((uint32_t) 44 << 16) | 0:
  ------------------
  |  Branch (1997:5): [True: 10, False: 236k]
  ------------------
 1998|     10|        return OFPERR_NXTFFC_DUP_TABLE;
 1999|    107|    case  ((uint32_t) 13 << 16) | 2:
  ------------------
  |  Branch (1999:5): [True: 107, False: 236k]
  ------------------
 2000|    107|        return OFPERR_OFPBPC_BAD_TYPE;
 2001|    436|    case  ((uint32_t) 13 << 16) | 3:
  ------------------
  |  Branch (2001:5): [True: 436, False: 236k]
  ------------------
 2002|    436|        return OFPERR_OFPBPC_BAD_LEN;
 2003|     36|    case  ((uint32_t) 13 << 16) | 4:
  ------------------
  |  Branch (2003:5): [True: 36, False: 236k]
  ------------------
 2004|     36|        return OFPERR_OFPBPC_BAD_VALUE;
 2005|     97|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4443 << 16) | 0:
  ------------------
  |  Branch (2005:5): [True: 97, False: 236k]
  ------------------
 2006|     97|        return OFPERR_OFPBPC_TOO_MANY;
 2007|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4444 << 16) | 0:
  ------------------
  |  Branch (2007:5): [True: 10, False: 236k]
  ------------------
 2008|     10|        return OFPERR_OFPBPC_DUP_TYPE;
 2009|     35|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4445 << 16) | 0:
  ------------------
  |  Branch (2009:5): [True: 35, False: 236k]
  ------------------
 2010|     35|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
 2011|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4446 << 16) | 0:
  ------------------
  |  Branch (2011:5): [True: 18, False: 236k]
  ------------------
 2012|     18|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
 2013|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4447 << 16) | 0:
  ------------------
  |  Branch (2013:5): [True: 18, False: 236k]
  ------------------
 2014|     18|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
 2015|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4448 << 16) | 0:
  ------------------
  |  Branch (2015:5): [True: 10, False: 236k]
  ------------------
 2016|     10|        return OFPERR_OFPBPC_EPERM;
 2017|     34|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2370 << 16) | 0:
  ------------------
  |  Branch (2017:5): [True: 34, False: 236k]
  ------------------
 2018|     34|        return OFPERR_OFPACFC_INVALID;
 2019|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2371 << 16) | 0:
  ------------------
  |  Branch (2019:5): [True: 18, False: 236k]
  ------------------
 2020|     18|        return OFPERR_OFPACFC_UNSUPPORTED;
 2021|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2372 << 16) | 0:
  ------------------
  |  Branch (2021:5): [True: 10, False: 236k]
  ------------------
 2022|     10|        return OFPERR_OFPACFC_EPERM;
 2023|     11|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2300 << 16) | 0:
  ------------------
  |  Branch (2023:5): [True: 11, False: 236k]
  ------------------
 2024|     11|        return OFPERR_OFPBFC_UNKNOWN;
 2025|  1.15k|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2301 << 16) | 0:
  ------------------
  |  Branch (2025:5): [True: 1.15k, False: 235k]
  ------------------
 2026|  1.15k|        return OFPERR_OFPBFC_EPERM;
 2027|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2302 << 16) | 0:
  ------------------
  |  Branch (2027:5): [True: 10, False: 236k]
  ------------------
 2028|     10|        return OFPERR_OFPBFC_BAD_ID;
 2029|     11|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2303 << 16) | 0:
  ------------------
  |  Branch (2029:5): [True: 11, False: 236k]
  ------------------
 2030|     11|        return OFPERR_OFPBFC_BUNDLE_EXIST;
 2031|    902|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2304 << 16) | 0:
  ------------------
  |  Branch (2031:5): [True: 902, False: 235k]
  ------------------
 2032|    902|        return OFPERR_OFPBFC_BUNDLE_CLOSED;
 2033|    474|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2305 << 16) | 0:
  ------------------
  |  Branch (2033:5): [True: 474, False: 236k]
  ------------------
 2034|    474|        return OFPERR_OFPBFC_OUT_OF_BUNDLES;
 2035|  1.15k|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2306 << 16) | 0:
  ------------------
  |  Branch (2035:5): [True: 1.15k, False: 235k]
  ------------------
 2036|  1.15k|        return OFPERR_OFPBFC_BAD_TYPE;
 2037|    704|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2307 << 16) | 0:
  ------------------
  |  Branch (2037:5): [True: 704, False: 235k]
  ------------------
 2038|    704|        return OFPERR_OFPBFC_BAD_FLAGS;
 2039|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2308 << 16) | 0:
  ------------------
  |  Branch (2039:5): [True: 18, False: 236k]
  ------------------
 2040|     18|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 2041|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2309 << 16) | 0:
  ------------------
  |  Branch (2041:5): [True: 10, False: 236k]
  ------------------
 2042|     10|        return OFPERR_OFPBFC_MSG_BAD_XID;
 2043|     10|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2310 << 16) | 0:
  ------------------
  |  Branch (2043:5): [True: 10, False: 236k]
  ------------------
 2044|     10|        return OFPERR_OFPBFC_MSG_UNSUP;
 2045|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2311 << 16) | 0:
  ------------------
  |  Branch (2045:5): [True: 18, False: 236k]
  ------------------
 2046|     18|        return OFPERR_OFPBFC_MSG_CONFLICT;
 2047|     19|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2312 << 16) | 0:
  ------------------
  |  Branch (2047:5): [True: 19, False: 236k]
  ------------------
 2048|     19|        return OFPERR_OFPBFC_MSG_TOO_MANY;
 2049|     18|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2313 << 16) | 0:
  ------------------
  |  Branch (2049:5): [True: 18, False: 236k]
  ------------------
 2050|     18|        return OFPERR_OFPBFC_MSG_FAILED;
 2051|    109|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2314 << 16) | 0:
  ------------------
  |  Branch (2051:5): [True: 109, False: 236k]
  ------------------
 2052|    109|        return OFPERR_OFPBFC_TIMEOUT;
 2053|     42|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 2315 << 16) | 0:
  ------------------
  |  Branch (2053:5): [True: 42, False: 236k]
  ------------------
 2054|     42|        return OFPERR_OFPBFC_BUNDLE_IN_PROGRESS;
 2055|     35|    case (0x2320ULL << 32) |  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (2055:5): [True: 35, False: 236k]
  ------------------
 2056|     35|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
 2057|  1.18k|    case (0x2320ULL << 32) |  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (2057:5): [True: 1.18k, False: 235k]
  ------------------
 2058|  1.18k|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
 2059|  1.04k|    case (0x2320ULL << 32) |  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (2059:5): [True: 1.04k, False: 235k]
  ------------------
 2060|  1.04k|        return OFPERR_OFPMOFC_BAD_FLAGS;
 2061|     58|    case (0x2320ULL << 32) |  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (2061:5): [True: 58, False: 236k]
  ------------------
 2062|     58|        return OFPERR_NXTTMFC_BAD_COMMAND;
 2063|     18|    case (0x2320ULL << 32) |  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (2063:5): [True: 18, False: 236k]
  ------------------
 2064|     18|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
 2065|     66|    case (0x2320ULL << 32) |  ((uint32_t) 18 << 16) | 0:
  ------------------
  |  Branch (2065:5): [True: 66, False: 236k]
  ------------------
 2066|     66|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
 2067|    228|    case (0x2320ULL << 32) |  ((uint32_t) 19 << 16) | 0:
  ------------------
  |  Branch (2067:5): [True: 228, False: 236k]
  ------------------
 2068|    228|        return OFPERR_NXTTMFC_TABLE_FULL;
 2069|     76|    case (0x2320ULL << 32) |  ((uint32_t) 20 << 16) | 0:
  ------------------
  |  Branch (2069:5): [True: 76, False: 236k]
  ------------------
 2070|     76|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
 2071|     34|    case (0x2320ULL << 32) |  ((uint32_t) 21 << 16) | 0:
  ------------------
  |  Branch (2071:5): [True: 34, False: 236k]
  ------------------
 2072|     34|        return OFPERR_NXTTMFC_DUP_ENTRY;
 2073|  1.13k|    case (0x2320ULL << 32) |  ((uint32_t) 38 << 16) | 0:
  ------------------
  |  Branch (2073:5): [True: 1.13k, False: 235k]
  ------------------
 2074|  1.13k|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
 2075|    662|    case (0x2320ULL << 32) |  ((uint32_t) 34 << 16) | 0:
  ------------------
  |  Branch (2075:5): [True: 662, False: 235k]
  ------------------
 2076|    662|        return OFPERR_NXR_NOT_SUPPORTED;
 2077|    327|    case (0x2320ULL << 32) |  ((uint32_t) 35 << 16) | 0:
  ------------------
  |  Branch (2077:5): [True: 327, False: 236k]
  ------------------
 2078|    327|        return OFPERR_NXR_STALE;
 2079|    584|    case (0x2320ULL << 32) |  ((uint32_t) 36 << 16) | 0:
  ------------------
  |  Branch (2079:5): [True: 584, False: 235k]
  ------------------
 2080|    584|        return OFPERR_NXST_NOT_CONFIGURED;
 2081|   236k|    }
 2082|       |
 2083|  84.7k|    return 0;
 2084|   236k|}
ofp-errors.c:ofperr_of14_decode:
 2294|   380k|{
 2295|   380k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (2295:13): [True: 114k, False: 265k]
  ------------------
 2296|  5.28k|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (2296:5): [True: 5.28k, False: 375k]
  ------------------
 2297|  5.28k|        return OFPERR_OFPHFC_INCOMPATIBLE;
 2298|  3.60k|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (2298:5): [True: 3.60k, False: 377k]
  ------------------
 2299|  3.60k|        return OFPERR_OFPHFC_EPERM;
 2300|    888|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (2300:5): [True: 888, False: 379k]
  ------------------
 2301|    888|        return OFPERR_OFPBRC_BAD_VERSION;
 2302|     72|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (2302:5): [True: 72, False: 380k]
  ------------------
 2303|     72|        return OFPERR_OFPBRC_BAD_TYPE;
 2304|  1.63k|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (2304:5): [True: 1.63k, False: 379k]
  ------------------
 2305|  1.63k|        return OFPERR_OFPBRC_BAD_STAT;
 2306|    386|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (2306:5): [True: 386, False: 380k]
  ------------------
 2307|    386|        return OFPERR_OFPBRC_BAD_VENDOR;
 2308|  2.93k|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (2308:5): [True: 2.93k, False: 377k]
  ------------------
 2309|  2.93k|        return OFPERR_OFPBRC_BAD_SUBTYPE;
 2310|  1.46k|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (2310:5): [True: 1.46k, False: 379k]
  ------------------
 2311|  1.46k|        return OFPERR_OFPBRC_EPERM;
 2312|    524|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (2312:5): [True: 524, False: 380k]
  ------------------
 2313|    524|        return OFPERR_OFPBRC_BAD_LEN;
 2314|    483|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (2314:5): [True: 483, False: 380k]
  ------------------
 2315|    483|        return OFPERR_OFPBRC_BUFFER_EMPTY;
 2316|  8.71k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (2316:5): [True: 8.71k, False: 371k]
  ------------------
 2317|  8.71k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
 2318|    758|    case  ((uint32_t) 1 << 16) | 9:
  ------------------
  |  Branch (2318:5): [True: 758, False: 379k]
  ------------------
 2319|    758|        return OFPERR_OFPBRC_BAD_TABLE_ID;
 2320|  1.59k|    case  ((uint32_t) 1 << 16) | 10:
  ------------------
  |  Branch (2320:5): [True: 1.59k, False: 379k]
  ------------------
 2321|  1.59k|        return OFPERR_OFPBRC_IS_SECONDARY;
 2322|     37|    case  ((uint32_t) 1 << 16) | 11:
  ------------------
  |  Branch (2322:5): [True: 37, False: 380k]
  ------------------
 2323|     37|        return OFPERR_OFPBRC_BAD_PORT;
 2324|  1.61k|    case  ((uint32_t) 1 << 16) | 12:
  ------------------
  |  Branch (2324:5): [True: 1.61k, False: 379k]
  ------------------
 2325|  1.61k|        return OFPERR_OFPBRC_BAD_PACKET;
 2326|     67|    case  ((uint32_t) 1 << 16) | 13:
  ------------------
  |  Branch (2326:5): [True: 67, False: 380k]
  ------------------
 2327|     67|        return OFPERR_OFPBRC_MULTIPART_BUFFER_OVERFLOW;
 2328|  2.69k|    case  ((uint32_t) 1 << 16) | 14:
  ------------------
  |  Branch (2328:5): [True: 2.69k, False: 377k]
  ------------------
 2329|  2.69k|        return OFPERR_OFPBRC_MULTIPART_REQUEST_TIMEOUT;
 2330|    395|    case  ((uint32_t) 1 << 16) | 15:
  ------------------
  |  Branch (2330:5): [True: 395, False: 380k]
  ------------------
 2331|    395|        return OFPERR_OFPBRC_MULTIPART_REPLY_TIMEOUT;
 2332|  1.24k|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (2332:5): [True: 1.24k, False: 379k]
  ------------------
 2333|  1.24k|        return OFPERR_NXBRC_NXM_INVALID;
 2334|     18|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (2334:5): [True: 18, False: 380k]
  ------------------
 2335|     18|        return OFPERR_NXBRC_NXM_BAD_TYPE;
 2336|  4.59k|    case (0x2320ULL << 32) |  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (2336:5): [True: 4.59k, False: 376k]
  ------------------
 2337|  4.59k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2338|     34|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (2338:5): [True: 34, False: 380k]
  ------------------
 2339|     34|        return OFPERR_NXBRC_BAD_REASON;
 2340|     34|    case (0x2320ULL << 32) |  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (2340:5): [True: 34, False: 380k]
  ------------------
 2341|     34|        return OFPERR_NXBRC_FM_BAD_EVENT;
 2342|    556|    case (0x2320ULL << 32) |  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (2342:5): [True: 556, False: 380k]
  ------------------
 2343|    556|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
 2344|  1.03k|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (2344:5): [True: 1.03k, False: 379k]
  ------------------
 2345|  1.03k|        return OFPERR_OFPBAC_BAD_TYPE;
 2346|  2.11k|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (2346:5): [True: 2.11k, False: 378k]
  ------------------
 2347|  2.11k|        return OFPERR_OFPBAC_BAD_LEN;
 2348|  4.47k|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (2348:5): [True: 4.47k, False: 376k]
  ------------------
 2349|  4.47k|        return OFPERR_OFPBAC_BAD_VENDOR;
 2350|  22.9k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (2350:5): [True: 22.9k, False: 357k]
  ------------------
 2351|  22.9k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 2352|     79|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (2352:5): [True: 79, False: 380k]
  ------------------
 2353|     79|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 2354|    212|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (2354:5): [True: 212, False: 380k]
  ------------------
 2355|    212|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2356|    182|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (2356:5): [True: 182, False: 380k]
  ------------------
 2357|    182|        return OFPERR_OFPBAC_EPERM;
 2358|     76|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (2358:5): [True: 76, False: 380k]
  ------------------
 2359|     76|        return OFPERR_OFPBAC_TOO_MANY;
 2360|  2.14k|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (2360:5): [True: 2.14k, False: 378k]
  ------------------
 2361|  2.14k|        return OFPERR_OFPBAC_BAD_QUEUE;
 2362|  11.6k|    case  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (2362:5): [True: 11.6k, False: 368k]
  ------------------
 2363|  11.6k|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
 2364|  1.40k|    case  ((uint32_t) 2 << 16) | 10:
  ------------------
  |  Branch (2364:5): [True: 1.40k, False: 379k]
  ------------------
 2365|  1.40k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2366|    109|    case  ((uint32_t) 2 << 16) | 11:
  ------------------
  |  Branch (2366:5): [True: 109, False: 380k]
  ------------------
 2367|    109|        return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 2368|  10.7k|    case  ((uint32_t) 2 << 16) | 12:
  ------------------
  |  Branch (2368:5): [True: 10.7k, False: 369k]
  ------------------
 2369|  10.7k|        return OFPERR_OFPBAC_BAD_TAG;
 2370|     34|    case  ((uint32_t) 2 << 16) | 13:
  ------------------
  |  Branch (2370:5): [True: 34, False: 380k]
  ------------------
 2371|     34|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 2372|     41|    case  ((uint32_t) 2 << 16) | 14:
  ------------------
  |  Branch (2372:5): [True: 41, False: 380k]
  ------------------
 2373|     41|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2374|     66|    case  ((uint32_t) 2 << 16) | 15:
  ------------------
  |  Branch (2374:5): [True: 66, False: 380k]
  ------------------
 2375|     66|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2376|     34|    case (0x4f4e4600ULL << 32) |  ((uint32_t) 4250 << 16) | 0:
  ------------------
  |  Branch (2376:5): [True: 34, False: 380k]
  ------------------
 2377|     34|        return OFPERR_OFPBAC_BAD_SET_MASK;
 2378|     18|    case (0x2320ULL << 32) |  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (2378:5): [True: 18, False: 380k]
  ------------------
 2379|     18|        return OFPERR_NXBAC_MUST_BE_ZERO;
 2380|     34|    case (0x2320ULL << 32) |  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (2380:5): [True: 34, False: 380k]
  ------------------
 2381|     34|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 2382|    171|    case (0x2320ULL << 32) |  ((uint32_t) 39 << 16) | 0:
  ------------------
  |  Branch (2382:5): [True: 171, False: 380k]
  ------------------
 2383|    171|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 2384|     22|    case (0x2320ULL << 32) |  ((uint32_t) 40 << 16) | 0:
  ------------------
  |  Branch (2384:5): [True: 22, False: 380k]
  ------------------
 2385|     22|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 2386|    516|    case (0x2320ULL << 32) |  ((uint32_t) 41 << 16) | 0:
  ------------------
  |  Branch (2386:5): [True: 516, False: 380k]
  ------------------
 2387|    516|        return OFPERR_NXBAC_BAD_ED_PROP;
 2388|     68|    case (0x2320ULL << 32) |  ((uint32_t) 42 << 16) | 0:
  ------------------
  |  Branch (2388:5): [True: 68, False: 380k]
  ------------------
 2389|     68|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
 2390|     23|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (2390:5): [True: 23, False: 380k]
  ------------------
 2391|     23|        return OFPERR_OFPBIC_UNKNOWN_INST;
 2392|    517|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (2392:5): [True: 517, False: 380k]
  ------------------
 2393|    517|        return OFPERR_OFPBIC_UNSUP_INST;
 2394|  17.3k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (2394:5): [True: 17.3k, False: 363k]
  ------------------
 2395|  17.3k|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 2396|  1.81k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (2396:5): [True: 1.81k, False: 378k]
  ------------------
 2397|  1.81k|        return OFPERR_OFPBIC_UNSUP_METADATA;
 2398|  1.29k|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (2398:5): [True: 1.29k, False: 379k]
  ------------------
 2399|  1.29k|        return OFPERR_OFPBIC_UNSUP_METADATA_MASK;
 2400|    237|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (2400:5): [True: 237, False: 380k]
  ------------------
 2401|    237|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 2402|    864|    case  ((uint32_t) 3 << 16) | 6:
  ------------------
  |  Branch (2402:5): [True: 864, False: 379k]
  ------------------
 2403|    864|        return OFPERR_OFPBIC_BAD_EXP_TYPE;
 2404|     18|    case  ((uint32_t) 3 << 16) | 7:
  ------------------
  |  Branch (2404:5): [True: 18, False: 380k]
  ------------------
 2405|     18|        return OFPERR_OFPBIC_BAD_LEN;
 2406|  7.81k|    case  ((uint32_t) 3 << 16) | 8:
  ------------------
  |  Branch (2406:5): [True: 7.81k, False: 372k]
  ------------------
 2407|  7.81k|        return OFPERR_OFPBIC_EPERM;
 2408|    406|    case  ((uint32_t) 3 << 16) | 9:
  ------------------
  |  Branch (2408:5): [True: 406, False: 380k]
  ------------------
 2409|    406|        return OFPERR_OFPBIC_DUP_INST;
 2410|     93|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (2410:5): [True: 93, False: 380k]
  ------------------
 2411|     93|        return OFPERR_OFPBMC_BAD_TYPE;
 2412|    152|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (2412:5): [True: 152, False: 380k]
  ------------------
 2413|    152|        return OFPERR_OFPBMC_BAD_LEN;
 2414|  1.42k|    case  ((uint32_t) 4 << 16) | 2:
  ------------------
  |  Branch (2414:5): [True: 1.42k, False: 379k]
  ------------------
 2415|  1.42k|        return OFPERR_OFPBMC_BAD_TAG;
 2416|    920|    case  ((uint32_t) 4 << 16) | 3:
  ------------------
  |  Branch (2416:5): [True: 920, False: 379k]
  ------------------
 2417|    920|        return OFPERR_OFPBMC_BAD_DL_ADDR_MASK;
 2418|     39|    case  ((uint32_t) 4 << 16) | 4:
  ------------------
  |  Branch (2418:5): [True: 39, False: 380k]
  ------------------
 2419|     39|        return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
 2420|    658|    case  ((uint32_t) 4 << 16) | 5:
  ------------------
  |  Branch (2420:5): [True: 658, False: 380k]
  ------------------
 2421|    658|        return OFPERR_OFPBMC_BAD_WILDCARDS;
 2422|     68|    case  ((uint32_t) 4 << 16) | 6:
  ------------------
  |  Branch (2422:5): [True: 68, False: 380k]
  ------------------
 2423|     68|        return OFPERR_OFPBMC_BAD_FIELD;
 2424|    457|    case  ((uint32_t) 4 << 16) | 7:
  ------------------
  |  Branch (2424:5): [True: 457, False: 380k]
  ------------------
 2425|    457|        return OFPERR_OFPBMC_BAD_VALUE;
 2426|    145|    case  ((uint32_t) 4 << 16) | 8:
  ------------------
  |  Branch (2426:5): [True: 145, False: 380k]
  ------------------
 2427|    145|        return OFPERR_OFPBMC_BAD_MASK;
 2428|  3.14k|    case  ((uint32_t) 4 << 16) | 9:
  ------------------
  |  Branch (2428:5): [True: 3.14k, False: 377k]
  ------------------
 2429|  3.14k|        return OFPERR_OFPBMC_BAD_PREREQ;
 2430|  10.2k|    case  ((uint32_t) 4 << 16) | 10:
  ------------------
  |  Branch (2430:5): [True: 10.2k, False: 370k]
  ------------------
 2431|  10.2k|        return OFPERR_OFPBMC_DUP_FIELD;
 2432|  1.72k|    case  ((uint32_t) 4 << 16) | 11:
  ------------------
  |  Branch (2432:5): [True: 1.72k, False: 378k]
  ------------------
 2433|  1.72k|        return OFPERR_OFPBMC_EPERM;
 2434|    193|    case (0x2320ULL << 32) |  ((uint32_t) 43 << 16) | 0:
  ------------------
  |  Branch (2434:5): [True: 193, False: 380k]
  ------------------
 2435|    193|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
 2436|  1.12k|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (2436:5): [True: 1.12k, False: 379k]
  ------------------
 2437|  1.12k|        return OFPERR_OFPFMFC_UNKNOWN;
 2438|  7.77k|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (2438:5): [True: 7.77k, False: 372k]
  ------------------
 2439|  7.77k|        return OFPERR_OFPFMFC_TABLE_FULL;
 2440|     36|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (2440:5): [True: 36, False: 380k]
  ------------------
 2441|     36|        return OFPERR_OFPFMFC_BAD_TABLE_ID;
 2442|  2.58k|    case  ((uint32_t) 5 << 16) | 3:
  ------------------
  |  Branch (2442:5): [True: 2.58k, False: 378k]
  ------------------
 2443|  2.58k|        return OFPERR_OFPFMFC_OVERLAP;
 2444|     68|    case  ((uint32_t) 5 << 16) | 4:
  ------------------
  |  Branch (2444:5): [True: 68, False: 380k]
  ------------------
 2445|     68|        return OFPERR_OFPFMFC_EPERM;
 2446|  13.6k|    case  ((uint32_t) 5 << 16) | 5:
  ------------------
  |  Branch (2446:5): [True: 13.6k, False: 366k]
  ------------------
 2447|  13.6k|        return OFPERR_OFPFMFC_BAD_TIMEOUT;
 2448|  1.07k|    case  ((uint32_t) 5 << 16) | 6:
  ------------------
  |  Branch (2448:5): [True: 1.07k, False: 379k]
  ------------------
 2449|  1.07k|        return OFPERR_OFPFMFC_BAD_COMMAND;
 2450|    321|    case  ((uint32_t) 5 << 16) | 7:
  ------------------
  |  Branch (2450:5): [True: 321, False: 380k]
  ------------------
 2451|    321|        return OFPERR_OFPFMFC_BAD_FLAGS;
 2452|    383|    case  ((uint32_t) 5 << 16) | 8:
  ------------------
  |  Branch (2452:5): [True: 383, False: 380k]
  ------------------
 2453|    383|        return OFPERR_OFPFMFC_CANT_SYNC;
 2454|    499|    case  ((uint32_t) 5 << 16) | 9:
  ------------------
  |  Branch (2454:5): [True: 499, False: 380k]
  ------------------
 2455|    499|        return OFPERR_OFPFMFC_BAD_PRIORITY;
 2456|    113|    case  ((uint32_t) 5 << 16) | 10:
  ------------------
  |  Branch (2456:5): [True: 113, False: 380k]
  ------------------
 2457|    113|        return OFPERR_OFPFMFC_IS_SYNC;
 2458|     86|    case (0x2320ULL << 32) |  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (2458:5): [True: 86, False: 380k]
  ------------------
 2459|     86|        return OFPERR_NXFMFC_HARDWARE;
 2460|  1.87k|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (2460:5): [True: 1.87k, False: 378k]
  ------------------
 2461|  1.87k|        return OFPERR_NXFMFC_BAD_TABLE_ID;
 2462|    395|    case (0x2320ULL << 32) |  ((uint32_t) 37 << 16) | 0:
  ------------------
  |  Branch (2462:5): [True: 395, False: 380k]
  ------------------
 2463|    395|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 2464|    857|    case  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (2464:5): [True: 857, False: 379k]
  ------------------
 2465|    857|        return OFPERR_OFPGMFC_GROUP_EXISTS;
 2466|    768|    case  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (2466:5): [True: 768, False: 379k]
  ------------------
 2467|    768|        return OFPERR_OFPGMFC_INVALID_GROUP;
 2468|     22|    case  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (2468:5): [True: 22, False: 380k]
  ------------------
 2469|     22|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
 2470|    287|    case  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (2470:5): [True: 287, False: 380k]
  ------------------
 2471|    287|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
 2472|  3.73k|    case  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (2472:5): [True: 3.73k, False: 376k]
  ------------------
 2473|  3.73k|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
 2474|  1.31k|    case  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (2474:5): [True: 1.31k, False: 379k]
  ------------------
 2475|  1.31k|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
 2476|     66|    case  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (2476:5): [True: 66, False: 380k]
  ------------------
 2477|     66|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2478|     18|    case  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (2478:5): [True: 18, False: 380k]
  ------------------
 2479|     18|        return OFPERR_OFPGMFC_LOOP;
 2480|    924|    case  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (2480:5): [True: 924, False: 379k]
  ------------------
 2481|    924|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
 2482|  8.15k|    case  ((uint32_t) 6 << 16) | 9:
  ------------------
  |  Branch (2482:5): [True: 8.15k, False: 372k]
  ------------------
 2483|  8.15k|        return OFPERR_OFPGMFC_CHAINED_GROUP;
 2484|     84|    case  ((uint32_t) 6 << 16) | 10:
  ------------------
  |  Branch (2484:5): [True: 84, False: 380k]
  ------------------
 2485|     84|        return OFPERR_OFPGMFC_BAD_TYPE;
 2486|    241|    case  ((uint32_t) 6 << 16) | 11:
  ------------------
  |  Branch (2486:5): [True: 241, False: 380k]
  ------------------
 2487|    241|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2488|  1.18k|    case  ((uint32_t) 6 << 16) | 12:
  ------------------
  |  Branch (2488:5): [True: 1.18k, False: 379k]
  ------------------
 2489|  1.18k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2490|  1.91k|    case  ((uint32_t) 6 << 16) | 13:
  ------------------
  |  Branch (2490:5): [True: 1.91k, False: 378k]
  ------------------
 2491|  1.91k|        return OFPERR_OFPGMFC_BAD_WATCH;
 2492|    451|    case  ((uint32_t) 6 << 16) | 14:
  ------------------
  |  Branch (2492:5): [True: 451, False: 380k]
  ------------------
 2493|    451|        return OFPERR_OFPGMFC_EPERM;
 2494|    524|    case  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (2494:5): [True: 524, False: 380k]
  ------------------
 2495|    524|        return OFPERR_OFPPMFC_BAD_PORT;
 2496|    126|    case  ((uint32_t) 7 << 16) | 1:
  ------------------
  |  Branch (2496:5): [True: 126, False: 380k]
  ------------------
 2497|    126|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
 2498|     18|    case  ((uint32_t) 7 << 16) | 2:
  ------------------
  |  Branch (2498:5): [True: 18, False: 380k]
  ------------------
 2499|     18|        return OFPERR_OFPPMFC_BAD_CONFIG;
 2500|  2.94k|    case  ((uint32_t) 7 << 16) | 3:
  ------------------
  |  Branch (2500:5): [True: 2.94k, False: 377k]
  ------------------
 2501|  2.94k|        return OFPERR_OFPPMFC_BAD_ADVERTISE;
 2502|    103|    case  ((uint32_t) 7 << 16) | 4:
  ------------------
  |  Branch (2502:5): [True: 103, False: 380k]
  ------------------
 2503|    103|        return OFPERR_OFPPMFC_EPERM;
 2504|     36|    case  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (2504:5): [True: 36, False: 380k]
  ------------------
 2505|     36|        return OFPERR_OFPTMFC_BAD_TABLE;
 2506|    293|    case  ((uint32_t) 8 << 16) | 1:
  ------------------
  |  Branch (2506:5): [True: 293, False: 380k]
  ------------------
 2507|    293|        return OFPERR_OFPTMFC_BAD_CONFIG;
 2508|  13.9k|    case  ((uint32_t) 8 << 16) | 2:
  ------------------
  |  Branch (2508:5): [True: 13.9k, False: 366k]
  ------------------
 2509|  13.9k|        return OFPERR_OFPTMFC_EPERM;
 2510|     66|    case  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (2510:5): [True: 66, False: 380k]
  ------------------
 2511|     66|        return OFPERR_OFPQOFC_BAD_PORT;
 2512|  2.82k|    case  ((uint32_t) 9 << 16) | 1:
  ------------------
  |  Branch (2512:5): [True: 2.82k, False: 377k]
  ------------------
 2513|  2.82k|        return OFPERR_OFPQOFC_BAD_QUEUE;
 2514|     75|    case  ((uint32_t) 9 << 16) | 2:
  ------------------
  |  Branch (2514:5): [True: 75, False: 380k]
  ------------------
 2515|     75|        return OFPERR_OFPQOFC_EPERM;
 2516|    622|    case (0x2320ULL << 32) |  ((uint32_t) 23 << 16) | 0:
  ------------------
  |  Branch (2516:5): [True: 622, False: 380k]
  ------------------
 2517|    622|        return OFPERR_NXQOFC_QUEUE_ERROR;
 2518|    243|    case  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (2518:5): [True: 243, False: 380k]
  ------------------
 2519|    243|        return OFPERR_OFPSCFC_BAD_FLAGS;
 2520|     73|    case  ((uint32_t) 10 << 16) | 1:
  ------------------
  |  Branch (2520:5): [True: 73, False: 380k]
  ------------------
 2521|     73|        return OFPERR_OFPSCFC_BAD_LEN;
 2522|    112|    case  ((uint32_t) 10 << 16) | 2:
  ------------------
  |  Branch (2522:5): [True: 112, False: 380k]
  ------------------
 2523|    112|        return OFPERR_OFPSCFC_EPERM;
 2524|    202|    case  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (2524:5): [True: 202, False: 380k]
  ------------------
 2525|    202|        return OFPERR_OFPRRFC_STALE;
 2526|     53|    case  ((uint32_t) 11 << 16) | 1:
  ------------------
  |  Branch (2526:5): [True: 53, False: 380k]
  ------------------
 2527|     53|        return OFPERR_OFPRRFC_UNSUP;
 2528|  1.08k|    case  ((uint32_t) 11 << 16) | 2:
  ------------------
  |  Branch (2528:5): [True: 1.08k, False: 379k]
  ------------------
 2529|  1.08k|        return OFPERR_OFPRRFC_BAD_ROLE;
 2530|  5.97k|    case  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (2530:5): [True: 5.97k, False: 374k]
  ------------------
 2531|  5.97k|        return OFPERR_OFPMMFC_UNKNOWN;
 2532|    698|    case  ((uint32_t) 12 << 16) | 1:
  ------------------
  |  Branch (2532:5): [True: 698, False: 379k]
  ------------------
 2533|    698|        return OFPERR_OFPMMFC_METER_EXISTS;
 2534|  2.26k|    case  ((uint32_t) 12 << 16) | 2:
  ------------------
  |  Branch (2534:5): [True: 2.26k, False: 378k]
  ------------------
 2535|  2.26k|        return OFPERR_OFPMMFC_INVALID_METER;
 2536|    481|    case  ((uint32_t) 12 << 16) | 3:
  ------------------
  |  Branch (2536:5): [True: 481, False: 380k]
  ------------------
 2537|    481|        return OFPERR_OFPMMFC_UNKNOWN_METER;
 2538|  4.77k|    case  ((uint32_t) 12 << 16) | 4:
  ------------------
  |  Branch (2538:5): [True: 4.77k, False: 375k]
  ------------------
 2539|  4.77k|        return OFPERR_OFPMMFC_BAD_COMMAND;
 2540|     66|    case  ((uint32_t) 12 << 16) | 5:
  ------------------
  |  Branch (2540:5): [True: 66, False: 380k]
  ------------------
 2541|     66|        return OFPERR_OFPMMFC_BAD_FLAGS;
 2542|  1.11k|    case  ((uint32_t) 12 << 16) | 6:
  ------------------
  |  Branch (2542:5): [True: 1.11k, False: 379k]
  ------------------
 2543|  1.11k|        return OFPERR_OFPMMFC_BAD_RATE;
 2544|    353|    case  ((uint32_t) 12 << 16) | 7:
  ------------------
  |  Branch (2544:5): [True: 353, False: 380k]
  ------------------
 2545|    353|        return OFPERR_OFPMMFC_BAD_BURST;
 2546|  1.56k|    case  ((uint32_t) 12 << 16) | 8:
  ------------------
  |  Branch (2546:5): [True: 1.56k, False: 379k]
  ------------------
 2547|  1.56k|        return OFPERR_OFPMMFC_BAD_BAND;
 2548|  1.69k|    case  ((uint32_t) 12 << 16) | 9:
  ------------------
  |  Branch (2548:5): [True: 1.69k, False: 378k]
  ------------------
 2549|  1.69k|        return OFPERR_OFPMMFC_BAD_BAND_VALUE;
 2550|     66|    case  ((uint32_t) 12 << 16) | 10:
  ------------------
  |  Branch (2550:5): [True: 66, False: 380k]
  ------------------
 2551|     66|        return OFPERR_OFPMMFC_OUT_OF_METERS;
 2552|     66|    case  ((uint32_t) 12 << 16) | 11:
  ------------------
  |  Branch (2552:5): [True: 66, False: 380k]
  ------------------
 2553|     66|        return OFPERR_OFPMMFC_OUT_OF_BANDS;
 2554|  3.27k|    case  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (2554:5): [True: 3.27k, False: 377k]
  ------------------
 2555|  3.27k|        return OFPERR_OFPTFFC_BAD_TABLE;
 2556|     69|    case  ((uint32_t) 13 << 16) | 1:
  ------------------
  |  Branch (2556:5): [True: 69, False: 380k]
  ------------------
 2557|     69|        return OFPERR_OFPTFFC_BAD_METADATA;
 2558|     34|    case  ((uint32_t) 13 << 16) | 5:
  ------------------
  |  Branch (2558:5): [True: 34, False: 380k]
  ------------------
 2559|     34|        return OFPERR_OFPTFFC_EPERM;
 2560|     19|    case (0x2320ULL << 32) |  ((uint32_t) 44 << 16) | 0:
  ------------------
  |  Branch (2560:5): [True: 19, False: 380k]
  ------------------
 2561|     19|        return OFPERR_NXTFFC_DUP_TABLE;
 2562|  3.88k|    case  ((uint32_t) 14 << 16) | 0:
  ------------------
  |  Branch (2562:5): [True: 3.88k, False: 376k]
  ------------------
 2563|  3.88k|        return OFPERR_OFPBPC_BAD_TYPE;
 2564|    179|    case  ((uint32_t) 14 << 16) | 1:
  ------------------
  |  Branch (2564:5): [True: 179, False: 380k]
  ------------------
 2565|    179|        return OFPERR_OFPBPC_BAD_LEN;
 2566|  4.14k|    case  ((uint32_t) 14 << 16) | 2:
  ------------------
  |  Branch (2566:5): [True: 4.14k, False: 376k]
  ------------------
 2567|  4.14k|        return OFPERR_OFPBPC_BAD_VALUE;
 2568|    100|    case  ((uint32_t) 14 << 16) | 3:
  ------------------
  |  Branch (2568:5): [True: 100, False: 380k]
  ------------------
 2569|    100|        return OFPERR_OFPBPC_TOO_MANY;
 2570|  1.01k|    case  ((uint32_t) 14 << 16) | 4:
  ------------------
  |  Branch (2570:5): [True: 1.01k, False: 379k]
  ------------------
 2571|  1.01k|        return OFPERR_OFPBPC_DUP_TYPE;
 2572|    784|    case  ((uint32_t) 14 << 16) | 5:
  ------------------
  |  Branch (2572:5): [True: 784, False: 379k]
  ------------------
 2573|    784|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
 2574|     18|    case  ((uint32_t) 14 << 16) | 6:
  ------------------
  |  Branch (2574:5): [True: 18, False: 380k]
  ------------------
 2575|     18|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
 2576|     66|    case  ((uint32_t) 14 << 16) | 7:
  ------------------
  |  Branch (2576:5): [True: 66, False: 380k]
  ------------------
 2577|     66|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
 2578|     76|    case  ((uint32_t) 14 << 16) | 8:
  ------------------
  |  Branch (2578:5): [True: 76, False: 380k]
  ------------------
 2579|     76|        return OFPERR_OFPBPC_EPERM;
 2580|     35|    case  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (2580:5): [True: 35, False: 380k]
  ------------------
 2581|     35|        return OFPERR_OFPACFC_INVALID;
 2582|     38|    case  ((uint32_t) 15 << 16) | 1:
  ------------------
  |  Branch (2582:5): [True: 38, False: 380k]
  ------------------
 2583|     38|        return OFPERR_OFPACFC_UNSUPPORTED;
 2584|     67|    case  ((uint32_t) 15 << 16) | 2:
  ------------------
  |  Branch (2584:5): [True: 67, False: 380k]
  ------------------
 2585|     67|        return OFPERR_OFPACFC_EPERM;
 2586|     66|    case  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (2586:5): [True: 66, False: 380k]
  ------------------
 2587|     66|        return OFPERR_OFPBFC_UNKNOWN;
 2588|     67|    case  ((uint32_t) 17 << 16) | 1:
  ------------------
  |  Branch (2588:5): [True: 67, False: 380k]
  ------------------
 2589|     67|        return OFPERR_OFPBFC_EPERM;
 2590|     38|    case  ((uint32_t) 17 << 16) | 2:
  ------------------
  |  Branch (2590:5): [True: 38, False: 380k]
  ------------------
 2591|     38|        return OFPERR_OFPBFC_BAD_ID;
 2592|     34|    case  ((uint32_t) 17 << 16) | 3:
  ------------------
  |  Branch (2592:5): [True: 34, False: 380k]
  ------------------
 2593|     34|        return OFPERR_OFPBFC_BUNDLE_EXIST;
 2594|     67|    case  ((uint32_t) 17 << 16) | 4:
  ------------------
  |  Branch (2594:5): [True: 67, False: 380k]
  ------------------
 2595|     67|        return OFPERR_OFPBFC_BUNDLE_CLOSED;
 2596|     37|    case  ((uint32_t) 17 << 16) | 5:
  ------------------
  |  Branch (2596:5): [True: 37, False: 380k]
  ------------------
 2597|     37|        return OFPERR_OFPBFC_OUT_OF_BUNDLES;
 2598|    215|    case  ((uint32_t) 17 << 16) | 6:
  ------------------
  |  Branch (2598:5): [True: 215, False: 380k]
  ------------------
 2599|    215|        return OFPERR_OFPBFC_BAD_TYPE;
 2600|    110|    case  ((uint32_t) 17 << 16) | 7:
  ------------------
  |  Branch (2600:5): [True: 110, False: 380k]
  ------------------
 2601|    110|        return OFPERR_OFPBFC_BAD_FLAGS;
 2602|    687|    case  ((uint32_t) 17 << 16) | 8:
  ------------------
  |  Branch (2602:5): [True: 687, False: 379k]
  ------------------
 2603|    687|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 2604|    176|    case  ((uint32_t) 17 << 16) | 9:
  ------------------
  |  Branch (2604:5): [True: 176, False: 380k]
  ------------------
 2605|    176|        return OFPERR_OFPBFC_MSG_BAD_XID;
 2606|    196|    case  ((uint32_t) 17 << 16) | 10:
  ------------------
  |  Branch (2606:5): [True: 196, False: 380k]
  ------------------
 2607|    196|        return OFPERR_OFPBFC_MSG_UNSUP;
 2608|    421|    case  ((uint32_t) 17 << 16) | 11:
  ------------------
  |  Branch (2608:5): [True: 421, False: 380k]
  ------------------
 2609|    421|        return OFPERR_OFPBFC_MSG_CONFLICT;
 2610|    446|    case  ((uint32_t) 17 << 16) | 12:
  ------------------
  |  Branch (2610:5): [True: 446, False: 380k]
  ------------------
 2611|    446|        return OFPERR_OFPBFC_MSG_TOO_MANY;
 2612|    460|    case  ((uint32_t) 17 << 16) | 13:
  ------------------
  |  Branch (2612:5): [True: 460, False: 380k]
  ------------------
 2613|    460|        return OFPERR_OFPBFC_MSG_FAILED;
 2614|     37|    case  ((uint32_t) 17 << 16) | 14:
  ------------------
  |  Branch (2614:5): [True: 37, False: 380k]
  ------------------
 2615|     37|        return OFPERR_OFPBFC_TIMEOUT;
 2616|     19|    case  ((uint32_t) 17 << 16) | 15:
  ------------------
  |  Branch (2616:5): [True: 19, False: 380k]
  ------------------
 2617|     19|        return OFPERR_OFPBFC_BUNDLE_IN_PROGRESS;
 2618|    632|    case (0x2320ULL << 32) |  ((uint32_t) 22 << 16) | 0:
  ------------------
  |  Branch (2618:5): [True: 632, False: 380k]
  ------------------
 2619|    632|        return OFPERR_OFPBFC_BAD_VERSION;
 2620|    390|    case  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (2620:5): [True: 390, False: 380k]
  ------------------
 2621|    390|        return OFPERR_OFPMOFC_UNKNOWN;
 2622|    847|    case  ((uint32_t) 16 << 16) | 1:
  ------------------
  |  Branch (2622:5): [True: 847, False: 379k]
  ------------------
 2623|    847|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
 2624|  1.73k|    case  ((uint32_t) 16 << 16) | 2:
  ------------------
  |  Branch (2624:5): [True: 1.73k, False: 378k]
  ------------------
 2625|  1.73k|        return OFPERR_OFPMOFC_INVALID_MONITOR;
 2626|    615|    case  ((uint32_t) 16 << 16) | 3:
  ------------------
  |  Branch (2626:5): [True: 615, False: 380k]
  ------------------
 2627|    615|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
 2628|     66|    case  ((uint32_t) 16 << 16) | 4:
  ------------------
  |  Branch (2628:5): [True: 66, False: 380k]
  ------------------
 2629|     66|        return OFPERR_OFPMOFC_BAD_COMMAND;
 2630|    382|    case  ((uint32_t) 16 << 16) | 5:
  ------------------
  |  Branch (2630:5): [True: 382, False: 380k]
  ------------------
 2631|    382|        return OFPERR_OFPMOFC_BAD_FLAGS;
 2632|     34|    case  ((uint32_t) 16 << 16) | 6:
  ------------------
  |  Branch (2632:5): [True: 34, False: 380k]
  ------------------
 2633|     34|        return OFPERR_OFPMOFC_BAD_TABLE_ID;
 2634|    348|    case  ((uint32_t) 16 << 16) | 7:
  ------------------
  |  Branch (2634:5): [True: 348, False: 380k]
  ------------------
 2635|    348|        return OFPERR_OFPMOFC_BAD_OUT;
 2636|  1.56k|    case (0x2320ULL << 32) |  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (2636:5): [True: 1.56k, False: 379k]
  ------------------
 2637|  1.56k|        return OFPERR_NXTTMFC_BAD_COMMAND;
 2638|     34|    case (0x2320ULL << 32) |  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (2638:5): [True: 34, False: 380k]
  ------------------
 2639|     34|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
 2640|     66|    case (0x2320ULL << 32) |  ((uint32_t) 18 << 16) | 0:
  ------------------
  |  Branch (2640:5): [True: 66, False: 380k]
  ------------------
 2641|     66|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
 2642|  1.87k|    case (0x2320ULL << 32) |  ((uint32_t) 19 << 16) | 0:
  ------------------
  |  Branch (2642:5): [True: 1.87k, False: 378k]
  ------------------
 2643|  1.87k|        return OFPERR_NXTTMFC_TABLE_FULL;
 2644|     12|    case (0x2320ULL << 32) |  ((uint32_t) 20 << 16) | 0:
  ------------------
  |  Branch (2644:5): [True: 12, False: 380k]
  ------------------
 2645|     12|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
 2646|     66|    case (0x2320ULL << 32) |  ((uint32_t) 21 << 16) | 0:
  ------------------
  |  Branch (2646:5): [True: 66, False: 380k]
  ------------------
 2647|     66|        return OFPERR_NXTTMFC_DUP_ENTRY;
 2648|     18|    case (0x2320ULL << 32) |  ((uint32_t) 38 << 16) | 0:
  ------------------
  |  Branch (2648:5): [True: 18, False: 380k]
  ------------------
 2649|     18|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
 2650|     66|    case (0x2320ULL << 32) |  ((uint32_t) 34 << 16) | 0:
  ------------------
  |  Branch (2650:5): [True: 66, False: 380k]
  ------------------
 2651|     66|        return OFPERR_NXR_NOT_SUPPORTED;
 2652|    161|    case (0x2320ULL << 32) |  ((uint32_t) 35 << 16) | 0:
  ------------------
  |  Branch (2652:5): [True: 161, False: 380k]
  ------------------
 2653|    161|        return OFPERR_NXR_STALE;
 2654|     18|    case (0x2320ULL << 32) |  ((uint32_t) 36 << 16) | 0:
  ------------------
  |  Branch (2654:5): [True: 18, False: 380k]
  ------------------
 2655|     18|        return OFPERR_NXST_NOT_CONFIGURED;
 2656|   380k|    }
 2657|       |
 2658|   114k|    return 0;
 2659|   380k|}
ofp-errors.c:ofperr_of15_decode:
 2869|   273k|{
 2870|   273k|    switch (((uint64_t) vendor << 32) | ((uint32_t) type << 16) | code) {
  ------------------
  |  Branch (2870:13): [True: 80.3k, False: 192k]
  ------------------
 2871|  5.61k|    case  ((uint32_t) 0 << 16) | 0:
  ------------------
  |  Branch (2871:5): [True: 5.61k, False: 267k]
  ------------------
 2872|  5.61k|        return OFPERR_OFPHFC_INCOMPATIBLE;
 2873|    154|    case  ((uint32_t) 0 << 16) | 1:
  ------------------
  |  Branch (2873:5): [True: 154, False: 272k]
  ------------------
 2874|    154|        return OFPERR_OFPHFC_EPERM;
 2875|    581|    case  ((uint32_t) 1 << 16) | 0:
  ------------------
  |  Branch (2875:5): [True: 581, False: 272k]
  ------------------
 2876|    581|        return OFPERR_OFPBRC_BAD_VERSION;
 2877|  1.01k|    case  ((uint32_t) 1 << 16) | 1:
  ------------------
  |  Branch (2877:5): [True: 1.01k, False: 272k]
  ------------------
 2878|  1.01k|        return OFPERR_OFPBRC_BAD_TYPE;
 2879|    908|    case  ((uint32_t) 1 << 16) | 2:
  ------------------
  |  Branch (2879:5): [True: 908, False: 272k]
  ------------------
 2880|    908|        return OFPERR_OFPBRC_BAD_STAT;
 2881|     76|    case  ((uint32_t) 1 << 16) | 3:
  ------------------
  |  Branch (2881:5): [True: 76, False: 273k]
  ------------------
 2882|     76|        return OFPERR_OFPBRC_BAD_VENDOR;
 2883|     39|    case  ((uint32_t) 1 << 16) | 4:
  ------------------
  |  Branch (2883:5): [True: 39, False: 273k]
  ------------------
 2884|     39|        return OFPERR_OFPBRC_BAD_SUBTYPE;
 2885|    395|    case  ((uint32_t) 1 << 16) | 5:
  ------------------
  |  Branch (2885:5): [True: 395, False: 272k]
  ------------------
 2886|    395|        return OFPERR_OFPBRC_EPERM;
 2887|  1.02k|    case  ((uint32_t) 1 << 16) | 6:
  ------------------
  |  Branch (2887:5): [True: 1.02k, False: 272k]
  ------------------
 2888|  1.02k|        return OFPERR_OFPBRC_BAD_LEN;
 2889|    391|    case  ((uint32_t) 1 << 16) | 7:
  ------------------
  |  Branch (2889:5): [True: 391, False: 272k]
  ------------------
 2890|    391|        return OFPERR_OFPBRC_BUFFER_EMPTY;
 2891|  23.2k|    case  ((uint32_t) 1 << 16) | 8:
  ------------------
  |  Branch (2891:5): [True: 23.2k, False: 249k]
  ------------------
 2892|  23.2k|        return OFPERR_OFPBRC_BUFFER_UNKNOWN;
 2893|    142|    case  ((uint32_t) 1 << 16) | 9:
  ------------------
  |  Branch (2893:5): [True: 142, False: 272k]
  ------------------
 2894|    142|        return OFPERR_OFPBRC_BAD_TABLE_ID;
 2895|  1.12k|    case  ((uint32_t) 1 << 16) | 10:
  ------------------
  |  Branch (2895:5): [True: 1.12k, False: 271k]
  ------------------
 2896|  1.12k|        return OFPERR_OFPBRC_IS_SECONDARY;
 2897|  1.40k|    case  ((uint32_t) 1 << 16) | 11:
  ------------------
  |  Branch (2897:5): [True: 1.40k, False: 271k]
  ------------------
 2898|  1.40k|        return OFPERR_OFPBRC_BAD_PORT;
 2899|  1.22k|    case  ((uint32_t) 1 << 16) | 12:
  ------------------
  |  Branch (2899:5): [True: 1.22k, False: 271k]
  ------------------
 2900|  1.22k|        return OFPERR_OFPBRC_BAD_PACKET;
 2901|     37|    case  ((uint32_t) 1 << 16) | 13:
  ------------------
  |  Branch (2901:5): [True: 37, False: 273k]
  ------------------
 2902|     37|        return OFPERR_OFPBRC_MULTIPART_BUFFER_OVERFLOW;
 2903|  11.3k|    case  ((uint32_t) 1 << 16) | 14:
  ------------------
  |  Branch (2903:5): [True: 11.3k, False: 261k]
  ------------------
 2904|  11.3k|        return OFPERR_OFPBRC_MULTIPART_REQUEST_TIMEOUT;
 2905|  2.70k|    case  ((uint32_t) 1 << 16) | 15:
  ------------------
  |  Branch (2905:5): [True: 2.70k, False: 270k]
  ------------------
 2906|  2.70k|        return OFPERR_OFPBRC_MULTIPART_REPLY_TIMEOUT;
 2907|  1.78k|    case  ((uint32_t) 1 << 16) | 16:
  ------------------
  |  Branch (2907:5): [True: 1.78k, False: 271k]
  ------------------
 2908|  1.78k|        return OFPERR_OFPBRC_MULTIPART_BAD_SCHED;
 2909|    956|    case  ((uint32_t) 1 << 16) | 17:
  ------------------
  |  Branch (2909:5): [True: 956, False: 272k]
  ------------------
 2910|    956|        return OFPERR_OFPBRC_PIPELINE_FIELDS_ONLY;
 2911|    107|    case  ((uint32_t) 1 << 16) | 18:
  ------------------
  |  Branch (2911:5): [True: 107, False: 273k]
  ------------------
 2912|    107|        return OFPERR_OFPBRC_UNKNOWN;
 2913|  5.44k|    case (0x2320ULL << 32) |  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (2913:5): [True: 5.44k, False: 267k]
  ------------------
 2914|  5.44k|        return OFPERR_NXBRC_NXM_INVALID;
 2915|     18|    case (0x2320ULL << 32) |  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (2915:5): [True: 18, False: 273k]
  ------------------
 2916|     18|        return OFPERR_NXBRC_NXM_BAD_TYPE;
 2917|    203|    case (0x2320ULL << 32) |  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (2917:5): [True: 203, False: 272k]
  ------------------
 2918|    203|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2919|     18|    case (0x2320ULL << 32) |  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (2919:5): [True: 18, False: 273k]
  ------------------
 2920|     18|        return OFPERR_NXBRC_BAD_REASON;
 2921|     34|    case (0x2320ULL << 32) |  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (2921:5): [True: 34, False: 273k]
  ------------------
 2922|     34|        return OFPERR_NXBRC_FM_BAD_EVENT;
 2923|    195|    case (0x2320ULL << 32) |  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (2923:5): [True: 195, False: 272k]
  ------------------
 2924|    195|        return OFPERR_NXBRC_UNENCODABLE_ERROR;
 2925|  1.25k|    case  ((uint32_t) 2 << 16) | 0:
  ------------------
  |  Branch (2925:5): [True: 1.25k, False: 271k]
  ------------------
 2926|  1.25k|        return OFPERR_OFPBAC_BAD_TYPE;
 2927|    104|    case  ((uint32_t) 2 << 16) | 1:
  ------------------
  |  Branch (2927:5): [True: 104, False: 273k]
  ------------------
 2928|    104|        return OFPERR_OFPBAC_BAD_LEN;
 2929|  5.23k|    case  ((uint32_t) 2 << 16) | 2:
  ------------------
  |  Branch (2929:5): [True: 5.23k, False: 267k]
  ------------------
 2930|  5.23k|        return OFPERR_OFPBAC_BAD_VENDOR;
 2931|  4.66k|    case  ((uint32_t) 2 << 16) | 3:
  ------------------
  |  Branch (2931:5): [True: 4.66k, False: 268k]
  ------------------
 2932|  4.66k|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 2933|  4.95k|    case  ((uint32_t) 2 << 16) | 4:
  ------------------
  |  Branch (2933:5): [True: 4.95k, False: 268k]
  ------------------
 2934|  4.95k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 2935|  5.04k|    case  ((uint32_t) 2 << 16) | 5:
  ------------------
  |  Branch (2935:5): [True: 5.04k, False: 268k]
  ------------------
 2936|  5.04k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2937|    139|    case  ((uint32_t) 2 << 16) | 6:
  ------------------
  |  Branch (2937:5): [True: 139, False: 272k]
  ------------------
 2938|    139|        return OFPERR_OFPBAC_EPERM;
 2939|     19|    case  ((uint32_t) 2 << 16) | 7:
  ------------------
  |  Branch (2939:5): [True: 19, False: 273k]
  ------------------
 2940|     19|        return OFPERR_OFPBAC_TOO_MANY;
 2941|    154|    case  ((uint32_t) 2 << 16) | 8:
  ------------------
  |  Branch (2941:5): [True: 154, False: 272k]
  ------------------
 2942|    154|        return OFPERR_OFPBAC_BAD_QUEUE;
 2943|    370|    case  ((uint32_t) 2 << 16) | 9:
  ------------------
  |  Branch (2943:5): [True: 370, False: 272k]
  ------------------
 2944|    370|        return OFPERR_OFPBAC_BAD_OUT_GROUP;
 2945|  1.00k|    case  ((uint32_t) 2 << 16) | 10:
  ------------------
  |  Branch (2945:5): [True: 1.00k, False: 272k]
  ------------------
 2946|  1.00k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2947|     34|    case  ((uint32_t) 2 << 16) | 11:
  ------------------
  |  Branch (2947:5): [True: 34, False: 273k]
  ------------------
 2948|     34|        return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 2949|     66|    case  ((uint32_t) 2 << 16) | 12:
  ------------------
  |  Branch (2949:5): [True: 66, False: 273k]
  ------------------
 2950|     66|        return OFPERR_OFPBAC_BAD_TAG;
 2951|     66|    case  ((uint32_t) 2 << 16) | 13:
  ------------------
  |  Branch (2951:5): [True: 66, False: 273k]
  ------------------
 2952|     66|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 2953|    142|    case  ((uint32_t) 2 << 16) | 14:
  ------------------
  |  Branch (2953:5): [True: 142, False: 272k]
  ------------------
 2954|    142|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2955|    921|    case  ((uint32_t) 2 << 16) | 15:
  ------------------
  |  Branch (2955:5): [True: 921, False: 272k]
  ------------------
 2956|    921|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2957|     34|    case  ((uint32_t) 2 << 16) | 16:
  ------------------
  |  Branch (2957:5): [True: 34, False: 273k]
  ------------------
 2958|     34|        return OFPERR_OFPBAC_BAD_SET_MASK;
 2959|     20|    case  ((uint32_t) 2 << 16) | 17:
  ------------------
  |  Branch (2959:5): [True: 20, False: 273k]
  ------------------
 2960|     20|        return OFPERR_OFPBAC_BAD_METER;
 2961|  1.54k|    case (0x2320ULL << 32) |  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (2961:5): [True: 1.54k, False: 271k]
  ------------------
 2962|  1.54k|        return OFPERR_NXBAC_MUST_BE_ZERO;
 2963|  1.78k|    case (0x2320ULL << 32) |  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (2963:5): [True: 1.78k, False: 271k]
  ------------------
 2964|  1.78k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 2965|     66|    case (0x2320ULL << 32) |  ((uint32_t) 39 << 16) | 0:
  ------------------
  |  Branch (2965:5): [True: 66, False: 273k]
  ------------------
 2966|     66|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 2967|     66|    case (0x2320ULL << 32) |  ((uint32_t) 40 << 16) | 0:
  ------------------
  |  Branch (2967:5): [True: 66, False: 273k]
  ------------------
 2968|     66|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 2969|  1.01k|    case (0x2320ULL << 32) |  ((uint32_t) 41 << 16) | 0:
  ------------------
  |  Branch (2969:5): [True: 1.01k, False: 272k]
  ------------------
 2970|  1.01k|        return OFPERR_NXBAC_BAD_ED_PROP;
 2971|     68|    case (0x2320ULL << 32) |  ((uint32_t) 42 << 16) | 0:
  ------------------
  |  Branch (2971:5): [True: 68, False: 273k]
  ------------------
 2972|     68|        return OFPERR_NXBAC_CT_DATAPATH_SUPPORT;
 2973|    960|    case  ((uint32_t) 3 << 16) | 0:
  ------------------
  |  Branch (2973:5): [True: 960, False: 272k]
  ------------------
 2974|    960|        return OFPERR_OFPBIC_UNKNOWN_INST;
 2975|    554|    case  ((uint32_t) 3 << 16) | 1:
  ------------------
  |  Branch (2975:5): [True: 554, False: 272k]
  ------------------
 2976|    554|        return OFPERR_OFPBIC_UNSUP_INST;
 2977|  1.77k|    case  ((uint32_t) 3 << 16) | 2:
  ------------------
  |  Branch (2977:5): [True: 1.77k, False: 271k]
  ------------------
 2978|  1.77k|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 2979|  1.96k|    case  ((uint32_t) 3 << 16) | 3:
  ------------------
  |  Branch (2979:5): [True: 1.96k, False: 271k]
  ------------------
 2980|  1.96k|        return OFPERR_OFPBIC_UNSUP_METADATA;
 2981|    595|    case  ((uint32_t) 3 << 16) | 4:
  ------------------
  |  Branch (2981:5): [True: 595, False: 272k]
  ------------------
 2982|    595|        return OFPERR_OFPBIC_UNSUP_METADATA_MASK;
 2983|     67|    case  ((uint32_t) 3 << 16) | 5:
  ------------------
  |  Branch (2983:5): [True: 67, False: 273k]
  ------------------
 2984|     67|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 2985|  1.06k|    case  ((uint32_t) 3 << 16) | 6:
  ------------------
  |  Branch (2985:5): [True: 1.06k, False: 272k]
  ------------------
 2986|  1.06k|        return OFPERR_OFPBIC_BAD_EXP_TYPE;
 2987|     35|    case  ((uint32_t) 3 << 16) | 7:
  ------------------
  |  Branch (2987:5): [True: 35, False: 273k]
  ------------------
 2988|     35|        return OFPERR_OFPBIC_BAD_LEN;
 2989|  4.59k|    case  ((uint32_t) 3 << 16) | 8:
  ------------------
  |  Branch (2989:5): [True: 4.59k, False: 268k]
  ------------------
 2990|  4.59k|        return OFPERR_OFPBIC_EPERM;
 2991|    369|    case  ((uint32_t) 3 << 16) | 9:
  ------------------
  |  Branch (2991:5): [True: 369, False: 272k]
  ------------------
 2992|    369|        return OFPERR_OFPBIC_DUP_INST;
 2993|    473|    case  ((uint32_t) 4 << 16) | 0:
  ------------------
  |  Branch (2993:5): [True: 473, False: 272k]
  ------------------
 2994|    473|        return OFPERR_OFPBMC_BAD_TYPE;
 2995|     88|    case  ((uint32_t) 4 << 16) | 1:
  ------------------
  |  Branch (2995:5): [True: 88, False: 273k]
  ------------------
 2996|     88|        return OFPERR_OFPBMC_BAD_LEN;
 2997|    334|    case  ((uint32_t) 4 << 16) | 2:
  ------------------
  |  Branch (2997:5): [True: 334, False: 272k]
  ------------------
 2998|    334|        return OFPERR_OFPBMC_BAD_TAG;
 2999|    186|    case  ((uint32_t) 4 << 16) | 3:
  ------------------
  |  Branch (2999:5): [True: 186, False: 272k]
  ------------------
 3000|    186|        return OFPERR_OFPBMC_BAD_DL_ADDR_MASK;
 3001|    124|    case  ((uint32_t) 4 << 16) | 4:
  ------------------
  |  Branch (3001:5): [True: 124, False: 272k]
  ------------------
 3002|    124|        return OFPERR_OFPBMC_BAD_NW_ADDR_MASK;
 3003|     66|    case  ((uint32_t) 4 << 16) | 5:
  ------------------
  |  Branch (3003:5): [True: 66, False: 273k]
  ------------------
 3004|     66|        return OFPERR_OFPBMC_BAD_WILDCARDS;
 3005|    403|    case  ((uint32_t) 4 << 16) | 6:
  ------------------
  |  Branch (3005:5): [True: 403, False: 272k]
  ------------------
 3006|    403|        return OFPERR_OFPBMC_BAD_FIELD;
 3007|  1.31k|    case  ((uint32_t) 4 << 16) | 7:
  ------------------
  |  Branch (3007:5): [True: 1.31k, False: 271k]
  ------------------
 3008|  1.31k|        return OFPERR_OFPBMC_BAD_VALUE;
 3009|    402|    case  ((uint32_t) 4 << 16) | 8:
  ------------------
  |  Branch (3009:5): [True: 402, False: 272k]
  ------------------
 3010|    402|        return OFPERR_OFPBMC_BAD_MASK;
 3011|     50|    case  ((uint32_t) 4 << 16) | 9:
  ------------------
  |  Branch (3011:5): [True: 50, False: 273k]
  ------------------
 3012|     50|        return OFPERR_OFPBMC_BAD_PREREQ;
 3013|    527|    case  ((uint32_t) 4 << 16) | 10:
  ------------------
  |  Branch (3013:5): [True: 527, False: 272k]
  ------------------
 3014|    527|        return OFPERR_OFPBMC_DUP_FIELD;
 3015|  1.96k|    case  ((uint32_t) 4 << 16) | 11:
  ------------------
  |  Branch (3015:5): [True: 1.96k, False: 271k]
  ------------------
 3016|  1.96k|        return OFPERR_OFPBMC_EPERM;
 3017|    269|    case (0x2320ULL << 32) |  ((uint32_t) 43 << 16) | 0:
  ------------------
  |  Branch (3017:5): [True: 269, False: 272k]
  ------------------
 3018|    269|        return OFPERR_NXBMC_CT_DATAPATH_SUPPORT;
 3019|    102|    case  ((uint32_t) 5 << 16) | 0:
  ------------------
  |  Branch (3019:5): [True: 102, False: 273k]
  ------------------
 3020|    102|        return OFPERR_OFPFMFC_UNKNOWN;
 3021|    135|    case  ((uint32_t) 5 << 16) | 1:
  ------------------
  |  Branch (3021:5): [True: 135, False: 272k]
  ------------------
 3022|    135|        return OFPERR_OFPFMFC_TABLE_FULL;
 3023|     66|    case  ((uint32_t) 5 << 16) | 2:
  ------------------
  |  Branch (3023:5): [True: 66, False: 273k]
  ------------------
 3024|     66|        return OFPERR_OFPFMFC_BAD_TABLE_ID;
 3025|     75|    case  ((uint32_t) 5 << 16) | 3:
  ------------------
  |  Branch (3025:5): [True: 75, False: 273k]
  ------------------
 3026|     75|        return OFPERR_OFPFMFC_OVERLAP;
 3027|     66|    case  ((uint32_t) 5 << 16) | 4:
  ------------------
  |  Branch (3027:5): [True: 66, False: 273k]
  ------------------
 3028|     66|        return OFPERR_OFPFMFC_EPERM;
 3029|    705|    case  ((uint32_t) 5 << 16) | 5:
  ------------------
  |  Branch (3029:5): [True: 705, False: 272k]
  ------------------
 3030|    705|        return OFPERR_OFPFMFC_BAD_TIMEOUT;
 3031|    194|    case  ((uint32_t) 5 << 16) | 6:
  ------------------
  |  Branch (3031:5): [True: 194, False: 272k]
  ------------------
 3032|    194|        return OFPERR_OFPFMFC_BAD_COMMAND;
 3033|     66|    case  ((uint32_t) 5 << 16) | 7:
  ------------------
  |  Branch (3033:5): [True: 66, False: 273k]
  ------------------
 3034|     66|        return OFPERR_OFPFMFC_BAD_FLAGS;
 3035|  2.00k|    case  ((uint32_t) 5 << 16) | 8:
  ------------------
  |  Branch (3035:5): [True: 2.00k, False: 271k]
  ------------------
 3036|  2.00k|        return OFPERR_OFPFMFC_CANT_SYNC;
 3037|    241|    case  ((uint32_t) 5 << 16) | 9:
  ------------------
  |  Branch (3037:5): [True: 241, False: 272k]
  ------------------
 3038|    241|        return OFPERR_OFPFMFC_BAD_PRIORITY;
 3039|     34|    case  ((uint32_t) 5 << 16) | 10:
  ------------------
  |  Branch (3039:5): [True: 34, False: 273k]
  ------------------
 3040|     34|        return OFPERR_OFPFMFC_IS_SYNC;
 3041|     18|    case (0x2320ULL << 32) |  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (3041:5): [True: 18, False: 273k]
  ------------------
 3042|     18|        return OFPERR_NXFMFC_HARDWARE;
 3043|    634|    case (0x2320ULL << 32) |  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (3043:5): [True: 634, False: 272k]
  ------------------
 3044|    634|        return OFPERR_NXFMFC_BAD_TABLE_ID;
 3045|    561|    case (0x2320ULL << 32) |  ((uint32_t) 37 << 16) | 0:
  ------------------
  |  Branch (3045:5): [True: 561, False: 272k]
  ------------------
 3046|    561|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3047|     24|    case  ((uint32_t) 6 << 16) | 0:
  ------------------
  |  Branch (3047:5): [True: 24, False: 273k]
  ------------------
 3048|     24|        return OFPERR_OFPGMFC_GROUP_EXISTS;
 3049|  3.56k|    case  ((uint32_t) 6 << 16) | 1:
  ------------------
  |  Branch (3049:5): [True: 3.56k, False: 269k]
  ------------------
 3050|  3.56k|        return OFPERR_OFPGMFC_INVALID_GROUP;
 3051|    604|    case  ((uint32_t) 6 << 16) | 2:
  ------------------
  |  Branch (3051:5): [True: 604, False: 272k]
  ------------------
 3052|    604|        return OFPERR_OFPGMFC_WEIGHT_UNSUPPORTED;
 3053|    838|    case  ((uint32_t) 6 << 16) | 3:
  ------------------
  |  Branch (3053:5): [True: 838, False: 272k]
  ------------------
 3054|    838|        return OFPERR_OFPGMFC_OUT_OF_GROUPS;
 3055|     75|    case  ((uint32_t) 6 << 16) | 4:
  ------------------
  |  Branch (3055:5): [True: 75, False: 273k]
  ------------------
 3056|     75|        return OFPERR_OFPGMFC_OUT_OF_BUCKETS;
 3057|    364|    case  ((uint32_t) 6 << 16) | 5:
  ------------------
  |  Branch (3057:5): [True: 364, False: 272k]
  ------------------
 3058|    364|        return OFPERR_OFPGMFC_CHAINING_UNSUPPORTED;
 3059|  2.73k|    case  ((uint32_t) 6 << 16) | 6:
  ------------------
  |  Branch (3059:5): [True: 2.73k, False: 270k]
  ------------------
 3060|  2.73k|        return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 3061|    865|    case  ((uint32_t) 6 << 16) | 7:
  ------------------
  |  Branch (3061:5): [True: 865, False: 272k]
  ------------------
 3062|    865|        return OFPERR_OFPGMFC_LOOP;
 3063|  2.08k|    case  ((uint32_t) 6 << 16) | 8:
  ------------------
  |  Branch (3063:5): [True: 2.08k, False: 271k]
  ------------------
 3064|  2.08k|        return OFPERR_OFPGMFC_UNKNOWN_GROUP;
 3065|     66|    case  ((uint32_t) 6 << 16) | 9:
  ------------------
  |  Branch (3065:5): [True: 66, False: 273k]
  ------------------
 3066|     66|        return OFPERR_OFPGMFC_CHAINED_GROUP;
 3067|     67|    case  ((uint32_t) 6 << 16) | 10:
  ------------------
  |  Branch (3067:5): [True: 67, False: 273k]
  ------------------
 3068|     67|        return OFPERR_OFPGMFC_BAD_TYPE;
 3069|  1.07k|    case  ((uint32_t) 6 << 16) | 11:
  ------------------
  |  Branch (3069:5): [True: 1.07k, False: 272k]
  ------------------
 3070|  1.07k|        return OFPERR_OFPGMFC_BAD_COMMAND;
 3071|     42|    case  ((uint32_t) 6 << 16) | 12:
  ------------------
  |  Branch (3071:5): [True: 42, False: 273k]
  ------------------
 3072|     42|        return OFPERR_OFPGMFC_BAD_BUCKET;
 3073|    104|    case  ((uint32_t) 6 << 16) | 13:
  ------------------
  |  Branch (3073:5): [True: 104, False: 273k]
  ------------------
 3074|    104|        return OFPERR_OFPGMFC_BAD_WATCH;
 3075|    918|    case  ((uint32_t) 6 << 16) | 14:
  ------------------
  |  Branch (3075:5): [True: 918, False: 272k]
  ------------------
 3076|    918|        return OFPERR_OFPGMFC_EPERM;
 3077|     66|    case  ((uint32_t) 6 << 16) | 15:
  ------------------
  |  Branch (3077:5): [True: 66, False: 273k]
  ------------------
 3078|     66|        return OFPERR_OFPGMFC_UNKNOWN_BUCKET;
 3079|     34|    case  ((uint32_t) 6 << 16) | 16:
  ------------------
  |  Branch (3079:5): [True: 34, False: 273k]
  ------------------
 3080|     34|        return OFPERR_OFPGMFC_BUCKET_EXISTS;
 3081|  1.10k|    case  ((uint32_t) 7 << 16) | 0:
  ------------------
  |  Branch (3081:5): [True: 1.10k, False: 272k]
  ------------------
 3082|  1.10k|        return OFPERR_OFPPMFC_BAD_PORT;
 3083|     34|    case  ((uint32_t) 7 << 16) | 1:
  ------------------
  |  Branch (3083:5): [True: 34, False: 273k]
  ------------------
 3084|     34|        return OFPERR_OFPPMFC_BAD_HW_ADDR;
 3085|     36|    case  ((uint32_t) 7 << 16) | 2:
  ------------------
  |  Branch (3085:5): [True: 36, False: 273k]
  ------------------
 3086|     36|        return OFPERR_OFPPMFC_BAD_CONFIG;
 3087|     69|    case  ((uint32_t) 7 << 16) | 3:
  ------------------
  |  Branch (3087:5): [True: 69, False: 273k]
  ------------------
 3088|     69|        return OFPERR_OFPPMFC_BAD_ADVERTISE;
 3089|     67|    case  ((uint32_t) 7 << 16) | 4:
  ------------------
  |  Branch (3089:5): [True: 67, False: 273k]
  ------------------
 3090|     67|        return OFPERR_OFPPMFC_EPERM;
 3091|  1.24k|    case  ((uint32_t) 8 << 16) | 0:
  ------------------
  |  Branch (3091:5): [True: 1.24k, False: 271k]
  ------------------
 3092|  1.24k|        return OFPERR_OFPTMFC_BAD_TABLE;
 3093|    892|    case  ((uint32_t) 8 << 16) | 1:
  ------------------
  |  Branch (3093:5): [True: 892, False: 272k]
  ------------------
 3094|    892|        return OFPERR_OFPTMFC_BAD_CONFIG;
 3095|  1.75k|    case  ((uint32_t) 8 << 16) | 2:
  ------------------
  |  Branch (3095:5): [True: 1.75k, False: 271k]
  ------------------
 3096|  1.75k|        return OFPERR_OFPTMFC_EPERM;
 3097|    531|    case  ((uint32_t) 9 << 16) | 0:
  ------------------
  |  Branch (3097:5): [True: 531, False: 272k]
  ------------------
 3098|    531|        return OFPERR_OFPQOFC_BAD_PORT;
 3099|     66|    case  ((uint32_t) 9 << 16) | 1:
  ------------------
  |  Branch (3099:5): [True: 66, False: 273k]
  ------------------
 3100|     66|        return OFPERR_OFPQOFC_BAD_QUEUE;
 3101|    407|    case  ((uint32_t) 9 << 16) | 2:
  ------------------
  |  Branch (3101:5): [True: 407, False: 272k]
  ------------------
 3102|    407|        return OFPERR_OFPQOFC_EPERM;
 3103|    638|    case (0x2320ULL << 32) |  ((uint32_t) 23 << 16) | 0:
  ------------------
  |  Branch (3103:5): [True: 638, False: 272k]
  ------------------
 3104|    638|        return OFPERR_NXQOFC_QUEUE_ERROR;
 3105|    483|    case  ((uint32_t) 10 << 16) | 0:
  ------------------
  |  Branch (3105:5): [True: 483, False: 272k]
  ------------------
 3106|    483|        return OFPERR_OFPSCFC_BAD_FLAGS;
 3107|     43|    case  ((uint32_t) 10 << 16) | 1:
  ------------------
  |  Branch (3107:5): [True: 43, False: 273k]
  ------------------
 3108|     43|        return OFPERR_OFPSCFC_BAD_LEN;
 3109|     68|    case  ((uint32_t) 10 << 16) | 2:
  ------------------
  |  Branch (3109:5): [True: 68, False: 273k]
  ------------------
 3110|     68|        return OFPERR_OFPSCFC_EPERM;
 3111|     95|    case  ((uint32_t) 11 << 16) | 0:
  ------------------
  |  Branch (3111:5): [True: 95, False: 273k]
  ------------------
 3112|     95|        return OFPERR_OFPRRFC_STALE;
 3113|    572|    case  ((uint32_t) 11 << 16) | 1:
  ------------------
  |  Branch (3113:5): [True: 572, False: 272k]
  ------------------
 3114|    572|        return OFPERR_OFPRRFC_UNSUP;
 3115|     66|    case  ((uint32_t) 11 << 16) | 2:
  ------------------
  |  Branch (3115:5): [True: 66, False: 273k]
  ------------------
 3116|     66|        return OFPERR_OFPRRFC_BAD_ROLE;
 3117|    258|    case  ((uint32_t) 11 << 16) | 3:
  ------------------
  |  Branch (3117:5): [True: 258, False: 272k]
  ------------------
 3118|    258|        return OFPERR_OFPRRFC_ID_UNSUP;
 3119|     82|    case  ((uint32_t) 11 << 16) | 4:
  ------------------
  |  Branch (3119:5): [True: 82, False: 273k]
  ------------------
 3120|     82|        return OFPERR_OFPRRFC_ID_IN_USE;
 3121|    106|    case  ((uint32_t) 12 << 16) | 0:
  ------------------
  |  Branch (3121:5): [True: 106, False: 273k]
  ------------------
 3122|    106|        return OFPERR_OFPMMFC_UNKNOWN;
 3123|    473|    case  ((uint32_t) 12 << 16) | 1:
  ------------------
  |  Branch (3123:5): [True: 473, False: 272k]
  ------------------
 3124|    473|        return OFPERR_OFPMMFC_METER_EXISTS;
 3125|     68|    case  ((uint32_t) 12 << 16) | 2:
  ------------------
  |  Branch (3125:5): [True: 68, False: 273k]
  ------------------
 3126|     68|        return OFPERR_OFPMMFC_INVALID_METER;
 3127|     66|    case  ((uint32_t) 12 << 16) | 3:
  ------------------
  |  Branch (3127:5): [True: 66, False: 273k]
  ------------------
 3128|     66|        return OFPERR_OFPMMFC_UNKNOWN_METER;
 3129|  3.46k|    case  ((uint32_t) 12 << 16) | 4:
  ------------------
  |  Branch (3129:5): [True: 3.46k, False: 269k]
  ------------------
 3130|  3.46k|        return OFPERR_OFPMMFC_BAD_COMMAND;
 3131|  1.02k|    case  ((uint32_t) 12 << 16) | 5:
  ------------------
  |  Branch (3131:5): [True: 1.02k, False: 272k]
  ------------------
 3132|  1.02k|        return OFPERR_OFPMMFC_BAD_FLAGS;
 3133|     34|    case  ((uint32_t) 12 << 16) | 6:
  ------------------
  |  Branch (3133:5): [True: 34, False: 273k]
  ------------------
 3134|     34|        return OFPERR_OFPMMFC_BAD_RATE;
 3135|     74|    case  ((uint32_t) 12 << 16) | 7:
  ------------------
  |  Branch (3135:5): [True: 74, False: 273k]
  ------------------
 3136|     74|        return OFPERR_OFPMMFC_BAD_BURST;
 3137|     70|    case  ((uint32_t) 12 << 16) | 8:
  ------------------
  |  Branch (3137:5): [True: 70, False: 273k]
  ------------------
 3138|     70|        return OFPERR_OFPMMFC_BAD_BAND;
 3139|     66|    case  ((uint32_t) 12 << 16) | 9:
  ------------------
  |  Branch (3139:5): [True: 66, False: 273k]
  ------------------
 3140|     66|        return OFPERR_OFPMMFC_BAD_BAND_VALUE;
 3141|     69|    case  ((uint32_t) 12 << 16) | 10:
  ------------------
  |  Branch (3141:5): [True: 69, False: 273k]
  ------------------
 3142|     69|        return OFPERR_OFPMMFC_OUT_OF_METERS;
 3143|  1.15k|    case  ((uint32_t) 12 << 16) | 11:
  ------------------
  |  Branch (3143:5): [True: 1.15k, False: 271k]
  ------------------
 3144|  1.15k|        return OFPERR_OFPMMFC_OUT_OF_BANDS;
 3145|    693|    case  ((uint32_t) 13 << 16) | 0:
  ------------------
  |  Branch (3145:5): [True: 693, False: 272k]
  ------------------
 3146|    693|        return OFPERR_OFPTFFC_BAD_TABLE;
 3147|     66|    case  ((uint32_t) 13 << 16) | 1:
  ------------------
  |  Branch (3147:5): [True: 66, False: 273k]
  ------------------
 3148|     66|        return OFPERR_OFPTFFC_BAD_METADATA;
 3149|     51|    case  ((uint32_t) 13 << 16) | 5:
  ------------------
  |  Branch (3149:5): [True: 51, False: 273k]
  ------------------
 3150|     51|        return OFPERR_OFPTFFC_EPERM;
 3151|  6.11k|    case  ((uint32_t) 13 << 16) | 6:
  ------------------
  |  Branch (3151:5): [True: 6.11k, False: 266k]
  ------------------
 3152|  6.11k|        return OFPERR_OFPTFFC_BAD_CAPA;
 3153|     36|    case  ((uint32_t) 13 << 16) | 7:
  ------------------
  |  Branch (3153:5): [True: 36, False: 273k]
  ------------------
 3154|     36|        return OFPERR_OFPTFFC_BAD_MAX_ENT;
 3155|     34|    case  ((uint32_t) 13 << 16) | 8:
  ------------------
  |  Branch (3155:5): [True: 34, False: 273k]
  ------------------
 3156|     34|        return OFPERR_OFPTFFC_BAD_FEATURES;
 3157|     34|    case  ((uint32_t) 13 << 16) | 9:
  ------------------
  |  Branch (3157:5): [True: 34, False: 273k]
  ------------------
 3158|     34|        return OFPERR_OFPTFFC_BAD_COMMAND;
 3159|     22|    case  ((uint32_t) 13 << 16) | 10:
  ------------------
  |  Branch (3159:5): [True: 22, False: 273k]
  ------------------
 3160|     22|        return OFPERR_OFPTFFC_TOO_MANY;
 3161|     36|    case (0x2320ULL << 32) |  ((uint32_t) 44 << 16) | 0:
  ------------------
  |  Branch (3161:5): [True: 36, False: 273k]
  ------------------
 3162|     36|        return OFPERR_NXTFFC_DUP_TABLE;
 3163|    159|    case  ((uint32_t) 14 << 16) | 0:
  ------------------
  |  Branch (3163:5): [True: 159, False: 272k]
  ------------------
 3164|    159|        return OFPERR_OFPBPC_BAD_TYPE;
 3165|     71|    case  ((uint32_t) 14 << 16) | 1:
  ------------------
  |  Branch (3165:5): [True: 71, False: 273k]
  ------------------
 3166|     71|        return OFPERR_OFPBPC_BAD_LEN;
 3167|    875|    case  ((uint32_t) 14 << 16) | 2:
  ------------------
  |  Branch (3167:5): [True: 875, False: 272k]
  ------------------
 3168|    875|        return OFPERR_OFPBPC_BAD_VALUE;
 3169|    821|    case  ((uint32_t) 14 << 16) | 3:
  ------------------
  |  Branch (3169:5): [True: 821, False: 272k]
  ------------------
 3170|    821|        return OFPERR_OFPBPC_TOO_MANY;
 3171|    636|    case  ((uint32_t) 14 << 16) | 4:
  ------------------
  |  Branch (3171:5): [True: 636, False: 272k]
  ------------------
 3172|    636|        return OFPERR_OFPBPC_DUP_TYPE;
 3173|     60|    case  ((uint32_t) 14 << 16) | 5:
  ------------------
  |  Branch (3173:5): [True: 60, False: 273k]
  ------------------
 3174|     60|        return OFPERR_OFPBPC_BAD_EXPERIMENTER;
 3175|     66|    case  ((uint32_t) 14 << 16) | 6:
  ------------------
  |  Branch (3175:5): [True: 66, False: 273k]
  ------------------
 3176|     66|        return OFPERR_OFPBPC_BAD_EXP_TYPE;
 3177|    774|    case  ((uint32_t) 14 << 16) | 7:
  ------------------
  |  Branch (3177:5): [True: 774, False: 272k]
  ------------------
 3178|    774|        return OFPERR_OFPBPC_BAD_EXP_VALUE;
 3179|  11.5k|    case  ((uint32_t) 14 << 16) | 8:
  ------------------
  |  Branch (3179:5): [True: 11.5k, False: 261k]
  ------------------
 3180|  11.5k|        return OFPERR_OFPBPC_EPERM;
 3181|     80|    case  ((uint32_t) 15 << 16) | 0:
  ------------------
  |  Branch (3181:5): [True: 80, False: 273k]
  ------------------
 3182|     80|        return OFPERR_OFPACFC_INVALID;
 3183|     34|    case  ((uint32_t) 15 << 16) | 1:
  ------------------
  |  Branch (3183:5): [True: 34, False: 273k]
  ------------------
 3184|     34|        return OFPERR_OFPACFC_UNSUPPORTED;
 3185|     70|    case  ((uint32_t) 15 << 16) | 2:
  ------------------
  |  Branch (3185:5): [True: 70, False: 273k]
  ------------------
 3186|     70|        return OFPERR_OFPACFC_EPERM;
 3187|    114|    case  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (3187:5): [True: 114, False: 272k]
  ------------------
 3188|    114|        return OFPERR_OFPBFC_UNKNOWN;
 3189|  2.81k|    case  ((uint32_t) 17 << 16) | 1:
  ------------------
  |  Branch (3189:5): [True: 2.81k, False: 270k]
  ------------------
 3190|  2.81k|        return OFPERR_OFPBFC_EPERM;
 3191|     89|    case  ((uint32_t) 17 << 16) | 2:
  ------------------
  |  Branch (3191:5): [True: 89, False: 273k]
  ------------------
 3192|     89|        return OFPERR_OFPBFC_BAD_ID;
 3193|     68|    case  ((uint32_t) 17 << 16) | 3:
  ------------------
  |  Branch (3193:5): [True: 68, False: 273k]
  ------------------
 3194|     68|        return OFPERR_OFPBFC_BUNDLE_EXIST;
 3195|     82|    case  ((uint32_t) 17 << 16) | 4:
  ------------------
  |  Branch (3195:5): [True: 82, False: 273k]
  ------------------
 3196|     82|        return OFPERR_OFPBFC_BUNDLE_CLOSED;
 3197|    578|    case  ((uint32_t) 17 << 16) | 5:
  ------------------
  |  Branch (3197:5): [True: 578, False: 272k]
  ------------------
 3198|    578|        return OFPERR_OFPBFC_OUT_OF_BUNDLES;
 3199|     89|    case  ((uint32_t) 17 << 16) | 6:
  ------------------
  |  Branch (3199:5): [True: 89, False: 273k]
  ------------------
 3200|     89|        return OFPERR_OFPBFC_BAD_TYPE;
 3201|  1.95k|    case  ((uint32_t) 17 << 16) | 7:
  ------------------
  |  Branch (3201:5): [True: 1.95k, False: 271k]
  ------------------
 3202|  1.95k|        return OFPERR_OFPBFC_BAD_FLAGS;
 3203|  1.99k|    case  ((uint32_t) 17 << 16) | 8:
  ------------------
  |  Branch (3203:5): [True: 1.99k, False: 271k]
  ------------------
 3204|  1.99k|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 3205|    385|    case  ((uint32_t) 17 << 16) | 9:
  ------------------
  |  Branch (3205:5): [True: 385, False: 272k]
  ------------------
 3206|    385|        return OFPERR_OFPBFC_MSG_BAD_XID;
 3207|     67|    case  ((uint32_t) 17 << 16) | 10:
  ------------------
  |  Branch (3207:5): [True: 67, False: 273k]
  ------------------
 3208|     67|        return OFPERR_OFPBFC_MSG_UNSUP;
 3209|  4.35k|    case  ((uint32_t) 17 << 16) | 11:
  ------------------
  |  Branch (3209:5): [True: 4.35k, False: 268k]
  ------------------
 3210|  4.35k|        return OFPERR_OFPBFC_MSG_CONFLICT;
 3211|     66|    case  ((uint32_t) 17 << 16) | 12:
  ------------------
  |  Branch (3211:5): [True: 66, False: 273k]
  ------------------
 3212|     66|        return OFPERR_OFPBFC_MSG_TOO_MANY;
 3213|    240|    case  ((uint32_t) 17 << 16) | 13:
  ------------------
  |  Branch (3213:5): [True: 240, False: 272k]
  ------------------
 3214|    240|        return OFPERR_OFPBFC_MSG_FAILED;
 3215|    637|    case  ((uint32_t) 17 << 16) | 14:
  ------------------
  |  Branch (3215:5): [True: 637, False: 272k]
  ------------------
 3216|    637|        return OFPERR_OFPBFC_TIMEOUT;
 3217|  5.08k|    case  ((uint32_t) 17 << 16) | 15:
  ------------------
  |  Branch (3217:5): [True: 5.08k, False: 268k]
  ------------------
 3218|  5.08k|        return OFPERR_OFPBFC_BUNDLE_IN_PROGRESS;
 3219|  3.82k|    case  ((uint32_t) 17 << 16) | 16:
  ------------------
  |  Branch (3219:5): [True: 3.82k, False: 269k]
  ------------------
 3220|  3.82k|        return OFPERR_OFPBFC_SCHED_NOT_SUPPORTED;
 3221|     35|    case  ((uint32_t) 17 << 16) | 17:
  ------------------
  |  Branch (3221:5): [True: 35, False: 273k]
  ------------------
 3222|     35|        return OFPERR_OFPBFC_SCHED_FUTURE;
 3223|     34|    case  ((uint32_t) 17 << 16) | 18:
  ------------------
  |  Branch (3223:5): [True: 34, False: 273k]
  ------------------
 3224|     34|        return OFPERR_OFPBFC_SCHED_PAST;
 3225|  2.74k|    case (0x2320ULL << 32) |  ((uint32_t) 22 << 16) | 0:
  ------------------
  |  Branch (3225:5): [True: 2.74k, False: 270k]
  ------------------
 3226|  2.74k|        return OFPERR_OFPBFC_BAD_VERSION;
 3227|     66|    case  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (3227:5): [True: 66, False: 273k]
  ------------------
 3228|     66|        return OFPERR_OFPMOFC_UNKNOWN;
 3229|     80|    case  ((uint32_t) 16 << 16) | 1:
  ------------------
  |  Branch (3229:5): [True: 80, False: 273k]
  ------------------
 3230|     80|        return OFPERR_OFPMOFC_MONITOR_EXISTS;
 3231|     41|    case  ((uint32_t) 16 << 16) | 2:
  ------------------
  |  Branch (3231:5): [True: 41, False: 273k]
  ------------------
 3232|     41|        return OFPERR_OFPMOFC_INVALID_MONITOR;
 3233|    151|    case  ((uint32_t) 16 << 16) | 3:
  ------------------
  |  Branch (3233:5): [True: 151, False: 272k]
  ------------------
 3234|    151|        return OFPERR_OFPMOFC_UNKNOWN_MONITOR;
 3235|     66|    case  ((uint32_t) 16 << 16) | 4:
  ------------------
  |  Branch (3235:5): [True: 66, False: 273k]
  ------------------
 3236|     66|        return OFPERR_OFPMOFC_BAD_COMMAND;
 3237|    116|    case  ((uint32_t) 16 << 16) | 5:
  ------------------
  |  Branch (3237:5): [True: 116, False: 272k]
  ------------------
 3238|    116|        return OFPERR_OFPMOFC_BAD_FLAGS;
 3239|     18|    case  ((uint32_t) 16 << 16) | 6:
  ------------------
  |  Branch (3239:5): [True: 18, False: 273k]
  ------------------
 3240|     18|        return OFPERR_OFPMOFC_BAD_TABLE_ID;
 3241|    331|    case  ((uint32_t) 16 << 16) | 7:
  ------------------
  |  Branch (3241:5): [True: 331, False: 272k]
  ------------------
 3242|    331|        return OFPERR_OFPMOFC_BAD_OUT;
 3243|     18|    case (0x2320ULL << 32) |  ((uint32_t) 16 << 16) | 0:
  ------------------
  |  Branch (3243:5): [True: 18, False: 273k]
  ------------------
 3244|     18|        return OFPERR_NXTTMFC_BAD_COMMAND;
 3245|     18|    case (0x2320ULL << 32) |  ((uint32_t) 17 << 16) | 0:
  ------------------
  |  Branch (3245:5): [True: 18, False: 273k]
  ------------------
 3246|     18|        return OFPERR_NXTTMFC_BAD_OPT_LEN;
 3247|     37|    case (0x2320ULL << 32) |  ((uint32_t) 18 << 16) | 0:
  ------------------
  |  Branch (3247:5): [True: 37, False: 273k]
  ------------------
 3248|     37|        return OFPERR_NXTTMFC_BAD_FIELD_IDX;
 3249|     10|    case (0x2320ULL << 32) |  ((uint32_t) 19 << 16) | 0:
  ------------------
  |  Branch (3249:5): [True: 10, False: 273k]
  ------------------
 3250|     10|        return OFPERR_NXTTMFC_TABLE_FULL;
 3251|     18|    case (0x2320ULL << 32) |  ((uint32_t) 20 << 16) | 0:
  ------------------
  |  Branch (3251:5): [True: 18, False: 273k]
  ------------------
 3252|     18|        return OFPERR_NXTTMFC_ALREADY_MAPPED;
 3253|     66|    case (0x2320ULL << 32) |  ((uint32_t) 21 << 16) | 0:
  ------------------
  |  Branch (3253:5): [True: 66, False: 273k]
  ------------------
 3254|     66|        return OFPERR_NXTTMFC_DUP_ENTRY;
 3255|    752|    case (0x2320ULL << 32) |  ((uint32_t) 38 << 16) | 0:
  ------------------
  |  Branch (3255:5): [True: 752, False: 272k]
  ------------------
 3256|    752|        return OFPERR_NXTTMFC_INVALID_TLV_DEL;
 3257|    613|    case (0x2320ULL << 32) |  ((uint32_t) 34 << 16) | 0:
  ------------------
  |  Branch (3257:5): [True: 613, False: 272k]
  ------------------
 3258|    613|        return OFPERR_NXR_NOT_SUPPORTED;
 3259|  2.12k|    case (0x2320ULL << 32) |  ((uint32_t) 35 << 16) | 0:
  ------------------
  |  Branch (3259:5): [True: 2.12k, False: 270k]
  ------------------
 3260|  2.12k|        return OFPERR_NXR_STALE;
 3261|     10|    case (0x2320ULL << 32) |  ((uint32_t) 36 << 16) | 0:
  ------------------
  |  Branch (3261:5): [True: 10, False: 273k]
  ------------------
 3262|     10|        return OFPERR_NXST_NOT_CONFIGURED;
 3263|   273k|    }
 3264|       |
 3265|  80.3k|    return 0;
 3266|   273k|}

ofputil_flow_mod_flags_format:
  111|  88.2k|{
  112|  88.2k|    if (flags & OFPUTIL_FF_SEND_FLOW_REM) {
  ------------------
  |  Branch (112:9): [True: 20.5k, False: 67.6k]
  ------------------
  113|  20.5k|        ds_put_cstr(s, "send_flow_rem ");
  114|  20.5k|    }
  115|  88.2k|    if (flags & OFPUTIL_FF_CHECK_OVERLAP) {
  ------------------
  |  Branch (115:9): [True: 24.3k, False: 63.8k]
  ------------------
  116|  24.3k|        ds_put_cstr(s, "check_overlap ");
  117|  24.3k|    }
  118|  88.2k|    if (flags & OFPUTIL_FF_RESET_COUNTS) {
  ------------------
  |  Branch (118:9): [True: 5.04k, False: 83.1k]
  ------------------
  119|  5.04k|        ds_put_cstr(s, "reset_counts ");
  120|  5.04k|    }
  121|  88.2k|    if (flags & OFPUTIL_FF_NO_PKT_COUNTS) {
  ------------------
  |  Branch (121:9): [True: 9.41k, False: 78.8k]
  ------------------
  122|  9.41k|        ds_put_cstr(s, "no_packet_counts ");
  123|  9.41k|    }
  124|  88.2k|    if (flags & OFPUTIL_FF_NO_BYT_COUNTS) {
  ------------------
  |  Branch (124:9): [True: 3.69k, False: 84.5k]
  ------------------
  125|  3.69k|        ds_put_cstr(s, "no_byte_counts ");
  126|  3.69k|    }
  127|  88.2k|    if (flags & OFPUTIL_FF_HIDDEN_FIELDS) {
  ------------------
  |  Branch (127:9): [True: 0, False: 88.2k]
  ------------------
  128|      0|        ds_put_cstr(s, "allow_hidden_fields ");
  129|      0|    }
  130|  88.2k|    if (flags & OFPUTIL_FF_NO_READONLY) {
  ------------------
  |  Branch (130:9): [True: 0, False: 88.2k]
  ------------------
  131|      0|        ds_put_cstr(s, "no_readonly_table ");
  132|      0|    }
  133|  88.2k|}
ofputil_decode_flow_mod:
  155|   227k|{
  156|   227k|    ovs_be16 raw_flags;
  157|   227k|    enum ofperr error;
  158|   227k|    struct match match;
  159|   227k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  160|   227k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  161|   227k|    if (raw == OFPRAW_OFPT11_FLOW_MOD) {
  ------------------
  |  Branch (161:9): [True: 70.7k, False: 156k]
  ------------------
  162|       |        /* Standard OpenFlow 1.1+ flow_mod. */
  163|  70.7k|        const struct ofp11_flow_mod *ofm;
  164|       |
  165|  70.7k|        ofm = ofpbuf_pull(&b, sizeof *ofm);
  166|       |
  167|  70.7k|        error = ofputil_pull_ofp11_match(&b, tun_table, vl_mff_map, &match,
  168|  70.7k|                                         NULL);
  169|  70.7k|        if (error) {
  ------------------
  |  Branch (169:13): [True: 15.4k, False: 55.3k]
  ------------------
  170|  15.4k|            return error;
  171|  15.4k|        }
  172|       |
  173|       |        /* Translate the message. */
  174|  55.3k|        fm->priority = ntohs(ofm->priority);
  175|  55.3k|        if (ofm->command == OFPFC_ADD
  ------------------
  |  Branch (175:13): [True: 44.1k, False: 11.1k]
  ------------------
  176|  55.3k|            || (oh->version == OFP11_VERSION
  ------------------
  |  Branch (176:17): [True: 5.22k, False: 5.95k]
  ------------------
  177|  11.1k|                && (ofm->command == OFPFC_MODIFY ||
  ------------------
  |  Branch (177:21): [True: 1.97k, False: 3.24k]
  ------------------
  178|  5.22k|                    ofm->command == OFPFC_MODIFY_STRICT)
  ------------------
  |  Branch (178:21): [True: 1.69k, False: 1.54k]
  ------------------
  179|  44.3k|                && ofm->cookie_mask == htonll(0))) {
  ------------------
  |  Branch (179:20): [True: 249, False: 3.42k]
  ------------------
  180|       |            /* In OpenFlow 1.1 only, a "modify" or "modify-strict" that does
  181|       |             * not match on the cookie is treated as an "add" if there is no
  182|       |             * match. */
  183|  44.3k|            fm->cookie = htonll(0);
  184|  44.3k|            fm->cookie_mask = htonll(0);
  185|  44.3k|            fm->new_cookie = ofm->cookie;
  186|  44.3k|        } else {
  187|  10.9k|            fm->cookie = ofm->cookie;
  188|  10.9k|            fm->cookie_mask = ofm->cookie_mask;
  189|  10.9k|            fm->new_cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  10.9k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  190|  10.9k|        }
  191|  55.3k|        fm->modify_cookie = false;
  192|  55.3k|        fm->command = ofm->command;
  193|       |
  194|       |        /* Get table ID.
  195|       |         *
  196|       |         * OF1.1 entirely forbids table_id == OFPTT_ALL.
  197|       |         * OF1.2+ allows table_id == OFPTT_ALL only for deletes. */
  198|  55.3k|        fm->table_id = ofm->table_id;
  199|  55.3k|        if (fm->table_id == OFPTT_ALL
  ------------------
  |  Branch (199:13): [True: 936, False: 54.3k]
  ------------------
  200|  55.3k|            && (oh->version == OFP11_VERSION
  ------------------
  |  Branch (200:17): [True: 365, False: 571]
  ------------------
  201|    936|                || (ofm->command != OFPFC_DELETE &&
  ------------------
  |  Branch (201:21): [True: 545, False: 26]
  ------------------
  202|    761|                    ofm->command != OFPFC_DELETE_STRICT))) {
  ------------------
  |  Branch (202:21): [True: 396, False: 149]
  ------------------
  203|    761|            return OFPERR_OFPFMFC_BAD_TABLE_ID;
  204|    761|        }
  205|       |
  206|  54.5k|        fm->idle_timeout = ntohs(ofm->idle_timeout);
  207|  54.5k|        fm->hard_timeout = ntohs(ofm->hard_timeout);
  208|  54.5k|        if (oh->version >= OFP14_VERSION && ofm->command == OFPFC_ADD) {
  ------------------
  |  Branch (208:13): [True: 48.9k, False: 5.61k]
  |  Branch (208:45): [True: 43.4k, False: 5.54k]
  ------------------
  209|  43.4k|            fm->importance = ntohs(ofm->importance);
  210|  43.4k|        } else {
  211|  11.1k|            fm->importance = 0;
  212|  11.1k|        }
  213|  54.5k|        fm->buffer_id = ntohl(ofm->buffer_id);
  214|  54.5k|        error = ofputil_port_from_ofp11(ofm->out_port, &fm->out_port);
  215|  54.5k|        if (error) {
  ------------------
  |  Branch (215:13): [True: 2.59k, False: 51.9k]
  ------------------
  216|  2.59k|            return error;
  217|  2.59k|        }
  218|       |
  219|  51.9k|        fm->out_group = (ofm->command == OFPFC_DELETE ||
  ------------------
  |  Branch (219:26): [True: 1.24k, False: 50.7k]
  ------------------
  220|  51.9k|                         ofm->command == OFPFC_DELETE_STRICT
  ------------------
  |  Branch (220:26): [True: 1.07k, False: 49.6k]
  ------------------
  221|  51.9k|                         ? ntohl(ofm->out_group)
  222|  51.9k|                         : OFPG_ANY);
  223|  51.9k|        raw_flags = ofm->flags;
  224|   156k|    } else {
  225|   156k|        uint16_t command;
  226|       |
  227|   156k|        if (raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (227:13): [True: 148k, False: 7.69k]
  ------------------
  228|       |            /* Standard OpenFlow 1.0 flow_mod. */
  229|   148k|            const struct ofp10_flow_mod *ofm;
  230|       |
  231|       |            /* Get the ofp10_flow_mod. */
  232|   148k|            ofm = ofpbuf_pull(&b, sizeof *ofm);
  233|       |
  234|       |            /* Translate the rule. */
  235|   148k|            ofputil_match_from_ofp10_match(&ofm->match, &match);
  236|   148k|            ofputil_normalize_match(&match);
  237|       |
  238|       |            /* OpenFlow 1.0 says that exact-match rules have to have the
  239|       |             * highest possible priority. */
  240|   148k|            fm->priority = (ofm->match.wildcards & htonl(OFPFW10_ALL)
  ------------------
  |  Branch (240:29): [True: 140k, False: 8.01k]
  ------------------
  241|   148k|                            ? ntohs(ofm->priority)
  242|   148k|                            : UINT16_MAX);
  243|       |
  244|       |            /* Translate the message. */
  245|   148k|            command = ntohs(ofm->command);
  246|   148k|            fm->cookie = htonll(0);
  247|   148k|            fm->cookie_mask = htonll(0);
  248|   148k|            fm->new_cookie = ofm->cookie;
  249|   148k|            fm->idle_timeout = ntohs(ofm->idle_timeout);
  250|   148k|            fm->hard_timeout = ntohs(ofm->hard_timeout);
  251|   148k|            fm->importance = 0;
  252|   148k|            fm->buffer_id = ntohl(ofm->buffer_id);
  253|   148k|            fm->out_port = u16_to_ofp(ntohs(ofm->out_port));
  254|   148k|            fm->out_group = OFPG_ANY;
  255|   148k|            raw_flags = ofm->flags;
  256|   148k|        } else if (raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (256:20): [True: 7.69k, False: 0]
  ------------------
  257|       |            /* Nicira extended flow_mod. */
  258|  7.69k|            const struct nx_flow_mod *nfm;
  259|       |
  260|       |            /* Dissect the message. */
  261|  7.69k|            nfm = ofpbuf_pull(&b, sizeof *nfm);
  262|  7.69k|            error = nx_pull_match(&b, ntohs(nfm->match_len),
  263|  7.69k|                                  &match, &fm->cookie, &fm->cookie_mask,
  264|  7.69k|                                  false, tun_table, vl_mff_map);
  265|  7.69k|            if (error) {
  ------------------
  |  Branch (265:17): [True: 3.02k, False: 4.66k]
  ------------------
  266|  3.02k|                return error;
  267|  3.02k|            }
  268|       |
  269|       |            /* Translate the message. */
  270|  4.66k|            command = ntohs(nfm->command);
  271|  4.66k|            if ((command & 0xff) == OFPFC_ADD && fm->cookie_mask) {
  ------------------
  |  Branch (271:17): [True: 3.49k, False: 1.16k]
  |  Branch (271:50): [True: 76, False: 3.42k]
  ------------------
  272|       |                /* Flow additions may only set a new cookie, not match an
  273|       |                 * existing cookie. */
  274|     76|                return OFPERR_NXBRC_NXM_INVALID;
  275|     76|            }
  276|  4.58k|            fm->priority = ntohs(nfm->priority);
  277|  4.58k|            fm->new_cookie = nfm->cookie;
  278|  4.58k|            fm->idle_timeout = ntohs(nfm->idle_timeout);
  279|  4.58k|            fm->hard_timeout = ntohs(nfm->hard_timeout);
  280|  4.58k|            fm->importance = 0;
  281|  4.58k|            fm->buffer_id = ntohl(nfm->buffer_id);
  282|  4.58k|            fm->out_port = u16_to_ofp(ntohs(nfm->out_port));
  283|  4.58k|            fm->out_group = OFPG_ANY;
  284|  4.58k|            raw_flags = nfm->flags;
  285|  4.58k|        } else {
  286|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  287|      0|        }
  288|       |
  289|   153k|        fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
  ------------------
  |  |   44|   153k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  290|   153k|        if (protocol & OFPUTIL_P_TID) {
  ------------------
  |  |  103|   153k|#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
  |  |  104|   153k|                       OFPUTIL_P_OF10_NXM_TID | \
  |  |  105|   153k|                       OFPUTIL_P_OF11_STD |     \
  |  |  106|   153k|                       OFPUTIL_P_ANY_OXM)
  |  |  ------------------
  |  |  |  |   82|   153k|#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
  |  |  |  |   83|   153k|                           OFPUTIL_P_OF13_OXM | \
  |  |  |  |   84|   153k|                           OFPUTIL_P_OF14_OXM | \
  |  |  |  |   85|   153k|                           OFPUTIL_P_OF15_OXM)
  |  |  ------------------
  ------------------
  |  Branch (290:13): [True: 153k, False: 0]
  ------------------
  291|   153k|            fm->command = command & 0xff;
  292|   153k|            fm->table_id = command >> 8;
  293|   153k|        } else {
  294|      0|            if (command > 0xff) {
  ------------------
  |  Branch (294:17): [True: 0, False: 0]
  ------------------
  295|      0|                VLOG_WARN_RL(&rl, "flow_mod has explicit table_id "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  296|      0|                             "but flow_mod_table_id extension is not enabled");
  297|      0|            }
  298|      0|            fm->command = command;
  299|      0|            fm->table_id = 0xff;
  300|      0|        }
  301|   153k|    }
  302|       |
  303|       |    /* Check for mismatched conntrack original direction tuple address fields
  304|       |     * w.r.t. the IP version of the match. */
  305|   205k|    if (((match.wc.masks.ct_nw_src || match.wc.masks.ct_nw_dst)
  ------------------
  |  Branch (305:11): [True: 0, False: 205k]
  |  Branch (305:39): [True: 0, False: 205k]
  ------------------
  306|   205k|         && match.flow.dl_type != htons(ETH_TYPE_IP))
  ------------------
  |  Branch (306:13): [True: 0, False: 0]
  ------------------
  307|   205k|        || ((ipv6_addr_is_set(&match.wc.masks.ct_ipv6_src)
  ------------------
  |  Branch (307:14): [True: 0, False: 205k]
  ------------------
  308|   205k|             || ipv6_addr_is_set(&match.wc.masks.ct_ipv6_dst))
  ------------------
  |  Branch (308:17): [True: 0, False: 205k]
  ------------------
  309|   205k|            && match.flow.dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (309:16): [True: 0, False: 0]
  ------------------
  310|      0|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
  311|      0|    }
  312|       |
  313|   205k|    if (fm->command > OFPFC_DELETE_STRICT) {
  ------------------
  |  Branch (313:9): [True: 17.4k, False: 187k]
  ------------------
  314|  17.4k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  315|  17.4k|    }
  316|       |
  317|   187k|    fm->ofpacts_tlv_bitmap = 0;
  318|   187k|    error = ofpacts_pull_openflow_instructions(&b, b.size, oh->version,
  319|   187k|                                               vl_mff_map,
  320|   187k|                                               &fm->ofpacts_tlv_bitmap,
  321|   187k|                                               ofpacts);
  322|   187k|    if (error) {
  ------------------
  |  Branch (322:9): [True: 79.0k, False: 108k]
  ------------------
  323|  79.0k|        return error;
  324|  79.0k|    }
  325|   108k|    fm->ofpacts = ofpacts->data;
  326|   108k|    fm->ofpacts_len = ofpacts->size;
  327|       |
  328|   108k|    error = ofputil_decode_flow_mod_flags(raw_flags, fm->command,
  329|   108k|                                          oh->version, &fm->flags);
  330|   108k|    if (error) {
  ------------------
  |  Branch (330:9): [True: 4.80k, False: 104k]
  ------------------
  331|  4.80k|        return error;
  332|  4.80k|    }
  333|       |
  334|   104k|    if (fm->flags & OFPUTIL_FF_EMERG) {
  ------------------
  |  Branch (334:9): [True: 879, False: 103k]
  ------------------
  335|       |        /* We do not support the OpenFlow 1.0 emergency flow cache, which
  336|       |         * is not required in OpenFlow 1.0.1 and removed from OpenFlow 1.1.
  337|       |         *
  338|       |         * OpenFlow 1.0 specifies the error code to use when idle_timeout
  339|       |         * or hard_timeout is nonzero.  Otherwise, there is no good error
  340|       |         * code, so just state that the flow table is full. */
  341|    879|        return (fm->hard_timeout || fm->idle_timeout
  ------------------
  |  Branch (341:17): [True: 13, False: 866]
  |  Branch (341:37): [True: 807, False: 59]
  ------------------
  342|    879|                ? OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT
  343|    879|                : OFPERR_OFPFMFC_TABLE_FULL);
  344|    879|    }
  345|       |
  346|   103k|    struct ofpact_check_params cp = {
  347|   103k|        .match = &match,
  348|   103k|        .max_ports = max_port,
  349|   103k|        .table_id = fm->table_id,
  350|   103k|        .n_tables = max_table
  351|   103k|    };
  352|   103k|    error = ofpacts_check_consistency(fm->ofpacts, fm->ofpacts_len,
  353|   103k|                                      protocol, &cp);
  354|   103k|    if (!error) {
  ------------------
  |  Branch (354:9): [True: 78.1k, False: 25.0k]
  ------------------
  355|  78.1k|        minimatch_init(&fm->match, &match);
  356|  78.1k|    }
  357|   103k|    return error;
  358|   104k|}
ofputil_flow_mod_format:
  489|   227k|{
  490|   227k|    struct ofputil_flow_mod fm;
  491|   227k|    struct ofpbuf ofpacts;
  492|   227k|    bool need_priority;
  493|   227k|    enum ofperr error;
  494|   227k|    enum ofpraw raw;
  495|   227k|    enum ofputil_protocol protocol;
  496|       |
  497|   227k|    protocol = ofputil_protocol_from_ofp_version(oh->version);
  498|   227k|    protocol = ofputil_protocol_set_tid(protocol, true);
  499|       |
  500|   227k|    ofpbuf_init(&ofpacts, 64);
  501|   227k|    error = ofputil_decode_flow_mod(&fm, oh, protocol, NULL, NULL, &ofpacts,
  502|   227k|                                    OFPP_MAX, 255);
  ------------------
  |  |   33|   227k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   227k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  503|   227k|    if (error) {
  ------------------
  |  Branch (503:9): [True: 149k, False: 78.1k]
  ------------------
  504|   149k|        ofpbuf_uninit(&ofpacts);
  505|   149k|        return error;
  506|   149k|    }
  507|       |
  508|  78.1k|    ds_put_char(s, ' ');
  509|  78.1k|    switch (fm.command) {
  510|  54.9k|    case OFPFC_ADD:
  ------------------
  |  Branch (510:5): [True: 54.9k, False: 23.1k]
  ------------------
  511|  54.9k|        ds_put_cstr(s, "ADD");
  512|  54.9k|        break;
  513|  5.85k|    case OFPFC_MODIFY:
  ------------------
  |  Branch (513:5): [True: 5.85k, False: 72.2k]
  ------------------
  514|  5.85k|        ds_put_cstr(s, "MOD");
  515|  5.85k|        break;
  516|  11.8k|    case OFPFC_MODIFY_STRICT:
  ------------------
  |  Branch (516:5): [True: 11.8k, False: 66.2k]
  ------------------
  517|  11.8k|        ds_put_cstr(s, "MOD_STRICT");
  518|  11.8k|        break;
  519|  2.33k|    case OFPFC_DELETE:
  ------------------
  |  Branch (519:5): [True: 2.33k, False: 75.7k]
  ------------------
  520|  2.33k|        ds_put_cstr(s, "DEL");
  521|  2.33k|        break;
  522|  3.09k|    case OFPFC_DELETE_STRICT:
  ------------------
  |  Branch (522:5): [True: 3.09k, False: 75.0k]
  ------------------
  523|  3.09k|        ds_put_cstr(s, "DEL_STRICT");
  524|  3.09k|        break;
  525|      0|    default:
  ------------------
  |  Branch (525:5): [True: 0, False: 78.1k]
  ------------------
  526|      0|        ds_put_format(s, "cmd:%d", fm.command);
  527|  78.1k|    }
  528|  78.1k|    if (fm.table_id != 0
  ------------------
  |  Branch (528:9): [True: 49.1k, False: 28.9k]
  ------------------
  529|  78.1k|        || ofputil_table_map_get_name(table_map, fm.table_id)) {
  ------------------
  |  Branch (529:12): [True: 0, False: 28.9k]
  ------------------
  530|  49.1k|        ds_put_format(s, " table:");
  531|  49.1k|        ofputil_format_table(fm.table_id, table_map, s);
  532|  49.1k|    }
  533|       |
  534|  78.1k|    ds_put_char(s, ' ');
  535|  78.1k|    ofpraw_decode(&raw, oh);
  536|  78.1k|    if (verbosity >= 3 && raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (536:9): [True: 0, False: 78.1k]
  |  Branch (536:27): [True: 0, False: 0]
  ------------------
  537|      0|        const struct ofp10_flow_mod *ofm = ofpmsg_body(oh);
  538|      0|        ofp10_match_print(s, &ofm->match, port_map, verbosity);
  539|       |
  540|       |        /* ofp_print_match() doesn't print priority. */
  541|      0|        need_priority = true;
  542|  78.1k|    } else if (verbosity >= 3 && raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (542:16): [True: 0, False: 78.1k]
  |  Branch (542:34): [True: 0, False: 0]
  ------------------
  543|      0|        const struct nx_flow_mod *nfm = ofpmsg_body(oh);
  544|      0|        const void *nxm = nfm + 1;
  545|      0|        char *nxm_s;
  546|       |
  547|      0|        nxm_s = nx_match_to_string(nxm, ntohs(nfm->match_len));
  548|      0|        ds_put_cstr(s, nxm_s);
  549|      0|        free(nxm_s);
  550|       |
  551|       |        /* nx_match_to_string() doesn't print priority. */
  552|      0|        need_priority = true;
  553|  78.1k|    } else {
  554|  78.1k|        struct match match;
  555|  78.1k|        minimatch_expand(&fm.match, &match);
  556|  78.1k|        match_format(&match, port_map, s, fm.priority);
  557|       |
  558|       |        /* match_format() does print priority. */
  559|  78.1k|        need_priority = false;
  560|  78.1k|    }
  561|       |
  562|  78.1k|    if (ds_last(s) != ' ') {
  ------------------
  |  Branch (562:9): [True: 78.0k, False: 78]
  ------------------
  563|  78.0k|        ds_put_char(s, ' ');
  564|  78.0k|    }
  565|  78.1k|    if (fm.new_cookie != htonll(0) && fm.new_cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  73.7k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (565:9): [True: 73.7k, False: 4.41k]
  |  Branch (565:39): [True: 69.1k, False: 4.59k]
  ------------------
  566|  69.1k|        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
  567|  69.1k|    }
  568|  78.1k|    if (fm.cookie_mask != htonll(0)) {
  ------------------
  |  Branch (568:9): [True: 4.59k, False: 73.5k]
  ------------------
  569|  4.59k|        ds_put_format(s, "cookie:0x%"PRIx64"/0x%"PRIx64" ",
  570|  4.59k|                ntohll(fm.cookie), ntohll(fm.cookie_mask));
  571|  4.59k|    }
  572|  78.1k|    if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  78.1k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (572:9): [True: 62.2k, False: 15.9k]
  ------------------
  573|  62.2k|        ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
  574|  62.2k|    }
  575|  78.1k|    if (fm.hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  78.1k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (575:9): [True: 58.7k, False: 19.4k]
  ------------------
  576|  58.7k|        ds_put_format(s, "hard:%"PRIu16" ", fm.hard_timeout);
  577|  58.7k|    }
  578|  78.1k|    if (fm.importance != 0) {
  ------------------
  |  Branch (578:9): [True: 14.8k, False: 63.3k]
  ------------------
  579|  14.8k|        ds_put_format(s, "importance:%"PRIu16" ", fm.importance);
  580|  14.8k|    }
  581|  78.1k|    if (fm.priority != OFP_DEFAULT_PRIORITY && need_priority) {
  ------------------
  |  |  138|   156k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (581:9): [True: 76.3k, False: 1.82k]
  |  Branch (581:48): [True: 0, False: 76.3k]
  ------------------
  582|      0|        ds_put_format(s, "pri:%d ", fm.priority);
  583|      0|    }
  584|  78.1k|    if (fm.buffer_id != UINT32_MAX) {
  ------------------
  |  Branch (584:9): [True: 76.2k, False: 1.88k]
  ------------------
  585|  76.2k|        ds_put_format(s, "buf:0x%"PRIx32" ", fm.buffer_id);
  586|  76.2k|    }
  587|  78.1k|    if (fm.out_port != OFPP_ANY) {
  ------------------
  |  |   80|  78.1k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  78.1k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  78.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (587:9): [True: 76.0k, False: 2.05k]
  ------------------
  588|  76.0k|        ds_put_format(s, "out_port:");
  589|  76.0k|        ofputil_format_port(fm.out_port, port_map, s);
  590|  76.0k|        ds_put_char(s, ' ');
  591|  76.0k|    }
  592|       |
  593|  78.1k|    if (oh->version == OFP10_VERSION || oh->version == OFP11_VERSION) {
  ------------------
  |  Branch (593:9): [True: 56.0k, False: 22.0k]
  |  Branch (593:41): [True: 2.85k, False: 19.2k]
  ------------------
  594|       |        /* Don't print the reset_counts flag for OF1.0 and OF1.1 because those
  595|       |         * versions don't really have such a flag and printing one is likely to
  596|       |         * confuse people. */
  597|  58.9k|        fm.flags &= ~OFPUTIL_FF_RESET_COUNTS;
  598|  58.9k|    }
  599|  78.1k|    ofputil_flow_mod_flags_format(s, fm.flags);
  600|       |
  601|  78.1k|    ds_put_cstr(s, "actions=");
  602|  78.1k|    struct ofpact_format_params fp = {
  603|  78.1k|        .port_map = port_map,
  604|  78.1k|        .table_map = table_map,
  605|  78.1k|        .s = s,
  606|  78.1k|    };
  607|  78.1k|    ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
  608|  78.1k|    ofpbuf_uninit(&ofpacts);
  609|  78.1k|    minimatch_destroy(&fm.match);
  610|       |
  611|  78.1k|    return 0;
  612|  78.1k|}
ofputil_decode_flow_stats_request:
  697|  5.61k|{
  698|  5.61k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  699|  5.61k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  700|  5.61k|    switch ((int) raw) {
  701|    209|    case OFPRAW_OFPST10_FLOW_REQUEST:
  ------------------
  |  Branch (701:5): [True: 209, False: 5.40k]
  ------------------
  702|    209|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, false);
  703|       |
  704|    432|    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
  ------------------
  |  Branch (704:5): [True: 432, False: 5.18k]
  ------------------
  705|    432|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, true);
  706|       |
  707|     75|    case OFPRAW_OFPST11_FLOW_REQUEST:
  ------------------
  |  Branch (707:5): [True: 75, False: 5.53k]
  ------------------
  708|     75|        return ofputil_decode_ofpst11_flow_request(fsr, &b, false, tun_table,
  709|     75|                                                   vl_mff_map);
  710|       |
  711|    182|    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
  ------------------
  |  Branch (711:5): [True: 182, False: 5.43k]
  ------------------
  712|    182|        return ofputil_decode_ofpst11_flow_request(fsr, &b, true, tun_table,
  713|    182|                                                   vl_mff_map);
  714|       |
  715|    131|    case OFPRAW_OFPST15_AGGREGATE_REQUEST:
  ------------------
  |  Branch (715:5): [True: 131, False: 5.48k]
  ------------------
  716|    131|       return ofputil_decode_ofpst11_flow_request(fsr, &b, true,
  717|    131|                                                  tun_table, vl_mff_map);
  718|       |
  719|  4.40k|    case OFPRAW_NXST_FLOW_REQUEST:
  ------------------
  |  Branch (719:5): [True: 4.40k, False: 1.20k]
  ------------------
  720|  4.40k|        return ofputil_decode_nxst_flow_request(fsr, &b, false, tun_table,
  721|  4.40k|                                                vl_mff_map);
  722|       |
  723|    175|    case OFPRAW_NXST_AGGREGATE_REQUEST:
  ------------------
  |  Branch (723:5): [True: 175, False: 5.43k]
  ------------------
  724|    175|        return ofputil_decode_nxst_flow_request(fsr, &b, true, tun_table,
  725|    175|                                                vl_mff_map);
  726|       |
  727|      0|    default:
  ------------------
  |  Branch (727:5): [True: 0, False: 5.61k]
  ------------------
  728|       |        /* Hey, the caller lied. */
  729|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  730|  5.61k|    }
  731|  5.61k|}
ofputil_flow_stats_request_format:
  819|    909|{
  820|    909|    if (fsr->table_id != 0xff) {
  ------------------
  |  Branch (820:9): [True: 561, False: 348]
  ------------------
  821|    561|        ds_put_format(s, " table=");
  822|    561|        ofputil_format_table(fsr->table_id, table_map, s);
  823|    561|    }
  824|       |
  825|    909|    if (fsr->out_port != OFPP_ANY) {
  ------------------
  |  |   80|    909|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    909|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    909|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:9): [True: 694, False: 215]
  ------------------
  826|    694|        ds_put_cstr(s, " out_port=");
  827|    694|        ofputil_format_port(fsr->out_port, port_map, s);
  828|    694|    }
  829|       |
  830|    909|    ds_put_char(s, ' ');
  831|    909|    match_format(&fsr->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|    909|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  832|    909|}
ofputil_decode_flow_stats_reply:
  896|  81.6k|{
  897|  81.6k|    const struct ofp_header *oh;
  898|  81.6k|    size_t instructions_len;
  899|  81.6k|    enum ofperr error;
  900|  81.6k|    enum ofpraw raw;
  901|       |
  902|  81.6k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (902:14): [True: 20.8k, False: 60.7k]
  ------------------
  903|  81.6k|             : ofpraw_pull(&raw, msg));
  904|  81.6k|    if (error) {
  ------------------
  |  Branch (904:9): [True: 0, False: 81.6k]
  ------------------
  905|      0|        return error;
  906|      0|    }
  907|  81.6k|    oh = msg->header;
  908|       |
  909|  81.6k|    if (!msg->size) {
  ------------------
  |  Branch (909:9): [True: 12.1k, False: 69.4k]
  ------------------
  910|  12.1k|        return EOF;
  911|  69.4k|    } else if (raw == OFPRAW_OFPST15_FLOW_REPLY) {
  ------------------
  |  Branch (911:16): [True: 47.1k, False: 22.3k]
  ------------------
  912|  47.1k|        const struct ofp15_flow_desc *ofd;
  913|  47.1k|        size_t length;
  914|  47.1k|        uint16_t padded_match_len;
  915|  47.1k|        uint16_t stat_len;
  916|  47.1k|        uint8_t oxs_field_set;
  917|       |
  918|  47.1k|        ofd = ofpbuf_try_pull(msg, sizeof *ofd);
  919|  47.1k|        if (!ofd) {
  ------------------
  |  Branch (919:13): [True: 15.7k, False: 31.4k]
  ------------------
  920|  15.7k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %" PRIu32
  ------------------
  |  |  223|  15.7k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  15.7k|    do {                                                                \
  |  |  |  |  287|  15.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  15.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 15.7k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  15.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  15.7k|                         " leftover " "bytes at end", msg->size);
  922|  15.7k|            return EINVAL;
  923|  15.7k|        }
  924|       |
  925|  31.4k|        length = ntohs(ofd->length);
  926|  31.4k|        if (length < sizeof *ofd) {
  ------------------
  |  Branch (926:13): [True: 736, False: 30.6k]
  ------------------
  927|    736|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  223|    736|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    736|    do {                                                                \
  |  |  |  |  287|    736|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    736|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 736]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    736|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    736|                         "length %" PRIuSIZE, length);
  929|    736|            return EINVAL;
  930|    736|        }
  931|       |
  932|  30.6k|        if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  ------------------
  |  Branch (932:13): [True: 8.48k, False: 22.1k]
  ------------------
  933|  30.6k|                                     &padded_match_len)) {
  934|  8.48k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  223|  8.48k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  8.48k|    do {                                                                \
  |  |  |  |  287|  8.48k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  8.48k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 8.48k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  8.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  8.48k|            return EINVAL;
  936|  8.48k|        }
  937|       |
  938|  22.1k|        fs->priority = ntohs(ofd->priority);
  939|  22.1k|        fs->table_id = ofd->table_id;
  940|  22.1k|        fs->cookie = ofd->cookie;
  941|  22.1k|        fs->idle_timeout = ntohs(ofd->idle_timeout);
  942|  22.1k|        fs->hard_timeout = ntohs(ofd->hard_timeout);
  943|  22.1k|        fs->importance = ntohs(ofd->importance);
  944|       |
  945|  22.1k|        error = ofputil_decode_flow_mod_flags(ofd->flags, -1, oh->version,
  946|  22.1k|                                                &fs->flags);
  947|  22.1k|        if (error) {
  ------------------
  |  Branch (947:13): [True: 1.42k, False: 20.7k]
  ------------------
  948|  1.42k|            return error;
  949|  1.42k|        }
  950|       |
  951|  20.7k|        struct oxs_stats oxs;
  952|  20.7k|        if (oxs_pull_stat(msg, &oxs, &stat_len, &oxs_field_set)) {
  ------------------
  |  Branch (952:13): [True: 3.78k, False: 16.9k]
  ------------------
  953|  3.78k|            VLOG_WARN_RL(&rl, "OXS OFPST_FLOW reply bad stats");
  ------------------
  |  |  223|  3.78k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  3.78k|    do {                                                                \
  |  |  |  |  287|  3.78k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  3.78k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 3.78k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  3.78k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|  3.78k|            return EINVAL;
  955|  3.78k|        }
  956|  16.9k|        fs->duration_sec = oxs.duration_sec;
  957|  16.9k|        fs->duration_nsec = oxs.duration_nsec;
  958|  16.9k|        fs->packet_count = oxs.packet_count;
  959|  16.9k|        fs->byte_count = oxs.byte_count;
  960|  16.9k|        fs->idle_age = oxs.idle_age == UINT32_MAX ? -1 : oxs.idle_age;
  ------------------
  |  Branch (960:24): [True: 16.9k, False: 0]
  ------------------
  961|  16.9k|        fs->hard_age = -1;
  962|       |
  963|  16.9k|        instructions_len = length - sizeof *ofd - padded_match_len - stat_len;
  964|  22.3k|    } else if (raw == OFPRAW_OFPST11_FLOW_REPLY
  ------------------
  |  Branch (964:16): [True: 914, False: 21.4k]
  ------------------
  965|  22.3k|               || raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (965:19): [True: 6.81k, False: 14.5k]
  ------------------
  966|  7.73k|        const struct ofp11_flow_stats *ofs;
  967|  7.73k|        size_t length;
  968|  7.73k|        uint16_t padded_match_len;
  969|       |
  970|  7.73k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
  971|  7.73k|        if (!ofs) {
  ------------------
  |  Branch (971:13): [True: 5.88k, False: 1.84k]
  ------------------
  972|  5.88k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  223|  5.88k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  5.88k|    do {                                                                \
  |  |  |  |  287|  5.88k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  5.88k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 5.88k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  5.88k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|  5.88k|                         "bytes at end", msg->size);
  974|  5.88k|            return OFPERR_OFPBRC_BAD_LEN;
  975|  5.88k|        }
  976|       |
  977|  1.84k|        length = ntohs(ofs->length);
  978|  1.84k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (978:13): [True: 73, False: 1.77k]
  ------------------
  979|     73|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  223|     73|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     73|    do {                                                                \
  |  |  |  |  287|     73|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     73|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     73|                         "length %"PRIuSIZE, length);
  981|     73|            return OFPERR_OFPBRC_BAD_LEN;
  982|     73|        }
  983|       |
  984|  1.77k|        error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  985|  1.77k|                                         &padded_match_len);
  986|  1.77k|        if (error) {
  ------------------
  |  Branch (986:13): [True: 445, False: 1.32k]
  ------------------
  987|    445|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  223|    445|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    445|    do {                                                                \
  |  |  |  |  287|    445|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    445|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 445]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    445|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    445|            return error;
  989|    445|        }
  990|  1.32k|        instructions_len = length - sizeof *ofs - padded_match_len;
  991|       |
  992|  1.32k|        fs->priority = ntohs(ofs->priority);
  993|  1.32k|        fs->table_id = ofs->table_id;
  994|  1.32k|        fs->duration_sec = ntohl(ofs->duration_sec);
  995|  1.32k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
  996|  1.32k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
  997|  1.32k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
  998|  1.32k|        if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (998:13): [True: 646, False: 679]
  ------------------
  999|    646|            fs->importance = ntohs(ofs->importance);
 1000|    679|        } else {
 1001|    679|            fs->importance = 0;
 1002|    679|        }
 1003|  1.32k|        if (raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (1003:13): [True: 719, False: 606]
  ------------------
 1004|    719|            error = ofputil_decode_flow_mod_flags(ofs->flags, -1, oh->version,
 1005|    719|                                                  &fs->flags);
 1006|    719|            if (error) {
  ------------------
  |  Branch (1006:17): [True: 148, False: 571]
  ------------------
 1007|    148|                return error;
 1008|    148|            }
 1009|    719|        } else {
 1010|    606|            fs->flags = 0;
 1011|    606|        }
 1012|  1.17k|        fs->idle_age = -1;
 1013|  1.17k|        fs->hard_age = -1;
 1014|  1.17k|        fs->cookie = ofs->cookie;
 1015|  1.17k|        fs->packet_count = ntohll(ofs->packet_count);
 1016|  1.17k|        fs->byte_count = ntohll(ofs->byte_count);
 1017|  14.5k|    } else if (raw == OFPRAW_OFPST10_FLOW_REPLY) {
  ------------------
  |  Branch (1017:16): [True: 716, False: 13.8k]
  ------------------
 1018|    716|        const struct ofp10_flow_stats *ofs;
 1019|    716|        size_t length;
 1020|       |
 1021|    716|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
 1022|    716|        if (!ofs) {
  ------------------
  |  Branch (1022:13): [True: 82, False: 634]
  ------------------
 1023|     82|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  223|     82|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     82|    do {                                                                \
  |  |  |  |  287|     82|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     82|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 82]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     82|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|     82|                         "bytes at end", msg->size);
 1025|     82|            return OFPERR_OFPBRC_BAD_LEN;
 1026|     82|        }
 1027|       |
 1028|    634|        length = ntohs(ofs->length);
 1029|    634|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (1029:13): [True: 74, False: 560]
  ------------------
 1030|     74|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  223|     74|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     74|    do {                                                                \
  |  |  |  |  287|     74|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     74|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 74]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     74|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|     74|                         "length %"PRIuSIZE, length);
 1032|     74|            return OFPERR_OFPBRC_BAD_LEN;
 1033|     74|        }
 1034|    560|        instructions_len = length - sizeof *ofs;
 1035|       |
 1036|    560|        fs->cookie = get_32aligned_be64(&ofs->cookie);
 1037|    560|        ofputil_match_from_ofp10_match(&ofs->match, &fs->match);
 1038|    560|        fs->priority = ntohs(ofs->priority);
 1039|    560|        fs->table_id = ofs->table_id;
 1040|    560|        fs->duration_sec = ntohl(ofs->duration_sec);
 1041|    560|        fs->duration_nsec = ntohl(ofs->duration_nsec);
 1042|    560|        fs->idle_timeout = ntohs(ofs->idle_timeout);
 1043|    560|        fs->hard_timeout = ntohs(ofs->hard_timeout);
 1044|    560|        fs->importance = 0;
 1045|    560|        fs->idle_age = -1;
 1046|    560|        fs->hard_age = -1;
 1047|    560|        fs->packet_count = ntohll(get_32aligned_be64(&ofs->packet_count));
 1048|    560|        fs->byte_count = ntohll(get_32aligned_be64(&ofs->byte_count));
 1049|    560|        fs->flags = 0;
 1050|  13.8k|    } else if (raw == OFPRAW_NXST_FLOW_REPLY) {
  ------------------
  |  Branch (1050:16): [True: 13.8k, False: 0]
  ------------------
 1051|  13.8k|        const struct nx_flow_stats *nfs;
 1052|  13.8k|        size_t match_len, length;
 1053|       |
 1054|  13.8k|        nfs = ofpbuf_try_pull(msg, sizeof *nfs);
 1055|  13.8k|        if (!nfs) {
  ------------------
  |  Branch (1055:13): [True: 3.94k, False: 9.93k]
  ------------------
 1056|  3.94k|            VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  223|  3.94k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  3.94k|    do {                                                                \
  |  |  |  |  287|  3.94k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  3.94k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 3.94k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  3.94k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  3.94k|                         "bytes at end", msg->size);
 1058|  3.94k|            return OFPERR_OFPBRC_BAD_LEN;
 1059|  3.94k|        }
 1060|       |
 1061|  9.93k|        length = ntohs(nfs->length);
 1062|  9.93k|        match_len = ntohs(nfs->match_len);
 1063|  9.93k|        if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
  ------------------
  |  |  299|  9.93k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  9.93k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 2.15k, False: 7.78k]
  ------------------
 1064|  2.15k|            VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
  ------------------
  |  |  223|  2.15k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.15k|    do {                                                                \
  |  |  |  |  287|  2.15k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.15k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.15k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.15k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|  2.15k|                         "claims invalid length %"PRIuSIZE, match_len, length);
 1066|  2.15k|            return OFPERR_OFPBRC_BAD_LEN;
 1067|  2.15k|        }
 1068|  7.78k|        error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
 1069|  7.78k|                              NULL, NULL);
 1070|  7.78k|        if (error) {
  ------------------
  |  Branch (1070:13): [True: 661, False: 7.11k]
  ------------------
 1071|    661|            return error;
 1072|    661|        }
 1073|  7.11k|        instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
  ------------------
  |  |  299|  7.11k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  7.11k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 1074|       |
 1075|  7.11k|        fs->cookie = nfs->cookie;
 1076|  7.11k|        fs->table_id = nfs->table_id;
 1077|  7.11k|        fs->duration_sec = ntohl(nfs->duration_sec);
 1078|  7.11k|        fs->duration_nsec = ntohl(nfs->duration_nsec);
 1079|  7.11k|        fs->priority = ntohs(nfs->priority);
 1080|  7.11k|        fs->idle_timeout = ntohs(nfs->idle_timeout);
 1081|  7.11k|        fs->hard_timeout = ntohs(nfs->hard_timeout);
 1082|  7.11k|        fs->importance = 0;
 1083|  7.11k|        fs->idle_age = -1;
 1084|  7.11k|        fs->hard_age = -1;
 1085|  7.11k|        if (flow_age_extension) {
  ------------------
  |  Branch (1085:13): [True: 7.11k, False: 0]
  ------------------
 1086|  7.11k|            if (nfs->idle_age) {
  ------------------
  |  Branch (1086:17): [True: 1.10k, False: 6.01k]
  ------------------
 1087|  1.10k|                fs->idle_age = ntohs(nfs->idle_age) - 1;
 1088|  1.10k|            }
 1089|  7.11k|            if (nfs->hard_age) {
  ------------------
  |  Branch (1089:17): [True: 4.63k, False: 2.48k]
  ------------------
 1090|  4.63k|                fs->hard_age = ntohs(nfs->hard_age) - 1;
 1091|  4.63k|            }
 1092|  7.11k|        }
 1093|  7.11k|        fs->packet_count = ntohll(nfs->packet_count);
 1094|  7.11k|        fs->byte_count = ntohll(nfs->byte_count);
 1095|  7.11k|        fs->flags = 0;
 1096|  7.11k|    } else {
 1097|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1098|      0|    }
 1099|       |
 1100|  25.8k|    error = ofpacts_pull_openflow_instructions(msg, instructions_len,
 1101|  25.8k|                                               oh->version, NULL, NULL,
 1102|  25.8k|                                               ofpacts);
 1103|  25.8k|    if (error) {
  ------------------
  |  Branch (1103:9): [True: 5.00k, False: 20.8k]
  ------------------
 1104|  5.00k|        VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
  ------------------
  |  |  223|  5.00k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  5.00k|    do {                                                                \
  |  |  |  |  287|  5.00k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  5.00k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 5.00k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  5.00k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  5.00k|        return error;
 1106|  5.00k|    }
 1107|  20.8k|    fs->ofpacts = ofpacts->data;
 1108|  20.8k|    fs->ofpacts_len = ofpacts->size;
 1109|       |
 1110|  20.8k|    return 0;
 1111|  25.8k|}
ofputil_flow_stats_format:
 1292|  20.8k|{
 1293|  20.8k|    if (show_stats || fs->cookie) {
  ------------------
  |  Branch (1293:9): [True: 20.8k, False: 0]
  |  Branch (1293:23): [True: 0, False: 0]
  ------------------
 1294|  20.8k|        ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
 1295|  20.8k|                      colors.param, colors.end, ntohll(fs->cookie));
 1296|  20.8k|    }
 1297|  20.8k|    if (show_stats) {
  ------------------
  |  Branch (1297:9): [True: 20.8k, False: 0]
  ------------------
 1298|  20.8k|        ds_put_format(string, "%sduration=%s", colors.param, colors.end);
 1299|  20.8k|        ofp_print_duration(string, fs->duration_sec, fs->duration_nsec);
 1300|  20.8k|        ds_put_cstr(string, ", ");
 1301|  20.8k|    }
 1302|       |
 1303|  20.8k|    if (show_stats || fs->table_id
  ------------------
  |  Branch (1303:9): [True: 20.8k, False: 0]
  |  Branch (1303:23): [True: 0, False: 0]
  ------------------
 1304|  20.8k|        || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
  ------------------
  |  Branch (1304:12): [True: 0, False: 0]
  ------------------
 1305|  20.8k|        ds_put_format(string, "%stable=%s", colors.special, colors.end);
 1306|  20.8k|        ofputil_format_table(fs->table_id, table_map, string);
 1307|  20.8k|        ds_put_cstr(string, ", ");
 1308|  20.8k|    }
 1309|  20.8k|    if (show_stats) {
  ------------------
  |  Branch (1309:9): [True: 20.8k, False: 0]
  ------------------
 1310|  20.8k|        print_flow_stat(string, "n_packets", fs->packet_count);
 1311|  20.8k|        print_flow_stat(string, "n_bytes", fs->byte_count);
 1312|  20.8k|    }
 1313|  20.8k|    if (fs->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  20.8k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1313:9): [True: 15.5k, False: 5.29k]
  ------------------
 1314|  15.5k|        ds_put_format(string, "%sidle_timeout=%s%"PRIu16", ",
 1315|  15.5k|                      colors.param, colors.end, fs->idle_timeout);
 1316|  15.5k|    }
 1317|  20.8k|    if (fs->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  20.8k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1317:9): [True: 10.7k, False: 10.0k]
  ------------------
 1318|  10.7k|        ds_put_format(string, "%shard_timeout=%s%"PRIu16", ",
 1319|  10.7k|                      colors.param, colors.end, fs->hard_timeout);
 1320|  10.7k|    }
 1321|  20.8k|    if (fs->flags) {
  ------------------
  |  Branch (1321:9): [True: 10.1k, False: 10.7k]
  ------------------
 1322|  10.1k|        ofputil_flow_mod_flags_format(string, fs->flags);
 1323|  10.1k|    }
 1324|  20.8k|    if (fs->importance != 0) {
  ------------------
  |  Branch (1324:9): [True: 15.8k, False: 4.97k]
  ------------------
 1325|  15.8k|        ds_put_format(string, "%simportance=%s%"PRIu16", ",
 1326|  15.8k|                      colors.param, colors.end, fs->importance);
 1327|  15.8k|    }
 1328|  20.8k|    if (show_stats && fs->idle_age >= 0) {
  ------------------
  |  Branch (1328:9): [True: 20.8k, False: 0]
  |  Branch (1328:23): [True: 577, False: 20.2k]
  ------------------
 1329|    577|        ds_put_format(string, "%sidle_age=%s%d, ",
 1330|    577|                      colors.param, colors.end, fs->idle_age);
 1331|    577|    }
 1332|  20.8k|    if (show_stats && fs->hard_age >= 0 && fs->hard_age != fs->duration_sec) {
  ------------------
  |  Branch (1332:9): [True: 20.8k, False: 0]
  |  Branch (1332:23): [True: 1.91k, False: 18.9k]
  |  Branch (1332:44): [True: 1.87k, False: 39]
  ------------------
 1333|  1.87k|        ds_put_format(string, "%shard_age=%s%d, ",
 1334|  1.87k|                      colors.param, colors.end, fs->hard_age);
 1335|  1.87k|    }
 1336|       |
 1337|       |    /* Print the match, followed by a space (but omit the space if the match
 1338|       |     * was an empty string). */
 1339|  20.8k|    size_t length = string->length;
 1340|  20.8k|    match_format(&fs->match, port_map, string, fs->priority);
 1341|  20.8k|    if (string->length != length) {
  ------------------
  |  Branch (1341:9): [True: 20.7k, False: 40]
  ------------------
 1342|  20.7k|        ds_put_char(string, ' ');
 1343|  20.7k|    }
 1344|       |
 1345|  20.8k|    ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
 1346|  20.8k|    struct ofpact_format_params fp = {
 1347|  20.8k|        .port_map = port_map,
 1348|  20.8k|        .table_map = table_map,
 1349|  20.8k|        .s = string,
 1350|  20.8k|    };
 1351|  20.8k|    ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
 1352|  20.8k|}
ofputil_decode_aggregate_stats_reply:
 1401|  9.39k|{
 1402|  9.39k|    struct ofpbuf msg = ofpbuf_const_initializer(reply, ntohs(reply->length));
 1403|  9.39k|    enum ofpraw raw;
 1404|       |
 1405|  9.39k|    raw = ofpraw_pull_assert(&msg);
 1406|  9.39k|    if (raw == OFPRAW_OFPST15_AGGREGATE_REPLY) {
  ------------------
  |  Branch (1406:9): [True: 9.35k, False: 35]
  ------------------
 1407|  9.35k|        struct oxs_stats oxs;
 1408|  9.35k|        uint16_t statlen;
 1409|  9.35k|        uint8_t oxs_field_set;
 1410|  9.35k|        enum ofperr error = oxs_pull_stat(&msg, &oxs, &statlen,
 1411|  9.35k|                                          &oxs_field_set);
 1412|  9.35k|        if (error) {
  ------------------
  |  Branch (1412:13): [True: 7.11k, False: 2.24k]
  ------------------
 1413|  7.11k|            return error;
 1414|  7.11k|        }
 1415|  2.24k|        stats->packet_count = oxs.packet_count;
 1416|  2.24k|        stats->byte_count = oxs.byte_count;
 1417|  2.24k|        stats->flow_count = oxs.flow_count;
 1418|  2.24k|    } else {
 1419|     35|        struct ofp_aggregate_stats_reply *asr = msg.msg;
 1420|     35|        stats->packet_count = ntohll(get_32aligned_be64(&asr->packet_count));
 1421|     35|        stats->byte_count = ntohll(get_32aligned_be64(&asr->byte_count));
 1422|     35|        stats->flow_count = ntohl(asr->flow_count);
 1423|     35|    }
 1424|       |
 1425|  2.28k|    return 0;
 1426|  9.39k|}
ofputil_aggregate_stats_format:
 1431|  2.28k|{
 1432|  2.28k|    ds_put_format(s, " packet_count=%"PRIu64, as->packet_count);
 1433|  2.28k|    ds_put_format(s, " byte_count=%"PRIu64, as->byte_count);
 1434|  2.28k|    ds_put_format(s, " flow_count=%"PRIu32, as->flow_count);
 1435|  2.28k|}
ofp-flow.c:ofputil_decode_flow_mod_flags:
   63|   131k|{
   64|   131k|    uint16_t raw_flags = ntohs(raw_flags_);
   65|   131k|    const struct ofputil_flow_mod_flag *f;
   66|       |
   67|   131k|    *flagsp = 0;
   68|   922k|    for (f = ofputil_flow_mod_flags; f->raw_flag; f++) {
  ------------------
  |  Branch (68:38): [True: 790k, False: 131k]
  ------------------
   69|   790k|        if (raw_flags & f->raw_flag
  ------------------
  |  Branch (69:13): [True: 106k, False: 683k]
  ------------------
   70|   790k|            && version >= f->min_version
  ------------------
  |  Branch (70:16): [True: 104k, False: 2.68k]
  ------------------
   71|   790k|            && (!f->max_version || version <= f->max_version)) {
  ------------------
  |  Branch (71:17): [True: 94.0k, False: 9.92k]
  |  Branch (71:36): [True: 2.15k, False: 7.77k]
  ------------------
   72|  96.2k|            raw_flags &= ~f->raw_flag;
   73|  96.2k|            *flagsp |= f->flag;
   74|  96.2k|        }
   75|   790k|    }
   76|       |
   77|       |    /* In OF1.0 and OF1.1, "add" always resets counters, and other commands
   78|       |     * never do.
   79|       |     *
   80|       |     * In OF1.2 and later, OFPFF12_RESET_COUNTS controls whether each command
   81|       |     * resets counters. */
   82|   131k|    if ((version == OFP10_VERSION || version == OFP11_VERSION)
  ------------------
  |  Branch (82:10): [True: 72.8k, False: 58.8k]
  |  Branch (82:38): [True: 3.55k, False: 55.3k]
  ------------------
   83|   131k|        && command == OFPFC_ADD) {
  ------------------
  |  Branch (83:12): [True: 49.8k, False: 26.5k]
  ------------------
   84|  49.8k|        *flagsp |= OFPUTIL_FF_RESET_COUNTS;
   85|  49.8k|    }
   86|       |
   87|   131k|    return raw_flags ? OFPERR_OFPFMFC_BAD_FLAGS : 0;
  ------------------
  |  Branch (87:12): [True: 6.37k, False: 125k]
  ------------------
   88|   131k|}
ofp-flow.c:ofputil_decode_ofpst10_flow_request:
  618|    641|{
  619|    641|    fsr->aggregate = aggregate;
  620|    641|    ofputil_match_from_ofp10_match(&ofsr->match, &fsr->match);
  621|    641|    fsr->out_port = u16_to_ofp(ntohs(ofsr->out_port));
  622|    641|    fsr->out_group = OFPG_ANY;
  623|    641|    fsr->table_id = ofsr->table_id;
  624|    641|    fsr->cookie = fsr->cookie_mask = htonll(0);
  625|       |
  626|    641|    return 0;
  627|    641|}
ofp-flow.c:ofputil_decode_ofpst11_flow_request:
  634|    388|{
  635|    388|    const struct ofp11_flow_stats_request *ofsr;
  636|    388|    enum ofperr error;
  637|       |
  638|    388|    ofsr = ofpbuf_pull(b, sizeof *ofsr);
  639|    388|    fsr->aggregate = aggregate;
  640|    388|    fsr->table_id = ofsr->table_id;
  641|    388|    error = ofputil_port_from_ofp11(ofsr->out_port, &fsr->out_port);
  642|    388|    if (error) {
  ------------------
  |  Branch (642:9): [True: 171, False: 217]
  ------------------
  643|    171|        return error;
  644|    171|    }
  645|    217|    fsr->out_group = ntohl(ofsr->out_group);
  646|    217|    fsr->cookie = ofsr->cookie;
  647|    217|    fsr->cookie_mask = ofsr->cookie_mask;
  648|    217|    error = ofputil_pull_ofp11_match(b, tun_table, vl_mff_map, &fsr->match,
  649|    217|                                     NULL);
  650|    217|    if (error) {
  ------------------
  |  Branch (650:9): [True: 114, False: 103]
  ------------------
  651|    114|        return error;
  652|    114|    }
  653|       |
  654|    103|    return 0;
  655|    217|}
ofp-flow.c:ofputil_decode_nxst_flow_request:
  662|  4.58k|{
  663|  4.58k|    const struct nx_flow_stats_request *nfsr;
  664|  4.58k|    enum ofperr error;
  665|       |
  666|  4.58k|    nfsr = ofpbuf_pull(b, sizeof *nfsr);
  667|  4.58k|    error = nx_pull_match(b, ntohs(nfsr->match_len), &fsr->match,
  668|  4.58k|                          &fsr->cookie, &fsr->cookie_mask, false, tun_table,
  669|  4.58k|                          vl_mff_map);
  670|  4.58k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 4.36k, False: 214]
  ------------------
  671|  4.36k|        return error;
  672|  4.36k|    }
  673|    214|    if (b->size) {
  ------------------
  |  Branch (673:9): [True: 49, False: 165]
  ------------------
  674|     49|        return OFPERR_OFPBRC_BAD_LEN;
  675|     49|    }
  676|       |
  677|    165|    fsr->aggregate = aggregate;
  678|    165|    fsr->out_port = u16_to_ofp(ntohs(nfsr->out_port));
  679|    165|    fsr->out_group = OFPG_ANY;
  680|    165|    fsr->table_id = nfsr->table_id;
  681|       |
  682|    165|    return 0;
  683|    214|}
ofp-flow.c:print_flow_stat:
 1272|  41.6k|{
 1273|  41.6k|    ds_put_format(string, "%s%s=%s", colors.param, leader, colors.end);
 1274|  41.6k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1274:9): [True: 10.4k, False: 31.2k]
  ------------------
 1275|  10.4k|        ds_put_format(string, "%"PRIu64, stat);
 1276|  31.2k|    } else {
 1277|  31.2k|        ds_put_char(string, '?');
 1278|  31.2k|    }
 1279|  41.6k|    ds_put_cstr(string, ", ");
 1280|  41.6k|}

ofputil_format_group:
   66|  3.17k|{
   67|  3.17k|    char name[MAX_GROUP_NAME_LEN + 1];
   68|       |
   69|  3.17k|    ofputil_group_to_string(group_id, name, sizeof name);
   70|  3.17k|    ds_put_cstr(s, name);
   71|  3.17k|}
ofputil_group_to_string:
   81|  3.17k|{
   82|  3.17k|    switch (group_id) {
   83|  1.32k|    case OFPG_ALL:
  ------------------
  |  Branch (83:5): [True: 1.32k, False: 1.84k]
  ------------------
   84|  1.32k|        ovs_strlcpy(namebuf, "ALL", bufsize);
   85|  1.32k|        break;
   86|       |
   87|    404|    case OFPG_ANY:
  ------------------
  |  Branch (87:5): [True: 404, False: 2.76k]
  ------------------
   88|    404|        ovs_strlcpy(namebuf, "ANY", bufsize);
   89|    404|        break;
   90|       |
   91|  1.44k|    default:
  ------------------
  |  Branch (91:5): [True: 1.44k, False: 1.72k]
  ------------------
   92|  1.44k|        snprintf(namebuf, bufsize, "%"PRIu32, group_id);
   93|  1.44k|        break;
   94|  3.17k|    }
   95|  3.17k|}
ofputil_bucket_list_destroy:
  100|   102k|{
  101|   102k|    struct ofputil_bucket *bucket;
  102|       |
  103|   102k|    LIST_FOR_EACH_POP (bucket, list_node, buckets) {
  ------------------
  |  |  140|   114k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 12.3k, False: 102k]
  |  |  |  Branch (140:12): [True: 12.3k, False: 102k]
  |  |  ------------------
  |  |  141|   114k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  146|  12.3k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  139|  12.3k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  12.3k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  131|  12.3k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  104|  12.3k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|   114k|           (ITER = NULL, 0))
  ------------------
  104|  12.3k|        free(bucket->ofpacts);
  105|  12.3k|        free(bucket);
  106|  12.3k|    }
  107|   102k|}
ofputil_bucket_check_duplicate_id:
  169|  48.2k|{
  170|  48.2k|    struct ofputil_bucket *i, *j;
  171|       |
  172|  48.2k|    LIST_FOR_EACH (i, list_node, buckets) {
  ------------------
  |  |   76|  48.2k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  48.2k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  48.2k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  50.8k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  50.8k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 2.98k, False: 47.8k]
  |  |  |  |  |  Branch (181:6): [True: 2.98k, False: 47.8k]
  |  |  |  |  ------------------
  |  |  |  |  182|  50.8k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  2.98k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  2.98k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  2.98k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  50.8k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  48.2k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|  2.62k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  2.62k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  4.69k|        LIST_FOR_EACH_REVERSE (j, list_node, buckets) {
  ------------------
  |  |   86|  2.98k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->prev, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  2.98k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  2.98k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  4.69k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  4.69k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 4.69k, False: 0]
  |  |  |  |  |  Branch (181:6): [True: 4.69k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  182|  4.69k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  4.69k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  4.69k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  4.69k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  4.69k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   88|  2.98k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->prev))
  |  |  ------------------
  |  |  |  |  189|  1.70k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  1.70k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  4.69k|            if (i == j) {
  ------------------
  |  Branch (174:17): [True: 2.62k, False: 2.06k]
  ------------------
  175|  2.62k|                break;
  176|  2.62k|            }
  177|  2.06k|            if (i->bucket_id == j->bucket_id) {
  ------------------
  |  Branch (177:17): [True: 355, False: 1.70k]
  ------------------
  178|    355|                return true;
  179|    355|            }
  180|  2.06k|        }
  181|  2.98k|    }
  182|       |
  183|  47.8k|    return false;
  184|  48.2k|}
ofputil_uninit_group_desc:
  231|  4.32k|{
  232|  4.32k|    ofputil_bucket_list_destroy(&gd->buckets);
  233|  4.32k|    ofputil_group_properties_destroy(&gd->props);
  234|  4.32k|}
ofputil_decode_group_desc_request:
  241|  1.21k|{
  242|  1.21k|    struct ofpbuf request = ofpbuf_const_initializer(oh, ntohs(oh->length));
  243|  1.21k|    enum ofpraw raw = ofpraw_pull_assert(&request);
  244|  1.21k|    if (raw == OFPRAW_OFPST11_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (244:9): [True: 235, False: 984]
  ------------------
  245|    235|        return OFPG_ALL;
  246|    984|    } else if (raw == OFPRAW_NXST_GROUP_DESC_REQUEST ||
  ------------------
  |  Branch (246:16): [True: 10, False: 974]
  ------------------
  247|    984|               raw == OFPRAW_OFPST15_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (247:16): [True: 974, False: 0]
  ------------------
  248|    984|        ovs_be32 *group_id = ofpbuf_pull(&request, sizeof *group_id);
  249|    984|        return ntohl(*group_id);
  250|    984|    } else {
  251|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  252|      0|    }
  253|  1.21k|}
ofputil_group_desc_request_format:
  298|  1.21k|{
  299|  1.21k|    uint32_t group_id = ofputil_decode_group_desc_request(oh);
  300|  1.21k|    ds_put_cstr(string, " group_id=");
  301|  1.21k|    ofputil_format_group(group_id, string);
  302|       |
  303|  1.21k|    return 0;
  304|  1.21k|}
ofputil_decode_group_features_reply:
  422|    699|{
  423|    699|    const struct ofp12_group_features_stats *ogf = ofpmsg_body(oh);
  424|    699|    int i;
  425|       |
  426|    699|    features->types = ntohl(ogf->types);
  427|    699|    features->capabilities = ntohl(ogf->capabilities);
  428|  3.49k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  3.49k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (428:17): [True: 2.79k, False: 699]
  ------------------
  429|  2.79k|        features->max_groups[i] = ntohl(ogf->max_groups[i]);
  430|  2.79k|        features->ofpacts[i] = ofpact_bitmap_from_openflow(
  431|  2.79k|            ogf->actions[i], oh->version);
  432|  2.79k|    }
  433|    699|}
ofputil_group_features_format:
  449|    699|{
  450|    699|    struct ofputil_group_features features;
  451|    699|    int i;
  452|       |
  453|    699|    ofputil_decode_group_features_reply(oh, &features);
  454|       |
  455|    699|    ds_put_format(string, "\n Group table:\n");
  456|    699|    ds_put_format(string, "    Types:  0x%"PRIx32"\n", features.types);
  457|    699|    ds_put_format(string, "    Capabilities:  0x%"PRIx32"\n",
  458|    699|                  features.capabilities);
  459|       |
  460|  3.49k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  3.49k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (460:17): [True: 2.79k, False: 699]
  ------------------
  461|  2.79k|        if (features.types & (1u << i)) {
  ------------------
  |  Branch (461:13): [True: 1.97k, False: 818]
  ------------------
  462|  1.97k|            ds_put_format(string, "    %s group:\n", group_type_to_string(i));
  463|  1.97k|            ds_put_format(string, "       max_groups=%#"PRIx32"\n",
  464|  1.97k|                          features.max_groups[i]);
  465|  1.97k|            ds_put_format(string, "       actions: ");
  466|  1.97k|            ofpact_bitmap_format(features.ofpacts[i], string);
  467|  1.97k|            ds_put_char(string, '\n');
  468|  1.97k|        }
  469|  2.79k|    }
  470|       |
  471|    699|    return 0;
  472|    699|}
ofputil_decode_group_stats_request:
  480|  1.95k|{
  481|  1.95k|    const struct ofp11_group_stats_request *gsr11 = ofpmsg_body(request);
  482|  1.95k|    *group_id = ntohl(gsr11->group_id);
  483|  1.95k|    return 0;
  484|  1.95k|}
ofputil_decode_group_stats_reply:
  500|  11.6k|{
  501|  11.6k|    struct ofp11_bucket_counter *obc;
  502|  11.6k|    struct ofp11_group_stats *ogs11;
  503|  11.6k|    enum ofpraw raw;
  504|  11.6k|    enum ofperr error;
  505|  11.6k|    size_t base_len;
  506|  11.6k|    size_t length;
  507|  11.6k|    size_t i;
  508|       |
  509|  11.6k|    gs->bucket_stats = NULL;
  510|  11.6k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (510:14): [True: 6.02k, False: 5.59k]
  ------------------
  511|  11.6k|             : ofpraw_pull(&raw, msg));
  512|  11.6k|    if (error) {
  ------------------
  |  Branch (512:9): [True: 0, False: 11.6k]
  ------------------
  513|      0|        return error;
  514|      0|    }
  515|       |
  516|  11.6k|    if (!msg->size) {
  ------------------
  |  Branch (516:9): [True: 789, False: 10.8k]
  ------------------
  517|    789|        return EOF;
  518|    789|    }
  519|       |
  520|  10.8k|    if (raw == OFPRAW_OFPST11_GROUP_REPLY) {
  ------------------
  |  Branch (520:9): [True: 1.89k, False: 8.94k]
  ------------------
  521|  1.89k|        base_len = sizeof *ogs11;
  522|  1.89k|        ogs11 = ofpbuf_try_pull(msg, sizeof *ogs11);
  523|  1.89k|        gs->duration_sec = gs->duration_nsec = UINT32_MAX;
  524|  8.94k|    } else if (raw == OFPRAW_NXST_GROUP_REPLY ||
  ------------------
  |  Branch (524:16): [True: 654, False: 8.28k]
  ------------------
  525|  8.94k|               raw == OFPRAW_OFPST13_GROUP_REPLY) {
  ------------------
  |  Branch (525:16): [True: 8.28k, False: 0]
  ------------------
  526|  8.94k|        struct ofp13_group_stats *ogs13;
  527|       |
  528|  8.94k|        base_len = sizeof *ogs13;
  529|  8.94k|        ogs13 = ofpbuf_try_pull(msg, sizeof *ogs13);
  530|  8.94k|        if (ogs13) {
  ------------------
  |  Branch (530:13): [True: 7.22k, False: 1.71k]
  ------------------
  531|  7.22k|            ogs11 = &ogs13->gs;
  532|  7.22k|            gs->duration_sec = ntohl(ogs13->duration_sec);
  533|  7.22k|            gs->duration_nsec = ntohl(ogs13->duration_nsec);
  534|  7.22k|        } else {
  535|  1.71k|            ogs11 = NULL;
  536|  1.71k|        }
  537|  8.94k|    } else {
  538|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  539|      0|    }
  540|       |
  541|  10.8k|    if (!ogs11) {
  ------------------
  |  Branch (541:9): [True: 2.56k, False: 8.26k]
  ------------------
  542|  2.56k|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  223|  2.56k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.56k|    do {                                                                \
  |  |  |  |  287|  2.56k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.56k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.56k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.56k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|  2.56k|                     ofpraw_get_name(raw), msg->size);
  544|  2.56k|        return OFPERR_OFPBRC_BAD_LEN;
  545|  2.56k|    }
  546|  8.26k|    length = ntohs(ogs11->length);
  547|  8.26k|    if (length < sizeof base_len) {
  ------------------
  |  Branch (547:9): [True: 433, False: 7.83k]
  ------------------
  548|    433|        VLOG_WARN_RL(&rl, "%s reply claims invalid length %"PRIuSIZE,
  ------------------
  |  |  223|    433|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    433|    do {                                                                \
  |  |  |  |  287|    433|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    433|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 433]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    433|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|    433|                     ofpraw_get_name(raw), length);
  550|    433|        return OFPERR_OFPBRC_BAD_LEN;
  551|    433|    }
  552|       |
  553|  7.83k|    gs->group_id = ntohl(ogs11->group_id);
  554|  7.83k|    gs->ref_count = ntohl(ogs11->ref_count);
  555|  7.83k|    gs->packet_count = ntohll(ogs11->packet_count);
  556|  7.83k|    gs->byte_count = ntohll(ogs11->byte_count);
  557|       |
  558|  7.83k|    gs->n_buckets = (length - base_len) / sizeof *obc;
  559|  7.83k|    obc = ofpbuf_try_pull(msg, gs->n_buckets * sizeof *obc);
  560|  7.83k|    if (!obc) {
  ------------------
  |  Branch (560:9): [True: 1.80k, False: 6.02k]
  ------------------
  561|  1.80k|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  223|  1.80k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.80k|    do {                                                                \
  |  |  |  |  287|  1.80k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.80k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.80k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.80k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|  1.80k|                     ofpraw_get_name(raw), msg->size);
  563|  1.80k|        return OFPERR_OFPBRC_BAD_LEN;
  564|  1.80k|    }
  565|       |
  566|  6.02k|    gs->bucket_stats = xmalloc(gs->n_buckets * sizeof *gs->bucket_stats);
  567|  62.2k|    for (i = 0; i < gs->n_buckets; i++) {
  ------------------
  |  Branch (567:17): [True: 56.2k, False: 6.02k]
  ------------------
  568|  56.2k|        gs->bucket_stats[i].packet_count = ntohll(obc[i].packet_count);
  569|  56.2k|        gs->bucket_stats[i].byte_count = ntohll(obc[i].byte_count);
  570|  56.2k|    }
  571|       |
  572|  6.02k|    return 0;
  573|  7.83k|}
ofputil_group_stats_request_format:
  579|  1.95k|{
  580|  1.95k|    enum ofperr error;
  581|  1.95k|    uint32_t group_id;
  582|       |
  583|  1.95k|    error = ofputil_decode_group_stats_request(oh, &group_id);
  584|  1.95k|    if (error) {
  ------------------
  |  Branch (584:9): [True: 0, False: 1.95k]
  ------------------
  585|      0|        return error;
  586|      0|    }
  587|       |
  588|  1.95k|    ds_put_cstr(string, " group_id=");
  589|  1.95k|    ofputil_format_group(group_id, string);
  590|  1.95k|    return 0;
  591|  1.95k|}
ofputil_group_stats_format:
  595|  5.59k|{
  596|  5.59k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  597|  11.6k|    for (;;) {
  598|  11.6k|        struct ofputil_group_stats gs;
  599|  11.6k|        int retval;
  600|       |
  601|  11.6k|        retval = ofputil_decode_group_stats_reply(&b, &gs);
  602|  11.6k|        if (retval) {
  ------------------
  |  Branch (602:13): [True: 5.59k, False: 6.02k]
  ------------------
  603|  5.59k|            if (retval != EOF) {
  ------------------
  |  Branch (603:17): [True: 4.80k, False: 789]
  ------------------
  604|  4.80k|                ds_put_cstr(s, " ***parse error***");
  605|  4.80k|                return retval;
  606|  4.80k|            }
  607|    789|            break;
  608|  5.59k|        }
  609|       |
  610|  6.02k|        ds_put_char(s, '\n');
  611|       |
  612|  6.02k|        ds_put_char(s, ' ');
  613|  6.02k|        ds_put_format(s, "group_id=%"PRIu32",", gs.group_id);
  614|       |
  615|  6.02k|        if (gs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (615:13): [True: 5.02k, False: 1.00k]
  ------------------
  616|  5.02k|            ds_put_cstr(s, "duration=");
  617|  5.02k|            ofp_print_duration(s, gs.duration_sec, gs.duration_nsec);
  618|  5.02k|            ds_put_char(s, ',');
  619|  5.02k|        }
  620|  6.02k|        ds_put_format(s, "ref_count=%"PRIu32",", gs.ref_count);
  621|  6.02k|        ds_put_format(s, "packet_count=%"PRIu64",", gs.packet_count);
  622|  6.02k|        ds_put_format(s, "byte_count=%"PRIu64"", gs.byte_count);
  623|       |
  624|  62.2k|        for (uint32_t bucket_i = 0; bucket_i < gs.n_buckets; bucket_i++) {
  ------------------
  |  Branch (624:37): [True: 56.2k, False: 6.02k]
  ------------------
  625|  56.2k|            if (gs.bucket_stats[bucket_i].packet_count != UINT64_MAX) {
  ------------------
  |  Branch (625:17): [True: 55.4k, False: 779]
  ------------------
  626|  55.4k|                ds_put_format(s, ",bucket%"PRIu32":", bucket_i);
  627|  55.4k|                ds_put_format(s, "packet_count=%"PRIu64",", gs.bucket_stats[bucket_i].packet_count);
  628|  55.4k|                ds_put_format(s, "byte_count=%"PRIu64"", gs.bucket_stats[bucket_i].byte_count);
  629|  55.4k|            }
  630|  56.2k|        }
  631|       |
  632|  6.02k|        free(gs.bucket_stats);
  633|  6.02k|    }
  634|    789|    return 0;
  635|  5.59k|}
ofputil_group_properties_destroy:
 1525|  75.0k|{
 1526|  75.0k|    free(gp->fields.values);
 1527|  75.0k|}
ofputil_decode_group_desc_reply:
 1768|  9.16k|{
 1769|  9.16k|    ofputil_init_group_properties(&gd->props);
 1770|       |
 1771|  9.16k|    switch (version)
 1772|  9.16k|    {
 1773|    159|    case OFP11_VERSION:
  ------------------
  |  Branch (1773:5): [True: 159, False: 9.00k]
  ------------------
 1774|  3.31k|    case OFP12_VERSION:
  ------------------
  |  Branch (1774:5): [True: 3.15k, False: 6.00k]
  ------------------
 1775|  3.41k|    case OFP13_VERSION:
  ------------------
  |  Branch (1775:5): [True: 93, False: 9.07k]
  ------------------
 1776|  3.60k|    case OFP14_VERSION:
  ------------------
  |  Branch (1776:5): [True: 191, False: 8.97k]
  ------------------
 1777|  3.60k|        return ofputil_decode_ofp11_group_desc_reply(gd, msg, version);
 1778|       |
 1779|  5.00k|    case OFP10_VERSION:
  ------------------
  |  Branch (1779:5): [True: 5.00k, False: 4.16k]
  ------------------
 1780|  5.56k|    case OFP15_VERSION:
  ------------------
  |  Branch (1780:5): [True: 566, False: 8.60k]
  ------------------
 1781|  5.56k|        return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 1782|       |
 1783|      0|    default:
  ------------------
  |  Branch (1783:5): [True: 0, False: 9.16k]
  ------------------
 1784|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1785|  9.16k|    }
 1786|  9.16k|}
ofputil_group_desc_format:
 1891|  7.10k|{
 1892|  7.10k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1893|  9.16k|    for (;;) {
 1894|  9.16k|        struct ofputil_group_desc gd;
 1895|  9.16k|        int retval;
 1896|       |
 1897|  9.16k|        retval = ofputil_decode_group_desc_reply(&gd, &b, oh->version);
 1898|  9.16k|        if (retval) {
  ------------------
  |  Branch (1898:13): [True: 7.10k, False: 2.06k]
  ------------------
 1899|  7.10k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (1899:20): [True: 6.23k, False: 867]
  ------------------
 1900|  7.10k|        }
 1901|       |
 1902|  2.06k|        ds_put_char(s, '\n');
 1903|  2.06k|        ds_put_char(s, ' ');
 1904|  2.06k|        ofp_print_group(s, gd.group_id, gd.type, &gd.buckets, &gd.props,
 1905|  2.06k|                        oh->version, false, port_map, table_map);
 1906|  2.06k|        ofputil_uninit_group_desc(&gd);
 1907|  2.06k|     }
 1908|  7.10k|}
ofputil_uninit_group_mod:
 1912|  70.6k|{
 1913|  70.6k|    ofputil_bucket_list_destroy(&gm->buckets);
 1914|  70.6k|    ofputil_group_properties_destroy(&gm->props);
 1915|  70.6k|}
ofputil_decode_group_mod:
 2288|   105k|{
 2289|   105k|    ofputil_init_group_properties(&gm->props);
 2290|       |
 2291|   105k|    enum ofp_version ofp_version = oh->version;
 2292|   105k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
 2293|   105k|    ofpraw_pull_assert(&msg);
 2294|       |
 2295|   105k|    enum ofperr err;
 2296|   105k|    switch (ofp_version) {
 2297|  12.7k|    case OFP11_VERSION:
  ------------------
  |  Branch (2297:5): [True: 12.7k, False: 93.1k]
  ------------------
 2298|  14.8k|    case OFP12_VERSION:
  ------------------
  |  Branch (2298:5): [True: 2.05k, False: 103k]
  ------------------
 2299|  15.7k|    case OFP13_VERSION:
  ------------------
  |  Branch (2299:5): [True: 970, False: 104k]
  ------------------
 2300|  34.6k|    case OFP14_VERSION:
  ------------------
  |  Branch (2300:5): [True: 18.8k, False: 87.0k]
  ------------------
 2301|  34.6k|        err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm);
 2302|  34.6k|        break;
 2303|       |
 2304|    172|    case OFP10_VERSION:
  ------------------
  |  Branch (2304:5): [True: 172, False: 105k]
  ------------------
 2305|  71.2k|    case OFP15_VERSION:
  ------------------
  |  Branch (2305:5): [True: 71.0k, False: 34.8k]
  ------------------
 2306|  71.2k|        err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
 2307|  71.2k|        break;
 2308|       |
 2309|      0|    default:
  ------------------
  |  Branch (2309:5): [True: 0, False: 105k]
  ------------------
 2310|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2311|   105k|    }
 2312|   105k|    if (err) {
  ------------------
  |  Branch (2312:9): [True: 58.6k, False: 47.2k]
  ------------------
 2313|  58.6k|        return err;
 2314|  58.6k|    }
 2315|       |
 2316|  47.2k|    err = ofputil_check_group_mod(gm);
 2317|  47.2k|    if (err) {
  ------------------
  |  Branch (2317:9): [True: 21.6k, False: 25.6k]
  ------------------
 2318|  21.6k|        ofputil_uninit_group_mod(gm);
 2319|  21.6k|    }
 2320|  47.2k|    return err;
 2321|   105k|}
ofputil_group_mod_format__:
 2328|  25.6k|{
 2329|  25.6k|    bool bucket_command = false;
 2330|       |
 2331|  25.6k|    ds_put_char(s, '\n');
 2332|       |
 2333|  25.6k|    ds_put_char(s, ' ');
 2334|  25.6k|    switch (gm->command) {
 2335|  13.7k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2335:5): [True: 13.7k, False: 11.8k]
  ------------------
 2336|  13.7k|        ds_put_cstr(s, "ADD");
 2337|  13.7k|        break;
 2338|       |
 2339|    408|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2339:5): [True: 408, False: 25.2k]
  ------------------
 2340|    408|        ds_put_cstr(s, "MOD");
 2341|    408|        break;
 2342|       |
 2343|  3.40k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2343:5): [True: 3.40k, False: 22.2k]
  ------------------
 2344|  3.40k|        ds_put_cstr(s, "ADD_OR_MOD");
 2345|  3.40k|        break;
 2346|       |
 2347|    853|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2347:5): [True: 853, False: 24.7k]
  ------------------
 2348|    853|        ds_put_cstr(s, "DEL");
 2349|    853|        break;
 2350|       |
 2351|  1.24k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2351:5): [True: 1.24k, False: 24.3k]
  ------------------
 2352|  1.24k|        ds_put_cstr(s, "INSERT_BUCKET");
 2353|  1.24k|        bucket_command = true;
 2354|  1.24k|        break;
 2355|       |
 2356|  5.93k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2356:5): [True: 5.93k, False: 19.6k]
  ------------------
 2357|  5.93k|        ds_put_cstr(s, "REMOVE_BUCKET");
 2358|  5.93k|        bucket_command = true;
 2359|  5.93k|        break;
 2360|       |
 2361|      0|    default:
  ------------------
  |  Branch (2361:5): [True: 0, False: 25.6k]
  ------------------
 2362|      0|        ds_put_format(s, "cmd:%"PRIu16"", gm->command);
 2363|  25.6k|    }
 2364|  25.6k|    ds_put_char(s, ' ');
 2365|       |
 2366|  25.6k|    if (bucket_command) {
  ------------------
  |  Branch (2366:9): [True: 7.17k, False: 18.4k]
  ------------------
 2367|  7.17k|        ofp_print_bucket_id(s, "command_bucket_id:",
 2368|  7.17k|                            gm->command_bucket_id, ofp_version);
 2369|  7.17k|    }
 2370|       |
 2371|  25.6k|    ofp_print_group(s, gm->group_id, gm->type, &gm->buckets, &gm->props,
 2372|  25.6k|                    ofp_version, bucket_command, port_map, table_map);
 2373|  25.6k|}
ofputil_group_mod_format:
 2379|   105k|{
 2380|   105k|    struct ofputil_group_mod gm;
 2381|   105k|    int error;
 2382|       |
 2383|   105k|    error = ofputil_decode_group_mod(oh, &gm);
 2384|   105k|    if (error) {
  ------------------
  |  Branch (2384:9): [True: 80.2k, False: 25.5k]
  ------------------
 2385|  80.2k|        return error;
 2386|  80.2k|    }
 2387|  25.5k|    ofputil_group_mod_format__(s, oh->version, &gm, port_map, table_map);
 2388|  25.5k|    ofputil_uninit_group_mod(&gm);
 2389|  25.5k|    return 0;
 2390|   105k|}
ofp-group.c:group_type_to_string:
  437|  1.97k|{
  438|  1.97k|    switch (type) {
  439|    675|    case OFPGT11_ALL: return "all";
  ------------------
  |  Branch (439:5): [True: 675, False: 1.30k]
  ------------------
  440|    341|    case OFPGT11_SELECT: return "select";
  ------------------
  |  Branch (440:5): [True: 341, False: 1.63k]
  ------------------
  441|    636|    case OFPGT11_INDIRECT: return "indirect";
  ------------------
  |  Branch (441:5): [True: 636, False: 1.34k]
  ------------------
  442|    326|    case OFPGT11_FF: return "fast failover";
  ------------------
  |  Branch (442:5): [True: 326, False: 1.65k]
  ------------------
  443|      0|    default: OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  |  Branch (443:5): [True: 0, False: 1.97k]
  ------------------
  444|  1.97k|    }
  445|  1.97k|}
ofp-group.c:ofputil_init_group_properties:
 1511|   115k|{
 1512|   115k|    memset(gp, 0, sizeof *gp);
 1513|   115k|}
ofp-group.c:ofputil_decode_ofp11_group_desc_reply:
 1661|  3.60k|{
 1662|  3.60k|    struct ofp11_group_desc_stats *ogds;
 1663|  3.60k|    size_t length;
 1664|       |
 1665|  3.60k|    if (!msg->header) {
  ------------------
  |  Branch (1665:9): [True: 1.63k, False: 1.97k]
  ------------------
 1666|  1.63k|        ofpraw_pull_assert(msg);
 1667|  1.63k|    }
 1668|       |
 1669|  3.60k|    if (!msg->size) {
  ------------------
  |  Branch (1669:9): [True: 784, False: 2.81k]
  ------------------
 1670|    784|        return EOF;
 1671|    784|    }
 1672|       |
 1673|  2.81k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1674|  2.81k|    if (!ogds) {
  ------------------
  |  Branch (1674:9): [True: 0, False: 2.81k]
  ------------------
 1675|      0|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1676|      0|                     "leftover bytes at end", msg->size);
 1677|      0|        return OFPERR_OFPBRC_BAD_LEN;
 1678|      0|    }
 1679|  2.81k|    gd->type = ogds->type;
 1680|  2.81k|    gd->group_id = ntohl(ogds->group_id);
 1681|       |
 1682|  2.81k|    length = ntohs(ogds->length);
 1683|  2.81k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1683:9): [True: 603, False: 2.21k]
  |  Branch (1683:34): [True: 244, False: 1.97k]
  ------------------
 1684|    847|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  223|    847|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    847|    do {                                                                \
  |  |  |  |  287|    847|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    847|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 847]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    847|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1685|    847|                     "length %"PRIuSIZE, length);
 1686|    847|        return OFPERR_OFPBRC_BAD_LEN;
 1687|    847|    }
 1688|       |
 1689|  1.97k|    return ofputil_pull_ofp11_buckets(msg, length - sizeof *ogds, version,
 1690|  1.97k|                                      &gd->buckets);
 1691|  2.81k|}
ofp-group.c:ofputil_pull_ofp11_buckets:
 1319|  36.6k|{
 1320|  36.6k|    struct ofp11_bucket *ob;
 1321|  36.6k|    uint32_t bucket_id = 0;
 1322|       |
 1323|  36.6k|    ovs_list_init(buckets);
 1324|  43.2k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1324:12): [True: 16.1k, False: 27.1k]
  ------------------
 1325|  16.1k|        struct ofputil_bucket *bucket;
 1326|  16.1k|        struct ofpbuf ofpacts;
 1327|  16.1k|        enum ofperr error;
 1328|  16.1k|        size_t ob_len;
 1329|       |
 1330|  16.1k|        ob = (buckets_length >= sizeof *ob
  ------------------
  |  Branch (1330:15): [True: 15.8k, False: 252]
  ------------------
 1331|  16.1k|              ? ofpbuf_try_pull(msg, sizeof *ob)
 1332|  16.1k|              : NULL);
 1333|  16.1k|        if (!ob) {
  ------------------
  |  Branch (1333:13): [True: 252, False: 15.8k]
  ------------------
 1334|    252|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE" leftover bytes",
  ------------------
  |  |  223|    252|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    252|    do {                                                                \
  |  |  |  |  287|    252|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    252|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 252]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    252|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|    252|                         buckets_length);
 1336|    252|            ofputil_bucket_list_destroy(buckets);
 1337|    252|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1338|    252|        }
 1339|       |
 1340|  15.8k|        ob_len = ntohs(ob->len);
 1341|  15.8k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1341:13): [True: 2.26k, False: 13.5k]
  ------------------
 1342|  2.26k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  223|  2.26k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.26k|    do {                                                                \
  |  |  |  |  287|  2.26k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.26k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.26k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.26k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|  2.26k|                         "%"PRIuSIZE" is not valid", ob_len);
 1344|  2.26k|            ofputil_bucket_list_destroy(buckets);
 1345|  2.26k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1346|  13.5k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1346:20): [True: 2.54k, False: 11.0k]
  ------------------
 1347|  2.54k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length %"PRIuSIZE" "
  ------------------
  |  |  223|  2.54k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.54k|    do {                                                                \
  |  |  |  |  287|  2.54k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.54k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.54k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.54k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|  2.54k|                         "exceeds remaining buckets data size %"PRIuSIZE,
 1349|  2.54k|                         ob_len, buckets_length);
 1350|  2.54k|            ofputil_bucket_list_destroy(buckets);
 1351|  2.54k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1352|  2.54k|        }
 1353|  11.0k|        buckets_length -= ob_len;
 1354|       |
 1355|  11.0k|        ofpbuf_init(&ofpacts, 0);
 1356|  11.0k|        error = ofpacts_pull_openflow_actions(msg, ob_len - sizeof *ob,
 1357|  11.0k|                                              version, NULL, NULL, &ofpacts);
 1358|  11.0k|        if (error) {
  ------------------
  |  Branch (1358:13): [True: 3.12k, False: 7.92k]
  ------------------
 1359|  3.12k|            ofpbuf_uninit(&ofpacts);
 1360|  3.12k|            ofputil_bucket_list_destroy(buckets);
 1361|  3.12k|            return error;
 1362|  3.12k|        }
 1363|       |
 1364|  7.92k|        bucket = xzalloc(sizeof *bucket);
 1365|  7.92k|        bucket->weight = ntohs(ob->weight);
 1366|  7.92k|        error = ofputil_port_from_ofp11(ob->watch_port, &bucket->watch_port);
 1367|  7.92k|        if (error) {
  ------------------
  |  Branch (1367:13): [True: 1.28k, False: 6.63k]
  ------------------
 1368|  1.28k|            ofpbuf_uninit(&ofpacts);
 1369|  1.28k|            ofputil_bucket_list_destroy(buckets);
 1370|  1.28k|            free(bucket);
 1371|  1.28k|            return OFPERR_OFPGMFC_BAD_WATCH;
 1372|  1.28k|        }
 1373|  6.63k|        bucket->watch_group = ntohl(ob->watch_group);
 1374|  6.63k|        bucket->bucket_id = bucket_id++;
 1375|       |
 1376|  6.63k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1377|  6.63k|        bucket->ofpacts_len = ofpacts.size;
 1378|  6.63k|        ovs_list_push_back(buckets, &bucket->list_node);
 1379|  6.63k|    }
 1380|       |
 1381|  27.1k|    return 0;
 1382|  36.6k|}
ofp-group.c:ofputil_decode_ofp15_group_desc_reply:
 1697|  5.56k|{
 1698|  5.56k|    struct ofp15_group_desc_stats *ogds;
 1699|  5.56k|    uint16_t length, bucket_list_len;
 1700|  5.56k|    int error;
 1701|       |
 1702|  5.56k|    if (!msg->header) {
  ------------------
  |  Branch (1702:9): [True: 5.47k, False: 93]
  ------------------
 1703|  5.47k|        ofpraw_pull_assert(msg);
 1704|  5.47k|    }
 1705|       |
 1706|  5.56k|    if (!msg->size) {
  ------------------
  |  Branch (1706:9): [True: 83, False: 5.48k]
  ------------------
 1707|     83|        return EOF;
 1708|     83|    }
 1709|       |
 1710|  5.48k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1711|  5.48k|    if (!ogds) {
  ------------------
  |  Branch (1711:9): [True: 141, False: 5.34k]
  ------------------
 1712|    141|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  223|    141|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    141|    do {                                                                \
  |  |  |  |  287|    141|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    141|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 141]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    141|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1713|    141|                     "leftover bytes at end", msg->size);
 1714|    141|        return OFPERR_OFPBRC_BAD_LEN;
 1715|    141|    }
 1716|  5.34k|    gd->type = ogds->type;
 1717|  5.34k|    gd->group_id = ntohl(ogds->group_id);
 1718|       |
 1719|  5.34k|    length = ntohs(ogds->length);
 1720|  5.34k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1720:9): [True: 777, False: 4.56k]
  |  Branch (1720:34): [True: 1.39k, False: 3.16k]
  ------------------
 1721|  2.17k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  223|  2.17k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.17k|    do {                                                                \
  |  |  |  |  287|  2.17k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.17k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.17k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.17k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1722|  2.17k|                     "length %u", length);
 1723|  2.17k|        return OFPERR_OFPBRC_BAD_LEN;
 1724|  2.17k|    }
 1725|       |
 1726|  3.16k|    bucket_list_len = ntohs(ogds->bucket_list_len);
 1727|  3.16k|    if (length < bucket_list_len + sizeof *ogds) {
  ------------------
  |  Branch (1727:9): [True: 103, False: 3.06k]
  ------------------
 1728|    103|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  223|    103|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    103|    do {                                                                \
  |  |  |  |  287|    103|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    103|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 103]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    103|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1729|    103|                     "bucket list length %u", bucket_list_len);
 1730|    103|        return OFPERR_OFPBRC_BAD_LEN;
 1731|    103|    }
 1732|  3.06k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, version, gd->type,
 1733|  3.06k|                                       &gd->buckets);
 1734|  3.06k|    if (error) {
  ------------------
  |  Branch (1734:9): [True: 708, False: 2.35k]
  ------------------
 1735|    708|        return error;
 1736|    708|    }
 1737|       |
 1738|       |    /* By definition group desc messages don't have a group mod command.
 1739|       |     * However, parse_group_prop_ntr_selection_method() checks to make sure
 1740|       |     * that the command is OFPGC15_ADD or OFPGC15_DELETE to guard
 1741|       |     * against group mod messages with other commands supplying
 1742|       |     * a NTR selection method group experimenter property.
 1743|       |     * Such properties are valid for group desc replies so
 1744|       |     * claim that the group mod command is OFPGC15_ADD to
 1745|       |     * satisfy the check in parse_group_prop_ntr_selection_method() */
 1746|  2.35k|    error = parse_ofp15_group_properties(
 1747|  2.35k|        msg, gd->type, OFPGC15_ADD, &gd->props,
 1748|  2.35k|        length - sizeof *ogds - bucket_list_len);
 1749|  2.35k|    if (error) {
  ------------------
  |  Branch (1749:9): [True: 2.26k, False: 93]
  ------------------
 1750|  2.26k|        ofputil_uninit_group_desc(gd);
 1751|  2.26k|    }
 1752|  2.35k|    return error;
 1753|  3.06k|}
ofp-group.c:ofputil_pull_ofp15_buckets:
 1388|  65.5k|{
 1389|  65.5k|    ovs_list_init(buckets);
 1390|  71.3k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1390:12): [True: 23.0k, False: 48.2k]
  ------------------
 1391|  23.0k|        struct ofputil_bucket *bucket = NULL;
 1392|  23.0k|        struct ofpbuf ofpacts;
 1393|  23.0k|        enum ofperr err = OFPERR_OFPGMFC_BAD_BUCKET;
 1394|  23.0k|        size_t ob_len, actions_len, properties_len;
 1395|  23.0k|        ovs_be32 watch_port = ofputil_port_to_ofp11(OFPP_ANY);
  ------------------
  |  |   80|  23.0k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  23.0k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  23.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  23.0k|        ovs_be32 watch_group = htonl(OFPG_ANY);
 1397|  23.0k|        ovs_be16 weight = htons(group_type == OFPGT11_SELECT ? 1 : 0);
 1398|       |
 1399|  23.0k|        ofpbuf_init(&ofpacts, 0);
 1400|       |
 1401|  23.0k|        struct ofp15_bucket *ob = ofpbuf_try_pull(msg, sizeof *ob);
 1402|  23.0k|        if (!ob) {
  ------------------
  |  Branch (1402:13): [True: 0, False: 23.0k]
  ------------------
 1403|      0|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1404|      0|                         " leftover bytes", buckets_length);
 1405|      0|            goto err;
 1406|      0|        }
 1407|       |
 1408|  23.0k|        ob_len = ntohs(ob->len);
 1409|  23.0k|        actions_len = ntohs(ob->action_array_len);
 1410|       |
 1411|  23.0k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1411:13): [True: 2.80k, False: 20.2k]
  ------------------
 1412|  2.80k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  223|  2.80k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.80k|    do {                                                                \
  |  |  |  |  287|  2.80k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.80k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.80k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.80k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|  2.80k|                         "%"PRIuSIZE" is not valid", ob_len);
 1414|  2.80k|            goto err;
 1415|  20.2k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1415:20): [True: 1.34k, False: 18.9k]
  ------------------
 1416|  1.34k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  223|  1.34k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.34k|    do {                                                                \
  |  |  |  |  287|  1.34k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.34k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.34k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|  1.34k|                         "%"PRIuSIZE" exceeds remaining buckets data size %"
 1418|  1.34k|                         PRIuSIZE, ob_len, buckets_length);
 1419|  1.34k|            goto err;
 1420|  18.9k|        } else if (actions_len > ob_len - sizeof *ob) {
  ------------------
  |  Branch (1420:20): [True: 1.58k, False: 17.3k]
  ------------------
 1421|  1.58k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket actions "
  ------------------
  |  |  223|  1.58k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.58k|    do {                                                                \
  |  |  |  |  287|  1.58k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.58k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.58k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.58k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  1.58k|                         "length %"PRIuSIZE" exceeds remaining bucket "
 1423|  1.58k|                         "data size %"PRIuSIZE, actions_len,
 1424|  1.58k|                         ob_len - sizeof *ob);
 1425|  1.58k|            goto err;
 1426|  1.58k|        }
 1427|  17.3k|        buckets_length -= ob_len;
 1428|       |
 1429|  17.3k|        err = ofpacts_pull_openflow_actions(msg, actions_len, version,
 1430|  17.3k|                                            NULL, NULL, &ofpacts);
 1431|  17.3k|        if (err) {
  ------------------
  |  Branch (1431:13): [True: 1.59k, False: 15.7k]
  ------------------
 1432|  1.59k|            goto err;
 1433|  1.59k|        }
 1434|       |
 1435|  15.7k|        properties_len = ob_len - sizeof *ob - actions_len;
 1436|  15.7k|        struct ofpbuf properties = ofpbuf_const_initializer(
 1437|  15.7k|            ofpbuf_pull(msg, properties_len), properties_len);
 1438|  26.0k|        while (properties.size > 0) {
  ------------------
  |  Branch (1438:16): [True: 20.0k, False: 5.98k]
  ------------------
 1439|  20.0k|            struct ofpbuf payload;
 1440|  20.0k|            uint64_t type;
 1441|       |
 1442|  20.0k|            err = ofpprop_pull(&properties, &payload, &type);
 1443|  20.0k|            if (err) {
  ------------------
  |  Branch (1443:17): [True: 3.46k, False: 16.6k]
  ------------------
 1444|  3.46k|                goto err;
 1445|  3.46k|            }
 1446|       |
 1447|  16.6k|            switch (type) {
 1448|  6.56k|            case OFPGBPT15_WEIGHT:
  ------------------
  |  Branch (1448:13): [True: 6.56k, False: 10.0k]
  ------------------
 1449|  6.56k|                err = ofpprop_parse_be16(&payload, &weight);
 1450|  6.56k|                break;
 1451|       |
 1452|  2.00k|            case OFPGBPT15_WATCH_PORT:
  ------------------
  |  Branch (1452:13): [True: 2.00k, False: 14.6k]
  ------------------
 1453|  2.00k|                err = ofpprop_parse_be32(&payload, &watch_port);
 1454|  2.00k|                break;
 1455|       |
 1456|  4.30k|            case OFPGBPT15_WATCH_GROUP:
  ------------------
  |  Branch (1456:13): [True: 4.30k, False: 12.3k]
  ------------------
 1457|  4.30k|                err = ofpprop_parse_be32(&payload, &watch_group);
 1458|  4.30k|                break;
 1459|       |
 1460|  3.75k|            default:
  ------------------
  |  Branch (1460:13): [True: 3.75k, False: 12.8k]
  ------------------
 1461|  3.75k|                err = OFPPROP_UNKNOWN(false, "group bucket", type);
  ------------------
  |  |  140|  3.75k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1462|  3.75k|                break;
 1463|  16.6k|            }
 1464|       |
 1465|  16.6k|            if (err) {
  ------------------
  |  Branch (1465:17): [True: 6.28k, False: 10.3k]
  ------------------
 1466|  6.28k|                goto err;
 1467|  6.28k|            }
 1468|  16.6k|        }
 1469|       |
 1470|  5.98k|        bucket = xzalloc(sizeof *bucket);
 1471|       |
 1472|  5.98k|        bucket->weight = ntohs(weight);
 1473|  5.98k|        err = ofputil_port_from_ofp11(watch_port, &bucket->watch_port);
 1474|  5.98k|        if (err) {
  ------------------
  |  Branch (1474:13): [True: 12, False: 5.97k]
  ------------------
 1475|     12|            err = OFPERR_OFPGMFC_BAD_WATCH;
 1476|     12|            goto err;
 1477|     12|        }
 1478|  5.97k|        bucket->watch_group = ntohl(watch_group);
 1479|  5.97k|        bucket->bucket_id = ntohl(ob->bucket_id);
 1480|  5.97k|        if (bucket->bucket_id > OFPG15_BUCKET_MAX) {
  ------------------
  |  Branch (1480:13): [True: 222, False: 5.75k]
  ------------------
 1481|    222|            VLOG_WARN_RL(&rl, "bucket id (%u) is out of range",
  ------------------
  |  |  223|    222|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    222|    do {                                                                \
  |  |  |  |  287|    222|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    222|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 222]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    222|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|    222|                         bucket->bucket_id);
 1483|    222|            err = OFPERR_OFPGMFC_BAD_BUCKET;
 1484|    222|            goto err;
 1485|    222|        }
 1486|       |
 1487|  5.75k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1488|  5.75k|        bucket->ofpacts_len = ofpacts.size;
 1489|  5.75k|        ovs_list_push_back(buckets, &bucket->list_node);
 1490|       |
 1491|  5.75k|        continue;
 1492|       |
 1493|  17.3k|    err:
 1494|  17.3k|        free(bucket);
 1495|  17.3k|        ofpbuf_uninit(&ofpacts);
 1496|  17.3k|        ofputil_bucket_list_destroy(buckets);
 1497|  17.3k|        return err;
 1498|  5.97k|    }
 1499|       |
 1500|  48.2k|    if (ofputil_bucket_check_duplicate_id(buckets)) {
  ------------------
  |  Branch (1500:9): [True: 355, False: 47.8k]
  ------------------
 1501|    355|        VLOG_WARN_RL(&rl, "Duplicate bucket id");
  ------------------
  |  |  223|    355|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    355|    do {                                                                \
  |  |  |  |  287|    355|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    355|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 355]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    355|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|    355|        ofputil_bucket_list_destroy(buckets);
 1503|    355|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1504|    355|    }
 1505|       |
 1506|  47.8k|    return 0;
 1507|  48.2k|}
ofp-group.c:parse_ofp15_group_properties:
 1624|  47.8k|{
 1625|  47.8k|    struct ofpbuf properties = ofpbuf_const_initializer(
 1626|  47.8k|        ofpbuf_pull(msg, properties_len), properties_len);
 1627|  63.3k|    while (properties.size > 0) {
  ------------------
  |  Branch (1627:12): [True: 41.0k, False: 22.2k]
  ------------------
 1628|  41.0k|        struct ofpbuf payload;
 1629|  41.0k|        enum ofperr error;
 1630|  41.0k|        uint64_t type;
 1631|       |
 1632|  41.0k|        error = ofpprop_pull(&properties, &payload, &type);
 1633|  41.0k|        if (error) {
  ------------------
  |  Branch (1633:13): [True: 3.94k, False: 37.1k]
  ------------------
 1634|  3.94k|            return error;
 1635|  3.94k|        }
 1636|       |
 1637|  37.1k|        switch (type) {
 1638|    112|        case OFPPROP_EXP(NTR_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|    112|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1638:9): [True: 112, False: 37.0k]
  ------------------
 1639|  31.9k|        case OFPPROP_EXP(NTR_COMPAT_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  31.9k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1639:9): [True: 31.8k, False: 5.33k]
  ------------------
 1640|  31.9k|            error = parse_group_prop_ntr_selection_method(&payload, group_type,
 1641|  31.9k|                                                          group_cmd, gp);
 1642|  31.9k|            break;
 1643|       |
 1644|  5.22k|        default:
  ------------------
  |  Branch (1644:9): [True: 5.22k, False: 31.9k]
  ------------------
 1645|  5.22k|            error = OFPPROP_UNKNOWN(false, "group", type);
  ------------------
  |  |  140|  5.22k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1646|  5.22k|            break;
 1647|  37.1k|        }
 1648|       |
 1649|  37.1k|        if (error) {
  ------------------
  |  Branch (1649:13): [True: 21.7k, False: 15.4k]
  ------------------
 1650|  21.7k|            return error;
 1651|  21.7k|        }
 1652|  37.1k|    }
 1653|       |
 1654|  22.2k|    return 0;
 1655|  47.8k|}
ofp-group.c:parse_group_prop_ntr_selection_method:
 1534|  31.9k|{
 1535|  31.9k|    struct ntr_group_prop_selection_method *prop = payload->data;
 1536|  31.9k|    size_t fields_len, method_len;
 1537|  31.9k|    enum ofperr error;
 1538|       |
 1539|  31.9k|    switch (group_type) {
 1540|  28.9k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (1540:5): [True: 28.9k, False: 2.95k]
  ------------------
 1541|  28.9k|        break;
 1542|    795|    case OFPGT11_ALL:
  ------------------
  |  Branch (1542:5): [True: 795, False: 31.1k]
  ------------------
 1543|  1.14k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (1543:5): [True: 345, False: 31.5k]
  ------------------
 1544|  1.49k|    case OFPGT11_FF:
  ------------------
  |  Branch (1544:5): [True: 352, False: 31.5k]
  ------------------
 1545|  1.49k|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  135|  1.49k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.49k|    do {                                                                \
  |  |  |  |  287|  2.98k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|  1.49k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.49k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1546|  1.49k|                    "only allowed for select groups");
 1547|  1.49k|        return OFPERR_OFPBPC_BAD_VALUE;
 1548|  1.46k|    default:
  ------------------
  |  Branch (1548:5): [True: 1.46k, False: 30.4k]
  ------------------
 1549|  1.46k|        return OFPERR_OFPGMFC_BAD_TYPE;
 1550|  31.9k|    }
 1551|       |
 1552|  28.9k|    switch (group_cmd) {
 1553|  18.6k|    case OFPGC15_ADD:
  ------------------
  |  Branch (1553:5): [True: 18.6k, False: 10.3k]
  ------------------
 1554|  18.8k|    case OFPGC15_MODIFY:
  ------------------
  |  Branch (1554:5): [True: 179, False: 28.7k]
  ------------------
 1555|  28.1k|    case OFPGC15_ADD_OR_MOD:
  ------------------
  |  Branch (1555:5): [True: 9.30k, False: 19.6k]
  ------------------
 1556|  28.1k|        break;
 1557|     20|    case OFPGC15_DELETE:
  ------------------
  |  Branch (1557:5): [True: 20, False: 28.9k]
  ------------------
 1558|     31|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (1558:5): [True: 11, False: 28.9k]
  ------------------
 1559|     41|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (1559:5): [True: 10, False: 28.9k]
  ------------------
 1560|     41|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  135|     41|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     41|    do {                                                                \
  |  |  |  |  287|     82|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|     41|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 41]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     41|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1561|     41|                    "only allowed for add and delete group modifications");
 1562|     41|        return OFPERR_OFPBPC_BAD_VALUE;
 1563|    813|    default:
  ------------------
  |  Branch (1563:5): [True: 813, False: 28.1k]
  ------------------
 1564|    813|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1565|  28.9k|    }
 1566|       |
 1567|  28.1k|    if (payload->size < sizeof *prop) {
  ------------------
  |  Branch (1567:9): [True: 34, False: 28.0k]
  ------------------
 1568|     34|        OFPPROP_LOG(&rl, false, "ntr selection method property "
  ------------------
  |  |  135|     34|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     34|    do {                                                                \
  |  |  |  |  287|     68|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|     34|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1569|     34|                    "length %u is not valid", payload->size);
 1570|     34|        return OFPERR_OFPBPC_BAD_LEN;
 1571|     34|    }
 1572|       |
 1573|  28.0k|    method_len = strnlen(prop->selection_method, NTR_MAX_SELECTION_METHOD_LEN);
  ------------------
  |  |   34|  28.0k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
 1574|       |
 1575|  28.0k|    if (method_len == NTR_MAX_SELECTION_METHOD_LEN) {
  ------------------
  |  |   34|  28.0k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
  |  Branch (1575:9): [True: 71, False: 28.0k]
  ------------------
 1576|     71|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  135|     71|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     71|    do {                                                                \
  |  |  |  |  287|    142|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|     71|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 71]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     71|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1577|     71|                    "ntr selection method is not null terminated");
 1578|     71|        return OFPERR_OFPBPC_BAD_VALUE;
 1579|     71|    }
 1580|       |
 1581|  28.0k|    if (strcmp("hash", prop->selection_method)
  ------------------
  |  Branch (1581:9): [True: 2.24k, False: 25.7k]
  ------------------
 1582|  28.0k|        && strcmp("dp_hash", prop->selection_method)) {
  ------------------
  |  Branch (1582:12): [True: 2.22k, False: 21]
  ------------------
 1583|  2.22k|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  135|  2.22k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.22k|    do {                                                                \
  |  |  |  |  287|  4.44k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|  2.22k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.22k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.22k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1584|  2.22k|                    "ntr selection method '%s' is not supported",
 1585|  2.22k|                    prop->selection_method);
 1586|  2.22k|        return OFPERR_OFPBPC_BAD_VALUE;
 1587|  2.22k|    }
 1588|       |    /* 'method_len' is now non-zero. */
 1589|       |
 1590|  25.7k|    strcpy(gp->selection_method, prop->selection_method);
 1591|  25.7k|    gp->selection_method_param = ntohll(prop->selection_method_param);
 1592|       |
 1593|  25.7k|    ofpbuf_pull(payload, sizeof *prop);
 1594|       |
 1595|  25.7k|    fields_len = ntohs(prop->length) - sizeof *prop;
 1596|  25.7k|    if (fields_len && strcmp("hash", gp->selection_method)) {
  ------------------
  |  Branch (1596:9): [True: 25.7k, False: 66]
  |  Branch (1596:23): [True: 18, False: 25.7k]
  ------------------
 1597|     18|        OFPPROP_LOG(&rl, false, "ntr selection method %s "
  ------------------
  |  |  135|     18|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     18|    do {                                                                \
  |  |  |  |  287|     36|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|     18|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     18|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1598|     18|                    "does not support fields", gp->selection_method);
 1599|     18|        return OFPERR_OFPBPC_BAD_VALUE;
 1600|     18|    }
 1601|       |
 1602|  25.7k|    if (fields_len > 0) {
  ------------------
  |  Branch (1602:9): [True: 25.7k, False: 66]
  ------------------
 1603|  25.7k|        error = oxm_pull_field_array(payload->data, fields_len,
 1604|  25.7k|                &gp->fields);
 1605|  25.7k|        if (error) {
  ------------------
  |  Branch (1605:13): [True: 10.3k, False: 15.3k]
  ------------------
 1606|  10.3k|            OFPPROP_LOG(&rl, false,
  ------------------
  |  |  135|  10.3k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  10.3k|    do {                                                                \
  |  |  |  |  287|  20.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|  10.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10.3k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  10.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1607|  10.3k|                    "ntr selection method fields are invalid");
 1608|  10.3k|            return error;
 1609|  10.3k|        }
 1610|  25.7k|    } else {
 1611|       |        /* Selection_method "hash: w/o fields means default hash method. */
 1612|     66|        gp->fields.values_size = 0;
 1613|     66|    }
 1614|       |
 1615|  15.4k|    return 0;
 1616|  25.7k|}
ofp-group.c:ofp_print_group:
 1823|  27.6k|{
 1824|  27.6k|    struct ofputil_bucket *bucket;
 1825|       |
 1826|  27.6k|    ds_put_format(s, "group_id=%"PRIu32, group_id);
 1827|       |
 1828|  27.6k|    if (!suppress_type) {
  ------------------
  |  Branch (1828:9): [True: 20.5k, False: 7.17k]
  ------------------
 1829|  20.5k|        static const char *type_str[] = { "all", "select", "indirect",
 1830|  20.5k|                                          "ff", "unknown" };
 1831|  20.5k|        ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]);
  ------------------
  |  Branch (1831:47): [True: 1.94k, False: 18.5k]
  ------------------
 1832|  20.5k|    }
 1833|       |
 1834|  27.6k|    if (props->selection_method[0]) {
  ------------------
  |  Branch (1834:9): [True: 15.4k, False: 12.2k]
  ------------------
 1835|  15.4k|        ds_put_format(s, ",selection_method=%s", props->selection_method);
 1836|  15.4k|        if (props->selection_method_param) {
  ------------------
  |  Branch (1836:13): [True: 11.5k, False: 3.88k]
  ------------------
 1837|  11.5k|            ds_put_format(s, ",selection_method_param=%"PRIu64,
 1838|  11.5k|                          props->selection_method_param);
 1839|  11.5k|        }
 1840|       |
 1841|  15.4k|        size_t n = bitmap_count1(props->fields.used.bm, MFF_N_IDS);
 1842|  15.4k|        if (n == 1) {
  ------------------
  |  Branch (1842:13): [True: 3.03k, False: 12.3k]
  ------------------
 1843|  3.03k|            ds_put_cstr(s, ",fields=");
 1844|  3.03k|            oxm_format_field_array(s, &props->fields);
 1845|  12.3k|        } else if (n > 1) {
  ------------------
  |  Branch (1845:20): [True: 12.3k, False: 66]
  ------------------
 1846|  12.3k|            ds_put_cstr(s, ",fields(");
 1847|  12.3k|            oxm_format_field_array(s, &props->fields);
 1848|  12.3k|            ds_put_char(s, ')');
 1849|  12.3k|        }
 1850|  15.4k|    }
 1851|       |
 1852|  27.6k|    if (!p_buckets) {
  ------------------
  |  Branch (1852:9): [True: 0, False: 27.6k]
  ------------------
 1853|      0|        return;
 1854|      0|    }
 1855|       |
 1856|  27.6k|    ds_put_char(s, ',');
 1857|       |
 1858|  27.6k|    LIST_FOR_EACH (bucket, list_node, p_buckets) {
  ------------------
  |  |   76|  27.6k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  27.6k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  27.6k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  29.6k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  29.6k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 1.99k, False: 27.6k]
  |  |  |  |  |  Branch (181:6): [True: 1.99k, False: 27.6k]
  |  |  |  |  ------------------
  |  |  |  |  182|  29.6k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  1.99k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  1.99k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  1.99k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  29.6k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  27.6k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|  1.99k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  1.99k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1859|  1.99k|        ds_put_cstr(s, "bucket=");
 1860|       |
 1861|  1.99k|        ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version);
 1862|  1.99k|        if (bucket->weight != (type == OFPGT11_SELECT ? 1 : 0)) {
  ------------------
  |  Branch (1862:13): [True: 1.70k, False: 287]
  |  Branch (1862:32): [True: 1.15k, False: 837]
  ------------------
 1863|  1.70k|            ds_put_format(s, "weight:%"PRIu16",", bucket->weight);
 1864|  1.70k|        }
 1865|  1.99k|        if (bucket->watch_port != OFPP_NONE) {
  ------------------
  |  |   47|  1.99k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  1.99k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1865:13): [True: 1.55k, False: 446]
  ------------------
 1866|  1.55k|            ds_put_cstr(s, "watch_port:");
 1867|  1.55k|            ofputil_format_port(bucket->watch_port, port_map, s);
 1868|  1.55k|            ds_put_char(s, ',');
 1869|  1.55k|        }
 1870|  1.99k|        if (bucket->watch_group != OFPG_ANY) {
  ------------------
  |  Branch (1870:13): [True: 1.87k, False: 121]
  ------------------
 1871|  1.87k|            ds_put_format(s, "watch_group:%"PRIu32",", bucket->watch_group);
 1872|  1.87k|        }
 1873|       |
 1874|  1.99k|        ds_put_cstr(s, "actions=");
 1875|  1.99k|        struct ofpact_format_params fp = {
 1876|  1.99k|            .port_map = port_map,
 1877|  1.99k|            .table_map = table_map,
 1878|  1.99k|            .s = s,
 1879|  1.99k|        };
 1880|  1.99k|        ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
 1881|  1.99k|        ds_put_char(s, ',');
 1882|  1.99k|    }
 1883|       |
 1884|  27.6k|    ds_chomp(s, ',');
 1885|  27.6k|}
ofp-group.c:ofputil_pull_ofp11_group_mod:
 2130|  34.6k|{
 2131|  34.6k|    const struct ofp11_group_mod *ogm;
 2132|  34.6k|    enum ofperr error;
 2133|       |
 2134|  34.6k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2135|  34.6k|    gm->command = ntohs(ogm->command);
 2136|  34.6k|    gm->type = ogm->type;
 2137|  34.6k|    gm->group_id = ntohl(ogm->group_id);
 2138|  34.6k|    gm->command_bucket_id = OFPG15_BUCKET_ALL;
 2139|       |
 2140|  34.6k|    error = ofputil_pull_ofp11_buckets(msg, msg->size, ofp_version,
 2141|  34.6k|                                       &gm->buckets);
 2142|       |
 2143|       |    /* OF1.3.5+ prescribes an error when an OFPGC_DELETE includes buckets. */
 2144|  34.6k|    if (!error
  ------------------
  |  Branch (2144:9): [True: 25.1k, False: 9.47k]
  ------------------
 2145|  34.6k|        && ofp_version >= OFP13_VERSION
  ------------------
  |  Branch (2145:12): [True: 19.4k, False: 5.75k]
  ------------------
 2146|  34.6k|        && gm->command == OFPGC11_DELETE
  ------------------
  |  Branch (2146:12): [True: 552, False: 18.8k]
  ------------------
 2147|  34.6k|        && !ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2147:12): [True: 18, False: 534]
  ------------------
 2148|     18|        error = OFPERR_OFPGMFC_INVALID_GROUP;
 2149|     18|        ofputil_bucket_list_destroy(&gm->buckets);
 2150|     18|    }
 2151|       |
 2152|  34.6k|    return error;
 2153|  34.6k|}
ofp-group.c:ofputil_pull_ofp15_group_mod:
 2158|  71.2k|{
 2159|  71.2k|    const struct ofp15_group_mod *ogm;
 2160|  71.2k|    uint16_t bucket_list_len;
 2161|  71.2k|    enum ofperr error = OFPERR_OFPGMFC_BAD_BUCKET;
 2162|       |
 2163|  71.2k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2164|  71.2k|    gm->command = ntohs(ogm->command);
 2165|  71.2k|    gm->type = ogm->type;
 2166|  71.2k|    gm->group_id = ntohl(ogm->group_id);
 2167|       |
 2168|  71.2k|    gm->command_bucket_id = ntohl(ogm->command_bucket_id);
 2169|  71.2k|    switch (gm->command) {
 2170|  23.7k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2170:5): [True: 23.7k, False: 47.5k]
  ------------------
 2171|  23.7k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2171:13): [True: 891, False: 22.8k]
  ------------------
 2172|    891|            error = 0;
 2173|    891|        }
 2174|       |        /* Fall through */
 2175|  25.8k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2175:5): [True: 2.12k, False: 69.1k]
  ------------------
 2176|  25.8k|        if (gm->command_bucket_id <= OFPG15_BUCKET_MAX ||
  ------------------
  |  Branch (2176:13): [True: 21.5k, False: 4.27k]
  ------------------
 2177|  25.8k|            gm->command_bucket_id == OFPG15_BUCKET_FIRST
  ------------------
  |  Branch (2177:13): [True: 953, False: 3.32k]
  ------------------
 2178|  25.8k|            || gm->command_bucket_id == OFPG15_BUCKET_LAST) {
  ------------------
  |  Branch (2178:16): [True: 2.10k, False: 1.22k]
  ------------------
 2179|  24.6k|            error = 0;
 2180|  24.6k|        }
 2181|  25.8k|        break;
 2182|       |
 2183|  26.3k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2183:5): [True: 26.3k, False: 44.9k]
  ------------------
 2184|  27.0k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2184:5): [True: 756, False: 70.5k]
  ------------------
 2185|  40.0k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2185:5): [True: 12.9k, False: 58.3k]
  ------------------
 2186|  40.0k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2186:5): [True: 26, False: 71.2k]
  ------------------
 2187|  45.4k|    default:
  ------------------
  |  Branch (2187:5): [True: 5.33k, False: 65.9k]
  ------------------
 2188|  45.4k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2188:13): [True: 39.6k, False: 5.78k]
  ------------------
 2189|  39.6k|            error = 0;
 2190|  39.6k|        }
 2191|  45.4k|        break;
 2192|  71.2k|    }
 2193|  71.2k|    if (error) {
  ------------------
  |  Branch (2193:9): [True: 6.11k, False: 65.1k]
  ------------------
 2194|  6.11k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  223|  6.11k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  6.11k|    do {                                                                \
  |  |  |  |  287|  6.11k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  6.11k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 6.11k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  6.11k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2195|  6.11k|                     "group command bucket id (%u) is out of range",
 2196|  6.11k|                     gm->command_bucket_id);
 2197|  6.11k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2198|  6.11k|    }
 2199|       |
 2200|  65.1k|    bucket_list_len = ntohs(ogm->bucket_array_len);
 2201|  65.1k|    if (bucket_list_len > msg->size) {
  ------------------
  |  Branch (2201:9): [True: 2.66k, False: 62.4k]
  ------------------
 2202|  2.66k|        return OFPERR_OFPBRC_BAD_LEN;
 2203|  2.66k|    }
 2204|  62.4k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, ofp_version,
 2205|  62.4k|                                       gm->type, &gm->buckets);
 2206|  62.4k|    if (error) {
  ------------------
  |  Branch (2206:9): [True: 16.9k, False: 45.5k]
  ------------------
 2207|  16.9k|        return error;
 2208|  16.9k|    }
 2209|       |
 2210|  45.5k|    error = parse_ofp15_group_properties(msg, gm->type, gm->command,
 2211|  45.5k|                                         &gm->props, msg->size);
 2212|  45.5k|    if (error) {
  ------------------
  |  Branch (2212:9): [True: 23.3k, False: 22.1k]
  ------------------
 2213|  23.3k|        ofputil_uninit_group_mod(gm);
 2214|  23.3k|    }
 2215|  45.5k|    return error;
 2216|  62.4k|}
ofp-group.c:ofputil_check_group_mod:
 2220|  47.2k|{
 2221|  47.2k|    switch (gm->type) {
 2222|  2.29k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2222:5): [True: 2.29k, False: 44.9k]
  ------------------
 2223|  2.29k|        if (gm->command != OFPGC11_DELETE
  ------------------
  |  Branch (2223:13): [True: 1.89k, False: 404]
  ------------------
 2224|  2.29k|            && !ovs_list_is_singleton(&gm->buckets) ) {
  ------------------
  |  Branch (2224:16): [True: 445, False: 1.44k]
  ------------------
 2225|    445|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2226|    445|        }
 2227|  1.84k|        break;
 2228|  4.71k|    case OFPGT11_ALL:
  ------------------
  |  Branch (2228:5): [True: 4.71k, False: 42.5k]
  ------------------
 2229|  21.8k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (2229:5): [True: 17.0k, False: 30.1k]
  ------------------
 2230|  29.1k|    case OFPGT11_FF:
  ------------------
  |  Branch (2230:5): [True: 7.38k, False: 39.9k]
  ------------------
 2231|  29.1k|        break;
 2232|  15.8k|    default:
  ------------------
  |  Branch (2232:5): [True: 15.8k, False: 31.4k]
  ------------------
 2233|  15.8k|        return OFPERR_OFPGMFC_BAD_TYPE;
 2234|  47.2k|    }
 2235|       |
 2236|  31.0k|    switch (gm->command) {
 2237|  14.0k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2237:5): [True: 14.0k, False: 16.9k]
  ------------------
 2238|  15.6k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2238:5): [True: 1.57k, False: 29.4k]
  ------------------
 2239|  19.0k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2239:5): [True: 3.40k, False: 27.6k]
  ------------------
 2240|  19.8k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2240:5): [True: 853, False: 30.1k]
  ------------------
 2241|  21.2k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2241:5): [True: 1.33k, False: 29.7k]
  ------------------
 2242|  21.2k|        break;
 2243|  8.23k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2243:5): [True: 8.23k, False: 22.8k]
  ------------------
 2244|  8.23k|        if (!ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2244:13): [True: 2.30k, False: 5.93k]
  ------------------
 2245|  2.30k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 2246|  2.30k|        }
 2247|  5.93k|        break;
 2248|  5.93k|    default:
  ------------------
  |  Branch (2248:5): [True: 1.58k, False: 29.4k]
  ------------------
 2249|  1.58k|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2250|  31.0k|    }
 2251|       |
 2252|  27.1k|    struct ofputil_bucket *bucket;
 2253|  27.1k|    LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
  ------------------
  |  |   76|  27.1k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  27.1k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  27.1k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  29.1k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  29.1k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 3.49k, False: 25.6k]
  |  |  |  |  |  Branch (181:6): [True: 3.49k, False: 25.6k]
  |  |  |  |  ------------------
  |  |  |  |  182|  29.1k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  3.49k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  3.49k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  3.49k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  29.1k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  27.1k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|  1.97k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  1.97k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2254|  3.49k|        if (bucket->weight && gm->type != OFPGT11_SELECT
  ------------------
  |  Branch (2254:13): [True: 1.23k, False: 2.26k]
  |  Branch (2254:31): [True: 686, False: 553]
  ------------------
 2255|  3.49k|            && gm->command != OFPGC15_INSERT_BUCKET) {
  ------------------
  |  Branch (2255:16): [True: 46, False: 640]
  ------------------
 2256|     46|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2257|     46|        }
 2258|       |
 2259|  3.45k|        switch (gm->type) {
 2260|    207|        case OFPGT11_ALL:
  ------------------
  |  Branch (2260:9): [True: 207, False: 3.24k]
  ------------------
 2261|  1.49k|        case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2261:9): [True: 1.29k, False: 2.16k]
  ------------------
 2262|  1.49k|            if (ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2262:17): [True: 1.42k, False: 75]
  ------------------
 2263|  1.42k|                return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2264|  1.42k|            }
 2265|     75|            break;
 2266|  1.15k|        case OFPGT11_SELECT:
  ------------------
  |  Branch (2266:9): [True: 1.15k, False: 2.29k]
  ------------------
 2267|  1.15k|            break;
 2268|    795|        case OFPGT11_FF:
  ------------------
  |  Branch (2268:9): [True: 795, False: 2.65k]
  ------------------
 2269|    795|            if (!ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2269:17): [True: 55, False: 740]
  ------------------
 2270|     55|                return OFPERR_OFPGMFC_INVALID_GROUP;
 2271|     55|            }
 2272|    740|            break;
 2273|    740|        default:
  ------------------
  |  Branch (2273:9): [True: 0, False: 3.45k]
  ------------------
 2274|       |            /* Returning BAD TYPE to be consistent
 2275|       |             * though gm->type has been checked already. */
 2276|      0|            return OFPERR_OFPGMFC_BAD_TYPE;
 2277|  3.45k|        }
 2278|  3.45k|    }
 2279|       |
 2280|  25.6k|    return 0;
 2281|  27.1k|}
ofp-group.c:ofp_print_bucket_id:
 1791|  9.17k|{
 1792|  9.17k|    if (ofp_version > OFP10_VERSION && ofp_version < OFP15_VERSION) {
  ------------------
  |  Branch (1792:9): [True: 9.07k, False: 99]
  |  Branch (1792:40): [True: 3.14k, False: 5.93k]
  ------------------
 1793|  3.14k|        return;
 1794|  3.14k|    }
 1795|       |
 1796|  6.03k|    ds_put_cstr(s, label);
 1797|       |
 1798|  6.03k|    switch (bucket_id) {
 1799|    469|    case OFPG15_BUCKET_FIRST:
  ------------------
  |  Branch (1799:5): [True: 469, False: 5.56k]
  ------------------
 1800|    469|        ds_put_cstr(s, "first");
 1801|    469|        break;
 1802|  1.77k|    case OFPG15_BUCKET_LAST:
  ------------------
  |  Branch (1802:5): [True: 1.77k, False: 4.25k]
  ------------------
 1803|  1.77k|        ds_put_cstr(s, "last");
 1804|  1.77k|        break;
 1805|    835|    case OFPG15_BUCKET_ALL:
  ------------------
  |  Branch (1805:5): [True: 835, False: 5.19k]
  ------------------
 1806|    835|        ds_put_cstr(s, "all");
 1807|    835|        break;
 1808|  2.95k|    default:
  ------------------
  |  Branch (1808:5): [True: 2.95k, False: 3.08k]
  ------------------
 1809|  2.95k|        ds_put_format(s, "%"PRIu32, bucket_id);
 1810|  2.95k|        break;
 1811|  6.03k|    }
 1812|       |
 1813|  6.03k|    ds_put_char(s, ',');
 1814|  6.03k|}

ofputil_pull_ipfix_stats:
   75|  8.65k|{
   76|  8.65k|    enum ofperr error;
   77|  8.65k|    enum ofpraw raw;
   78|       |
   79|  8.65k|    memset(is, 0xFF, sizeof (*is));
   80|       |
   81|  8.65k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (81:14): [True: 6.87k, False: 1.78k]
  ------------------
   82|  8.65k|             : ofpraw_pull(&raw, msg));
   83|  8.65k|    if (error) {
  ------------------
  |  Branch (83:9): [True: 0, False: 8.65k]
  ------------------
   84|      0|        return error;
   85|      0|    }
   86|       |
   87|  8.65k|    if (!msg->size) {
  ------------------
  |  Branch (87:9): [True: 1.78k, False: 6.87k]
  ------------------
   88|  1.78k|        return EOF;
   89|  6.87k|    } else if (raw == OFPRAW_NXST_IPFIX_BRIDGE_REPLY ||
  ------------------
  |  Branch (89:16): [True: 358, False: 6.51k]
  ------------------
   90|  6.87k|               raw == OFPRAW_NXST_IPFIX_FLOW_REPLY) {
  ------------------
  |  Branch (90:16): [True: 6.51k, False: 0]
  ------------------
   91|  6.87k|        struct nx_ipfix_stats_reply *reply;
   92|       |
   93|  6.87k|        reply = ofpbuf_try_pull(msg, sizeof *reply);
   94|  6.87k|        return ofputil_ipfix_stats_from_nx(is, reply);
   95|  6.87k|    } else {
   96|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   97|      0|    }
   98|  8.65k|}
ofputil_count_ipfix_stats:
  106|  1.42k|{
  107|  1.42k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  108|  1.42k|    ofpraw_pull_assert(&b);
  109|       |
  110|  1.42k|    return b.size / sizeof(struct ofputil_ipfix_stats);
  111|  1.42k|}
ofputil_format_ipfix_stats_bridge:
  150|    358|{
  151|    358|    ds_put_cstr(string, "\n  bridge ipfix: ");
  152|    358|    format_ipfix_stats(string, is, 16);
  153|    358|}
ofputil_format_ipfix_stats_flow:
  158|  6.51k|{
  159|  6.51k|    ds_put_cstr(string, "  id");
  160|  6.51k|    ds_put_format(string, " %3"PRIuSIZE": ", (size_t) is->collector_set_id);
  161|  6.51k|    format_ipfix_stats(string, is, 10);
  162|  6.51k|}
ofp-ipfix.c:ofputil_ipfix_stats_from_nx:
   57|  6.87k|{
   58|  6.87k|    is->collector_set_id = ntohl(reply->collector_set_id);
   59|  6.87k|    is->total_flows = ntohll(reply->total_flows);
   60|  6.87k|    is->current_flows = ntohll(reply->current_flows);
   61|  6.87k|    is->pkts = ntohll(reply->pkts);
   62|  6.87k|    is->ipv4_pkts = ntohll(reply->ipv4_pkts);
   63|  6.87k|    is->ipv6_pkts = ntohll(reply->ipv6_pkts);
   64|  6.87k|    is->error_pkts = ntohll(reply->error_pkts);
   65|  6.87k|    is->ipv4_error_pkts = ntohll(reply->ipv4_error_pkts);
   66|  6.87k|    is->ipv6_error_pkts = ntohll(reply->ipv6_error_pkts);
   67|  6.87k|    is->tx_pkts = ntohll(reply->tx_pkts);
   68|  6.87k|    is->tx_errors = ntohll(reply->tx_errors);
   69|       |
   70|  6.87k|    return 0;
   71|  6.87k|}
ofp-ipfix.c:format_ipfix_stats:
  133|  6.87k|{
  134|  6.87k|    print_ipfix_stat(string, "flows=", is->total_flows, 1);
  135|  6.87k|    print_ipfix_stat(string, "current flows=", is->current_flows, 1);
  136|  6.87k|    print_ipfix_stat(string, "sampled pkts=", is->pkts, 1);
  137|  6.87k|    print_ipfix_stat(string, "ipv4 ok=", is->ipv4_pkts, 1);
  138|  6.87k|    print_ipfix_stat(string, "ipv6 ok=", is->ipv6_pkts, 1);
  139|  6.87k|    print_ipfix_stat(string, "tx pkts=", is->tx_pkts, 0);
  140|  6.87k|    ds_put_char_multiple(string, ' ', indent);
  141|  6.87k|    print_ipfix_stat(string, "pkts errs=", is->error_pkts, 1);
  142|  6.87k|    print_ipfix_stat(string, "ipv4 errs=", is->ipv4_error_pkts, 1);
  143|  6.87k|    print_ipfix_stat(string, "ipv6 errs=", is->ipv6_error_pkts, 1);
  144|  6.87k|    print_ipfix_stat(string, "tx errs=", is->tx_errors, 0);
  145|  6.87k|}
ofp-ipfix.c:print_ipfix_stat:
  116|  68.7k|{
  117|  68.7k|    ds_put_cstr(string, leader);
  118|  68.7k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (118:9): [True: 53.6k, False: 15.0k]
  ------------------
  119|  53.6k|        ds_put_format(string, "%"PRIu64, stat);
  120|  53.6k|    } else {
  121|  15.0k|        ds_put_char(string, '?');
  122|  15.0k|    }
  123|  68.7k|    if (more) {
  ------------------
  |  Branch (123:9): [True: 55.0k, False: 13.7k]
  ------------------
  124|  55.0k|        ds_put_cstr(string, ", ");
  125|  55.0k|    } else {
  126|  13.7k|        ds_put_cstr(string, "\n");
  127|  13.7k|    }
  128|  68.7k|}

ofputil_wildcard_from_ofpfw10:
   67|   150k|{
   68|   150k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 42);
  ------------------
  |  |  269|   150k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
   69|       |
   70|       |    /* Initialize most of wc. */
   71|   150k|    flow_wildcards_init_catchall(wc);
   72|       |
   73|   150k|    if (!(ofpfw & OFPFW10_IN_PORT)) {
  ------------------
  |  Branch (73:9): [True: 121k, False: 28.8k]
  ------------------
   74|   121k|        wc->masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
   75|   121k|    }
   76|       |
   77|   150k|    if (!(ofpfw & OFPFW10_NW_TOS)) {
  ------------------
  |  Branch (77:9): [True: 107k, False: 42.9k]
  ------------------
   78|   107k|        wc->masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  720|   107k|#define IP_DSCP_MASK 0xfc
  ------------------
   79|   107k|    }
   80|       |
   81|   150k|    if (!(ofpfw & OFPFW10_NW_PROTO)) {
  ------------------
  |  Branch (81:9): [True: 103k, False: 46.2k]
  ------------------
   82|   103k|        wc->masks.nw_proto = UINT8_MAX;
   83|   103k|    }
   84|   150k|    wc->masks.nw_src = ofputil_wcbits_to_netmask(ofpfw
   85|   150k|                                                 >> OFPFW10_NW_SRC_SHIFT);
   86|   150k|    wc->masks.nw_dst = ofputil_wcbits_to_netmask(ofpfw
   87|   150k|                                                 >> OFPFW10_NW_DST_SHIFT);
   88|       |
   89|   150k|    if (!(ofpfw & OFPFW10_TP_SRC)) {
  ------------------
  |  Branch (89:9): [True: 104k, False: 46.0k]
  ------------------
   90|   104k|        wc->masks.tp_src = OVS_BE16_MAX;
  ------------------
  |  |   42|   104k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   91|   104k|    }
   92|   150k|    if (!(ofpfw & OFPFW10_TP_DST)) {
  ------------------
  |  Branch (92:9): [True: 117k, False: 32.9k]
  ------------------
   93|   117k|        wc->masks.tp_dst = OVS_BE16_MAX;
  ------------------
  |  |   42|   117k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   94|   117k|    }
   95|       |
   96|   150k|    if (!(ofpfw & OFPFW10_DL_SRC)) {
  ------------------
  |  Branch (96:9): [True: 112k, False: 37.2k]
  ------------------
   97|   112k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|   112k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   98|   112k|    }
   99|   150k|    if (!(ofpfw & OFPFW10_DL_DST)) {
  ------------------
  |  Branch (99:9): [True: 107k, False: 43.0k]
  ------------------
  100|   107k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|   107k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
  101|   107k|    }
  102|   150k|    if (!(ofpfw & OFPFW10_DL_TYPE)) {
  ------------------
  |  Branch (102:9): [True: 116k, False: 34.1k]
  ------------------
  103|   116k|        wc->masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|   116k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  104|   116k|    }
  105|       |
  106|       |    /* VLAN TCI mask. */
  107|   150k|    if (!(ofpfw & OFPFW10_DL_VLAN_PCP)) {
  ------------------
  |  Branch (107:9): [True: 101k, False: 48.7k]
  ------------------
  108|   101k|        wc->masks.vlans[0].tci |= htons(VLAN_PCP_MASK | VLAN_CFI);
  109|   101k|    }
  110|   150k|    if (!(ofpfw & OFPFW10_DL_VLAN)) {
  ------------------
  |  Branch (110:9): [True: 99.6k, False: 50.5k]
  ------------------
  111|  99.6k|        wc->masks.vlans[0].tci |= htons(VLAN_VID_MASK | VLAN_CFI);
  112|  99.6k|    }
  113|   150k|}
ofputil_match_from_ofp10_match:
  119|   150k|{
  120|   150k|    uint32_t ofpfw = ntohl(ofmatch->wildcards) & OFPFW10_ALL;
  121|       |
  122|       |    /* Initialize match->wc. */
  123|   150k|    memset(&match->flow, 0, sizeof match->flow);
  124|   150k|    ofputil_wildcard_from_ofpfw10(ofpfw, &match->wc);
  125|   150k|    memset(&match->tun_md, 0, sizeof match->tun_md);
  126|       |
  127|       |    /* If any fields, except in_port, are matched, then we also need to match
  128|       |     * on the Ethernet packet_type. */
  129|   150k|    const uint32_t ofpfw_data_bits = (OFPFW10_NW_TOS | OFPFW10_NW_PROTO
  130|   150k|                                      | OFPFW10_TP_SRC | OFPFW10_TP_DST
  131|   150k|                                      | OFPFW10_DL_SRC | OFPFW10_DL_DST
  132|   150k|                                      | OFPFW10_DL_TYPE
  133|   150k|                                      | OFPFW10_DL_VLAN | OFPFW10_DL_VLAN_PCP);
  134|   150k|    if ((ofpfw & ofpfw_data_bits) != ofpfw_data_bits
  ------------------
  |  Branch (134:9): [True: 141k, False: 8.76k]
  ------------------
  135|   150k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_SRC_SHIFT)
  ------------------
  |  Branch (135:12): [True: 3.55k, False: 5.21k]
  ------------------
  136|   150k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_DST_SHIFT)) {
  ------------------
  |  Branch (136:12): [True: 93, False: 5.12k]
  ------------------
  137|   145k|        match_set_default_packet_type(match);
  138|   145k|    }
  139|       |
  140|       |    /* Initialize most of match->flow. */
  141|   150k|    match->flow.nw_src = ofmatch->nw_src;
  142|   150k|    match->flow.nw_dst = ofmatch->nw_dst;
  143|   150k|    match->flow.in_port.ofp_port = u16_to_ofp(ntohs(ofmatch->in_port));
  144|   150k|    match->flow.dl_type = ofputil_dl_type_from_openflow(ofmatch->dl_type);
  145|   150k|    match->flow.tp_src = ofmatch->tp_src;
  146|   150k|    match->flow.tp_dst = ofmatch->tp_dst;
  147|   150k|    match->flow.dl_src = ofmatch->dl_src;
  148|   150k|    match->flow.dl_dst = ofmatch->dl_dst;
  149|   150k|    match->flow.nw_tos = ofmatch->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  720|   150k|#define IP_DSCP_MASK 0xfc
  ------------------
  150|   150k|    match->flow.nw_proto = ofmatch->nw_proto;
  151|       |
  152|       |    /* Translate VLANs. */
  153|   150k|    if (!(ofpfw & OFPFW10_DL_VLAN) &&
  ------------------
  |  Branch (153:9): [True: 99.6k, False: 50.5k]
  ------------------
  154|   150k|        ofmatch->dl_vlan == htons(OFP10_VLAN_NONE)) {
  ------------------
  |  Branch (154:9): [True: 973, False: 98.7k]
  ------------------
  155|       |        /* Match only packets without 802.1Q header.
  156|       |         *
  157|       |         * When OFPFW10_DL_VLAN_PCP is wildcarded, this is obviously correct.
  158|       |         *
  159|       |         * If OFPFW10_DL_VLAN_PCP is matched, the flow match is contradictory,
  160|       |         * because we can't have a specific PCP without an 802.1Q header.
  161|       |         * However, older versions of OVS treated this as matching packets
  162|       |         * withut an 802.1Q header, so we do here too. */
  163|    973|        match->flow.vlans[0].tci = htons(0);
  164|    973|        match->wc.masks.vlans[0].tci = htons(0xffff);
  165|   149k|    } else {
  166|   149k|        ovs_be16 vid, pcp, tci;
  167|   149k|        uint16_t hpcp;
  168|       |
  169|   149k|        vid = ofmatch->dl_vlan & htons(VLAN_VID_MASK);
  170|   149k|        hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  498|   149k|#define VLAN_PCP_SHIFT 13
  ------------------
                      hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  497|   149k|#define VLAN_PCP_MASK 0xe000
  ------------------
  171|   149k|        pcp = htons(hpcp);
  172|   149k|        tci = vid | pcp | htons(VLAN_CFI);
  173|   149k|        match->flow.vlans[0].tci = tci & match->wc.masks.vlans[0].tci;
  174|   149k|    }
  175|       |
  176|       |    /* Clean up. */
  177|   150k|    match_zero_wildcarded_fields(match);
  178|   150k|}
ofputil_pull_ofp11_match:
  262|   149k|{
  263|   149k|    struct ofp11_match_header *omh = buf->data;
  264|   149k|    uint16_t match_len;
  265|       |
  266|   149k|    if (buf->size < sizeof *omh) {
  ------------------
  |  Branch (266:9): [True: 2.25k, False: 146k]
  ------------------
  267|  2.25k|        return OFPERR_OFPBMC_BAD_LEN;
  268|  2.25k|    }
  269|       |
  270|   146k|    match_len = ntohs(omh->length);
  271|       |
  272|   146k|    switch (ntohs(omh->type)) {
  273|  22.2k|    case OFPMT_STANDARD: {
  ------------------
  |  Branch (273:5): [True: 22.2k, False: 124k]
  ------------------
  274|  22.2k|        struct ofp11_match *om;
  275|       |
  276|  22.2k|        if (match_len != sizeof *om || buf->size < sizeof *om) {
  ------------------
  |  Branch (276:13): [True: 3.25k, False: 18.9k]
  |  Branch (276:40): [True: 35, False: 18.9k]
  ------------------
  277|  3.29k|            return OFPERR_OFPBMC_BAD_LEN;
  278|  3.29k|        }
  279|  18.9k|        om = ofpbuf_pull(buf, sizeof *om);
  280|  18.9k|        if (padded_match_len) {
  ------------------
  |  Branch (280:13): [True: 232, False: 18.6k]
  ------------------
  281|    232|            *padded_match_len = match_len;
  282|    232|        }
  283|  18.9k|        return ofputil_match_from_ofp11_match(om, match);
  284|  22.2k|    }
  285|       |
  286|   101k|    case OFPMT_OXM:
  ------------------
  |  Branch (286:5): [True: 101k, False: 45.4k]
  ------------------
  287|   101k|        if (padded_match_len) {
  ------------------
  |  Branch (287:13): [True: 39.3k, False: 62.2k]
  ------------------
  288|  39.3k|            *padded_match_len = ROUND_UP(match_len, 8);
  ------------------
  |  |  299|  39.3k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  39.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  289|  39.3k|        }
  290|   101k|        return oxm_pull_match(buf, false, tun_table, vl_mff_map, match);
  291|       |
  292|  23.2k|    default:
  ------------------
  |  Branch (292:5): [True: 23.2k, False: 123k]
  ------------------
  293|  23.2k|        return OFPERR_OFPBMC_BAD_TYPE;
  294|   146k|    }
  295|   146k|}
ofputil_match_from_ofp11_match:
  302|  18.9k|{
  303|  18.9k|    uint16_t wc = ntohl(ofmatch->wildcards);
  304|  18.9k|    bool ipv4, arp, rarp;
  305|       |
  306|  18.9k|    match_init_catchall(match);
  307|  18.9k|    match->flow.tunnel.metadata.tab = NULL;
  308|       |
  309|  18.9k|    if (!(wc & OFPFW11_IN_PORT)) {
  ------------------
  |  Branch (309:9): [True: 12.7k, False: 6.16k]
  ------------------
  310|  12.7k|        ofp_port_t ofp_port;
  311|  12.7k|        enum ofperr error;
  312|       |
  313|  12.7k|        error = ofputil_port_from_ofp11(ofmatch->in_port, &ofp_port);
  314|  12.7k|        if (error) {
  ------------------
  |  Branch (314:13): [True: 726, False: 12.0k]
  ------------------
  315|    726|            return OFPERR_OFPBMC_BAD_VALUE;
  316|    726|        }
  317|  12.0k|        match_set_in_port(match, ofp_port);
  318|  12.0k|    }
  319|       |
  320|  18.1k|    struct eth_addr dl_src_mask = eth_addr_invert(ofmatch->dl_src_mask);
  321|  18.1k|    struct eth_addr dl_dst_mask = eth_addr_invert(ofmatch->dl_dst_mask);
  322|  18.1k|    if (!eth_addr_is_zero(dl_src_mask) || !eth_addr_is_zero(dl_dst_mask)) {
  ------------------
  |  Branch (322:9): [True: 15.2k, False: 2.90k]
  |  Branch (322:43): [True: 1.45k, False: 1.44k]
  ------------------
  323|  16.7k|        match_set_dl_src_masked(match, ofmatch->dl_src, dl_src_mask);
  324|  16.7k|        match_set_dl_dst_masked(match, ofmatch->dl_dst, dl_dst_mask);
  325|  16.7k|        match_set_default_packet_type(match);
  326|  16.7k|    }
  327|       |
  328|  18.1k|    if (!(wc & OFPFW11_DL_VLAN)) {
  ------------------
  |  Branch (328:9): [True: 13.5k, False: 4.66k]
  ------------------
  329|  13.5k|        if (ofmatch->dl_vlan == htons(OFPVID11_NONE)) {
  ------------------
  |  Branch (329:13): [True: 2.04k, False: 11.4k]
  ------------------
  330|       |            /* Match only packets without a VLAN tag. */
  331|  2.04k|            match->flow.vlans[0].tci = htons(0);
  332|  2.04k|            match->wc.masks.vlans[0].tci = OVS_BE16_MAX;
  ------------------
  |  |   42|  2.04k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  333|  11.4k|        } else {
  334|  11.4k|            if (ofmatch->dl_vlan == htons(OFPVID11_ANY)) {
  ------------------
  |  Branch (334:17): [True: 1.37k, False: 10.1k]
  ------------------
  335|       |                /* Match any packet with a VLAN tag regardless of VID. */
  336|  1.37k|                match->flow.vlans[0].tci = htons(VLAN_CFI);
  337|  1.37k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI);
  338|  10.1k|            } else if (ntohs(ofmatch->dl_vlan) < 4096) {
  ------------------
  |  Branch (338:24): [True: 8.30k, False: 1.79k]
  ------------------
  339|       |                /* Match only packets with the specified VLAN VID. */
  340|  8.30k|                match->flow.vlans[0].tci = htons(VLAN_CFI) | ofmatch->dl_vlan;
  341|  8.30k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI | VLAN_VID_MASK);
  342|  8.30k|            } else {
  343|       |                /* Invalid VID. */
  344|  1.79k|                return OFPERR_OFPBMC_BAD_VALUE;
  345|  1.79k|            }
  346|       |
  347|  9.68k|            if (!(wc & OFPFW11_DL_VLAN_PCP)) {
  ------------------
  |  Branch (347:17): [True: 7.11k, False: 2.57k]
  ------------------
  348|  7.11k|                if (ofmatch->dl_vlan_pcp <= 7) {
  ------------------
  |  Branch (348:21): [True: 6.35k, False: 760]
  ------------------
  349|  6.35k|                    match->flow.vlans[0].tci |= htons(ofmatch->dl_vlan_pcp
  350|  6.35k|                                                  << VLAN_PCP_SHIFT);
  351|  6.35k|                    match->wc.masks.vlans[0].tci |= htons(VLAN_PCP_MASK);
  352|  6.35k|                } else {
  353|       |                    /* Invalid PCP. */
  354|    760|                    return OFPERR_OFPBMC_BAD_VALUE;
  355|    760|                }
  356|  7.11k|            }
  357|  9.68k|        }
  358|  10.9k|        match_set_default_packet_type(match);
  359|  10.9k|    }
  360|       |
  361|  15.6k|    if (!(wc & OFPFW11_DL_TYPE)) {
  ------------------
  |  Branch (361:9): [True: 12.5k, False: 3.03k]
  ------------------
  362|  12.5k|        match_set_dl_type(match,
  363|  12.5k|                          ofputil_dl_type_from_openflow(ofmatch->dl_type));
  364|  12.5k|        match_set_default_packet_type(match);
  365|  12.5k|    }
  366|       |
  367|  15.6k|    ipv4 = match->flow.dl_type == htons(ETH_TYPE_IP);
  368|  15.6k|    arp = match->flow.dl_type == htons(ETH_TYPE_ARP);
  369|  15.6k|    rarp = match->flow.dl_type == htons(ETH_TYPE_RARP);
  370|       |
  371|  15.6k|    if (ipv4 && !(wc & OFPFW11_NW_TOS)) {
  ------------------
  |  Branch (371:9): [True: 7.35k, False: 8.26k]
  |  Branch (371:17): [True: 5.31k, False: 2.04k]
  ------------------
  372|  5.31k|        if (ofmatch->nw_tos & ~IP_DSCP_MASK) {
  ------------------
  |  |  720|  5.31k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (372:13): [True: 363, False: 4.95k]
  ------------------
  373|       |            /* Invalid TOS. */
  374|    363|            return OFPERR_OFPBMC_BAD_VALUE;
  375|    363|        }
  376|       |
  377|  4.95k|        match_set_nw_dscp(match, ofmatch->nw_tos);
  378|  4.95k|    }
  379|       |
  380|  15.2k|    if (ipv4 || arp || rarp) {
  ------------------
  |  Branch (380:9): [True: 6.99k, False: 8.26k]
  |  Branch (380:17): [True: 88, False: 8.18k]
  |  Branch (380:24): [True: 21, False: 8.15k]
  ------------------
  381|  7.10k|        if (!(wc & OFPFW11_NW_PROTO)) {
  ------------------
  |  Branch (381:13): [True: 6.63k, False: 470]
  ------------------
  382|  6.63k|            match_set_nw_proto(match, ofmatch->nw_proto);
  383|  6.63k|        }
  384|  7.10k|        match_set_nw_src_masked(match, ofmatch->nw_src, ~ofmatch->nw_src_mask);
  385|  7.10k|        match_set_nw_dst_masked(match, ofmatch->nw_dst, ~ofmatch->nw_dst_mask);
  386|  7.10k|    }
  387|       |
  388|  15.2k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  389|  15.2k|    if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  6.99k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
                  if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  6.99k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
  |  Branch (389:9): [True: 6.99k, False: 8.26k]
  |  Branch (389:17): [True: 6.67k, False: 321]
  ------------------
  390|  6.67k|        switch (match->flow.nw_proto) {
  391|  3.08k|        case IPPROTO_ICMP:
  ------------------
  |  Branch (391:9): [True: 3.08k, False: 3.58k]
  ------------------
  392|       |            /* "A.2.3 Flow Match Structures" in OF1.1 says:
  393|       |             *
  394|       |             *    The tp_src and tp_dst fields will be ignored unless the
  395|       |             *    network protocol specified is as TCP, UDP or SCTP.
  396|       |             *
  397|       |             * but I'm pretty sure we should support ICMP too, otherwise
  398|       |             * that's a regression from OF1.0. */
  399|  3.08k|            if (!(wc & OFPFW11_TP_SRC)) {
  ------------------
  |  Branch (399:17): [True: 2.25k, False: 838]
  ------------------
  400|  2.25k|                uint16_t icmp_type = ntohs(ofmatch->tp_src);
  401|  2.25k|                if (icmp_type < 0x100) {
  ------------------
  |  Branch (401:21): [True: 1.76k, False: 490]
  ------------------
  402|  1.76k|                    match_set_icmp_type(match, icmp_type);
  403|  1.76k|                } else {
  404|    490|                    return OFPERR_OFPBMC_BAD_FIELD;
  405|    490|                }
  406|  2.25k|            }
  407|  2.59k|            if (!(wc & OFPFW11_TP_DST)) {
  ------------------
  |  Branch (407:17): [True: 964, False: 1.63k]
  ------------------
  408|    964|                uint16_t icmp_code = ntohs(ofmatch->tp_dst);
  409|    964|                if (icmp_code < 0x100) {
  ------------------
  |  Branch (409:21): [True: 292, False: 672]
  ------------------
  410|    292|                    match_set_icmp_code(match, icmp_code);
  411|    672|                } else {
  412|    672|                    return OFPERR_OFPBMC_BAD_FIELD;
  413|    672|                }
  414|    964|            }
  415|  1.92k|            break;
  416|       |
  417|  2.65k|        case IPPROTO_TCP:
  ------------------
  |  Branch (417:9): [True: 2.65k, False: 4.02k]
  ------------------
  418|  2.68k|        case IPPROTO_UDP:
  ------------------
  |  Branch (418:9): [True: 30, False: 6.64k]
  ------------------
  419|  2.69k|        case IPPROTO_SCTP:
  ------------------
  |  Branch (419:9): [True: 10, False: 6.66k]
  ------------------
  420|  2.69k|            if (!(wc & (OFPFW11_TP_SRC))) {
  ------------------
  |  Branch (420:17): [True: 2.02k, False: 666]
  ------------------
  421|  2.02k|                match_set_tp_src(match, ofmatch->tp_src);
  422|  2.02k|            }
  423|  2.69k|            if (!(wc & (OFPFW11_TP_DST))) {
  ------------------
  |  Branch (423:17): [True: 1.63k, False: 1.05k]
  ------------------
  424|  1.63k|                match_set_tp_dst(match, ofmatch->tp_dst);
  425|  1.63k|            }
  426|  2.69k|            break;
  427|       |
  428|    895|        default:
  ------------------
  |  Branch (428:9): [True: 895, False: 5.78k]
  ------------------
  429|       |            /* OF1.1 says explicitly to ignore this. */
  430|    895|            break;
  431|  6.67k|        }
  432|  6.67k|    }
  433|       |
  434|  14.1k|    if (eth_type_mpls(match->flow.dl_type)) {
  ------------------
  |  Branch (434:9): [True: 1.50k, False: 12.5k]
  ------------------
  435|  1.50k|        if (!(wc & OFPFW11_MPLS_LABEL)) {
  ------------------
  |  Branch (435:13): [True: 235, False: 1.26k]
  ------------------
  436|    235|            match_set_mpls_label(match, 0, ofmatch->mpls_label);
  437|    235|        }
  438|  1.50k|        if (!(wc & OFPFW11_MPLS_TC)) {
  ------------------
  |  Branch (438:13): [True: 738, False: 766]
  ------------------
  439|    738|            match_set_mpls_tc(match, 0, ofmatch->mpls_tc);
  440|    738|        }
  441|  1.50k|    }
  442|       |
  443|  14.1k|    match_set_metadata_masked(match, ofmatch->metadata,
  444|  14.1k|                              ~ofmatch->metadata_mask);
  445|       |
  446|  14.1k|    return 0;
  447|  15.2k|}
ofputil_dl_type_from_openflow:
  632|   162k|{
  633|   162k|    return (ofp_dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
  ------------------
  |  Branch (633:13): [True: 81, False: 162k]
  ------------------
  634|   162k|            ? htons(FLOW_DL_TYPE_NONE)
  635|   162k|            : ofp_dl_type);
  636|   162k|}
ofputil_decode_tlv_table_mod:
  709|  5.96k|{
  710|  5.96k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  711|  5.96k|    ofpraw_pull_assert(&msg);
  712|       |
  713|  5.96k|    struct nx_tlv_table_mod *nx_ttm = ofpbuf_pull(&msg, sizeof *nx_ttm);
  714|  5.96k|    ttm->command = ntohs(nx_ttm->command);
  715|  5.96k|    if (ttm->command > NXTTMC_CLEAR) {
  ------------------
  |  Branch (715:9): [True: 2.42k, False: 3.53k]
  ------------------
  716|  2.42k|        VLOG_WARN_RL(&rl, "tlv table mod command (%u) is out of range",
  ------------------
  |  |  223|  2.42k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.42k|    do {                                                                \
  |  |  |  |  287|  2.42k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.42k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.42k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.42k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  717|  2.42k|                     ttm->command);
  718|  2.42k|        return OFPERR_NXTTMFC_BAD_COMMAND;
  719|  2.42k|    }
  720|       |
  721|  3.53k|    return decode_tlv_table_mappings(&msg, TUN_METADATA_NUM_OPTS,
  ------------------
  |  |   26|  3.53k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  722|  3.53k|                                        &ttm->mappings);
  723|  5.96k|}
ofputil_format_tlv_table_mod:
  745|  1.51k|{
  746|  1.51k|    ds_put_cstr(s, "\n ");
  747|       |
  748|  1.51k|    switch (ttm->command) {
  ------------------
  |  Branch (748:13): [True: 0, False: 1.51k]
  ------------------
  749|    539|    case NXTTMC_ADD:
  ------------------
  |  Branch (749:5): [True: 539, False: 980]
  ------------------
  750|    539|        ds_put_cstr(s, "ADD");
  751|    539|        break;
  752|      1|    case NXTTMC_DELETE:
  ------------------
  |  Branch (752:5): [True: 1, False: 1.51k]
  ------------------
  753|      1|        ds_put_cstr(s, "DEL");
  754|      1|        break;
  755|    979|    case NXTTMC_CLEAR:
  ------------------
  |  Branch (755:5): [True: 979, False: 540]
  ------------------
  756|    979|        ds_put_cstr(s, "CLEAR");
  757|    979|        break;
  758|  1.51k|    }
  759|       |
  760|  1.51k|    if (ttm->command != NXTTMC_CLEAR) {
  ------------------
  |  Branch (760:9): [True: 540, False: 979]
  ------------------
  761|    540|        print_tlv_table(s, &ttm->mappings);
  762|    540|    }
  763|  1.51k|}
ofputil_decode_tlv_table_reply:
  791|  1.47k|{
  792|  1.47k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  793|  1.47k|    ofpraw_pull_assert(&msg);
  794|       |
  795|  1.47k|    struct nx_tlv_table_reply *nx_ttr = ofpbuf_pull(&msg, sizeof *nx_ttr);
  796|  1.47k|    ttr->max_option_space = ntohl(nx_ttr->max_option_space);
  797|  1.47k|    ttr->max_fields = ntohs(nx_ttr->max_fields);
  798|       |
  799|  1.47k|    return decode_tlv_table_mappings(&msg, ttr->max_fields, &ttr->mappings);
  800|  1.47k|}
ofputil_format_tlv_table_reply:
  839|    861|{
  840|    861|    ds_put_char(s, '\n');
  841|       |
  842|    861|    const struct ofputil_tlv_map *map;
  843|    861|    int allocated_space = 0;
  844|    861|    LIST_FOR_EACH (map, list_node, &ttr->mappings) {
  ------------------
  |  |   76|    861|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|    861|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|    861|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  1.64k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  1.64k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 779, False: 861]
  |  |  |  |  |  Branch (181:6): [True: 779, False: 861]
  |  |  |  |  ------------------
  |  |  |  |  182|  1.64k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|    779|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|    779|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|    779|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  1.64k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|    861|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|    779|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|    779|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|    779|        allocated_space += map->option_len;
  846|    779|    }
  847|       |
  848|    861|    ds_put_format(s, " max option space=%"PRIu32" max fields=%"PRIu16"\n",
  849|    861|                  ttr->max_option_space, ttr->max_fields);
  850|    861|    ds_put_format(s, " allocated option space=%d\n", allocated_space);
  851|    861|    ds_put_char(s, '\n');
  852|    861|    print_tlv_table(s, &ttr->mappings);
  853|    861|}
ofputil_uninit_tlv_table:
  857|  5.00k|{
  858|  5.00k|    struct ofputil_tlv_map *map;
  859|       |
  860|  8.00k|    LIST_FOR_EACH_POP (map, list_node, mappings) {
  ------------------
  |  |  140|  13.0k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 8.00k, False: 5.00k]
  |  |  |  Branch (140:12): [True: 8.00k, False: 5.00k]
  |  |  ------------------
  |  |  141|  13.0k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  146|  8.00k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  139|  8.00k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  130|  8.00k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  131|  8.00k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  104|  8.00k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  13.0k|           (ITER = NULL, 0))
  ------------------
  861|  8.00k|        free(map);
  862|  8.00k|    }
  863|  5.00k|}
ofputil_normalize_match:
 1000|   148k|{
 1001|   148k|    ofputil_normalize_match__(match, true);
 1002|   148k|}
ofp-match.c:ofputil_wcbits_to_netmask:
   44|   314k|{
   45|   314k|    wcbits &= 0x3f;
   46|   314k|    return wcbits < 32 ? htonl(~((1u << wcbits) - 1)) : 0;
  ------------------
  |  Branch (46:12): [True: 200k, False: 114k]
  ------------------
   47|   314k|}
ofp-match.c:decode_tlv_table_mappings:
  672|  5.00k|{
  673|  5.00k|    ovs_list_init(mappings);
  674|       |
  675|  10.3k|    while (msg->size) {
  ------------------
  |  Branch (675:12): [True: 8.00k, False: 2.38k]
  ------------------
  676|  8.00k|        struct nx_tlv_map *nx_map;
  677|  8.00k|        struct ofputil_tlv_map *map;
  678|       |
  679|  8.00k|        nx_map = ofpbuf_pull(msg, sizeof *nx_map);
  680|  8.00k|        map = xmalloc(sizeof *map);
  681|  8.00k|        ovs_list_push_back(mappings, &map->list_node);
  682|       |
  683|  8.00k|        map->option_class = ntohs(nx_map->option_class);
  684|  8.00k|        map->option_type = nx_map->option_type;
  685|       |
  686|  8.00k|        map->option_len = nx_map->option_len;
  687|  8.00k|        if (map->option_len % 4 || map->option_len > TLV_MAX_OPT_SIZE) {
  ------------------
  |  |   26|  7.46k|#define TLV_MAX_OPT_SIZE 124
  ------------------
  |  Branch (687:13): [True: 546, False: 7.46k]
  |  Branch (687:36): [True: 415, False: 7.04k]
  ------------------
  688|    961|            VLOG_WARN_RL(&rl, "tlv table option length (%u) is not a "
  ------------------
  |  |  223|    961|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    961|    do {                                                                \
  |  |  |  |  287|    961|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    961|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 961]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    961|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|    961|                         "valid option size", map->option_len);
  690|    961|            ofputil_uninit_tlv_table(mappings);
  691|    961|            return OFPERR_NXTTMFC_BAD_OPT_LEN;
  692|    961|        }
  693|       |
  694|  7.04k|        map->index = ntohs(nx_map->index);
  695|  7.04k|        if (map->index >= max_fields) {
  ------------------
  |  Branch (695:13): [True: 1.66k, False: 5.38k]
  ------------------
  696|  1.66k|            VLOG_WARN_RL(&rl, "tlv table field index (%u) is too large "
  ------------------
  |  |  223|  1.66k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.66k|    do {                                                                \
  |  |  |  |  287|  1.66k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.66k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.66k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.66k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|  1.66k|                         "(max %u)", map->index, max_fields - 1);
  698|  1.66k|            ofputil_uninit_tlv_table(mappings);
  699|  1.66k|            return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  700|  1.66k|        }
  701|  7.04k|    }
  702|       |
  703|  2.38k|    return 0;
  704|  5.00k|}
ofp-match.c:print_tlv_table:
  727|  1.40k|{
  728|  1.40k|    struct ofputil_tlv_map *map;
  729|       |
  730|  1.40k|    ds_put_cstr(s, " mapping table:\n");
  731|  1.40k|    ds_put_cstr(s, "  class  type  length  match field\n");
  732|  1.40k|    ds_put_cstr(s, " ------  ----  ------  --------------");
  733|       |
  734|  1.90k|    LIST_FOR_EACH (map, list_node, mappings) {
  ------------------
  |  |   76|  1.40k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|  1.40k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  1.40k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  3.30k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|  3.30k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 1.90k, False: 1.40k]
  |  |  |  |  |  Branch (181:6): [True: 1.90k, False: 1.40k]
  |  |  |  |  ------------------
  |  |  |  |  182|  3.30k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  1.90k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  1.90k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  1.90k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  3.30k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  1.90k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|  1.90k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|  1.90k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  1.90k|        ds_put_format(s, "\n %#6"PRIx16"  %#4"PRIx8"  %6"PRIu8"  "
  736|  1.90k|                      "tun_metadata%"PRIu16,
  737|  1.90k|                      map->option_class, map->option_type, map->option_len,
  738|  1.90k|                      map->index);
  739|  1.90k|    }
  740|  1.40k|}
ofp-match.c:ofputil_normalize_match__:
  867|   148k|{
  868|   148k|    enum {
  869|   148k|        MAY_NW_ADDR     = 1 << 0, /* nw_src, nw_dst */
  870|   148k|        MAY_TP_ADDR     = 1 << 1, /* tp_src, tp_dst */
  871|   148k|        MAY_NW_PROTO    = 1 << 2, /* nw_proto */
  872|   148k|        MAY_IPVx        = 1 << 3, /* tos, frag, ttl */
  873|   148k|        MAY_ARP_SHA     = 1 << 4, /* arp_sha */
  874|   148k|        MAY_ARP_THA     = 1 << 5, /* arp_tha */
  875|   148k|        MAY_IPV6        = 1 << 6, /* ipv6_src, ipv6_dst, ipv6_label */
  876|   148k|        MAY_ND_TARGET   = 1 << 7, /* nd_target */
  877|   148k|        MAY_MPLS        = 1 << 8, /* mpls label and tc */
  878|   148k|        MAY_ETHER       = 1 << 9, /* dl_src, dl_dst */
  879|   148k|    } may_match;
  880|       |
  881|   148k|    struct flow_wildcards wc = match->wc;
  882|   148k|    ovs_be16 dl_type;
  883|       |
  884|       |    /* Figure out what fields may be matched. */
  885|       |    /* Check the packet_type first and extract dl_type. */
  886|   148k|    if (wc.masks.packet_type == 0 || match_has_default_packet_type(match)) {
  ------------------
  |  Branch (886:9): [True: 4.88k, False: 143k]
  |  Branch (886:38): [True: 143k, False: 0]
  ------------------
  887|   148k|        may_match = MAY_ETHER;
  888|   148k|        dl_type = match->flow.dl_type;
  889|   148k|    } else if (wc.masks.packet_type == OVS_BE32_MAX &&
  ------------------
  |  |   43|      0|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (889:16): [True: 0, False: 0]
  ------------------
  890|      0|               pt_ns(match->flow.packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (890:16): [True: 0, False: 0]
  ------------------
  891|      0|        may_match = 0;
  892|      0|        dl_type = pt_ns_type_be(match->flow.packet_type);
  893|      0|    } else {
  894|      0|        may_match = 0;
  895|      0|        dl_type = 0;
  896|      0|    }
  897|   148k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (897:9): [True: 42.2k, False: 106k]
  ------------------
  898|  42.2k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_NW_ADDR;
  899|  42.2k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (899:13): [True: 2.85k, False: 39.4k]
  ------------------
  900|  42.2k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (900:13): [True: 3.63k, False: 35.7k]
  ------------------
  901|  42.2k|            match->flow.nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (901:13): [True: 22.8k, False: 12.9k]
  ------------------
  902|  42.2k|            match->flow.nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (902:13): [True: 712, False: 12.2k]
  ------------------
  903|  30.0k|            may_match |= MAY_TP_ADDR;
  904|  30.0k|        }
  905|   106k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (905:16): [True: 6.70k, False: 99.8k]
  ------------------
  906|  6.70k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_IPV6;
  907|  6.70k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (907:13): [True: 10, False: 6.69k]
  ------------------
  908|  6.70k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (908:13): [True: 398, False: 6.29k]
  ------------------
  909|  6.70k|            match->flow.nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (909:13): [True: 105, False: 6.19k]
  ------------------
  910|    513|            may_match |= MAY_TP_ADDR;
  911|  6.19k|        } else if (match->flow.nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (911:20): [True: 3.74k, False: 2.45k]
  ------------------
  912|  3.74k|            may_match |= MAY_TP_ADDR;
  913|  3.74k|            if (match->flow.tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
  ------------------
  |  Branch (913:17): [True: 1.63k, False: 2.10k]
  ------------------
  914|  1.63k|                may_match |= MAY_ND_TARGET | MAY_ARP_SHA;
  915|  2.10k|            } else if (match->flow.tp_src == htons(ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (915:24): [True: 990, False: 1.11k]
  ------------------
  916|    990|                may_match |= MAY_ND_TARGET | MAY_ARP_THA;
  917|    990|            }
  918|  3.74k|        }
  919|  99.8k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (919:16): [True: 718, False: 99.0k]
  ------------------
  920|  99.8k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (920:16): [True: 97, False: 98.9k]
  ------------------
  921|    815|        may_match |= MAY_NW_PROTO | MAY_NW_ADDR | MAY_ARP_SHA | MAY_ARP_THA;
  922|  98.9k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (922:16): [True: 147, False: 98.8k]
  ------------------
  923|    147|        may_match |= MAY_MPLS;
  924|    147|    }
  925|       |
  926|       |    /* Clear the fields that may not be matched. */
  927|   148k|    if (!(may_match & MAY_ETHER)) {
  ------------------
  |  Branch (927:9): [True: 0, False: 148k]
  ------------------
  928|      0|        wc.masks.dl_src = wc.masks.dl_dst = eth_addr_zero;
  929|      0|    }
  930|   148k|    if (!(may_match & MAY_NW_ADDR)) {
  ------------------
  |  Branch (930:9): [True: 105k, False: 43.0k]
  ------------------
  931|   105k|        wc.masks.nw_src = wc.masks.nw_dst = htonl(0);
  932|   105k|    }
  933|   148k|    if (!(may_match & MAY_TP_ADDR)) {
  ------------------
  |  Branch (933:9): [True: 114k, False: 34.3k]
  ------------------
  934|   114k|        wc.masks.tp_src = wc.masks.tp_dst = htons(0);
  935|   114k|    }
  936|   148k|    if (!(may_match & MAY_NW_PROTO)) {
  ------------------
  |  Branch (936:9): [True: 98.9k, False: 49.7k]
  ------------------
  937|  98.9k|        wc.masks.nw_proto = 0;
  938|  98.9k|    }
  939|   148k|    if (!(may_match & MAY_IPVx)) {
  ------------------
  |  Branch (939:9): [True: 99.8k, False: 48.9k]
  ------------------
  940|  99.8k|        wc.masks.nw_tos = 0;
  941|  99.8k|        wc.masks.nw_ttl = 0;
  942|  99.8k|    }
  943|   148k|    if (!(may_match & MAY_ARP_SHA)) {
  ------------------
  |  Branch (943:9): [True: 146k, False: 2.44k]
  ------------------
  944|   146k|        WC_UNMASK_FIELD(&wc, arp_sha);
  ------------------
  |  |  205|   146k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  945|   146k|    }
  946|   148k|    if (!(may_match & MAY_ARP_THA)) {
  ------------------
  |  Branch (946:9): [True: 146k, False: 1.80k]
  ------------------
  947|   146k|        WC_UNMASK_FIELD(&wc, arp_tha);
  ------------------
  |  |  205|   146k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  948|   146k|    }
  949|   148k|    if (!(may_match & MAY_IPV6)) {
  ------------------
  |  Branch (949:9): [True: 142k, False: 6.70k]
  ------------------
  950|   142k|        wc.masks.ipv6_src = wc.masks.ipv6_dst = in6addr_any;
  951|   142k|        wc.masks.ipv6_label = htonl(0);
  952|   142k|    }
  953|   148k|    if (!(may_match & MAY_ND_TARGET)) {
  ------------------
  |  Branch (953:9): [True: 146k, False: 2.62k]
  ------------------
  954|   146k|        wc.masks.nd_target = in6addr_any;
  955|   146k|    }
  956|   148k|    if (!(may_match & MAY_MPLS)) {
  ------------------
  |  Branch (956:9): [True: 148k, False: 147]
  ------------------
  957|   148k|        memset(wc.masks.mpls_lse, 0, sizeof wc.masks.mpls_lse);
  958|   148k|    }
  959|       |
  960|       |    /* Log any changes. */
  961|   148k|    if (!flow_wildcards_equal(&wc, &match->wc)) {
  ------------------
  |  Branch (961:9): [True: 113k, False: 35.1k]
  ------------------
  962|   113k|        bool log = may_log && !VLOG_DROP_INFO(&rl);
  ------------------
  |  |  234|   227k|#define VLOG_DROP_INFO(RL) vlog_should_drop(&this_module, VLL_INFO, RL)
  ------------------
  |  Branch (962:20): [True: 113k, False: 0]
  |  Branch (962:31): [True: 0, False: 113k]
  ------------------
  963|   113k|        char *pre = (log
  ------------------
  |  Branch (963:22): [True: 0, False: 113k]
  ------------------
  964|   113k|                     ? match_to_string(match, NULL, OFP_DEFAULT_PRIORITY)
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  965|   113k|                     : NULL);
  966|       |
  967|   113k|        match->wc = wc;
  968|   113k|        match_zero_wildcarded_fields(match);
  969|       |
  970|   113k|        if (log) {
  ------------------
  |  Branch (970:13): [True: 0, False: 113k]
  ------------------
  971|      0|            char *post = match_to_string(match, NULL, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  972|      0|            VLOG_INFO("normalization changed ofp_match, details:");
  ------------------
  |  |  209|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|      0|    do {                                                \
  |  |  |  |  280|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|            VLOG_INFO(" pre: %s", pre);
  ------------------
  |  |  209|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|      0|    do {                                                \
  |  |  |  |  280|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|      0|            VLOG_INFO("post: %s", post);
  ------------------
  |  |  209|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|      0|    do {                                                \
  |  |  |  |  280|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  975|      0|            free(pre);
  976|      0|            free(post);
  977|      0|        }
  978|   113k|    }
  979|   148k|}

ofputil_format_meter_id:
   34|  6.95k|{
   35|  6.95k|    if (meter_id <= OFPM13_MAX) {
  ------------------
  |  Branch (35:9): [True: 5.66k, False: 1.28k]
  ------------------
   36|  5.66k|        ds_put_format(s, "meter%c%"PRIu32, separator, meter_id);
   37|  5.66k|    } else {
   38|  1.28k|        const char *name;
   39|  1.28k|        switch (meter_id) {
   40|     12|        case OFPM13_SLOWPATH:
  ------------------
  |  Branch (40:9): [True: 12, False: 1.27k]
  ------------------
   41|     12|            name = "slowpath";
   42|     12|            break;
   43|      0|        case OFPM13_CONTROLLER:
  ------------------
  |  Branch (43:9): [True: 0, False: 1.28k]
  ------------------
   44|      0|            name = "controller";
   45|      0|            break;
   46|    305|        case OFPM13_ALL:
  ------------------
  |  Branch (46:9): [True: 305, False: 984]
  ------------------
   47|    305|            name = "all";
   48|    305|            break;
   49|    972|        default:
  ------------------
  |  Branch (49:9): [True: 972, False: 317]
  ------------------
   50|    972|            name = "unknown";
   51|  1.28k|        }
   52|  1.28k|        ds_put_format(s, "meter%c%s", separator, name);
   53|  1.28k|    }
   54|  6.95k|}
ofputil_format_meter_band:
   59|    641|{
   60|    641|    ds_put_cstr(s, "\ntype=");
   61|    641|    switch (mb->type) {
   62|    428|    case OFPMBT13_DROP:
  ------------------
  |  Branch (62:5): [True: 428, False: 213]
  ------------------
   63|    428|        ds_put_cstr(s, "drop");
   64|    428|        break;
   65|    213|    case OFPMBT13_DSCP_REMARK:
  ------------------
  |  Branch (65:5): [True: 213, False: 428]
  ------------------
   66|    213|        ds_put_cstr(s, "dscp_remark");
   67|    213|        break;
   68|      0|    default:
  ------------------
  |  Branch (68:5): [True: 0, False: 641]
  ------------------
   69|      0|        ds_put_format(s, "%u", mb->type);
   70|    641|    }
   71|       |
   72|    641|    ds_put_format(s, " rate=%"PRIu32, mb->rate);
   73|       |
   74|    641|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (74:9): [True: 141, False: 500]
  ------------------
   75|    141|        ds_put_format(s, " burst_size=%"PRIu32, mb->burst_size);
   76|    141|    }
   77|    641|    if (mb->type == OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (77:9): [True: 213, False: 428]
  ------------------
   78|    213|        ds_put_format(s, " prec_level=%"PRIu8, mb->prec_level);
   79|    213|    }
   80|    641|}
ofputil_decode_meter_mod:
  126|  16.4k|{
  127|  16.4k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  128|  16.4k|    ofpraw_pull_assert(&b);
  129|  16.4k|    const struct ofp13_meter_mod *omm = ofpbuf_pull(&b, sizeof *omm);
  130|       |
  131|       |    /* Translate the message. */
  132|  16.4k|    mm->command = ntohs(omm->command);
  133|  16.4k|    if (mm->command != OFPMC13_ADD &&
  ------------------
  |  Branch (133:9): [True: 12.4k, False: 4.03k]
  ------------------
  134|  16.4k|        mm->command != OFPMC13_MODIFY &&
  ------------------
  |  Branch (134:9): [True: 10.9k, False: 1.46k]
  ------------------
  135|  16.4k|        mm->command != OFPMC13_DELETE) {
  ------------------
  |  Branch (135:9): [True: 10.6k, False: 339]
  ------------------
  136|  10.6k|        return OFPERR_OFPMMFC_BAD_COMMAND;
  137|  10.6k|    }
  138|  5.83k|    mm->meter.meter_id = ntohl(omm->meter_id);
  139|       |
  140|  5.83k|    if (mm->command == OFPMC13_DELETE) {
  ------------------
  |  Branch (140:9): [True: 339, False: 5.49k]
  ------------------
  141|    339|        mm->meter.flags = 0;
  142|    339|        mm->meter.n_bands = 0;
  143|    339|        mm->meter.bands = NULL;
  144|  5.49k|    } else {
  145|  5.49k|        enum ofperr error;
  146|       |
  147|  5.49k|        mm->meter.flags = ntohs(omm->flags);
  148|  5.49k|        if (mm->meter.flags & OFPMF13_KBPS &&
  ------------------
  |  Branch (148:13): [True: 718, False: 4.77k]
  ------------------
  149|  5.49k|            mm->meter.flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (149:13): [True: 174, False: 544]
  ------------------
  150|    174|            return OFPERR_OFPMMFC_BAD_FLAGS;
  151|    174|        }
  152|       |
  153|  5.32k|        error = ofputil_pull_bands(&b, b.size, &mm->meter.n_bands, bands);
  154|  5.32k|        if (error) {
  ------------------
  |  Branch (154:13): [True: 2.99k, False: 2.33k]
  ------------------
  155|  2.99k|            return error;
  156|  2.99k|        }
  157|  2.33k|        mm->meter.bands = bands->data;
  158|  2.33k|    }
  159|  2.67k|    return 0;
  160|  5.83k|}
ofputil_decode_meter_request:
  164|    591|{
  165|    591|    const struct ofp13_meter_multipart_request *omr = ofpmsg_body(oh);
  166|    591|    *meter_id = ntohl(omr->meter_id);
  167|    591|}
ofputil_decode_meter_config:
  289|  4.14k|{
  290|  4.14k|    const struct ofp13_meter_config *omc;
  291|  4.14k|    enum ofperr err;
  292|       |
  293|       |    /* Pull OpenFlow headers for the first call. */
  294|  4.14k|    if (!msg->header) {
  ------------------
  |  Branch (294:9): [True: 2.10k, False: 2.04k]
  ------------------
  295|  2.10k|        ofpraw_pull_assert(msg);
  296|  2.10k|    }
  297|       |
  298|  4.14k|    if (!msg->size) {
  ------------------
  |  Branch (298:9): [True: 829, False: 3.31k]
  ------------------
  299|    829|        return EOF;
  300|    829|    }
  301|       |
  302|  3.31k|    omc = ofpbuf_try_pull(msg, sizeof *omc);
  303|  3.31k|    if (!omc) {
  ------------------
  |  Branch (303:9): [True: 0, False: 3.31k]
  ------------------
  304|      0|        VLOG_WARN_RL(&rl, "OFPMP_METER_CONFIG reply has %"PRIu32" leftover "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      0|                     "bytes at end", msg->size);
  306|      0|        return OFPERR_OFPBRC_BAD_LEN;
  307|      0|    }
  308|       |
  309|  3.31k|    ofpbuf_clear(bands);
  310|  3.31k|    err = ofputil_pull_bands(msg, ntohs(omc->length) - sizeof *omc,
  311|  3.31k|                             &mc->n_bands, bands);
  312|  3.31k|    if (err) {
  ------------------
  |  Branch (312:9): [True: 1.27k, False: 2.04k]
  ------------------
  313|  1.27k|        return err;
  314|  1.27k|    }
  315|  2.04k|    mc->meter_id = ntohl(omc->meter_id);
  316|  2.04k|    mc->flags = ntohs(omc->flags);
  317|  2.04k|    mc->bands = bands->data;
  318|       |
  319|  2.04k|    return 0;
  320|  3.31k|}
ofputil_format_meter_config:
  347|  4.71k|{
  348|  4.71k|    uint16_t i;
  349|       |
  350|  4.71k|    ofputil_format_meter_id(s, mc->meter_id, '=');
  351|  4.71k|    ds_put_char(s, ' ');
  352|       |
  353|  4.71k|    ofp_print_meter_flags(s, mc->flags);
  354|       |
  355|  4.71k|    ds_put_cstr(s, "bands=");
  356|  5.35k|    for (i = 0; i < mc->n_bands; ++i) {
  ------------------
  |  Branch (356:17): [True: 641, False: 4.71k]
  ------------------
  357|    641|        ofputil_format_meter_band(s, mc->flags, &mc->bands[i]);
  358|    641|    }
  359|  4.71k|    ds_put_char(s, '\n');
  360|  4.71k|}
ofputil_decode_meter_stats:
  404|  3.22k|{
  405|  3.22k|    const struct ofp13_meter_stats *oms;
  406|  3.22k|    enum ofperr err;
  407|       |
  408|       |    /* Pull OpenFlow headers for the first call. */
  409|  3.22k|    if (!msg->header) {
  ------------------
  |  Branch (409:9): [True: 1.57k, False: 1.65k]
  ------------------
  410|  1.57k|        ofpraw_pull_assert(msg);
  411|  1.57k|    }
  412|       |
  413|  3.22k|    if (!msg->size) {
  ------------------
  |  Branch (413:9): [True: 175, False: 3.05k]
  ------------------
  414|    175|        return EOF;
  415|    175|    }
  416|       |
  417|  3.05k|    oms = ofpbuf_try_pull(msg, sizeof *oms);
  418|  3.05k|    if (!oms) {
  ------------------
  |  Branch (418:9): [True: 100, False: 2.95k]
  ------------------
  419|    100|        VLOG_WARN_RL(&rl, "OFPMP_METER reply has %"PRIu32" leftover bytes "
  ------------------
  |  |  223|    100|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    100|    do {                                                                \
  |  |  |  |  287|    100|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    100|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 100]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    100|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|    100|                     "at end", msg->size);
  421|    100|        return OFPERR_OFPBRC_BAD_LEN;
  422|    100|    }
  423|       |
  424|  2.95k|    ofpbuf_clear(bands);
  425|  2.95k|    err = ofputil_pull_band_stats(msg, ntohs(oms->len) - sizeof *oms,
  426|  2.95k|                                  &ms->n_bands, bands);
  427|  2.95k|    if (err) {
  ------------------
  |  Branch (427:9): [True: 1.30k, False: 1.65k]
  ------------------
  428|  1.30k|        return err;
  429|  1.30k|    }
  430|  1.65k|    ms->meter_id = ntohl(oms->meter_id);
  431|  1.65k|    ms->flow_count = ntohl(oms->flow_count);
  432|  1.65k|    ms->packet_in_count = ntohll(oms->packet_in_count);
  433|  1.65k|    ms->byte_in_count = ntohll(oms->byte_in_count);
  434|  1.65k|    ms->duration_sec = ntohl(oms->duration_sec);
  435|  1.65k|    ms->duration_nsec = ntohl(oms->duration_nsec);
  436|  1.65k|    ms->bands = bands->data;
  437|       |
  438|  1.65k|    return 0;
  439|  2.95k|}
ofputil_format_meter_stats:
  443|  1.65k|{
  444|  1.65k|    uint16_t i;
  445|       |
  446|  1.65k|    ofputil_format_meter_id(s, ms->meter_id, ':');
  447|  1.65k|    ds_put_char(s, ' ');
  448|  1.65k|    ds_put_format(s, "flow_count:%"PRIu32" ", ms->flow_count);
  449|  1.65k|    ds_put_format(s, "packet_in_count:%"PRIu64" ", ms->packet_in_count);
  450|  1.65k|    ds_put_format(s, "byte_in_count:%"PRIu64" ", ms->byte_in_count);
  451|  1.65k|    ds_put_cstr(s, "duration:");
  452|  1.65k|    ofp_print_duration(s, ms->duration_sec, ms->duration_nsec);
  453|  1.65k|    ds_put_char(s, ' ');
  454|       |
  455|  1.65k|    ds_put_cstr(s, "bands:\n");
  456|  4.14k|    for (i = 0; i < ms->n_bands; ++i) {
  ------------------
  |  Branch (456:17): [True: 2.49k, False: 1.65k]
  ------------------
  457|  2.49k|        ds_put_format(s, "%d: ", i);
  458|  2.49k|        ds_put_format(s, "packet_count:%"PRIu64" ", ms->bands[i].packet_count);
  459|  2.49k|        ds_put_format(s, "byte_count:%"PRIu64"\n", ms->bands[i].byte_count);
  460|  2.49k|    }
  461|  1.65k|}
ofputil_decode_meter_features:
  466|    407|{
  467|    407|    const struct ofp13_meter_features *omf = ofpmsg_body(oh);
  468|       |
  469|    407|    mf->max_meters = ntohl(omf->max_meter);
  470|    407|    mf->band_types = ntohl(omf->band_types);
  471|    407|    mf->capabilities = ntohl(omf->capabilities);
  472|    407|    mf->max_bands = omf->max_bands;
  473|    407|    mf->max_color = omf->max_color;
  474|    407|}
ofputil_format_meter_features:
  524|    407|{
  525|    407|    ds_put_format(s, "\nmax_meter:%"PRIu32, mf->max_meters);
  526|    407|    ds_put_format(s, " max_bands:%"PRIu8, mf->max_bands);
  527|    407|    ds_put_format(s, " max_color:%"PRIu8"\n", mf->max_color);
  528|       |
  529|    407|    ds_put_cstr(s, "band_types: ");
  530|    407|    ofp_print_bit_names(s, mf->band_types,
  531|    407|                        ofputil_meter_band_types_to_name, ' ');
  532|    407|    ds_put_char(s, '\n');
  533|       |
  534|    407|    ds_put_cstr(s, "capabilities: ");
  535|    407|    ofp_print_bit_names(s, mf->capabilities,
  536|    407|                        ofputil_meter_capabilities_to_name, ' ');
  537|    407|    ds_put_char(s, '\n');
  538|    407|}
ofputil_format_meter_mod:
  793|  2.67k|{
  794|  2.67k|    switch (mm->command) {
  795|  1.12k|    case OFPMC13_ADD:
  ------------------
  |  Branch (795:5): [True: 1.12k, False: 1.54k]
  ------------------
  796|  1.12k|        ds_put_cstr(s, " ADD ");
  797|  1.12k|        break;
  798|  1.20k|    case OFPMC13_MODIFY:
  ------------------
  |  Branch (798:5): [True: 1.20k, False: 1.46k]
  ------------------
  799|  1.20k|        ds_put_cstr(s, " MOD ");
  800|  1.20k|        break;
  801|    339|    case OFPMC13_DELETE:
  ------------------
  |  Branch (801:5): [True: 339, False: 2.33k]
  ------------------
  802|    339|        ds_put_cstr(s, " DEL ");
  803|    339|        break;
  804|      0|    default:
  ------------------
  |  Branch (804:5): [True: 0, False: 2.67k]
  ------------------
  805|      0|        ds_put_format(s, " cmd:%d ", mm->command);
  806|  2.67k|    }
  807|       |
  808|  2.67k|    ofputil_format_meter_config(s, &mm->meter);
  809|  2.67k|}
ofp-meter.c:ofputil_pull_bands:
   85|  8.63k|{
   86|  8.63k|    const struct ofp13_meter_band_header *ombh;
   87|  8.63k|    struct ofputil_meter_band *mb;
   88|  8.63k|    uint16_t n = 0;
   89|       |
   90|  8.63k|    ombh = ofpbuf_try_pull(msg, len);
   91|  8.63k|    if (!ombh) {
  ------------------
  |  Branch (91:9): [True: 330, False: 8.30k]
  ------------------
   92|    330|        return OFPERR_OFPBRC_BAD_LEN;
   93|    330|    }
   94|       |
   95|  9.27k|    while (len >= sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (95:12): [True: 4.20k, False: 5.07k]
  ------------------
   96|  4.20k|        size_t ombh_len = ntohs(ombh->len);
   97|       |        /* All supported band types have the same length. */
   98|  4.20k|        if (ombh_len != sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (98:13): [True: 3.04k, False: 1.15k]
  ------------------
   99|  3.04k|            return OFPERR_OFPBRC_BAD_LEN;
  100|  3.04k|        }
  101|  1.15k|        mb = ofpbuf_put_uninit(bands, sizeof *mb);
  102|  1.15k|        mb->type = ntohs(ombh->type);
  103|  1.15k|        if (mb->type != OFPMBT13_DROP && mb->type != OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (103:13): [True: 532, False: 621]
  |  Branch (103:42): [True: 180, False: 352]
  ------------------
  104|    180|            return OFPERR_OFPMMFC_BAD_BAND;
  105|    180|        }
  106|    973|        mb->rate = ntohl(ombh->rate);
  107|    973|        mb->burst_size = ntohl(ombh->burst_size);
  108|    973|        mb->prec_level = (mb->type == OFPMBT13_DSCP_REMARK) ?
  ------------------
  |  Branch (108:26): [True: 352, False: 621]
  ------------------
  109|    621|            ((struct ofp13_meter_band_dscp_remark *)ombh)->prec_level : 0;
  110|    973|        n++;
  111|    973|        len -= ombh_len;
  112|    973|        ombh = ALIGNED_CAST(struct ofp13_meter_band_header *,
  ------------------
  |  |  430|    973|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  113|    973|                            (char *) ombh + ombh_len);
  114|    973|    }
  115|  5.07k|    if (len) {
  ------------------
  |  Branch (115:9): [True: 705, False: 4.37k]
  ------------------
  116|    705|        return OFPERR_OFPBRC_BAD_LEN;
  117|    705|    }
  118|  4.37k|    *n_bands = n;
  119|  4.37k|    return 0;
  120|  5.07k|}
ofp-meter.c:ofp_print_meter_flags:
  324|  4.71k|{
  325|  4.71k|    if (flags & OFPMF13_KBPS) {
  ------------------
  |  Branch (325:9): [True: 1.24k, False: 3.47k]
  ------------------
  326|  1.24k|        ds_put_cstr(s, "kbps ");
  327|  1.24k|    }
  328|  4.71k|    if (flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (328:9): [True: 1.24k, False: 3.47k]
  ------------------
  329|  1.24k|        ds_put_cstr(s, "pktps ");
  330|  1.24k|    }
  331|  4.71k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (331:9): [True: 593, False: 4.11k]
  ------------------
  332|    593|        ds_put_cstr(s, "burst ");
  333|    593|    }
  334|  4.71k|    if (flags & OFPMF13_STATS) {
  ------------------
  |  Branch (334:9): [True: 1.13k, False: 3.58k]
  ------------------
  335|  1.13k|        ds_put_cstr(s, "stats ");
  336|  1.13k|    }
  337|       |
  338|  4.71k|    flags &= ~(OFPMF13_KBPS | OFPMF13_PKTPS | OFPMF13_BURST | OFPMF13_STATS);
  339|  4.71k|    if (flags) {
  ------------------
  |  Branch (339:9): [True: 3.57k, False: 1.14k]
  ------------------
  340|  3.57k|        ds_put_format(s, "flags:0x%x ", (unsigned)flags);
  341|  3.57k|    }
  342|  4.71k|}
ofp-meter.c:ofputil_pull_band_stats:
  365|  2.95k|{
  366|  2.95k|    const struct ofp13_meter_band_stats *ombs;
  367|  2.95k|    struct ofputil_meter_band_stats *mbs;
  368|  2.95k|    uint16_t n, i;
  369|       |
  370|  2.95k|    ombs = ofpbuf_try_pull(msg, len);
  371|  2.95k|    if (!ombs) {
  ------------------
  |  Branch (371:9): [True: 1.24k, False: 1.70k]
  ------------------
  372|  1.24k|        return OFPERR_OFPBRC_BAD_LEN;
  373|  1.24k|    }
  374|       |
  375|  1.70k|    n = len / sizeof *ombs;
  376|  1.70k|    if (len != n * sizeof *ombs) {
  ------------------
  |  Branch (376:9): [True: 56, False: 1.65k]
  ------------------
  377|     56|        return OFPERR_OFPBRC_BAD_LEN;
  378|     56|    }
  379|       |
  380|  1.65k|    mbs = ofpbuf_put_uninit(bands, len);
  381|       |
  382|  4.14k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (382:17): [True: 2.49k, False: 1.65k]
  ------------------
  383|  2.49k|        mbs[i].packet_count = ntohll(ombs[i].packet_band_count);
  384|  2.49k|        mbs[i].byte_count = ntohll(ombs[i].byte_band_count);
  385|  2.49k|    }
  386|  1.65k|    *n_bands = n;
  387|  1.65k|    return 0;
  388|  1.70k|}
ofp-meter.c:ofputil_meter_band_types_to_name:
  497|  3.83k|{
  498|  3.83k|    switch (bit) {
  ------------------
  |  Branch (498:13): [True: 3.69k, False: 143]
  ------------------
  499|     80|    case 1 << OFPMBT13_DROP:          return "drop";
  ------------------
  |  Branch (499:5): [True: 80, False: 3.75k]
  ------------------
  500|     63|    case 1 << OFPMBT13_DSCP_REMARK:   return "dscp_remark";
  ------------------
  |  Branch (500:5): [True: 63, False: 3.77k]
  ------------------
  501|  3.83k|    }
  502|       |
  503|  3.69k|    return NULL;
  504|  3.83k|}
ofp-meter.c:ofputil_meter_capabilities_to_name:
  508|  3.77k|{
  509|  3.77k|    enum ofp13_meter_flags flag = bit;
  510|       |
  511|  3.77k|    switch (flag) {
  ------------------
  |  Branch (511:13): [True: 3.13k, False: 638]
  ------------------
  512|    182|    case OFPMF13_KBPS:    return "kbps";
  ------------------
  |  Branch (512:5): [True: 182, False: 3.59k]
  ------------------
  513|    199|    case OFPMF13_PKTPS:   return "pktps";
  ------------------
  |  Branch (513:5): [True: 199, False: 3.57k]
  ------------------
  514|     87|    case OFPMF13_BURST:   return "burst";
  ------------------
  |  Branch (514:5): [True: 87, False: 3.68k]
  ------------------
  515|    170|    case OFPMF13_STATS:   return "stats";
  ------------------
  |  Branch (515:5): [True: 170, False: 3.60k]
  ------------------
  516|  3.77k|    }
  517|       |
  518|  3.13k|    return NULL;
  519|  3.77k|}

ofp_flow_removed_reason_to_string:
   44|  19.4k|{
   45|  19.4k|    switch (reason) {
   46|  3.04k|    case OFPRR_IDLE_TIMEOUT:
  ------------------
  |  Branch (46:5): [True: 3.04k, False: 16.4k]
  ------------------
   47|  3.04k|        return "idle";
   48|  1.81k|    case OFPRR_HARD_TIMEOUT:
  ------------------
  |  Branch (48:5): [True: 1.81k, False: 17.6k]
  ------------------
   49|  1.81k|        return "hard";
   50|  1.53k|    case OFPRR_DELETE:
  ------------------
  |  Branch (50:5): [True: 1.53k, False: 17.9k]
  ------------------
   51|  1.53k|        return "delete";
   52|  4.18k|    case OFPRR_GROUP_DELETE:
  ------------------
  |  Branch (52:5): [True: 4.18k, False: 15.2k]
  ------------------
   53|  4.18k|        return "group_delete";
   54|  1.67k|    case OFPRR_EVICTION:
  ------------------
  |  Branch (54:5): [True: 1.67k, False: 17.7k]
  ------------------
   55|  1.67k|        return "eviction";
   56|  1.10k|    case OFPRR_METER_DELETE:
  ------------------
  |  Branch (56:5): [True: 1.10k, False: 18.3k]
  ------------------
   57|  1.10k|        return "meter_delete";
   58|      6|    case OVS_OFPRR_NONE:
  ------------------
  |  Branch (58:5): [True: 6, False: 19.4k]
  ------------------
   59|  6.09k|    default:
  ------------------
  |  Branch (59:5): [True: 6.09k, False: 13.3k]
  ------------------
   60|  6.09k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
   61|  6.09k|        return reasonbuf;
   62|  19.4k|    }
   63|  19.4k|}
ofputil_decode_flow_removed:
   71|  34.3k|{
   72|  34.3k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   73|  34.3k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   74|  34.3k|    if (raw == OFPRAW_OFPT15_FLOW_REMOVED) {
  ------------------
  |  Branch (74:9): [True: 19.7k, False: 14.5k]
  ------------------
   75|  19.7k|        const struct ofp15_flow_removed *ofr;
   76|  19.7k|        enum ofperr error;
   77|       |
   78|  19.7k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
   79|       |
   80|  19.7k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL,  &fr->match, NULL);
   81|  19.7k|        if (error) {
  ------------------
  |  Branch (81:13): [True: 8.77k, False: 11.0k]
  ------------------
   82|  8.77k|            return error;
   83|  8.77k|        }
   84|       |
   85|  11.0k|        struct oxs_stats stats;
   86|  11.0k|        uint16_t statlen;
   87|  11.0k|        uint8_t oxs_field_set;
   88|  11.0k|        error = oxs_pull_stat(&b, &stats, &statlen, &oxs_field_set);
   89|  11.0k|        if (error) {
  ------------------
  |  Branch (89:13): [True: 8.00k, False: 3.00k]
  ------------------
   90|  8.00k|            return error;
   91|  8.00k|        }
   92|       |
   93|  3.00k|        fr->cookie = ofr->cookie;
   94|  3.00k|        fr->priority = ntohs(ofr->priority);
   95|  3.00k|        fr->reason = ofr->reason;
   96|  3.00k|        fr->table_id = ofr->table_id;
   97|  3.00k|        fr->duration_sec = stats.duration_sec;
   98|  3.00k|        fr->duration_nsec = stats.duration_nsec;
   99|  3.00k|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  100|  3.00k|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  101|  3.00k|        fr->packet_count = stats.packet_count;
  102|  3.00k|        fr->byte_count = stats.byte_count;
  103|  14.5k|    } else if (raw == OFPRAW_OFPT11_FLOW_REMOVED) {
  ------------------
  |  Branch (103:16): [True: 6.29k, False: 8.28k]
  ------------------
  104|  6.29k|        const struct ofp12_flow_removed *ofr;
  105|  6.29k|        enum ofperr error;
  106|       |
  107|  6.29k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  108|       |
  109|  6.29k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL, &fr->match, NULL);
  110|  6.29k|        if (error) {
  ------------------
  |  Branch (110:13): [True: 2.00k, False: 4.28k]
  ------------------
  111|  2.00k|            return error;
  112|  2.00k|        }
  113|       |
  114|  4.28k|        fr->priority = ntohs(ofr->priority);
  115|  4.28k|        fr->cookie = ofr->cookie;
  116|  4.28k|        fr->reason = ofr->reason;
  117|  4.28k|        fr->table_id = ofr->table_id;
  118|  4.28k|        fr->duration_sec = ntohl(ofr->duration_sec);
  119|  4.28k|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  120|  4.28k|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  121|  4.28k|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  122|  4.28k|        fr->packet_count = ntohll(ofr->packet_count);
  123|  4.28k|        fr->byte_count = ntohll(ofr->byte_count);
  124|  8.28k|    } else if (raw == OFPRAW_OFPT10_FLOW_REMOVED) {
  ------------------
  |  Branch (124:16): [True: 246, False: 8.04k]
  ------------------
  125|    246|        const struct ofp10_flow_removed *ofr;
  126|       |
  127|    246|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  128|       |
  129|    246|        ofputil_match_from_ofp10_match(&ofr->match, &fr->match);
  130|    246|        fr->priority = ntohs(ofr->priority);
  131|    246|        fr->cookie = ofr->cookie;
  132|    246|        fr->reason = ofr->reason;
  133|    246|        fr->table_id = 255;
  134|    246|        fr->duration_sec = ntohl(ofr->duration_sec);
  135|    246|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  136|    246|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  137|    246|        fr->hard_timeout = 0;
  138|    246|        fr->packet_count = ntohll(ofr->packet_count);
  139|    246|        fr->byte_count = ntohll(ofr->byte_count);
  140|  8.04k|    } else if (raw == OFPRAW_NXT_FLOW_REMOVED) {
  ------------------
  |  Branch (140:16): [True: 8.04k, False: 0]
  ------------------
  141|  8.04k|        struct nx_flow_removed *nfr;
  142|  8.04k|        enum ofperr error;
  143|       |
  144|  8.04k|        nfr = ofpbuf_pull(&b, sizeof *nfr);
  145|  8.04k|        error = nx_pull_match(&b, ntohs(nfr->match_len), &fr->match, NULL,
  146|  8.04k|                              NULL, false, NULL, NULL);
  147|  8.04k|        if (error) {
  ------------------
  |  Branch (147:13): [True: 5.75k, False: 2.29k]
  ------------------
  148|  5.75k|            return error;
  149|  5.75k|        }
  150|  2.29k|        if (b.size) {
  ------------------
  |  Branch (150:13): [True: 2.12k, False: 169]
  ------------------
  151|  2.12k|            return OFPERR_OFPBRC_BAD_LEN;
  152|  2.12k|        }
  153|       |
  154|    169|        fr->priority = ntohs(nfr->priority);
  155|    169|        fr->cookie = nfr->cookie;
  156|    169|        fr->reason = nfr->reason;
  157|    169|        fr->table_id = nfr->table_id ? nfr->table_id - 1 : 255;
  ------------------
  |  Branch (157:24): [True: 135, False: 34]
  ------------------
  158|    169|        fr->duration_sec = ntohl(nfr->duration_sec);
  159|    169|        fr->duration_nsec = ntohl(nfr->duration_nsec);
  160|    169|        fr->idle_timeout = ntohs(nfr->idle_timeout);
  161|    169|        fr->hard_timeout = 0;
  162|    169|        fr->packet_count = ntohll(nfr->packet_count);
  163|    169|        fr->byte_count = ntohll(nfr->byte_count);
  164|    169|    } else {
  165|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  166|      0|    }
  167|       |
  168|  7.70k|    return 0;
  169|  34.3k|}
ofputil_flow_removed_format:
  302|  7.70k|{
  303|  7.70k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
  304|       |
  305|  7.70k|    ds_put_char(s, ' ');
  306|  7.70k|    match_format(&fr->match, port_map, s, fr->priority);
  307|       |
  308|  7.70k|    ds_put_format(s, " reason=%s",
  309|  7.70k|                  ofp_flow_removed_reason_to_string(fr->reason, reasonbuf,
  310|  7.70k|                                                    sizeof reasonbuf));
  311|       |
  312|  7.70k|    if (fr->table_id != 255) {
  ------------------
  |  Branch (312:9): [True: 6.07k, False: 1.63k]
  ------------------
  313|  6.07k|        ds_put_format(s, " table_id=");
  314|  6.07k|        ofputil_format_table(fr->table_id, table_map, s);
  315|  6.07k|    }
  316|       |
  317|  7.70k|    if (fr->cookie != htonll(0)) {
  ------------------
  |  Branch (317:9): [True: 7.60k, False: 107]
  ------------------
  318|  7.60k|        ds_put_format(s, " cookie:0x%"PRIx64, ntohll(fr->cookie));
  319|  7.60k|    }
  320|  7.70k|    ds_put_cstr(s, " duration");
  321|  7.70k|    ofp_print_duration(s, fr->duration_sec, fr->duration_nsec);
  322|  7.70k|    ds_put_format(s, " idle%"PRIu16, fr->idle_timeout);
  323|  7.70k|    if (fr->hard_timeout) {
  ------------------
  |  Branch (323:9): [True: 1.99k, False: 5.71k]
  ------------------
  324|       |        /* The hard timeout was only added in OF1.2, so only print it if it is
  325|       |         * actually in use to avoid gratuitous change to the formatting. */
  326|  1.99k|        ds_put_format(s, " hard%"PRIu16, fr->hard_timeout);
  327|  1.99k|    }
  328|  7.70k|    ds_put_format(s, " pkts%"PRIu64" bytes%"PRIu64"\n",
  329|  7.70k|                  fr->packet_count, fr->byte_count);
  330|  7.70k|}
ofputil_decode_flow_monitor_request:
  439|  13.9k|{
  440|  13.9k|    uint16_t flags;
  441|  13.9k|    enum ofperr error;
  442|  13.9k|    enum ofpraw raw;
  443|       |
  444|  13.9k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (444:14): [True: 6.04k, False: 7.86k]
  ------------------
  445|  13.9k|             : ofpraw_pull(&raw, msg));
  446|  13.9k|    if (error) {
  ------------------
  |  Branch (446:9): [True: 0, False: 13.9k]
  ------------------
  447|      0|        return error;
  448|      0|    }
  449|       |
  450|  13.9k|    if (!msg->size) {
  ------------------
  |  Branch (450:9): [True: 899, False: 13.0k]
  ------------------
  451|    899|        return EOF;
  452|    899|    }
  453|       |
  454|  13.0k|    switch ((int) raw) {
  455|  9.64k|    case OFPRAW_NXST_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (455:5): [True: 9.64k, False: 3.37k]
  ------------------
  456|  9.64k|        struct nx_flow_monitor_request *nfmr;
  457|       |
  458|  9.64k|        nfmr = ofpbuf_try_pull(msg, sizeof *nfmr);
  459|  9.64k|        if (!nfmr) {
  ------------------
  |  Branch (459:13): [True: 2.50k, False: 7.13k]
  ------------------
  460|  2.50k|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  223|  2.50k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.50k|    do {                                                                \
  |  |  |  |  287|  2.50k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.50k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.50k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.50k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|  2.50k|                    "leftover bytes at end", msg->size);
  462|  2.50k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  2.50k|        }
  464|       |
  465|  7.13k|        flags = ntohs(nfmr->flags);
  466|  7.13k|        if (!(flags & (NXFMF_ADD | NXFMF_DELETE | NXFMF_MODIFY))
  ------------------
  |  Branch (466:13): [True: 344, False: 6.79k]
  ------------------
  467|  7.13k|            || flags & ~(NXFMF_INITIAL | NXFMF_ADD | NXFMF_DELETE
  ------------------
  |  Branch (467:16): [True: 303, False: 6.48k]
  ------------------
  468|  6.79k|                         | NXFMF_MODIFY | NXFMF_ACTIONS | NXFMF_OWN)) {
  469|    647|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  223|    647|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    647|    do {                                                                \
  |  |  |  |  287|    647|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    647|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 647]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    647|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|    647|                         flags);
  471|    647|            return OFPERR_OFPMOFC_BAD_FLAGS;
  472|    647|        }
  473|       |
  474|  6.48k|        if (!is_all_zeros(nfmr->zeros, sizeof nfmr->zeros)) {
  ------------------
  |  Branch (474:13): [True: 313, False: 6.17k]
  ------------------
  475|    313|            return OFPERR_NXBRC_MUST_BE_ZERO;
  476|    313|        }
  477|       |
  478|  6.17k|        rq->id = ntohl(nfmr->id);
  479|  6.17k|        rq->command = OFPFMC_ADD;
  480|  6.17k|        rq->flags = nx_to_ofp_flow_monitor_flags(flags);
  481|  6.17k|        rq->out_port = u16_to_ofp(ntohs(nfmr->out_port));
  482|  6.17k|        rq->table_id = nfmr->table_id;
  483|  6.17k|        rq->out_group = OFPG_ANY;
  484|       |
  485|  6.17k|        return nx_pull_match(msg, ntohs(nfmr->match_len), &rq->match, NULL,
  486|  6.17k|                NULL, false, NULL, NULL);
  487|  6.48k|    }
  488|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (488:5): [True: 0, False: 13.0k]
  ------------------
  489|      0|        struct onf_flow_monitor_request *ofmr;
  490|       |
  491|      0|        ofmr = ofpbuf_try_pull(msg, sizeof *ofmr);
  492|      0|        if (!ofmr) {
  ------------------
  |  Branch (492:13): [True: 0, False: 0]
  ------------------
  493|      0|            VLOG_WARN_RL(&rl, "ONFST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  494|      0|                         "leftover bytes at end", msg->size);
  495|      0|            return OFPERR_OFPBRC_BAD_LEN;
  496|      0|        }
  497|       |
  498|      0|        flags = ntohs(ofmr->flags);
  499|      0|        if (!(flags & (ONFFMF_ADD | ONFFMF_DELETE | ONFFMF_MODIFY))
  ------------------
  |  Branch (499:13): [True: 0, False: 0]
  ------------------
  500|      0|            || flags & ~(ONFFMF_INITIAL | ONFFMF_ADD | ONFFMF_DELETE
  ------------------
  |  Branch (500:16): [True: 0, False: 0]
  ------------------
  501|      0|                         | ONFFMF_MODIFY | ONFFMF_ACTIONS | ONFFMF_OWN)) {
  502|      0|            VLOG_WARN_RL(&rl, "ONFST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  503|      0|                         flags);
  504|      0|            return OFPERR_OFPMOFC_BAD_FLAGS;
  505|      0|        }
  506|       |
  507|      0|        if (!is_all_zeros(ofmr->zeros, sizeof ofmr->zeros)) {
  ------------------
  |  Branch (507:13): [True: 0, False: 0]
  ------------------
  508|      0|            return OFPERR_NXBRC_MUST_BE_ZERO;
  509|      0|        }
  510|       |
  511|      0|        rq->id = ntohl(ofmr->id);
  512|      0|        rq->command = OFPFMC_ADD;
  513|      0|        rq->flags = nx_to_ofp_flow_monitor_flags(flags);
  514|      0|        error = ofputil_port_from_ofp11(ofmr->out_port, &rq->out_port);
  515|      0|        if (error) {
  ------------------
  |  Branch (515:13): [True: 0, False: 0]
  ------------------
  516|      0|            return error;
  517|      0|        }
  518|      0|        rq->table_id = ofmr->table_id;
  519|      0|        rq->out_group = OFPG_ANY;
  520|       |
  521|      0|        return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  522|      0|    }
  523|  3.37k|    case OFPRAW_OFPST14_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (523:5): [True: 3.37k, False: 9.64k]
  ------------------
  524|  3.37k|        struct ofp14_flow_monitor_request *ofmr;
  525|       |
  526|  3.37k|        ofmr = ofpbuf_try_pull(msg, sizeof *ofmr);
  527|  3.37k|        if (!ofmr) {
  ------------------
  |  Branch (527:13): [True: 73, False: 3.30k]
  ------------------
  528|     73|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  223|     73|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     73|    do {                                                                \
  |  |  |  |  287|     73|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     73|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 73]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     73|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|     73|                    "leftover bytes at end", msg->size);
  530|     73|            return OFPERR_OFPBRC_BAD_LEN;
  531|     73|        }
  532|       |
  533|  3.30k|        flags = ntohs(ofmr->flags);
  534|  3.30k|        rq->id = ntohl(ofmr->monitor_id);
  535|  3.30k|        rq->command = ofmr->command;
  536|       |
  537|  3.30k|        if (ofmr->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (537:13): [True: 36, False: 3.26k]
  ------------------
  538|     36|            return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  539|     36|        }
  540|       |
  541|  3.26k|        if (!(flags & (OFPFMF_ADD | OFPFMF_REMOVED | OFPFMF_MODIFY))
  ------------------
  |  Branch (541:13): [True: 1.58k, False: 1.67k]
  ------------------
  542|  3.26k|                || flags & ~(OFPFMF_INITIAL | OFPFMF_ADD | OFPFMF_REMOVED
  ------------------
  |  Branch (542:20): [True: 1.09k, False: 588]
  ------------------
  543|  2.67k|                    | OFPFMF_MODIFY | OFPFMF_INSTRUCTIONS | OFPFMF_ONLY_OWN)) {
  544|  2.67k|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  223|  2.67k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.67k|    do {                                                                \
  |  |  |  |  287|  2.67k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.67k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.67k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.67k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|  2.67k|                         flags);
  546|  2.67k|            return OFPERR_OFPMOFC_BAD_FLAGS;
  547|  2.67k|        }
  548|       |
  549|    588|        rq->command = ofmr->command;
  550|    588|        rq->flags = flags;
  551|    588|        error = ofputil_port_from_ofp11(ofmr->out_port, &rq->out_port);
  552|    588|        if (error) {
  ------------------
  |  Branch (552:13): [True: 276, False: 312]
  ------------------
  553|    276|            return error;
  554|    276|        }
  555|    312|        rq->out_group = ntohl(ofmr->out_group);
  556|    312|        rq->table_id = ofmr->table_id;
  557|       |
  558|    312|        return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  559|    588|    }
  560|      0|    default:
  ------------------
  |  Branch (560:5): [True: 0, False: 13.0k]
  ------------------
  561|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  562|  13.0k|    }
  563|  13.0k|}
ofputil_flow_monitor_request_format:
  678|  6.04k|{
  679|  6.04k|    if (request->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (679:9): [True: 18, False: 6.03k]
  ------------------
  680|     18|        ds_put_format(s, "\n id=%"PRIu32" command=%s", request->id,
  681|     18|                      ofp_flow_monitor_command_to_string(request->command));
  682|     18|        return;
  683|     18|    }
  684|  6.03k|    ds_put_format(s, "\n id=%"PRIu32" flags=", request->id);
  685|  6.03k|    ofp_print_bit_names(s, request->flags,
  686|  6.03k|                        ofp_flow_monitor_flags_to_name, ',');
  687|       |
  688|  6.03k|    if (request->out_port != OFPP_NONE) {
  ------------------
  |  |   47|  6.03k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  6.03k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (688:9): [True: 6.00k, False: 30]
  ------------------
  689|  6.00k|        ds_put_cstr(s, " out_port=");
  690|  6.00k|        ofputil_format_port(request->out_port, port_map, s);
  691|  6.00k|    }
  692|       |
  693|  6.03k|    if (request->out_group && (request->out_group != OFPG_ANY)) {
  ------------------
  |  Branch (693:9): [True: 5.99k, False: 40]
  |  Branch (693:31): [True: 227, False: 5.76k]
  ------------------
  694|    227|        ds_put_format(s, " out_group=%d", request->out_group);
  695|    227|    }
  696|       |
  697|  6.03k|    if (request->table_id != 0xff) {
  ------------------
  |  Branch (697:9): [True: 5.97k, False: 51]
  ------------------
  698|  5.97k|        ds_put_format(s, " table=");
  699|  5.97k|        ofputil_format_table(request->table_id, table_map, s);
  700|  5.97k|    }
  701|       |
  702|  6.03k|    if (request->command != OFPFMC_DELETE) {
  ------------------
  |  Branch (702:9): [True: 6.03k, False: 0]
  ------------------
  703|  6.03k|        ds_put_char(s, ' ');
  704|  6.03k|        match_format(&request->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  6.03k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  705|  6.03k|        ds_chomp(s, ' ');
  706|  6.03k|    }
  707|  6.03k|}
ofputil_decode_flow_update:
  824|  46.6k|{
  825|  46.6k|    unsigned int length;
  826|  46.6k|    struct ofp_header *oh;
  827|  46.6k|    enum ofperr error;
  828|  46.6k|    enum ofpraw raw;
  829|       |
  830|  46.6k|    if (!msg->header) {
  ------------------
  |  Branch (830:9): [True: 34.0k, False: 12.5k]
  ------------------
  831|  34.0k|        ofpraw_pull_assert(msg);
  832|  34.0k|    }
  833|       |
  834|  46.6k|    error = ofpraw_decode(&raw, msg->header);
  835|  46.6k|    if (error) {
  ------------------
  |  Branch (835:9): [True: 0, False: 46.6k]
  ------------------
  836|      0|        return error;
  837|      0|    }
  838|       |
  839|  46.6k|    ofpbuf_clear(ofpacts);
  840|  46.6k|    if (!msg->size) {
  ------------------
  |  Branch (840:9): [True: 9.58k, False: 37.0k]
  ------------------
  841|  9.58k|        return EOF;
  842|  9.58k|    }
  843|       |
  844|  37.0k|    oh = msg->header;
  845|       |
  846|  37.0k|    switch ((int) raw) {
  847|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REPLY:
  ------------------
  |  Branch (847:5): [True: 0, False: 37.0k]
  ------------------
  848|  9.26k|    case OFPRAW_NXST_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (848:5): [True: 9.26k, False: 27.7k]
  ------------------
  849|  9.26k|        struct nx_flow_update_header *nfuh;
  850|  9.26k|        enum nx_flow_update_event nx_event;
  851|       |
  852|  9.26k|        if (msg->size < sizeof(struct nx_flow_update_header)) {
  ------------------
  |  Branch (852:13): [True: 0, False: 9.26k]
  ------------------
  853|      0|            goto bad_len;
  854|      0|        }
  855|       |
  856|  9.26k|        nfuh = msg->data;
  857|  9.26k|        length = ntohs(nfuh->length);
  858|  9.26k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (858:13): [True: 1.92k, False: 7.33k]
  |  Branch (858:35): [True: 838, False: 6.49k]
  ------------------
  859|  2.76k|            goto bad_len;
  860|  2.76k|        }
  861|       |
  862|  6.49k|        nx_event = ntohs(nfuh->event);
  863|  6.49k|        if (nx_event == NXFME_ABBREV) {
  ------------------
  |  Branch (863:13): [True: 247, False: 6.25k]
  ------------------
  864|    247|            struct nx_flow_update_abbrev *nfua;
  865|       |
  866|    247|            if (length != sizeof *nfua) {
  ------------------
  |  Branch (866:17): [True: 212, False: 35]
  ------------------
  867|    212|                goto bad_len;
  868|    212|            }
  869|       |
  870|     35|            nfua = ofpbuf_pull(msg, sizeof *nfua);
  871|     35|            update->xid = nfua->xid;
  872|  6.25k|        } else if (nx_event == NXFME_ADDED
  ------------------
  |  Branch (872:20): [True: 3.76k, False: 2.49k]
  ------------------
  873|  6.25k|                   || nx_event == NXFME_DELETED
  ------------------
  |  Branch (873:23): [True: 155, False: 2.33k]
  ------------------
  874|  6.25k|                   || nx_event == NXFME_MODIFIED) {
  ------------------
  |  Branch (874:23): [True: 1.28k, False: 1.05k]
  ------------------
  875|  5.20k|            struct nx_flow_update_full *nfuf;
  876|  5.20k|            unsigned int actions_len;
  877|  5.20k|            unsigned int match_len;
  878|       |
  879|  5.20k|            if (length < sizeof *nfuf) {
  ------------------
  |  Branch (879:17): [True: 881, False: 4.31k]
  ------------------
  880|    881|                goto bad_len;
  881|    881|            }
  882|       |
  883|  4.31k|            nfuf = ofpbuf_pull(msg, sizeof *nfuf);
  884|  4.31k|            match_len = ntohs(nfuf->match_len);
  885|  4.31k|            if (sizeof *nfuf + match_len > length) {
  ------------------
  |  Branch (885:17): [True: 99, False: 4.22k]
  ------------------
  886|     99|                goto bad_len;
  887|     99|            }
  888|       |
  889|  4.22k|            update->reason = ntohs(nfuf->reason);
  890|  4.22k|            update->idle_timeout = ntohs(nfuf->idle_timeout);
  891|  4.22k|            update->hard_timeout = ntohs(nfuf->hard_timeout);
  892|  4.22k|            update->table_id = nfuf->table_id;
  893|  4.22k|            update->cookie = nfuf->cookie;
  894|  4.22k|            update->priority = ntohs(nfuf->priority);
  895|       |
  896|  4.22k|            if (raw == OFPRAW_ONFST13_FLOW_MONITOR_REPLY) {
  ------------------
  |  Branch (896:17): [True: 0, False: 4.22k]
  ------------------
  897|      0|                uint16_t padded_match_len = 0;
  898|      0|                unsigned int instructions_len;
  899|       |
  900|      0|                error = ofputil_pull_ofp11_match(
  901|      0|                    msg, NULL, NULL, &update->match, &padded_match_len);
  902|      0|                if (error) {
  ------------------
  |  Branch (902:21): [True: 0, False: 0]
  ------------------
  903|      0|                    return error;
  904|      0|                }
  905|       |
  906|      0|                instructions_len = length - sizeof *nfuf - padded_match_len;
  907|      0|                error = ofpacts_pull_openflow_instructions(
  908|      0|                    msg, instructions_len, oh->version, NULL, NULL, ofpacts);
  909|      0|                if (error) {
  ------------------
  |  Branch (909:21): [True: 0, False: 0]
  ------------------
  910|      0|                    return error;
  911|      0|                }
  912|  4.22k|            } else {
  913|  4.22k|                error = nx_pull_match(msg, match_len, &update->match, NULL,
  914|  4.22k|                                      NULL, false, NULL, NULL);
  915|  4.22k|                if (error) {
  ------------------
  |  Branch (915:21): [True: 1.23k, False: 2.98k]
  ------------------
  916|  1.23k|                    return error;
  917|  1.23k|                }
  918|       |
  919|  2.98k|                actions_len = length - sizeof *nfuf - ROUND_UP(match_len, 8);
  ------------------
  |  |  299|  2.98k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  2.98k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  920|  2.98k|                error = ofpacts_pull_openflow_actions(
  921|  2.98k|                    msg, actions_len, oh->version, NULL, NULL, ofpacts);
  922|  2.98k|                if (error) {
  ------------------
  |  Branch (922:21): [True: 839, False: 2.14k]
  ------------------
  923|    839|                    return error;
  924|    839|                }
  925|  2.98k|            }
  926|       |
  927|  2.14k|            update->ofpacts = ofpacts->data;
  928|  2.14k|            update->ofpacts_len = ofpacts->size;
  929|  2.14k|        } else {
  930|  1.05k|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  223|  1.05k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.05k|    do {                                                                \
  |  |  |  |  287|  1.05k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.05k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.05k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|  1.05k|                         ntohs(nfuh->event));
  932|  1.05k|            return OFPERR_NXBRC_FM_BAD_EVENT;
  933|  1.05k|        }
  934|       |
  935|  2.18k|        update->event = nx_to_ofp_flow_update_event(nx_event);
  936|  2.18k|        return 0;
  937|  6.49k|    }
  938|  27.7k|    case OFPRAW_OFPST14_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (938:5): [True: 27.7k, False: 9.26k]
  ------------------
  939|  27.7k|        struct ofp_flow_update_header *ofuh;
  940|  27.7k|        uint16_t padded_match_len = 0;
  941|       |
  942|  27.7k|        if (msg->size < sizeof(struct ofp_flow_update_header)) {
  ------------------
  |  Branch (942:13): [True: 0, False: 27.7k]
  ------------------
  943|      0|            goto bad_len;
  944|      0|        }
  945|       |
  946|  27.7k|        ofuh = msg->data;
  947|  27.7k|        update->event = ntohs(ofuh->event);
  948|  27.7k|        length = ntohs(ofuh->length);
  949|  27.7k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (949:13): [True: 913, False: 26.8k]
  |  Branch (949:35): [True: 2.32k, False: 24.5k]
  ------------------
  950|  3.24k|            goto bad_len;
  951|  3.24k|        }
  952|       |
  953|  24.5k|        if (update->event == OFPFME_ABBREV) {
  ------------------
  |  Branch (953:13): [True: 839, False: 23.6k]
  ------------------
  954|    839|            struct ofp_flow_update_abbrev *ofua;
  955|       |
  956|    839|            if (length != sizeof *ofua) {
  ------------------
  |  Branch (956:17): [True: 817, False: 22]
  ------------------
  957|    817|                goto bad_len;
  958|    817|            }
  959|       |
  960|     22|            ofua = ofpbuf_pull(msg, sizeof *ofua);
  961|     22|            update->xid = ofua->xid;
  962|     22|            return 0;
  963|  23.6k|        } else if (update->event == OFPFME_PAUSED
  ------------------
  |  Branch (963:20): [True: 1.27k, False: 22.4k]
  ------------------
  964|  23.6k|                   || update->event == OFPFME_RESUMED) {
  ------------------
  |  Branch (964:23): [True: 206, False: 22.2k]
  ------------------
  965|  1.48k|            struct ofp_flow_update_paused *ofup;
  966|       |
  967|  1.48k|            if (length != sizeof *ofup) {
  ------------------
  |  Branch (967:17): [True: 601, False: 879]
  ------------------
  968|    601|                goto bad_len;
  969|    601|            }
  970|       |
  971|    879|            ofup = ofpbuf_pull(msg, sizeof *ofup);
  972|    879|            return 0;
  973|  22.2k|        } else if (update->event == OFPFME_INITIAL
  ------------------
  |  Branch (973:20): [True: 8.03k, False: 14.1k]
  ------------------
  974|  22.2k|                   || update->event == OFPFME_ADDED
  ------------------
  |  Branch (974:23): [True: 11.3k, False: 2.79k]
  ------------------
  975|  22.2k|                   || update->event == OFPFME_REMOVED
  ------------------
  |  Branch (975:23): [True: 256, False: 2.54k]
  ------------------
  976|  22.2k|                   || update->event == OFPFME_MODIFIED) {
  ------------------
  |  Branch (976:23): [True: 87, False: 2.45k]
  ------------------
  977|  19.7k|            struct ofp_flow_update_full *ofuf;
  978|  19.7k|            unsigned int instructions_len;
  979|       |
  980|  19.7k|            if (length < sizeof *ofuf) {
  ------------------
  |  Branch (980:17): [True: 381, False: 19.3k]
  ------------------
  981|    381|                goto bad_len;
  982|    381|            }
  983|       |
  984|  19.3k|            ofuf = ofpbuf_pull(msg, sizeof *ofuf);
  985|  19.3k|            if (sizeof *ofuf > length) {
  ------------------
  |  Branch (985:17): [True: 0, False: 19.3k]
  ------------------
  986|      0|                goto bad_len;
  987|      0|            }
  988|       |
  989|  19.3k|            update->reason = ofuf->reason;
  990|  19.3k|            update->idle_timeout = ntohs(ofuf->idle_timeout);
  991|  19.3k|            update->hard_timeout = ntohs(ofuf->hard_timeout);
  992|  19.3k|            update->table_id = ofuf->table_id;
  993|  19.3k|            update->cookie = ofuf->cookie;
  994|  19.3k|            update->priority = ntohs(ofuf->priority);
  995|       |
  996|  19.3k|            error = ofputil_pull_ofp11_match(
  997|  19.3k|                msg, NULL, NULL, &update->match, &padded_match_len);
  998|  19.3k|            if (error) {
  ------------------
  |  Branch (998:17): [True: 7.90k, False: 11.4k]
  ------------------
  999|  7.90k|                return error;
 1000|  7.90k|            }
 1001|       |
 1002|  11.4k|            instructions_len = length - sizeof *ofuf - padded_match_len;
 1003|  11.4k|            error = ofpacts_pull_openflow_instructions(
 1004|  11.4k|                msg, instructions_len, oh->version, NULL, NULL, ofpacts);
 1005|  11.4k|            if (error) {
  ------------------
  |  Branch (1005:17): [True: 2.02k, False: 9.44k]
  ------------------
 1006|  2.02k|                return error;
 1007|  2.02k|            }
 1008|       |
 1009|  9.44k|            update->ofpacts = ofpacts->data;
 1010|  9.44k|            update->ofpacts_len = ofpacts->size;
 1011|  9.44k|            return 0;
 1012|  11.4k|        } else {
 1013|  2.45k|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  223|  2.45k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.45k|    do {                                                                \
  |  |  |  |  287|  2.45k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.45k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.45k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.45k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|  2.45k|                         ntohs(ofuh->event));
 1015|  2.45k|            return OFPERR_NXBRC_FM_BAD_EVENT;
 1016|  2.45k|        }
 1017|  24.5k|    }
 1018|      0|    default:
  ------------------
  |  Branch (1018:5): [True: 0, False: 37.0k]
  ------------------
 1019|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1020|  37.0k|    }
 1021|  8.99k|bad_len:
 1022|  8.99k|    VLOG_WARN_RL(&rl, "%s has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  223|  8.99k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  8.99k|    do {                                                                \
  |  |  |  |  287|  8.99k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  8.99k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 8.99k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  8.99k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|  8.99k|                 ofpraw_get_name(raw), msg->size);
 1024|  8.99k|    return OFPERR_OFPBRC_BAD_LEN;
 1025|  37.0k|}
ofputil_decode_flow_monitor_cancel:
 1029|     24|{
 1030|     24|    enum ofperr error;
 1031|     24|    enum ofpraw raw;
 1032|       |
 1033|     24|    error = ofpraw_decode(&raw, oh);
 1034|     24|    if (error) {
  ------------------
  |  Branch (1034:9): [True: 0, False: 24]
  ------------------
 1035|      0|        return error;
 1036|      0|    }
 1037|       |
 1038|     24|    switch ((int) raw) {
 1039|      0|    case OFPRAW_ONFT13_FLOW_MONITOR_CANCEL:
  ------------------
  |  Branch (1039:5): [True: 0, False: 24]
  ------------------
 1040|     24|    case OFPRAW_NXT_FLOW_MONITOR_CANCEL: {
  ------------------
  |  Branch (1040:5): [True: 24, False: 0]
  ------------------
 1041|     24|        const struct nx_flow_monitor_cancel *cancel = ofpmsg_body(oh);
 1042|     24|        return ntohl(cancel->id);
 1043|      0|    }
 1044|      0|    default:
  ------------------
  |  Branch (1044:5): [True: 0, False: 24]
  ------------------
 1045|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1046|     24|    }
 1047|     24|}
ofputil_flow_update_format:
 1285|  12.5k|{
 1286|  12.5k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
 1287|       |
 1288|  12.5k|    ds_put_cstr(s, "\n event=");
 1289|  12.5k|    switch (update->event) {
  ------------------
  |  Branch (1289:13): [True: 0, False: 12.5k]
  ------------------
 1290|    929|    case OFPFME_INITIAL:
  ------------------
  |  Branch (1290:5): [True: 929, False: 11.6k]
  ------------------
 1291|    929|        ds_put_cstr(s, "INITIAL");
 1292|    929|        break;
 1293|       |
 1294|  9.45k|    case OFPFME_ADDED:
  ------------------
  |  Branch (1294:5): [True: 9.45k, False: 3.07k]
  ------------------
 1295|  9.45k|        ds_put_cstr(s, "ADDED");
 1296|  9.45k|        break;
 1297|       |
 1298|     24|    case OFPFME_REMOVED:
  ------------------
  |  Branch (1298:5): [True: 24, False: 12.5k]
  ------------------
 1299|     24|        ds_put_format(s, "DELETED reason=%s",
 1300|     24|                      ofp_flow_removed_reason_to_string(update->reason,
 1301|     24|                                                        reasonbuf,
 1302|     24|                                                        sizeof reasonbuf));
 1303|     24|        break;
 1304|       |
 1305|  1.18k|    case OFPFME_MODIFIED:
  ------------------
  |  Branch (1305:5): [True: 1.18k, False: 11.3k]
  ------------------
 1306|  1.18k|        ds_put_cstr(s, "MODIFIED");
 1307|  1.18k|        break;
 1308|       |
 1309|     57|    case OFPFME_ABBREV:
  ------------------
  |  Branch (1309:5): [True: 57, False: 12.4k]
  ------------------
 1310|     57|        ds_put_format(s, "ABBREV xid=0x%"PRIx32, ntohl(update->xid));
 1311|     57|        return;
 1312|       |
 1313|    675|    case OFPFME_PAUSED:
  ------------------
  |  Branch (1313:5): [True: 675, False: 11.8k]
  ------------------
 1314|    675|        ds_put_cstr(s, "PAUSED");
 1315|    675|        return;
 1316|       |
 1317|    204|    case OFPFME_RESUMED:
  ------------------
  |  Branch (1317:5): [True: 204, False: 12.3k]
  ------------------
 1318|    204|        ds_put_cstr(s, "RESUMED");
 1319|    204|        return;
 1320|       |
 1321|  12.5k|    }
 1322|       |
 1323|  11.5k|    ds_put_format(s, " table=");
 1324|  11.5k|    ofputil_format_table(update->table_id, table_map, s);
 1325|  11.5k|    if (update->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  11.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1325:9): [True: 4.01k, False: 7.58k]
  ------------------
 1326|  4.01k|        ds_put_format(s, " idle_timeout=%"PRIu16, update->idle_timeout);
 1327|  4.01k|    }
 1328|  11.5k|    if (update->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  11.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1328:9): [True: 1.38k, False: 10.2k]
  ------------------
 1329|  1.38k|        ds_put_format(s, " hard_timeout=%"PRIu16, update->hard_timeout);
 1330|  1.38k|    }
 1331|  11.5k|    ds_put_format(s, " cookie=%#"PRIx64, ntohll(update->cookie));
 1332|       |
 1333|  11.5k|    ds_put_char(s, ' ');
 1334|  11.5k|    match_format(&update->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  11.5k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1335|       |
 1336|  11.5k|    if (update->ofpacts_len) {
  ------------------
  |  Branch (1336:9): [True: 9.97k, False: 1.62k]
  ------------------
 1337|  9.97k|        if (s->string[s->length - 1] != ' ') {
  ------------------
  |  Branch (1337:13): [True: 9.43k, False: 540]
  ------------------
 1338|  9.43k|            ds_put_char(s, ' ');
 1339|  9.43k|        }
 1340|  9.97k|        ds_put_cstr(s, "actions=");
 1341|  9.97k|        struct ofpact_format_params fp = {
 1342|  9.97k|            .port_map = port_map,
 1343|  9.97k|            .table_map = table_map,
 1344|  9.97k|            .s = s,
 1345|  9.97k|        };
 1346|  9.97k|        ofpacts_format(update->ofpacts, update->ofpacts_len, &fp);
 1347|  9.97k|    }
 1348|  11.5k|}
ofputil_decode_requestforward:
 1401|  9.78k|{
 1402|  9.78k|    rf->new_buckets = NULL;
 1403|  9.78k|    rf->group_existed = -1;
 1404|       |
 1405|  9.78k|    struct ofpbuf b = ofpbuf_const_initializer(outer, ntohs(outer->length));
 1406|       |
 1407|       |    /* Skip past outer message. */
 1408|  9.78k|    enum ofpraw raw_msg_type = ofpraw_pull_assert(&b);
 1409|  9.78k|    ovs_assert(raw_msg_type == OFPRAW_OFPT14_REQUESTFORWARD ||
  ------------------
  |  |   58|  19.5k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 9.78k, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  |  Branch (58:40): [True: 0, False: 0]
  |  |  ------------------
  ------------------
 1410|  9.78k|               raw_msg_type == OFPRAW_ONFT13_REQUESTFORWARD ||
 1411|  9.78k|               raw_msg_type == OFPRAW_NXT_REQUESTFORWARD);
 1412|       |
 1413|       |    /* Validate inner message. */
 1414|  9.78k|    if (b.size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (1414:9): [True: 0, False: 9.78k]
  ------------------
 1415|      0|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1416|      0|    }
 1417|  9.78k|    const struct ofp_header *inner = b.data;
 1418|  9.78k|    unsigned int inner_len = ntohs(inner->length);
 1419|  9.78k|    if (inner_len < sizeof(struct ofp_header) || inner_len > b.size) {
  ------------------
  |  Branch (1419:9): [True: 722, False: 9.06k]
  |  Branch (1419:50): [True: 1.82k, False: 7.23k]
  ------------------
 1420|  2.54k|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1421|  2.54k|    }
 1422|  7.23k|    if (inner->version != outer->version) {
  ------------------
  |  Branch (1422:9): [True: 889, False: 6.35k]
  ------------------
 1423|    889|        return OFPERR_OFPBRC_BAD_VERSION;
 1424|    889|    }
 1425|       |
 1426|       |    /* Parse inner message. */
 1427|  6.35k|    enum ofptype type;
 1428|  6.35k|    enum ofperr error = ofptype_decode(&type, inner);
 1429|  6.35k|    if (error) {
  ------------------
  |  Branch (1429:9): [True: 1.66k, False: 4.68k]
  ------------------
 1430|  1.66k|        return error;
 1431|  1.66k|    }
 1432|       |
 1433|  4.68k|    rf->xid = inner->xid;
 1434|  4.68k|    if (type == OFPTYPE_GROUP_MOD) {
  ------------------
  |  Branch (1434:9): [True: 114, False: 4.57k]
  ------------------
 1435|    114|        rf->reason = OFPRFR_GROUP_MOD;
 1436|    114|        rf->group_mod = xmalloc(sizeof *rf->group_mod);
 1437|    114|        error = ofputil_decode_group_mod(inner, rf->group_mod);
 1438|    114|        if (error) {
  ------------------
  |  Branch (1438:13): [True: 67, False: 47]
  ------------------
 1439|     67|            free(rf->group_mod);
 1440|     67|            return error;
 1441|     67|        }
 1442|  4.57k|    } else if (type == OFPTYPE_METER_MOD) {
  ------------------
  |  Branch (1442:16): [True: 4.53k, False: 44]
  ------------------
 1443|  4.53k|        rf->reason = OFPRFR_METER_MOD;
 1444|  4.53k|        rf->meter_mod = xmalloc(sizeof *rf->meter_mod);
 1445|  4.53k|        ofpbuf_init(&rf->bands, 64);
 1446|  4.53k|        error = ofputil_decode_meter_mod(inner, rf->meter_mod, &rf->bands);
 1447|  4.53k|        if (error) {
  ------------------
  |  Branch (1447:13): [True: 3.38k, False: 1.14k]
  ------------------
 1448|  3.38k|            free(rf->meter_mod);
 1449|  3.38k|            ofpbuf_uninit(&rf->bands);
 1450|  3.38k|            return error;
 1451|  3.38k|        }
 1452|  4.53k|    } else {
 1453|     44|        return OFPERR_OFPBFC_MSG_UNSUP;
 1454|     44|    }
 1455|       |
 1456|  1.19k|    return 0;
 1457|  4.68k|}
ofputil_format_requestforward:
 1465|  1.19k|{
 1466|  1.19k|    ds_put_cstr(string, " reason=");
 1467|       |
 1468|  1.19k|    switch (rf->reason) {
  ------------------
  |  Branch (1468:13): [True: 0, False: 1.19k]
  ------------------
 1469|     47|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1469:5): [True: 47, False: 1.14k]
  ------------------
 1470|     47|        ds_put_cstr(string, "group_mod");
 1471|     47|        ofputil_group_mod_format__(string, ofp_version, rf->group_mod,
 1472|     47|                                   port_map, table_map);
 1473|     47|        break;
 1474|       |
 1475|  1.14k|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1475:5): [True: 1.14k, False: 47]
  ------------------
 1476|  1.14k|        ds_put_cstr(string, "meter_mod");
 1477|  1.14k|        ofputil_format_meter_mod(string, rf->meter_mod);
 1478|  1.14k|        break;
 1479|       |
 1480|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1480:5): [True: 0, False: 1.19k]
  ------------------
 1481|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1482|  1.19k|    }
 1483|  1.19k|}
ofputil_destroy_requestforward:
 1490|  1.19k|{
 1491|  1.19k|    if (!rf) {
  ------------------
  |  Branch (1491:9): [True: 0, False: 1.19k]
  ------------------
 1492|      0|        return;
 1493|      0|    }
 1494|       |
 1495|  1.19k|    switch (rf->reason) {
  ------------------
  |  Branch (1495:13): [True: 0, False: 1.19k]
  ------------------
 1496|     47|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1496:5): [True: 47, False: 1.14k]
  ------------------
 1497|     47|        ofputil_uninit_group_mod(rf->group_mod);
 1498|     47|        free(rf->group_mod);
 1499|       |        /* 'rf' does not own rf->new_buckets. */
 1500|     47|        break;
 1501|       |
 1502|  1.14k|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1502:5): [True: 1.14k, False: 47]
  ------------------
 1503|  1.14k|        ofpbuf_uninit(&rf->bands);
 1504|  1.14k|        free(rf->meter_mod);
 1505|  1.14k|        break;
 1506|       |
 1507|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1507:5): [True: 0, False: 1.19k]
  ------------------
 1508|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1509|  1.19k|    }
 1510|  1.19k|}
ofp-monitor.c:nx_to_ofp_flow_monitor_flags:
  334|  6.17k|{
  335|  6.17k|    uint16_t oxm_flags = 0;
  336|       |
  337|  6.17k|    if (flags & NXFMF_INITIAL) {
  ------------------
  |  Branch (337:9): [True: 1.32k, False: 4.85k]
  ------------------
  338|  1.32k|        oxm_flags |= OFPFMF_INITIAL;
  339|  1.32k|    }
  340|  6.17k|    if (flags & NXFMF_ADD) {
  ------------------
  |  Branch (340:9): [True: 4.41k, False: 1.76k]
  ------------------
  341|  4.41k|        oxm_flags |= OFPFMF_ADD;
  342|  4.41k|    }
  343|  6.17k|    if (flags & NXFMF_DELETE) {
  ------------------
  |  Branch (343:9): [True: 3.86k, False: 2.31k]
  ------------------
  344|  3.86k|        oxm_flags |= OFPFMF_REMOVED;
  345|  3.86k|    }
  346|  6.17k|    if (flags & NXFMF_MODIFY) {
  ------------------
  |  Branch (346:9): [True: 4.10k, False: 2.06k]
  ------------------
  347|  4.10k|        oxm_flags |= OFPFMF_MODIFY;
  348|  4.10k|    }
  349|  6.17k|    if (flags & NXFMF_ACTIONS) {
  ------------------
  |  Branch (349:9): [True: 4.50k, False: 1.67k]
  ------------------
  350|  4.50k|        oxm_flags |= OFPFMF_INSTRUCTIONS;
  351|  4.50k|    }
  352|  6.17k|    if (flags & NXFMF_OWN) {
  ------------------
  |  Branch (352:9): [True: 6.10k, False: 76]
  ------------------
  353|  6.10k|        oxm_flags |= OFPFMF_ONLY_OWN;
  354|  6.10k|    }
  355|       |
  356|  6.17k|    return oxm_flags;
  357|  6.17k|}
ofp-monitor.c:ofp_flow_monitor_command_to_string:
  663|     18|{
  664|     18|    switch (command) {
  665|      0|    case OFPFMC_ADD: return "add";
  ------------------
  |  Branch (665:5): [True: 0, False: 18]
  ------------------
  666|      0|    case OFPFMC_MODIFY: return "modify";
  ------------------
  |  Branch (666:5): [True: 0, False: 18]
  ------------------
  667|     18|    case OFPFMC_DELETE: return "delete";
  ------------------
  |  Branch (667:5): [True: 18, False: 0]
  ------------------
  668|      0|    default:
  ------------------
  |  Branch (668:5): [True: 0, False: 18]
  ------------------
  669|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  670|     18|    }
  671|     18|}
ofp-monitor.c:ofp_flow_monitor_flags_to_name:
  645|  23.8k|{
  646|  23.8k|    enum ofp14_flow_monitor_flags fmf = bit;
  647|       |
  648|  23.8k|    switch (fmf) {
  ------------------
  |  Branch (648:13): [True: 0, False: 23.8k]
  ------------------
  649|  1.45k|    case OFPFMF_INITIAL: return "initial";
  ------------------
  |  Branch (649:5): [True: 1.45k, False: 22.4k]
  ------------------
  650|  4.15k|    case OFPFMF_ADD: return "add";
  ------------------
  |  Branch (650:5): [True: 4.15k, False: 19.7k]
  ------------------
  651|  3.81k|    case OFPFMF_REMOVED: return "delete";
  ------------------
  |  Branch (651:5): [True: 3.81k, False: 20.0k]
  ------------------
  652|  4.00k|    case OFPFMF_MODIFY: return "modify";
  ------------------
  |  Branch (652:5): [True: 4.00k, False: 19.8k]
  ------------------
  653|  4.55k|    case OFPFMF_INSTRUCTIONS: return "actions";
  ------------------
  |  Branch (653:5): [True: 4.55k, False: 19.3k]
  ------------------
  654|      0|    case OFPFMF_NO_ABBREV: return "no-abbrev";
  ------------------
  |  Branch (654:5): [True: 0, False: 23.8k]
  ------------------
  655|  5.89k|    case OFPFMF_ONLY_OWN: return "own";
  ------------------
  |  Branch (655:5): [True: 5.89k, False: 17.9k]
  ------------------
  656|  23.8k|    }
  657|       |
  658|      0|    return NULL;
  659|  23.8k|}
ofp-monitor.c:nx_to_ofp_flow_update_event:
  388|  2.18k|{
  389|  2.18k|    switch (event) {
  390|    944|    case NXFME_ADDED:
  ------------------
  |  Branch (390:5): [True: 944, False: 1.23k]
  ------------------
  391|    944|        return OFPFME_ADDED;
  392|     17|    case NXFME_DELETED:
  ------------------
  |  Branch (392:5): [True: 17, False: 2.16k]
  ------------------
  393|     17|        return OFPFME_REMOVED;
  394|  1.18k|    case NXFME_MODIFIED:
  ------------------
  |  Branch (394:5): [True: 1.18k, False: 996]
  ------------------
  395|  1.18k|        return OFPFME_MODIFIED;
  396|     35|    case NXFME_ABBREV:
  ------------------
  |  Branch (396:5): [True: 35, False: 2.14k]
  ------------------
  397|     35|        return OFPFME_ABBREV;
  398|      0|     default:
  ------------------
  |  Branch (398:6): [True: 0, False: 2.18k]
  ------------------
  399|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  400|  2.18k|    }
  401|  2.18k|}

ofphdrs_len:
  368|  16.9k|{
  369|  16.9k|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  16.9k|#define OFPT_VENDOR 4
  ------------------
  |  Branch (369:9): [True: 3.10k, False: 13.8k]
  ------------------
  370|  3.10k|        return sizeof(struct ofp_vendor_header);
  371|  3.10k|    }
  372|       |
  373|  13.8k|    switch ((enum ofp_version) hdrs->version) {
  ------------------
  |  Branch (373:13): [True: 996, False: 12.8k]
  ------------------
  374|    735|    case OFP10_VERSION:
  ------------------
  |  Branch (374:5): [True: 735, False: 13.0k]
  ------------------
  375|    735|        if (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  1.47k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (375:13): [True: 690, False: 45]
  ------------------
  376|    735|            hdrs->type == OFPT10_STATS_REPLY) {
  ------------------
  |  |   34|     45|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (376:13): [True: 26, False: 19]
  ------------------
  377|    716|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|    716|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (377:21): [True: 27, False: 689]
  ------------------
  378|    716|                    ? sizeof(struct nicira10_stats_msg)
  379|    716|                    : sizeof(struct ofp10_stats_msg));
  380|    716|        }
  381|     19|        break;
  382|       |
  383|  1.60k|    case OFP11_VERSION:
  ------------------
  |  Branch (383:5): [True: 1.60k, False: 12.2k]
  ------------------
  384|  3.50k|    case OFP12_VERSION:
  ------------------
  |  Branch (384:5): [True: 1.90k, False: 11.9k]
  ------------------
  385|  7.15k|    case OFP13_VERSION:
  ------------------
  |  Branch (385:5): [True: 3.65k, False: 10.1k]
  ------------------
  386|  9.22k|    case OFP14_VERSION:
  ------------------
  |  Branch (386:5): [True: 2.06k, False: 11.7k]
  ------------------
  387|  12.0k|    case OFP15_VERSION:
  ------------------
  |  Branch (387:5): [True: 2.86k, False: 10.9k]
  ------------------
  388|  12.0k|        if (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  24.1k|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (388:13): [True: 9.02k, False: 3.06k]
  ------------------
  389|  12.0k|            hdrs->type == OFPT11_STATS_REPLY) {
  ------------------
  |  |   36|  3.06k|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (389:13): [True: 1.22k, False: 1.84k]
  ------------------
  390|  10.2k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  10.2k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (390:21): [True: 28, False: 10.2k]
  ------------------
  391|  10.2k|                    ? sizeof(struct ofp11_vendor_stats_msg)
  392|  10.2k|                    : sizeof(struct ofp11_stats_msg));
  393|  10.2k|        }
  394|  1.84k|        break;
  395|  13.8k|    }
  396|       |
  397|  2.85k|    return sizeof(struct ofp_header);
  398|  13.8k|}
ofpraw_decode:
  409|  5.32M|{
  410|  5.32M|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  411|  5.32M|    return ofpraw_pull(raw, &msg);
  412|  5.32M|}
ofpraw_decode_assert:
  422|  11.1k|{
  423|  11.1k|    enum ofpraw raw;
  424|  11.1k|    ovs_assert(!ofpraw_decode(&raw, oh));
  ------------------
  |  |   58|  11.1k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  425|  11.1k|    return raw;
  426|  11.1k|}
ofpraw_pull:
  485|  8.55M|{
  486|       |    /* Set default outputs. */
  487|  8.55M|    msg->header = msg->data;
  488|  8.55M|    msg->msg = msg->header;
  489|  8.55M|    *rawp = 0;
  490|       |
  491|  8.55M|    struct ofphdrs hdrs;
  492|  8.55M|    enum ofperr error = ofphdrs_decode(&hdrs, msg->data, msg->size);
  493|  8.55M|    if (error) {
  ------------------
  |  Branch (493:9): [True: 110k, False: 8.44M]
  ------------------
  494|   110k|        return error;
  495|   110k|    }
  496|       |
  497|  8.44M|    enum ofpraw raw;
  498|  8.44M|    error = ofpraw_from_ofphdrs(&raw, &hdrs);
  499|  8.44M|    if (error) {
  ------------------
  |  Branch (499:9): [True: 1.31M, False: 7.12M]
  ------------------
  500|  1.31M|        return error;
  501|  1.31M|    }
  502|       |
  503|  7.12M|    const struct raw_info *info = raw_info_get(raw);
  504|  7.12M|    const struct raw_instance *instance = raw_instance_get(info, hdrs.version);
  505|  7.12M|    error = ofpraw_check_length(info, instance, msg->size);
  506|  7.12M|    if (error) {
  ------------------
  |  Branch (506:9): [True: 236k, False: 6.88M]
  ------------------
  507|   236k|        return error;
  508|   236k|    }
  509|       |
  510|  6.88M|    msg->header = ofpbuf_pull(msg, instance->hdrs_len);
  511|  6.88M|    msg->msg = msg->data;
  512|  6.88M|    *rawp = raw;
  513|  6.88M|    return 0;
  514|  7.12M|}
ofpraw_pull_assert:
  524|  1.25M|{
  525|  1.25M|    enum ofpraw raw;
  526|  1.25M|    ovs_assert(!ofpraw_pull(&raw, msg));
  ------------------
  |  |   58|  1.25M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  527|  1.25M|    return raw;
  528|  1.25M|}
ofpraw_decode_partial:
  543|  16.6k|{
  544|  16.6k|    struct ofphdrs hdrs;
  545|  16.6k|    enum ofperr error;
  546|       |
  547|  16.6k|    error = ofphdrs_decode(&hdrs, oh, length);
  548|  16.6k|    if (!error) {
  ------------------
  |  Branch (548:9): [True: 16.1k, False: 485]
  ------------------
  549|  16.1k|        error = ofpraw_from_ofphdrs(raw, &hdrs);
  550|  16.1k|    }
  551|       |
  552|  16.6k|    if (error) {
  ------------------
  |  Branch (552:9): [True: 7.91k, False: 8.70k]
  ------------------
  553|  7.91k|        *raw = 0;
  554|  7.91k|    }
  555|  16.6k|    return error;
  556|  16.6k|}
ofpraw_get_name:
  782|  3.40M|{
  783|  3.40M|    return raw_info_get(raw)->name;
  784|  3.40M|}
ofptype_decode:
  828|  21.4k|{
  829|  21.4k|    enum ofperr error;
  830|  21.4k|    enum ofpraw raw;
  831|       |
  832|  21.4k|    error = ofpraw_decode(&raw, oh);
  833|  21.4k|    *typep = error ? 0 : ofptype_from_ofpraw(raw);
  ------------------
  |  Branch (833:14): [True: 1.85k, False: 19.6k]
  ------------------
  834|  21.4k|    return error;
  835|  21.4k|}
ofptype_from_ofpraw:
  867|  3.41M|{
  868|  3.41M|    return raw_info_get(raw)->type;
  869|  3.41M|}
ofpmsg_body:
  891|  15.4k|{
  892|  15.4k|    struct ofphdrs hdrs;
  893|       |
  894|  15.4k|    ofphdrs_decode_assert(&hdrs, oh, ntohs(oh->length));
  895|  15.4k|    return (const uint8_t *) oh + ofphdrs_len(&hdrs);
  896|  15.4k|}
ofpmsg_is_stat_request:
  901|   171k|{
  902|   171k|    return ofp_is_stat_request(oh->version, oh->type);
  903|   171k|}
ofpmsg_is_stat:
  915|  3.39M|{
  916|  3.39M|    return ofp_is_stat(oh->version, oh->type);
  917|  3.39M|}
ofpmp_flags:
 1049|   202k|{
 1050|   202k|    return ntohs(*ofpmp_flags__(oh));
 1051|   202k|}
ofp-msgs.c:ofphdrs_decode:
  215|  8.58M|{
  216|  8.58M|    memset(hdrs, 0, sizeof *hdrs);
  217|  8.58M|    if (length < sizeof *oh) {
  ------------------
  |  Branch (217:9): [True: 0, False: 8.58M]
  ------------------
  218|      0|        return OFPERR_OFPBRC_BAD_LEN;
  219|      0|    }
  220|       |
  221|       |    /* Get base message version and type (OFPT_*). */
  222|  8.58M|    hdrs->version = oh->version;
  223|  8.58M|    hdrs->type = oh->type;
  224|       |
  225|  8.58M|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  8.58M|#define OFPT_VENDOR 4
  ------------------
  |  Branch (225:9): [True: 312k, False: 8.27M]
  ------------------
  226|       |        /* Get vendor. */
  227|   312k|        const struct ofp_vendor_header *ovh;
  228|       |
  229|   312k|        if (length < sizeof *ovh) {
  ------------------
  |  Branch (229:13): [True: 52.5k, False: 260k]
  ------------------
  230|  52.5k|            return OFPERR_OFPBRC_BAD_LEN;
  231|  52.5k|        }
  232|       |
  233|   260k|        ovh = (const struct ofp_vendor_header *) oh;
  234|   260k|        hdrs->vendor = ntohl(ovh->vendor);
  235|   260k|        if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   520k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  25.3k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (235:13): [True: 235k, False: 25.3k]
  |  Branch (235:45): [True: 20, False: 25.3k]
  ------------------
  236|   235k|            hdrs->subtype = ntohl(ovh->subtype);
  237|   235k|        } else {
  238|  25.3k|            log_bad_vendor(hdrs->vendor);
  239|  25.3k|            return OFPERR_OFPBRC_BAD_VENDOR;
  240|  25.3k|        }
  241|  8.27M|    } else if (hdrs->version == OFP10_VERSION
  ------------------
  |  Branch (241:16): [True: 1.29M, False: 6.97M]
  ------------------
  242|  8.27M|               && (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  2.58M|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (242:20): [True: 26.1k, False: 1.26M]
  ------------------
  243|  1.29M|                   hdrs->type == OFPT10_STATS_REPLY)) {
  ------------------
  |  |   34|  1.26M|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (243:20): [True: 142k, False: 1.12M]
  ------------------
  244|   168k|        const struct ofp10_stats_msg *osm;
  245|       |
  246|       |        /* Get statistic type (OFPST_*). */
  247|   168k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (247:13): [True: 1.44k, False: 167k]
  ------------------
  248|  1.44k|            return OFPERR_OFPBRC_BAD_LEN;
  249|  1.44k|        }
  250|   167k|        osm = (const struct ofp10_stats_msg *) oh;
  251|   167k|        hdrs->stat = ntohs(osm->type);
  252|       |
  253|   167k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   167k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (253:13): [True: 94.5k, False: 72.7k]
  ------------------
  254|       |            /* Get vendor. */
  255|  94.5k|            const struct ofp10_vendor_stats_msg *ovsm;
  256|       |
  257|  94.5k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (257:17): [True: 144, False: 94.3k]
  ------------------
  258|    144|                return OFPERR_OFPBRC_BAD_LEN;
  259|    144|            }
  260|       |
  261|  94.3k|            ovsm = (const struct ofp10_vendor_stats_msg *) oh;
  262|  94.3k|            hdrs->vendor = ntohl(ovsm->vendor);
  263|  94.3k|            if (hdrs->vendor == NX_VENDOR_ID) {
  ------------------
  |  |  110|  94.3k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (263:17): [True: 92.7k, False: 1.65k]
  ------------------
  264|       |                /* Get Nicira statistic type (NXST_*). */
  265|  92.7k|                const struct nicira10_stats_msg *nsm;
  266|       |
  267|  92.7k|                if (length < sizeof *nsm) {
  ------------------
  |  Branch (267:21): [True: 67, False: 92.6k]
  ------------------
  268|     67|                    return OFPERR_OFPBRC_BAD_LEN;
  269|     67|                }
  270|  92.6k|                nsm = (const struct nicira10_stats_msg *) oh;
  271|  92.6k|                hdrs->subtype = ntohl(nsm->subtype);
  272|  92.6k|            } else {
  273|  1.65k|                log_bad_vendor(hdrs->vendor);
  274|  1.65k|                return OFPERR_OFPBRC_BAD_VENDOR;
  275|  1.65k|            }
  276|  94.3k|        }
  277|  8.10M|    } else if (hdrs->version != OFP10_VERSION
  ------------------
  |  Branch (277:16): [True: 6.97M, False: 1.12M]
  ------------------
  278|  8.10M|               && (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  13.9M|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (278:20): [True: 49.3k, False: 6.93M]
  ------------------
  279|  6.97M|                   hdrs->type == OFPT11_STATS_REPLY)) {
  ------------------
  |  |   36|  6.93M|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (279:20): [True: 421k, False: 6.50M]
  ------------------
  280|   471k|        const struct ofp11_stats_msg *osm;
  281|       |
  282|       |        /* Get statistic type (OFPST_*). */
  283|   471k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (283:13): [True: 24.3k, False: 446k]
  ------------------
  284|  24.3k|            return OFPERR_OFPBRC_BAD_LEN;
  285|  24.3k|        }
  286|   446k|        osm = (const struct ofp11_stats_msg *) oh;
  287|   446k|        hdrs->stat = ntohs(osm->type);
  288|       |
  289|   446k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   446k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (289:13): [True: 5.53k, False: 441k]
  ------------------
  290|       |            /* Get vendor. */
  291|  5.53k|            const struct ofp11_vendor_stats_msg *ovsm;
  292|       |
  293|  5.53k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (293:17): [True: 4.39k, False: 1.13k]
  ------------------
  294|  4.39k|                return OFPERR_OFPBRC_BAD_LEN;
  295|  4.39k|            }
  296|       |
  297|  1.13k|            ovsm = (const struct ofp11_vendor_stats_msg *) oh;
  298|  1.13k|            hdrs->vendor = ntohl(ovsm->vendor);
  299|  1.13k|            if (hdrs->vendor == NX_VENDOR_ID ||
  ------------------
  |  |  110|  2.27k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (299:17): [True: 553, False: 582]
  ------------------
  300|  1.13k|                hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|    582|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (300:17): [True: 18, False: 564]
  ------------------
  301|    571|                hdrs->subtype = ntohl(ovsm->subtype);
  302|    571|            } else {
  303|    564|                log_bad_vendor(hdrs->vendor);
  304|    564|                return OFPERR_OFPBRC_BAD_VENDOR;
  305|    564|            }
  306|  1.13k|        }
  307|   446k|    }
  308|       |
  309|  8.47M|    return 0;
  310|  8.58M|}
ofp-msgs.c:log_bad_vendor:
  206|  27.5k|{
  207|  27.5k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  27.5k|        {                                                                 \
  |  |  111|  27.5k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   110k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  27.5k|            0,                              /* first_dropped */           \
  |  |  113|  27.5k|            0,                              /* last_dropped */            \
  |  |  114|  27.5k|            0,                              /* n_dropped */               \
  |  |  115|  27.5k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  27.5k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  27.5k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  27.5k|        }
  ------------------
  208|       |
  209|  27.5k|    VLOG_WARN_RL(&rl, "OpenFlow message has unknown vendor %#"PRIx32, vendor);
  ------------------
  |  |  223|  27.5k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  27.5k|    do {                                                                \
  |  |  |  |  287|  27.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  27.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 27.5k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  27.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  27.5k|}
ofp-msgs.c:ofpraw_check_length:
  434|  7.12M|{
  435|  7.12M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  7.12M|        {                                                                 \
  |  |  111|  7.12M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  28.4M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  7.12M|            0,                              /* first_dropped */           \
  |  |  113|  7.12M|            0,                              /* last_dropped */            \
  |  |  114|  7.12M|            0,                              /* n_dropped */               \
  |  |  115|  7.12M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  7.12M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  7.12M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  7.12M|        }
  ------------------
  436|       |
  437|  7.12M|    unsigned int min_len = instance->hdrs_len + info->min_body;
  438|  7.12M|    switch (info->extra_multiple) {
  439|   217k|    case 0:
  ------------------
  |  Branch (439:5): [True: 217k, False: 6.90M]
  ------------------
  440|   217k|        if (len != min_len) {
  ------------------
  |  Branch (440:13): [True: 87.1k, False: 130k]
  ------------------
  441|  87.1k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  223|  87.1k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  87.1k|    do {                                                                \
  |  |  |  |  287|  87.1k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  87.1k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 87.1k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  87.1k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  87.1k|                         "length %u)", info->name, len, min_len);
  443|  87.1k|            return OFPERR_OFPBRC_BAD_LEN;
  444|  87.1k|        }
  445|   130k|        break;
  446|       |
  447|  5.33M|    case 1:
  ------------------
  |  Branch (447:5): [True: 5.33M, False: 1.78M]
  ------------------
  448|  5.33M|        if (len < min_len) {
  ------------------
  |  Branch (448:13): [True: 116k, False: 5.22M]
  ------------------
  449|   116k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  223|   116k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|   116k|    do {                                                                \
  |  |  |  |  287|   116k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|   116k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 116k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|   116k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|   116k|                         "length at least %u bytes)",
  451|   116k|                         info->name, len, min_len);
  452|   116k|            return OFPERR_OFPBRC_BAD_LEN;
  453|   116k|        }
  454|  5.22M|        break;
  455|       |
  456|  5.22M|    default:
  ------------------
  |  Branch (456:5): [True: 1.56M, False: 5.55M]
  ------------------
  457|  1.56M|        if (len < min_len || (len - min_len) % info->extra_multiple) {
  ------------------
  |  Branch (457:13): [True: 27.4k, False: 1.53M]
  |  Branch (457:30): [True: 5.35k, False: 1.53M]
  ------------------
  458|  32.7k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (must be "
  ------------------
  |  |  223|  32.7k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  32.7k|    do {                                                                \
  |  |  |  |  287|  32.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  32.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 32.7k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  32.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  32.7k|                         "exactly %u bytes or longer by an integer multiple "
  460|  32.7k|                         "of %u bytes)",
  461|  32.7k|                         info->name, len, min_len, info->extra_multiple);
  462|  32.7k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  32.7k|        }
  464|  1.53M|        break;
  465|  7.12M|    }
  466|       |
  467|  6.88M|    return 0;
  468|  7.12M|}
ofp-msgs.c:ofphdrs_decode_assert:
  315|  15.4k|{
  316|  15.4k|    ovs_assert(!ofphdrs_decode(hdrs, oh, length));
  ------------------
  |  |   58|  15.4k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  317|  15.4k|}
ofp-msgs.c:ofp_is_stat_request:
  321|  4.88M|{
  322|  4.88M|    switch (version) {
  ------------------
  |  Branch (322:13): [True: 1.40M, False: 3.47M]
  ------------------
  323|   719k|    case OFP10_VERSION:
  ------------------
  |  Branch (323:5): [True: 719k, False: 4.16M]
  ------------------
  324|   719k|        return type == OFPT10_STATS_REQUEST;
  ------------------
  |  |   33|   719k|#define OFPT10_STATS_REQUEST 16
  ------------------
  325|   317k|    case OFP11_VERSION:
  ------------------
  |  Branch (325:5): [True: 317k, False: 4.56M]
  ------------------
  326|   905k|    case OFP12_VERSION:
  ------------------
  |  Branch (326:5): [True: 588k, False: 4.29M]
  ------------------
  327|  1.21M|    case OFP13_VERSION:
  ------------------
  |  Branch (327:5): [True: 306k, False: 4.57M]
  ------------------
  328|  1.99M|    case OFP14_VERSION:
  ------------------
  |  Branch (328:5): [True: 786k, False: 4.09M]
  ------------------
  329|  2.76M|    case OFP15_VERSION:
  ------------------
  |  Branch (329:5): [True: 761k, False: 4.12M]
  ------------------
  330|  2.76M|        return type == OFPT11_STATS_REQUEST;
  ------------------
  |  |   35|  2.76M|#define OFPT11_STATS_REQUEST 18
  ------------------
  331|  4.88M|    }
  332|       |
  333|  1.40M|    return false;
  334|  4.88M|}
ofp-msgs.c:ofp_is_stat_reply:
  338|  4.68M|{
  339|  4.68M|    switch (version) {
  ------------------
  |  Branch (339:13): [True: 1.40M, False: 3.27M]
  ------------------
  340|   658k|    case OFP10_VERSION:
  ------------------
  |  Branch (340:5): [True: 658k, False: 4.02M]
  ------------------
  341|   658k|        return type == OFPT10_STATS_REPLY;
  ------------------
  |  |   34|   658k|#define OFPT10_STATS_REPLY 17
  ------------------
  342|   311k|    case OFP11_VERSION:
  ------------------
  |  Branch (342:5): [True: 311k, False: 4.36M]
  ------------------
  343|   888k|    case OFP12_VERSION:
  ------------------
  |  Branch (343:5): [True: 577k, False: 4.10M]
  ------------------
  344|  1.19M|    case OFP13_VERSION:
  ------------------
  |  Branch (344:5): [True: 301k, False: 4.37M]
  ------------------
  345|  1.94M|    case OFP14_VERSION:
  ------------------
  |  Branch (345:5): [True: 755k, False: 3.92M]
  ------------------
  346|  2.61M|    case OFP15_VERSION:
  ------------------
  |  Branch (346:5): [True: 671k, False: 4.00M]
  ------------------
  347|  2.61M|        return type == OFPT11_STATS_REPLY;
  ------------------
  |  |   36|  2.61M|#define OFPT11_STATS_REPLY 19
  ------------------
  348|  4.68M|    }
  349|       |
  350|  1.40M|    return false;
  351|  4.68M|}
ofp-msgs.c:ofp_is_stat:
  355|  4.71M|{
  356|  4.71M|    return (ofp_is_stat_request(version, type) ||
  ------------------
  |  Branch (356:13): [True: 31.9k, False: 4.68M]
  ------------------
  357|  4.71M|            ofp_is_stat_reply(version, type));
  ------------------
  |  Branch (357:13): [True: 184k, False: 4.49M]
  ------------------
  358|  4.71M|}
ofp-msgs.c:ofpmp_flags__:
 1028|   202k|{
 1029|   202k|    switch ((enum ofp_version)oh->version) {
 1030|  51.2k|    case OFP10_VERSION:
  ------------------
  |  Branch (1030:5): [True: 51.2k, False: 151k]
  ------------------
 1031|  51.2k|        return &((struct ofp10_stats_msg *) oh)->flags;
 1032|  2.65k|    case OFP11_VERSION:
  ------------------
  |  Branch (1032:5): [True: 2.65k, False: 199k]
  ------------------
 1033|  11.7k|    case OFP12_VERSION:
  ------------------
  |  Branch (1033:5): [True: 9.12k, False: 193k]
  ------------------
 1034|  14.6k|    case OFP13_VERSION:
  ------------------
  |  Branch (1034:5): [True: 2.87k, False: 199k]
  ------------------
 1035|  40.6k|    case OFP14_VERSION:
  ------------------
  |  Branch (1035:5): [True: 26.0k, False: 176k]
  ------------------
 1036|   151k|    case OFP15_VERSION:
  ------------------
  |  Branch (1036:5): [True: 110k, False: 91.9k]
  ------------------
 1037|   151k|        return &((struct ofp11_stats_msg *) oh)->flags;
 1038|      0|    default:
  ------------------
  |  Branch (1038:5): [True: 0, False: 202k]
  ------------------
 1039|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1040|   202k|    }
 1041|   202k|}
ofp-msgs.c:raw_info_get:
 1307|  13.9M|{
 1308|  13.9M|    ofpmsgs_init();
 1309|       |
 1310|  13.9M|    ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |   58|  13.9M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
 1311|  13.9M|    return &raw_infos[raw];
 1312|  13.9M|}
ofp-msgs.c:ofpmsgs_init:
 1363|  22.3M|{
 1364|  22.3M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  22.3M|    {                                           \
  |  |  135|  22.3M|        false,                                  \
  |  |  136|  22.3M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  22.3M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  22.3M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  22.3M|    }
  ------------------
 1365|  22.3M|    const struct raw_info *info;
 1366|       |
 1367|  22.3M|    if (!ovsthread_once_start(&once)) {
  ------------------
  |  Branch (1367:9): [True: 22.3M, False: 1]
  ------------------
 1368|  22.3M|        return;
 1369|  22.3M|    }
 1370|       |
 1371|      1|    hmap_init(&raw_instance_map);
 1372|    162|    for (info = raw_infos; info < &raw_infos[ARRAY_SIZE(raw_infos)]; info++)
  ------------------
  |  |  293|    162|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|    162|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    162|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|    162|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    162|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|    162|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1372:28): [True: 161, False: 1]
  ------------------
 1373|    161|    {
 1374|    161|        int n_instances = info->max_version - info->min_version + 1;
 1375|    161|        struct raw_instance *inst;
 1376|       |
 1377|    161|        for (inst = info->instances;
 1378|  1.62k|             inst < &info->instances[n_instances];
  ------------------
  |  Branch (1378:14): [True: 1.46k, False: 161]
  ------------------
 1379|  1.46k|             inst++) {
 1380|  1.46k|            inst->hdrs_len = ofphdrs_len(&inst->hdrs);
 1381|  1.46k|            hmap_insert(&raw_instance_map, &inst->hmap_node,
  ------------------
  |  |  101|  1.46k|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|  1.46k|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  1.46k|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|  1.46k|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1382|  1.46k|                        ofphdrs_hash(&inst->hdrs));
 1383|  1.46k|        }
 1384|    161|    }
 1385|       |
 1386|      1|    ovsthread_once_done(&once);
 1387|      1|}
ofp-msgs.c:ofphdrs_hash:
  193|  8.46M|{
  194|  8.46M|    BUILD_ASSERT_DECL(sizeof *hdrs % 4 == 0);
  ------------------
  |  |  269|  8.46M|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  195|  8.46M|    return hash_bytes32((const uint32_t *) hdrs, sizeof *hdrs, 0);
  196|  8.46M|}
ofp-msgs.c:raw_instance_get:
 1316|  7.12M|{
 1317|  7.12M|    ovs_assert(version >= info->min_version && version <= info->max_version);
  ------------------
  |  |   58|  14.2M|#define ovs_assert(CONDITION) ((void) (CONDITION))
  |  |  ------------------
  |  |  |  Branch (58:40): [True: 7.12M, False: 0]
  |  |  |  Branch (58:40): [True: 7.12M, False: 0]
  |  |  ------------------
  ------------------
 1318|  7.12M|    return &info->instances[version - info->min_version];
 1319|  7.12M|}
ofp-msgs.c:ofpraw_from_ofphdrs:
 1323|  8.45M|{
 1324|  8.45M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  8.45M|        {                                                                 \
  |  |  111|  8.45M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  33.8M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  8.45M|            0,                              /* first_dropped */           \
  |  |  113|  8.45M|            0,                              /* last_dropped */            \
  |  |  114|  8.45M|            0,                              /* n_dropped */               \
  |  |  115|  8.45M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  8.45M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  8.45M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  8.45M|        }
  ------------------
 1325|       |
 1326|  8.45M|    struct raw_instance *raw_hdrs;
 1327|  8.45M|    uint32_t hash;
 1328|       |
 1329|  8.45M|    ofpmsgs_init();
 1330|       |
 1331|  8.45M|    hash = ofphdrs_hash(hdrs);
 1332|  8.45M|    HMAP_FOR_EACH_WITH_HASH (raw_hdrs, hmap_node, hash, &raw_instance_map) {
  ------------------
  |  |  138|  8.45M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  167|  8.45M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|  8.45M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  8.45M|                       struct hmap_node);                                     \
  |  |  140|  8.45M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  181|  8.45M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 7.13M, False: 1.32M]
  |  |  |  |  |  Branch (181:6): [True: 7.13M, False: 1.32M]
  |  |  |  |  ------------------
  |  |  |  |  182|  8.45M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|  7.13M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|  7.13M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|  7.13M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|  8.45M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|  8.45M|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  189|     76|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|     76|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  7.13M|        if (ofphdrs_equal(hdrs, &raw_hdrs->hdrs)) {
  ------------------
  |  Branch (1333:13): [True: 7.13M, False: 76]
  ------------------
 1334|  7.13M|            *raw = raw_hdrs->raw;
 1335|  7.13M|            return 0;
 1336|  7.13M|        }
 1337|  7.13M|    }
 1338|       |
 1339|  1.32M|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  233|  1.32M|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (1339:9): [True: 0, False: 1.32M]
  ------------------
 1340|      0|        struct ds s;
 1341|       |
 1342|      0|        ds_init(&s);
 1343|      0|        ds_put_format(&s, "version %"PRIu8", type %"PRIu8,
 1344|      0|                      hdrs->version, hdrs->type);
 1345|      0|        if (ofphdrs_is_stat(hdrs)) {
  ------------------
  |  Branch (1345:13): [True: 0, False: 0]
  ------------------
 1346|      0|            ds_put_format(&s, ", stat %"PRIu16, hdrs->stat);
 1347|      0|        }
 1348|      0|        if (hdrs->vendor) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 0]
  ------------------
 1349|      0|            ds_put_format(&s, ", vendor 0x%"PRIx32", subtype %"PRIu32,
 1350|      0|                          hdrs->vendor, hdrs->subtype);
 1351|      0|        }
 1352|      0|        VLOG_WARN("unknown OpenFlow message (%s)", ds_cstr(&s));
  ------------------
  |  |  208|      0|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  279|      0|    do {                                                \
  |  |  |  |  280|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  281|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (281:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  282|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  283|      0|        }                                               \
  |  |  |  |  284|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (284:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1353|      0|        ds_destroy(&s);
 1354|      0|    }
 1355|       |
 1356|  1.32M|    return (hdrs->vendor ? OFPERR_OFPBRC_BAD_SUBTYPE
  ------------------
  |  Branch (1356:13): [True: 8.74k, False: 1.31M]
  ------------------
 1357|  1.32M|            : ofphdrs_is_stat(hdrs) ? OFPERR_OFPBRC_BAD_STAT
  ------------------
  |  Branch (1357:15): [True: 14.0k, False: 1.30M]
  ------------------
 1358|  1.31M|            : OFPERR_OFPBRC_BAD_TYPE);
 1359|  8.45M|}
ofp-msgs.c:ofphdrs_equal:
  200|  7.13M|{
  201|  7.13M|    return !memcmp(a, b, sizeof *a);
  202|  7.13M|}
ofp-msgs.c:ofphdrs_is_stat:
  362|  1.31M|{
  363|  1.31M|    return ofp_is_stat(hdrs->version, hdrs->type);
  364|  1.31M|}

ofputil_packet_in_format_to_string:
   41|    228|{
   42|    228|    switch (format) {
   43|    228|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (43:5): [True: 228, False: 0]
  ------------------
   44|    228|        return "standard";
   45|      0|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (45:5): [True: 0, False: 228]
  ------------------
   46|      0|        return "nxt_packet_in";
   47|      0|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (47:5): [True: 0, False: 228]
  ------------------
   48|      0|        return "nxt_packet_in2";
   49|      0|    default:
  ------------------
  |  Branch (49:5): [True: 0, False: 228]
  ------------------
   50|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   51|    228|    }
   52|    228|}
ofputil_decode_set_packet_in_format:
   81|    673|{
   82|    673|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   83|    673|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_PACKET_IN_FORMAT);
  ------------------
  |  |   58|    673|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
   84|    673|    ovs_be32 *spifp = ofpbuf_pull(&b, sizeof *spifp);
   85|    673|    uint32_t spif = ntohl(*spifp);
   86|       |
   87|    673|    switch (spif) {
   88|    228|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (88:5): [True: 228, False: 445]
  ------------------
   89|    228|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (89:5): [True: 0, False: 673]
  ------------------
   90|    228|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (90:5): [True: 0, False: 673]
  ------------------
   91|    228|        *format = spif;
   92|    228|        return 0;
   93|       |
   94|    445|    default:
  ------------------
  |  Branch (94:5): [True: 445, False: 228]
  ------------------
   95|    445|        VLOG_WARN_RL(&rl, "NXT_SET_PACKET_IN_FORMAT message specified invalid "
  ------------------
  |  |  223|    445|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    445|    do {                                                                \
  |  |  |  |  287|    445|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    445|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 445]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    445|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|    445|                     "packet-in format %"PRIu32, spif);
   97|    445|        return OFPERR_OFPBRC_EPERM;
   98|    673|    }
   99|    673|}
ofputil_decode_packet_in:
  233|   232k|{
  234|   232k|    uint32_t buffer_id;
  235|   232k|    size_t total_len;
  236|       |
  237|   232k|    memset(pin, 0, sizeof *pin);
  238|   232k|    pin->cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|   232k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  239|   232k|    if (continuation) {
  ------------------
  |  Branch (239:9): [True: 232k, False: 0]
  ------------------
  240|   232k|        ofpbuf_use_const(continuation, NULL, 0);
  241|   232k|    }
  242|       |
  243|   232k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  244|   232k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  245|   232k|    if (raw == OFPRAW_OFPT13_PACKET_IN || raw == OFPRAW_OFPT12_PACKET_IN) {
  ------------------
  |  Branch (245:9): [True: 7.97k, False: 224k]
  |  Branch (245:43): [True: 113k, False: 111k]
  ------------------
  246|   121k|        const struct ofp12_packet_in *opi = ofpbuf_pull(&b, sizeof *opi);
  247|   121k|        const ovs_be64 *cookie = (raw == OFPRAW_OFPT13_PACKET_IN
  ------------------
  |  Branch (247:35): [True: 7.97k, False: 113k]
  ------------------
  248|   121k|                                  ? ofpbuf_pull(&b, sizeof *cookie)
  249|   121k|                                  : NULL);
  250|   121k|        enum ofperr error = oxm_pull_match_loose(&b, false, tun_table,
  251|   121k|                                                 &pin->flow_metadata);
  252|   121k|        pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  253|   121k|        if (error) {
  ------------------
  |  Branch (253:13): [True: 74.9k, False: 46.7k]
  ------------------
  254|  74.9k|            return error;
  255|  74.9k|        }
  256|       |
  257|  46.7k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (257:13): [True: 8.50k, False: 38.2k]
  ------------------
  258|  8.50k|            return OFPERR_OFPBRC_BAD_LEN;
  259|  8.50k|        }
  260|       |
  261|  38.2k|        pin->reason = opi->reason;
  262|  38.2k|        pin->table_id = opi->table_id;
  263|  38.2k|        buffer_id = ntohl(opi->buffer_id);
  264|  38.2k|        total_len = ntohs(opi->total_len);
  265|  38.2k|        if (cookie) {
  ------------------
  |  Branch (265:13): [True: 425, False: 37.7k]
  ------------------
  266|    425|            pin->cookie = *cookie;
  267|    425|        }
  268|       |
  269|  38.2k|        pin->packet = b.data;
  270|  38.2k|        pin->packet_len = b.size;
  271|   111k|    } else if (raw == OFPRAW_OFPT10_PACKET_IN) {
  ------------------
  |  Branch (271:16): [True: 59.3k, False: 51.8k]
  ------------------
  272|  59.3k|        const struct ofp10_packet_in *opi;
  273|       |
  274|  59.3k|        opi = ofpbuf_pull(&b, offsetof(struct ofp10_packet_in, data));
  275|       |
  276|  59.3k|        pin->packet = CONST_CAST(uint8_t *, opi->data);
  ------------------
  |  |   81|  59.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|  59.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|  59.3k|     (TYPE) (POINTER))
  ------------------
  277|  59.3k|        pin->packet_len = b.size;
  278|       |
  279|  59.3k|        match_init_catchall(&pin->flow_metadata);
  280|  59.3k|        match_set_in_port(&pin->flow_metadata,
  281|  59.3k|                          u16_to_ofp(ntohs(opi->in_port)));
  282|  59.3k|        pin->reason = opi->reason;
  283|  59.3k|        buffer_id = ntohl(opi->buffer_id);
  284|  59.3k|        total_len = ntohs(opi->total_len);
  285|  59.3k|    } else if (raw == OFPRAW_OFPT11_PACKET_IN) {
  ------------------
  |  Branch (285:16): [True: 4.54k, False: 47.3k]
  ------------------
  286|  4.54k|        const struct ofp11_packet_in *opi;
  287|  4.54k|        ofp_port_t in_port;
  288|  4.54k|        enum ofperr error;
  289|       |
  290|  4.54k|        opi = ofpbuf_pull(&b, sizeof *opi);
  291|       |
  292|  4.54k|        pin->packet = b.data;
  293|  4.54k|        pin->packet_len = b.size;
  294|       |
  295|  4.54k|        buffer_id = ntohl(opi->buffer_id);
  296|  4.54k|        error = ofputil_port_from_ofp11(opi->in_port, &in_port);
  297|  4.54k|        if (error) {
  ------------------
  |  Branch (297:13): [True: 4.19k, False: 356]
  ------------------
  298|  4.19k|            return error;
  299|  4.19k|        }
  300|    356|        match_init_catchall(&pin->flow_metadata);
  301|    356|        match_set_in_port(&pin->flow_metadata, in_port);
  302|    356|        total_len = ntohs(opi->total_len);
  303|    356|        pin->reason = opi->reason;
  304|    356|        pin->table_id = opi->table_id;
  305|  47.3k|    } else if (raw == OFPRAW_NXT_PACKET_IN) {
  ------------------
  |  Branch (305:16): [True: 7.06k, False: 40.2k]
  ------------------
  306|  7.06k|        const struct nx_packet_in *npi;
  307|  7.06k|        int error;
  308|       |
  309|  7.06k|        npi = ofpbuf_pull(&b, sizeof *npi);
  310|  7.06k|        error = nx_pull_match_loose(&b, ntohs(npi->match_len),
  311|  7.06k|                                    &pin->flow_metadata, NULL, NULL, false,
  312|  7.06k|                                    NULL);
  313|  7.06k|        if (error) {
  ------------------
  |  Branch (313:13): [True: 4.84k, False: 2.21k]
  ------------------
  314|  4.84k|            return error;
  315|  4.84k|        }
  316|       |
  317|  2.21k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (317:13): [True: 11, False: 2.20k]
  ------------------
  318|     11|            return OFPERR_OFPBRC_BAD_LEN;
  319|     11|        }
  320|       |
  321|  2.20k|        pin->reason = npi->reason;
  322|  2.20k|        pin->table_id = npi->table_id;
  323|  2.20k|        pin->cookie = npi->cookie;
  324|       |
  325|  2.20k|        buffer_id = ntohl(npi->buffer_id);
  326|  2.20k|        total_len = ntohs(npi->total_len);
  327|       |
  328|  2.20k|        pin->packet = b.data;
  329|  2.20k|        pin->packet_len = b.size;
  330|  40.2k|    } else if (raw == OFPRAW_NXT_PACKET_IN2 || raw == OFPRAW_NXT_RESUME) {
  ------------------
  |  Branch (330:16): [True: 20.9k, False: 19.2k]
  |  Branch (330:48): [True: 19.2k, False: 0]
  ------------------
  331|  40.2k|        enum ofperr error = decode_nx_packet_in2(oh, loose, tun_table,
  332|  40.2k|                                                 vl_mff_map, pin, &total_len,
  333|  40.2k|                                                 &buffer_id, continuation);
  334|  40.2k|        if (error) {
  ------------------
  |  Branch (334:13): [True: 23.1k, False: 17.0k]
  ------------------
  335|  23.1k|            return error;
  336|  23.1k|        }
  337|  40.2k|    } else {
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|      0|    }
  340|       |
  341|   117k|    if (total_lenp) {
  ------------------
  |  Branch (341:9): [True: 117k, False: 0]
  ------------------
  342|   117k|        *total_lenp = total_len;
  343|   117k|    }
  344|   117k|    if (buffer_idp) {
  ------------------
  |  Branch (344:9): [True: 117k, False: 0]
  ------------------
  345|   117k|        *buffer_idp = buffer_id;
  346|   117k|    }
  347|       |
  348|   117k|    return 0;
  349|   232k|}
ofputil_packet_in_reason_to_string:
  710|   127k|{
  711|   127k|    switch (reason) {
  712|  52.6k|    case OFPR_NO_MATCH:
  ------------------
  |  Branch (712:5): [True: 52.6k, False: 74.6k]
  ------------------
  713|  52.6k|        return "no_match";
  714|  11.3k|    case OFPR_ACTION:
  ------------------
  |  Branch (714:5): [True: 11.3k, False: 115k]
  ------------------
  715|  11.3k|        return "action";
  716|  5.38k|    case OFPR_INVALID_TTL:
  ------------------
  |  Branch (716:5): [True: 5.38k, False: 121k]
  ------------------
  717|  5.38k|        return "invalid_ttl";
  718|    172|    case OFPR_ACTION_SET:
  ------------------
  |  Branch (718:5): [True: 172, False: 127k]
  ------------------
  719|    172|        return "action_set";
  720|  3.09k|    case OFPR_GROUP:
  ------------------
  |  Branch (720:5): [True: 3.09k, False: 124k]
  ------------------
  721|  3.09k|        return "group";
  722|    474|    case OFPR_PACKET_OUT:
  ------------------
  |  Branch (722:5): [True: 474, False: 126k]
  ------------------
  723|    474|        return "packet_out";
  724|  2.31k|    case OFPR_EXPLICIT_MISS:
  ------------------
  |  Branch (724:5): [True: 2.31k, False: 125k]
  ------------------
  725|  3.49k|    case OFPR_IMPLICIT_MISS:
  ------------------
  |  Branch (725:5): [True: 1.18k, False: 126k]
  ------------------
  726|  3.49k|        return "";
  727|       |
  728|     66|    case OFPR_N_REASONS:
  ------------------
  |  Branch (728:5): [True: 66, False: 127k]
  ------------------
  729|  50.6k|    default:
  ------------------
  |  Branch (729:5): [True: 50.6k, False: 76.7k]
  ------------------
  730|  50.6k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  731|  50.6k|        return reasonbuf;
  732|   127k|    }
  733|   127k|}
ofputil_decode_packet_in_private:
  818|   232k|{
  819|   232k|    memset(pin, 0, sizeof *pin);
  820|       |
  821|   232k|    struct ofpbuf continuation;
  822|   232k|    enum ofperr error;
  823|   232k|    error = ofputil_decode_packet_in(oh, loose, tun_table, vl_mff_map,
  824|   232k|                                     &pin->base, total_len, buffer_id,
  825|   232k|                                     &continuation);
  826|   232k|    if (error) {
  ------------------
  |  Branch (826:9): [True: 115k, False: 117k]
  ------------------
  827|   115k|        return error;
  828|   115k|    }
  829|       |
  830|   117k|    struct ofpbuf actions, action_set;
  831|   117k|    ofpbuf_init(&actions, 0);
  832|   117k|    ofpbuf_init(&action_set, 0);
  833|       |
  834|   117k|    uint8_t table_id = 0;
  835|   117k|    ovs_be64 cookie = 0;
  836|       |
  837|   117k|    struct ofpbuf stack;
  838|   117k|    ofpbuf_init(&stack, 0);
  839|       |
  840|   147k|    while (continuation.size > 0) {
  ------------------
  |  Branch (840:12): [True: 33.6k, False: 113k]
  ------------------
  841|  33.6k|        struct ofpbuf payload;
  842|  33.6k|        uint64_t type;
  843|       |
  844|  33.6k|        error = ofpprop_pull(&continuation, &payload, &type);
  845|  33.6k|        if (error) {
  ------------------
  |  Branch (845:13): [True: 1.97k, False: 31.7k]
  ------------------
  846|  1.97k|            break;
  847|  1.97k|        }
  848|       |
  849|  31.7k|        switch (type) {
  850|    378|        case NXCPT_BRIDGE:
  ------------------
  |  Branch (850:9): [True: 378, False: 31.3k]
  ------------------
  851|    378|            error = ofpprop_parse_uuid(&payload, &pin->bridge);
  852|    378|            break;
  853|       |
  854|  2.07k|        case NXCPT_STACK:
  ------------------
  |  Branch (854:9): [True: 2.07k, False: 29.6k]
  ------------------
  855|  2.07k|            error = parse_stack_prop(&payload, &stack);
  856|  2.07k|            break;
  857|       |
  858|  2.61k|        case NXCPT_MIRRORS:
  ------------------
  |  Branch (858:9): [True: 2.61k, False: 29.0k]
  ------------------
  859|  2.61k|            error = ofpprop_parse_u32(&payload, &pin->mirrors);
  860|  2.61k|            break;
  861|       |
  862|    198|        case NXCPT_CONNTRACKED:
  ------------------
  |  Branch (862:9): [True: 198, False: 31.5k]
  ------------------
  863|    198|            pin->conntracked = true;
  864|    198|            break;
  865|       |
  866|     23|        case NXCPT_TABLE_ID:
  ------------------
  |  Branch (866:9): [True: 23, False: 31.6k]
  ------------------
  867|     23|            error = ofpprop_parse_u8(&payload, &table_id);
  868|     23|            break;
  869|       |
  870|     98|        case NXCPT_COOKIE:
  ------------------
  |  Branch (870:9): [True: 98, False: 31.6k]
  ------------------
  871|     98|            error = ofpprop_parse_be64(&payload, &cookie);
  872|     98|            break;
  873|       |
  874|  10.3k|        case NXCPT_ACTIONS: {
  ------------------
  |  Branch (874:9): [True: 10.3k, False: 21.3k]
  ------------------
  875|  10.3k|            struct ofpact_unroll_xlate *unroll
  876|  10.3k|                = ofpact_put_UNROLL_XLATE(&actions);
  877|  10.3k|            unroll->rule_table_id = table_id;
  878|  10.3k|            unroll->rule_cookie = cookie;
  879|  10.3k|            error = parse_actions_property(&payload, oh->version, &actions);
  880|  10.3k|            break;
  881|      0|        }
  882|       |
  883|  7.03k|        case NXCPT_ACTION_SET:
  ------------------
  |  Branch (883:9): [True: 7.03k, False: 24.6k]
  ------------------
  884|  7.03k|            error = parse_actions_property(&payload, oh->version, &action_set);
  885|  7.03k|            break;
  886|       |
  887|  1.61k|        case NXCPT_ODP_PORT: {
  ------------------
  |  Branch (887:9): [True: 1.61k, False: 30.0k]
  ------------------
  888|  1.61k|            uint32_t value;
  889|  1.61k|            error = ofpprop_parse_u32(&payload, &value);
  890|  1.61k|            if (!error) {
  ------------------
  |  Branch (890:17): [True: 1.58k, False: 27]
  ------------------
  891|  1.58k|                pin->odp_port = u32_to_odp(value);
  892|  1.58k|            }
  893|  1.61k|            break;
  894|      0|         }
  895|       |
  896|  7.30k|        default:
  ------------------
  |  Branch (896:9): [True: 7.30k, False: 24.4k]
  ------------------
  897|  7.30k|            error = OFPPROP_UNKNOWN(loose, "continuation", type);
  ------------------
  |  |  140|  7.30k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  898|  7.30k|            break;
  899|  31.7k|        }
  900|  31.7k|        if (error) {
  ------------------
  |  Branch (900:13): [True: 1.67k, False: 30.0k]
  ------------------
  901|  1.67k|            break;
  902|  1.67k|        }
  903|  31.7k|    }
  904|       |
  905|   117k|    pin->actions_len = actions.size;
  906|   117k|    pin->actions = ofpbuf_steal_data(&actions);
  907|   117k|    pin->action_set_len = action_set.size;
  908|   117k|    pin->action_set = ofpbuf_steal_data(&action_set);
  909|   117k|    pin->stack_size = stack.size;
  910|   117k|    pin->stack = ofpbuf_steal_data(&stack);
  911|       |
  912|   117k|    if (error) {
  ------------------
  |  Branch (912:9): [True: 3.64k, False: 113k]
  ------------------
  913|  3.64k|        ofputil_packet_in_private_destroy(pin);
  914|  3.64k|    }
  915|       |
  916|   117k|    return error;
  917|   117k|}
ofputil_packet_in_private_format:
  937|   113k|{
  938|   113k|    char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
  939|   113k|    const struct ofputil_packet_in *public = &pin->base;
  940|       |
  941|   113k|    if (public->table_id
  ------------------
  |  Branch (941:9): [True: 24.1k, False: 89.4k]
  ------------------
  942|   113k|        || ofputil_table_map_get_name(table_map, public->table_id)) {
  ------------------
  |  Branch (942:12): [True: 0, False: 89.4k]
  ------------------
  943|  24.1k|        ds_put_format(s, " table_id=");
  944|  24.1k|        ofputil_format_table(public->table_id, table_map, s);
  945|  24.1k|    }
  946|       |
  947|   113k|    if (public->cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|   113k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (947:9): [True: 2.66k, False: 110k]
  ------------------
  948|  2.66k|        ds_put_format(s, " cookie=0x%"PRIx64, ntohll(public->cookie));
  949|  2.66k|    }
  950|       |
  951|   113k|    ds_put_format(s, " total_len=%"PRIuSIZE" ", total_len);
  952|       |
  953|   113k|    match_format(&public->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|   113k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  954|       |
  955|   113k|    ds_put_format(s, " (via %s)",
  956|   113k|                  ofputil_packet_in_reason_to_string(public->reason,
  957|   113k|                                                     reasonbuf,
  958|   113k|                                                     sizeof reasonbuf));
  959|       |
  960|   113k|    ds_put_format(s, " data_len=%"PRIuSIZE, public->packet_len);
  ------------------
  |  |  133|   113k|#define PRIuSIZE "zu"
  ------------------
  961|   113k|    if (buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (961:9): [True: 14.0k, False: 99.5k]
  ------------------
  962|  14.0k|        ds_put_format(s, " (unbuffered)");
  963|  14.0k|        if (total_len != public->packet_len) {
  ------------------
  |  Branch (963:13): [True: 9.09k, False: 4.97k]
  ------------------
  964|  9.09k|            ds_put_format(s, " (***total_len != data_len***)");
  965|  9.09k|        }
  966|  99.5k|    } else {
  967|  99.5k|        ds_put_format(s, " buffer=0x%08"PRIx32, buffer_id);
  968|  99.5k|        if (total_len < public->packet_len) {
  ------------------
  |  Branch (968:13): [True: 17.5k, False: 81.9k]
  ------------------
  969|  17.5k|            ds_put_format(s, " (***total_len < data_len***)");
  970|  17.5k|        }
  971|  99.5k|    }
  972|   113k|    ds_put_char(s, '\n');
  973|       |
  974|   113k|    if (public->userdata_len) {
  ------------------
  |  Branch (974:9): [True: 1.36k, False: 112k]
  ------------------
  975|  1.36k|        ds_put_cstr(s, " userdata=");
  976|  1.36k|        format_hex_arg(s, pin->base.userdata, pin->base.userdata_len);
  977|  1.36k|        ds_put_char(s, '\n');
  978|  1.36k|    }
  979|       |
  980|   113k|    if (!uuid_is_zero(&pin->bridge)) {
  ------------------
  |  Branch (980:9): [True: 156, False: 113k]
  ------------------
  981|    156|        ds_put_format(s, " continuation.bridge="UUID_FMT"\n",
  982|    156|                      UUID_ARGS(&pin->bridge));
  ------------------
  |  |   38|    156|    ((unsigned int) ((UUID)->parts[0])),            \
  |  |   39|    156|    ((unsigned int) ((UUID)->parts[1] >> 16)),      \
  |  |   40|    156|    ((unsigned int) ((UUID)->parts[1] & 0xffff)),   \
  |  |   41|    156|    ((unsigned int) ((UUID)->parts[2] >> 16)),      \
  |  |   42|    156|    ((unsigned int) ((UUID)->parts[2] & 0xffff)),   \
  |  |   43|    156|    ((unsigned int) ((UUID)->parts[3]))
  ------------------
  983|    156|    }
  984|       |
  985|   113k|    if (pin->stack_size) {
  ------------------
  |  Branch (985:9): [True: 1.71k, False: 111k]
  ------------------
  986|  1.71k|        ds_put_cstr(s, " continuation.stack=(top)");
  987|       |
  988|  1.71k|        struct ofpbuf pin_stack;
  989|  1.71k|        ofpbuf_use_const(&pin_stack, pin->stack, pin->stack_size);
  990|       |
  991|  3.68k|        while (pin_stack.size) {
  ------------------
  |  Branch (991:16): [True: 1.96k, False: 1.71k]
  ------------------
  992|  1.96k|            uint8_t len;
  993|  1.96k|            uint8_t *val = nx_stack_pop(&pin_stack, &len);
  994|  1.96k|            union mf_subvalue value;
  995|       |
  996|  1.96k|            ds_put_char(s, ' ');
  997|  1.96k|            memset(&value, 0, sizeof value - len);
  998|  1.96k|            memcpy(&value.u8[sizeof value - len], val, len);
  999|  1.96k|            mf_subvalue_format(&value, s);
 1000|  1.96k|        }
 1001|  1.71k|        ds_put_cstr(s, " (bottom)\n");
 1002|  1.71k|    }
 1003|       |
 1004|   113k|    if (pin->mirrors) {
  ------------------
  |  Branch (1004:9): [True: 2.06k, False: 111k]
  ------------------
 1005|  2.06k|        ds_put_format(s, " continuation.mirrors=0x%"PRIx32"\n",
 1006|  2.06k|                      pin->mirrors);
 1007|  2.06k|    }
 1008|       |
 1009|   113k|    if (pin->conntracked) {
  ------------------
  |  Branch (1009:9): [True: 95, False: 113k]
  ------------------
 1010|     95|        ds_put_cstr(s, " continuation.conntracked=true\n");
 1011|     95|    }
 1012|       |
 1013|   113k|    struct ofpact_format_params fp = {
 1014|   113k|        .port_map = port_map,
 1015|   113k|        .table_map = table_map,
 1016|   113k|        .s = s,
 1017|   113k|    };
 1018|       |
 1019|   113k|    if (pin->actions_len) {
  ------------------
  |  Branch (1019:9): [True: 7.96k, False: 105k]
  ------------------
 1020|  7.96k|        ds_put_cstr(s, " continuation.actions=");
 1021|  7.96k|        ofpacts_format(pin->actions, pin->actions_len, &fp);
 1022|  7.96k|        ds_put_char(s, '\n');
 1023|  7.96k|    }
 1024|       |
 1025|   113k|    if (pin->action_set_len) {
  ------------------
  |  Branch (1025:9): [True: 6.60k, False: 106k]
  ------------------
 1026|  6.60k|        ds_put_cstr(s, " continuation.action_set=");
 1027|  6.60k|        ofpacts_format(pin->action_set, pin->action_set_len, &fp);
 1028|  6.60k|        ds_put_char(s, '\n');
 1029|  6.60k|    }
 1030|       |
 1031|   113k|    if (pin->odp_port) {
  ------------------
  |  Branch (1031:9): [True: 1.53k, False: 112k]
  ------------------
 1032|  1.53k|        ds_put_format(s, " continuation.odp_port=%"PRIu32, pin->odp_port);
 1033|  1.53k|        ds_put_char(s, '\n');
 1034|  1.53k|    }
 1035|       |
 1036|   113k|    if (verbosity > 0) {
  ------------------
  |  Branch (1036:9): [True: 113k, False: 0]
  ------------------
 1037|   113k|        char *packet = ofp_packet_to_string(
 1038|   113k|            public->packet, public->packet_len,
 1039|   113k|            public->flow_metadata.flow.packet_type);
 1040|   113k|        ds_put_cstr(s, packet);
 1041|   113k|        free(packet);
 1042|   113k|    }
 1043|   113k|    if (verbosity > 2) {
  ------------------
  |  Branch (1043:9): [True: 0, False: 113k]
  ------------------
 1044|      0|        ds_put_hex_dump(s, public->packet, public->packet_len, 0, false);
 1045|      0|    }
 1046|   113k|}
ofputil_packet_in_private_destroy:
 1056|   117k|{
 1057|   117k|    if (pin) {
  ------------------
  |  Branch (1057:9): [True: 117k, False: 0]
  ------------------
 1058|   117k|        free(pin->stack);
 1059|   117k|        free(pin->actions);
 1060|   117k|        free(pin->action_set);
 1061|   117k|    }
 1062|   117k|}
ofputil_decode_packet_out:
 1080|   330k|{
 1081|   330k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1082|   330k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1083|       |
 1084|   330k|    ofpbuf_clear(ofpacts);
 1085|   330k|    match_init_catchall(&po->flow_metadata);
 1086|   330k|    if (raw == OFPRAW_OFPT15_PACKET_OUT) {
  ------------------
  |  Branch (1086:9): [True: 135k, False: 194k]
  ------------------
 1087|   135k|        enum ofperr error;
 1088|   135k|        const struct ofp15_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1089|       |
 1090|   135k|        po->buffer_id = ntohl(opo->buffer_id);
 1091|   135k|        error = oxm_pull_match_loose(&b, true, tun_table, &po->flow_metadata);
 1092|   135k|        if (error) {
  ------------------
  |  Branch (1092:13): [True: 84.0k, False: 51.6k]
  ------------------
 1093|  84.0k|            return error;
 1094|  84.0k|        }
 1095|       |
 1096|  51.6k|        if (!po->flow_metadata.wc.masks.in_port.ofp_port) {
  ------------------
  |  Branch (1096:13): [True: 35.3k, False: 16.2k]
  ------------------
 1097|  35.3k|            return OFPERR_OFPBRC_BAD_PORT;
 1098|  35.3k|        }
 1099|       |
 1100|  16.2k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1101|  16.2k|                                              oh->version, NULL, NULL,
 1102|  16.2k|                                              ofpacts);
 1103|  16.2k|        if (error) {
  ------------------
  |  Branch (1103:13): [True: 9.10k, False: 7.19k]
  ------------------
 1104|  9.10k|            return error;
 1105|  9.10k|        }
 1106|   194k|    } else if (raw == OFPRAW_OFPT11_PACKET_OUT) {
  ------------------
  |  Branch (1106:16): [True: 168k, False: 26.7k]
  ------------------
 1107|   168k|        enum ofperr error;
 1108|   168k|        ofp_port_t in_port;
 1109|   168k|        const struct ofp11_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1110|       |
 1111|   168k|        po->buffer_id = ntohl(opo->buffer_id);
 1112|   168k|        error = ofputil_port_from_ofp11(opo->in_port, &in_port);
 1113|   168k|        if (error) {
  ------------------
  |  Branch (1113:13): [True: 13.8k, False: 154k]
  ------------------
 1114|  13.8k|            return error;
 1115|  13.8k|        }
 1116|   154k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1117|   154k|        match_set_in_port(&po->flow_metadata, in_port);
 1118|       |
 1119|   154k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1120|   154k|                                              oh->version, NULL, NULL,
 1121|   154k|                                              ofpacts);
 1122|   154k|        if (error) {
  ------------------
  |  Branch (1122:13): [True: 112k, False: 41.3k]
  ------------------
 1123|   112k|            return error;
 1124|   112k|        }
 1125|   154k|    } else if (raw == OFPRAW_OFPT10_PACKET_OUT) {
  ------------------
  |  Branch (1125:16): [True: 26.7k, False: 0]
  ------------------
 1126|  26.7k|        enum ofperr error;
 1127|  26.7k|        const struct ofp10_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1128|       |
 1129|  26.7k|        po->buffer_id = ntohl(opo->buffer_id);
 1130|  26.7k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1131|  26.7k|        match_set_in_port(&po->flow_metadata, u16_to_ofp(ntohs(opo->in_port)));
 1132|       |
 1133|  26.7k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1134|  26.7k|                                              oh->version, NULL, NULL,
 1135|  26.7k|                                              ofpacts);
 1136|  26.7k|        if (error) {
  ------------------
  |  Branch (1136:13): [True: 15.5k, False: 11.2k]
  ------------------
 1137|  15.5k|            return error;
 1138|  15.5k|        }
 1139|  26.7k|    } else {
 1140|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1141|      0|    }
 1142|       |
 1143|  59.7k|    ofp_port_t in_port = po->flow_metadata.flow.in_port.ofp_port;
 1144|  59.7k|    if (ofp_to_u16(in_port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  59.7k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  59.7k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1144:9): [True: 499, False: 59.2k]
  ------------------
 1145|  59.7k|        && in_port != OFPP_LOCAL
  ------------------
  |  |   46|    499|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  60.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1145:12): [True: 463, False: 36]
  ------------------
 1146|  59.7k|        && in_port != OFPP_NONE
  ------------------
  |  |   47|    463|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  60.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1146:12): [True: 244, False: 219]
  ------------------
 1147|  59.7k|        && in_port != OFPP_CONTROLLER) {
  ------------------
  |  |   45|    244|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|    244|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1147:12): [True: 136, False: 108]
  ------------------
 1148|    136|        VLOG_WARN_RL(&rl, "packet-out has bad input port %#"PRIx32,
  ------------------
  |  |  223|    136|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    136|    do {                                                                \
  |  |  |  |  287|    136|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    136|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 136]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    136|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1149|    136|                     po->flow_metadata.flow.in_port.ofp_port);
 1150|    136|        return OFPERR_OFPBRC_BAD_PORT;
 1151|    136|    }
 1152|       |
 1153|  59.6k|    po->ofpacts = ofpacts->data;
 1154|  59.6k|    po->ofpacts_len = ofpacts->size;
 1155|       |
 1156|  59.6k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1156:9): [True: 3.36k, False: 56.2k]
  ------------------
 1157|  3.36k|        po->packet = b.data;
 1158|  3.36k|        po->packet_len = b.size;
 1159|  56.2k|    } else {
 1160|  56.2k|        po->packet = NULL;
 1161|  56.2k|        po->packet_len = 0;
 1162|  56.2k|    }
 1163|       |
 1164|  59.6k|    return 0;
 1165|  59.7k|}
ofputil_packet_out_format:
 1253|  59.6k|{
 1254|  59.6k|    ds_put_char(s, ' ');
 1255|  59.6k|    match_format(&po->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  59.6k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1256|       |
 1257|  59.6k|    ds_put_cstr(s, " actions=");
 1258|  59.6k|    struct ofpact_format_params fp = {
 1259|  59.6k|        .port_map = port_map,
 1260|  59.6k|        .table_map = table_map,
 1261|  59.6k|        .s = s,
 1262|  59.6k|    };
 1263|  59.6k|    ofpacts_format(po->ofpacts, po->ofpacts_len, &fp);
 1264|       |
 1265|  59.6k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1265:9): [True: 3.36k, False: 56.2k]
  ------------------
 1266|  3.36k|        ds_put_format(s, " data_len=%"PRIuSIZE, po->packet_len);
  ------------------
  |  |  133|  3.36k|#define PRIuSIZE "zu"
  ------------------
 1267|  3.36k|        if (verbosity > 0 && po->packet_len > 0) {
  ------------------
  |  Branch (1267:13): [True: 3.36k, False: 0]
  |  Branch (1267:30): [True: 1.24k, False: 2.12k]
  ------------------
 1268|  1.24k|            ovs_be32 po_packet_type = po->flow_metadata.flow.packet_type;
 1269|  1.24k|            char *packet = ofp_packet_to_string(po->packet, po->packet_len,
 1270|  1.24k|                                                po_packet_type);
 1271|  1.24k|            ds_put_char(s, '\n');
 1272|  1.24k|            ds_put_cstr(s, packet);
 1273|  1.24k|            free(packet);
 1274|  1.24k|        }
 1275|  3.36k|        if (verbosity > 2) {
  ------------------
  |  Branch (1275:13): [True: 0, False: 3.36k]
  ------------------
 1276|      0|            ds_put_hex_dump(s, po->packet, po->packet_len, 0, false);
 1277|      0|        }
 1278|  56.2k|    } else {
 1279|  56.2k|        ds_put_format(s, " buffer=0x%08"PRIx32, po->buffer_id);
 1280|  56.2k|    }
 1281|  59.6k|}
ofp-packet.c:decode_nx_packet_in2:
  110|  40.2k|{
  111|  40.2k|    *total_len = 0;
  112|  40.2k|    *buffer_id = UINT32_MAX;
  113|       |
  114|  40.2k|    struct ofpbuf properties;
  115|  40.2k|    ofpbuf_use_const(&properties, oh, ntohs(oh->length));
  116|  40.2k|    ofpraw_pull_assert(&properties);
  117|       |
  118|   125k|    while (properties.size > 0) {
  ------------------
  |  Branch (118:12): [True: 98.2k, False: 26.9k]
  ------------------
  119|  98.2k|        struct ofpbuf payload;
  120|  98.2k|        uint64_t type;
  121|       |
  122|  98.2k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  123|  98.2k|        if (error) {
  ------------------
  |  Branch (123:13): [True: 10.7k, False: 87.5k]
  ------------------
  124|  10.7k|            return error;
  125|  10.7k|        }
  126|       |
  127|  87.5k|        switch (type) {
  128|  17.9k|        case NXPINT_PACKET:
  ------------------
  |  Branch (128:9): [True: 17.9k, False: 69.5k]
  ------------------
  129|  17.9k|            pin->packet = payload.msg;
  130|  17.9k|            pin->packet_len = ofpbuf_msgsize(&payload);
  131|  17.9k|            break;
  132|       |
  133|  11.9k|        case NXPINT_FULL_LEN: {
  ------------------
  |  Branch (133:9): [True: 11.9k, False: 75.6k]
  ------------------
  134|  11.9k|            uint32_t u32;
  135|  11.9k|            error = ofpprop_parse_u32(&payload, &u32);
  136|  11.9k|            if (!error) {
  ------------------
  |  Branch (136:17): [True: 10.0k, False: 1.84k]
  ------------------
  137|  10.0k|                *total_len = u32;
  138|  10.0k|            }
  139|  11.9k|            break;
  140|      0|        }
  141|       |
  142|  8.40k|        case NXPINT_BUFFER_ID:
  ------------------
  |  Branch (142:9): [True: 8.40k, False: 79.1k]
  ------------------
  143|  8.40k|            error = ofpprop_parse_u32(&payload, buffer_id);
  144|  8.40k|            break;
  145|       |
  146|    190|        case NXPINT_TABLE_ID:
  ------------------
  |  Branch (146:9): [True: 190, False: 87.3k]
  ------------------
  147|    190|            error = ofpprop_parse_u8(&payload, &pin->table_id);
  148|    190|            break;
  149|       |
  150|     94|        case NXPINT_COOKIE:
  ------------------
  |  Branch (150:9): [True: 94, False: 87.4k]
  ------------------
  151|     94|            error = ofpprop_parse_be64(&payload, &pin->cookie);
  152|     94|            break;
  153|       |
  154|  1.16k|        case NXPINT_REASON: {
  ------------------
  |  Branch (154:9): [True: 1.16k, False: 86.3k]
  ------------------
  155|  1.16k|            uint8_t reason;
  156|  1.16k|            error = ofpprop_parse_u8(&payload, &reason);
  157|  1.16k|            if (!error) {
  ------------------
  |  Branch (157:17): [True: 1.13k, False: 34]
  ------------------
  158|  1.13k|                pin->reason = reason;
  159|  1.13k|            }
  160|  1.16k|            break;
  161|      0|        }
  162|       |
  163|  17.7k|        case NXPINT_METADATA:
  ------------------
  |  Branch (163:9): [True: 17.7k, False: 69.7k]
  ------------------
  164|  17.7k|            error = oxm_decode_match(payload.msg, ofpbuf_msgsize(&payload),
  165|  17.7k|                                     loose, tun_table, vl_mff_map,
  166|  17.7k|                                     &pin->flow_metadata);
  167|  17.7k|            pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  168|  17.7k|            break;
  169|       |
  170|  4.18k|        case NXPINT_USERDATA:
  ------------------
  |  Branch (170:9): [True: 4.18k, False: 83.3k]
  ------------------
  171|  4.18k|            pin->userdata = payload.msg;
  172|  4.18k|            pin->userdata_len = ofpbuf_msgsize(&payload);
  173|  4.18k|            break;
  174|       |
  175|  16.1k|        case NXPINT_CONTINUATION:
  ------------------
  |  Branch (175:9): [True: 16.1k, False: 71.3k]
  ------------------
  176|  16.1k|            if (continuation) {
  ------------------
  |  Branch (176:17): [True: 16.1k, False: 0]
  ------------------
  177|  16.1k|                error = ofpprop_parse_nested(&payload, continuation);
  178|  16.1k|            }
  179|  16.1k|            break;
  180|       |
  181|  9.64k|        default:
  ------------------
  |  Branch (181:9): [True: 9.64k, False: 77.9k]
  ------------------
  182|  9.64k|            error = OFPPROP_UNKNOWN(loose, "NX_PACKET_IN2", type);
  ------------------
  |  |  140|  9.64k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  183|  9.64k|            break;
  184|  87.5k|        }
  185|  87.5k|        if (error) {
  ------------------
  |  Branch (185:13): [True: 2.54k, False: 85.0k]
  ------------------
  186|  2.54k|            return error;
  187|  2.54k|        }
  188|  87.5k|    }
  189|       |
  190|  26.9k|    if (!pin->packet_len) {
  ------------------
  |  Branch (190:9): [True: 9.79k, False: 17.1k]
  ------------------
  191|  9.79k|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 lacks packet");
  ------------------
  |  |  223|  9.79k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  9.79k|    do {                                                                \
  |  |  |  |  287|  9.79k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  9.79k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 9.79k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  9.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  9.79k|        return OFPERR_OFPBRC_BAD_LEN;
  193|  17.1k|    } else if (!*total_len) {
  ------------------
  |  Branch (193:16): [True: 8.37k, False: 8.80k]
  ------------------
  194|  8.37k|        *total_len = pin->packet_len;
  195|  8.80k|    } else if (*total_len < pin->packet_len) {
  ------------------
  |  Branch (195:16): [True: 116, False: 8.68k]
  ------------------
  196|    116|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 claimed full_len < len");
  ------------------
  |  |  223|    116|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    116|    do {                                                                \
  |  |  |  |  287|    116|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    116|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 116]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    116|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|    116|        return OFPERR_OFPBRC_BAD_LEN;
  198|    116|    }
  199|       |
  200|  17.0k|    return 0;
  201|  26.9k|}
ofp-packet.c:parse_stack_prop:
  776|  2.07k|{
  777|  2.07k|    unsigned int len = ofpbuf_msgsize(property);
  778|  2.07k|    if (len > sizeof(union mf_subvalue)) {
  ------------------
  |  Branch (778:9): [True: 1, False: 2.07k]
  ------------------
  779|      1|        VLOG_WARN_RL(&rl, "NXCPT_STACK property has bad length %u",
  ------------------
  |  |  223|      1|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      1|    do {                                                                \
  |  |  |  |  287|      1|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      1|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      1|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|      1|                     len);
  781|      1|        return OFPERR_OFPBPC_BAD_LEN;
  782|      1|    }
  783|  2.07k|    nx_stack_push_bottom(stack, property->msg, len);
  784|  2.07k|    return 0;
  785|  2.07k|}
ofp-packet.c:parse_actions_property:
  790|  17.4k|{
  791|  17.4k|    if (!ofpbuf_try_pull(property, ROUND_UP(ofpbuf_headersize(property), 8))) {
  ------------------
  |  |  299|  17.4k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  17.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 506, False: 16.9k]
  ------------------
  792|    506|        VLOG_WARN_RL(&rl, "actions property has bad length %"PRIu32,
  ------------------
  |  |  223|    506|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    506|    do {                                                                \
  |  |  |  |  287|    506|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    506|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 506]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    506|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    506|                     property->size);
  794|    506|        return OFPERR_OFPBPC_BAD_LEN;
  795|    506|    }
  796|       |
  797|  16.9k|    return ofpacts_pull_openflow_actions(property, property->size,
  798|  16.9k|                                         version, NULL, NULL, ofpacts);
  799|  17.4k|}
ofp-packet.c:format_hex_arg:
  921|  1.36k|{
  922|  8.40k|    for (size_t i = 0; i < len; i++) {
  ------------------
  |  Branch (922:24): [True: 7.03k, False: 1.36k]
  ------------------
  923|  7.03k|        if (i) {
  ------------------
  |  Branch (923:13): [True: 5.67k, False: 1.36k]
  ------------------
  924|  5.67k|            ds_put_char(s, '.');
  925|  5.67k|        }
  926|  7.03k|        ds_put_format(s, "%02"PRIx8, data[i]);
  927|  7.03k|    }
  928|  1.36k|}

ofputil_port_map_get_name:
   53|   361k|{
   54|   361k|    struct namemap_node *node
   55|   361k|        = (map
  ------------------
  |  Branch (55:12): [True: 0, False: 361k]
  ------------------
   56|   361k|           ? namemap_find_by_number(&map->map, ofp_to_u16(ofp_port))
   57|   361k|           : NULL);
   58|   361k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (58:12): [True: 0, False: 361k]
  |  Branch (58:20): [True: 0, False: 0]
  ------------------
   59|   361k|}
ofputil_port_from_ofp11:
   84|   335k|{
   85|   335k|    uint32_t ofp11_port_h = ntohl(ofp11_port);
   86|       |
   87|   335k|    if (ofp11_port_h < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|   335k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   335k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (87:9): [True: 265k, False: 70.4k]
  ------------------
   88|   265k|        *ofp10_port = u16_to_ofp(ofp11_port_h);
   89|   265k|        return 0;
   90|   265k|    } else if (ofp11_port_h >= ofp11_to_u32(OFPP11_MAX)) {
  ------------------
  |  |   71|  70.4k|#define OFPP11_MAX    OFP11_PORT_C(0xffffff00)
  |  |  ------------------
  |  |  |  |  159|  70.4k|#define OFP11_PORT_C(X) ((OVS_FORCE ofp11_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (90:16): [True: 32.0k, False: 38.3k]
  ------------------
   91|  32.0k|        *ofp10_port = u16_to_ofp(ofp11_port_h - OFPP11_OFFSET);
  ------------------
  |  |   72|  32.0k|#define OFPP11_OFFSET 0xffff0000    /* OFPP11_MAX - OFPP_MAX */
  ------------------
   92|  32.0k|        return 0;
   93|  38.3k|    } else {
   94|  38.3k|        *ofp10_port = OFPP_NONE;
  ------------------
  |  |   47|  38.3k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  38.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
   95|       |
   96|  38.3k|        static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  38.3k|        {                                                                 \
  |  |  111|  38.3k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   153k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  38.3k|            0,                              /* first_dropped */           \
  |  |  113|  38.3k|            0,                              /* last_dropped */            \
  |  |  114|  38.3k|            0,                              /* n_dropped */               \
  |  |  115|  38.3k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  38.3k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  38.3k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  38.3k|        }
  ------------------
   97|  38.3k|        VLOG_WARN_RL(&rll, "port %"PRIu32" is outside the supported "
  ------------------
  |  |  223|  38.3k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  38.3k|    do {                                                                \
  |  |  |  |  287|  38.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  38.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 38.3k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  38.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  38.3k|                     "range 0 through %d or 0x%"PRIx32" through 0x%"PRIx32,
   99|  38.3k|                     ofp11_port_h, ofp_to_u16(OFPP_MAX) - 1,
  100|  38.3k|                     ofp11_to_u32(OFPP11_MAX), UINT32_MAX);
  101|       |
  102|  38.3k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  103|  38.3k|    }
  104|   335k|}
ofputil_port_to_ofp11:
  112|  23.1k|{
  113|  23.1k|    return htonl(ofp_to_u16(ofp10_port) < ofp_to_u16(OFPP_MAX)
  114|  23.1k|                 ? ofp_to_u16(ofp10_port)
  115|  23.1k|                 : ofp_to_u16(ofp10_port) + OFPP11_OFFSET);
  116|  23.1k|}
ofputil_port_get_reserved_name:
  229|   412k|{
  230|   412k|    switch (port) {
  231|      0|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  232|      0|        OFPUTIL_NAMED_PORTS
  ------------------
  |  |  119|    786|        OFPUTIL_NAMED_PORT(IN_PORT)             \
  |  |  ------------------
  |  |  |  |  231|    786|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 786, False: 412k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|  16.5k|        OFPUTIL_NAMED_PORT(TABLE)               \
  |  |  ------------------
  |  |  |  |  231|  16.5k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 16.5k, False: 396k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  16.5k|        OFPUTIL_NAMED_PORT(NORMAL)              \
  |  |  ------------------
  |  |  |  |  231|    455|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 455, False: 412k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|  1.06k|        OFPUTIL_NAMED_PORT(FLOOD)               \
  |  |  ------------------
  |  |  |  |  231|  1.06k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.06k, False: 411k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|  1.45k|        OFPUTIL_NAMED_PORT(ALL)                 \
  |  |  ------------------
  |  |  |  |  231|  1.45k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.45k, False: 411k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|  6.16k|        OFPUTIL_NAMED_PORT(CONTROLLER)          \
  |  |  ------------------
  |  |  |  |  231|  6.16k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 6.16k, False: 406k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|  6.16k|        OFPUTIL_NAMED_PORT(LOCAL)               \
  |  |  ------------------
  |  |  |  |  231|  1.56k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.56k, False: 411k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|  22.1k|        OFPUTIL_NAMED_PORT(ANY)                 \
  |  |  ------------------
  |  |  |  |  231|  22.1k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 22.1k, False: 390k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|  22.1k|        OFPUTIL_NAMED_PORT(UNSET)
  |  |  ------------------
  |  |  |  |  231|  1.39k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.39k, False: 411k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      0|#undef OFPUTIL_NAMED_PORT
  234|       |
  235|   361k|    default:
  ------------------
  |  Branch (235:5): [True: 361k, False: 51.5k]
  ------------------
  236|   361k|        return NULL;
  237|   412k|    }
  238|   412k|}
ofputil_format_port:
  246|   412k|{
  247|   412k|    const char *reserved_name = ofputil_port_get_reserved_name(port);
  248|   412k|    if (reserved_name) {
  ------------------
  |  Branch (248:9): [True: 51.5k, False: 361k]
  ------------------
  249|  51.5k|        ds_put_cstr(s, reserved_name);
  250|  51.5k|        return;
  251|  51.5k|    }
  252|       |
  253|   361k|    const char *port_name = ofputil_port_map_get_name(port_map, port);
  254|   361k|    if (port_name) {
  ------------------
  |  Branch (254:9): [True: 0, False: 361k]
  ------------------
  255|      0|        namemap_put_name(port_name, s);
  256|      0|        return;
  257|      0|    }
  258|       |
  259|   361k|    ds_put_format(s, "%"PRIu32, port);
  260|   361k|}
ofputil_port_config_format:
  311|  40.1k|{
  312|  40.1k|    ofp_print_bit_names(s, config, ofputil_port_config_to_name, ' ');
  313|  40.1k|    ds_put_char(s, '\n');
  314|  40.1k|}
ofputil_port_state_format:
  341|  35.2k|{
  342|  35.2k|    enum ofputil_port_state stp_state;
  343|       |
  344|       |    /* The STP state is a 2-bit field so it doesn't fit in with the bitmask
  345|       |     * pattern.  We have to special case it.
  346|       |     *
  347|       |     * OVS doesn't support STP, so this field will always be 0 if we are
  348|       |     * talking to OVS, so we'd always print STP_LISTEN in that case.
  349|       |     * Therefore, we don't print anything at all if the value is STP_LISTEN, to
  350|       |     * avoid confusing users. */
  351|  35.2k|    stp_state = state & OFPUTIL_PS_STP_MASK;
  352|  35.2k|    if (stp_state) {
  ------------------
  |  Branch (352:9): [True: 14.9k, False: 20.3k]
  ------------------
  353|  14.9k|        ds_put_cstr(s, (stp_state == OFPUTIL_PS_STP_LEARN ? "STP_LEARN"
  ------------------
  |  Branch (353:25): [True: 3.11k, False: 11.8k]
  ------------------
  354|  14.9k|                        : stp_state == OFPUTIL_PS_STP_FORWARD ? "STP_FORWARD"
  ------------------
  |  Branch (354:27): [True: 2.10k, False: 9.71k]
  ------------------
  355|  11.8k|                        : "STP_BLOCK"));
  356|  14.9k|        state &= ~OFPUTIL_PS_STP_MASK;
  357|  14.9k|        if (state) {
  ------------------
  |  Branch (357:13): [True: 10.5k, False: 4.33k]
  ------------------
  358|  10.5k|            ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  359|  10.5k|        }
  360|  20.3k|    } else {
  361|  20.3k|        ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  362|  20.3k|    }
  363|  35.2k|    ds_put_char(s, '\n');
  364|  35.2k|}
ofputil_decode_port_desc_stats_request:
  662|    291|{
  663|    291|    struct ofpbuf b = ofpbuf_const_initializer(request,
  664|    291|                                               ntohs(request->length));
  665|    291|    enum ofpraw raw = ofpraw_pull_assert(&b);
  666|    291|    if (raw == OFPRAW_OFPST10_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (666:9): [True: 99, False: 192]
  ------------------
  667|     99|        *port = OFPP_ANY;
  ------------------
  |  |   80|     99|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|     99|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|     99|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|     99|        return 0;
  669|    192|    } else if (raw == OFPRAW_OFPST15_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (669:16): [True: 192, False: 0]
  ------------------
  670|    192|        ovs_be32 *ofp11_port;
  671|       |
  672|    192|        ofp11_port = ofpbuf_pull(&b, sizeof *ofp11_port);
  673|    192|        return ofputil_port_from_ofp11(*ofp11_port, port);
  674|    192|    } else {
  675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  676|      0|    }
  677|    291|}
ofputil_pull_phy_port:
  728|  49.0k|{
  729|  49.0k|    memset(pp, 0, sizeof *pp);
  730|       |
  731|  49.0k|    switch (ofp_version) {
  732|  32.8k|    case OFP10_VERSION: {
  ------------------
  |  Branch (732:5): [True: 32.8k, False: 16.1k]
  ------------------
  733|  32.8k|        const struct ofp10_phy_port *opp = ofpbuf_try_pull(b, sizeof *opp);
  734|  32.8k|        return opp ? ofputil_decode_ofp10_phy_port(pp, opp) : EOF;
  ------------------
  |  Branch (734:16): [True: 30.2k, False: 2.64k]
  ------------------
  735|      0|    }
  736|  5.74k|    case OFP11_VERSION:
  ------------------
  |  Branch (736:5): [True: 5.74k, False: 43.2k]
  ------------------
  737|  6.13k|    case OFP12_VERSION:
  ------------------
  |  Branch (737:5): [True: 389, False: 48.6k]
  ------------------
  738|  7.72k|    case OFP13_VERSION: {
  ------------------
  |  Branch (738:5): [True: 1.58k, False: 47.4k]
  ------------------
  739|  7.72k|        const struct ofp11_port *op = ofpbuf_try_pull(b, sizeof *op);
  740|  7.72k|        return op ? ofputil_decode_ofp11_port(pp, op) : EOF;
  ------------------
  |  Branch (740:16): [True: 5.83k, False: 1.89k]
  ------------------
  741|  6.13k|    }
  742|  6.13k|    case OFP14_VERSION:
  ------------------
  |  Branch (742:5): [True: 6.13k, False: 42.8k]
  ------------------
  743|  8.39k|    case OFP15_VERSION:
  ------------------
  |  Branch (743:5): [True: 2.25k, False: 46.7k]
  ------------------
  744|  8.39k|        return b->size ? ofputil_pull_ofp14_port(pp, b) : EOF;
  ------------------
  |  Branch (744:16): [True: 4.86k, False: 3.52k]
  ------------------
  745|      0|    default:
  ------------------
  |  Branch (745:5): [True: 0, False: 49.0k]
  ------------------
  746|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  747|  49.0k|    }
  748|  49.0k|}
ofputil_phy_port_format:
  752|  35.2k|{
  753|  35.2k|    char name[sizeof port->name];
  754|  35.2k|    int j;
  755|       |
  756|  35.2k|    memcpy(name, port->name, sizeof name);
  757|  60.2k|    for (j = 0; j < sizeof name - 1; j++) {
  ------------------
  |  Branch (757:17): [True: 59.3k, False: 844]
  ------------------
  758|  59.3k|        if (!isprint((unsigned char) name[j])) {
  ------------------
  |  Branch (758:13): [True: 34.4k, False: 24.9k]
  ------------------
  759|  34.4k|            break;
  760|  34.4k|        }
  761|  59.3k|    }
  762|  35.2k|    name[j] = '\0';
  763|       |
  764|  35.2k|    ds_put_char(s, ' ');
  765|  35.2k|    ofputil_format_port(port->port_no, NULL, s);
  766|  35.2k|    ds_put_format(s, "(%s): addr:"ETH_ADDR_FMT"\n",
  767|  35.2k|                  name, ETH_ADDR_ARGS(port->hw_addr));
  ------------------
  |  |  371|  35.2k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  35.2k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  768|       |
  769|  35.2k|    ds_put_cstr(s, "     config:     ");
  770|  35.2k|    ofputil_port_config_format(s, port->config);
  771|       |
  772|  35.2k|    ds_put_cstr(s, "     state:      ");
  773|  35.2k|    ofputil_port_state_format(s, port->state);
  774|       |
  775|  35.2k|    if (port->curr) {
  ------------------
  |  Branch (775:9): [True: 30.1k, False: 5.10k]
  ------------------
  776|  30.1k|        ds_put_format(s, "     current:    ");
  777|  30.1k|        netdev_features_format(s, port->curr);
  778|  30.1k|    }
  779|  35.2k|    if (port->advertised) {
  ------------------
  |  Branch (779:9): [True: 30.8k, False: 4.39k]
  ------------------
  780|  30.8k|        ds_put_format(s, "     advertised: ");
  781|  30.8k|        netdev_features_format(s, port->advertised);
  782|  30.8k|    }
  783|  35.2k|    if (port->supported) {
  ------------------
  |  Branch (783:9): [True: 29.5k, False: 5.66k]
  ------------------
  784|  29.5k|        ds_put_format(s, "     supported:  ");
  785|  29.5k|        netdev_features_format(s, port->supported);
  786|  29.5k|    }
  787|  35.2k|    if (port->peer) {
  ------------------
  |  Branch (787:9): [True: 30.9k, False: 4.29k]
  ------------------
  788|  30.9k|        ds_put_format(s, "     peer:       ");
  789|  30.9k|        netdev_features_format(s, port->peer);
  790|  30.9k|    }
  791|  35.2k|    ds_put_format(s, "     speed: %"PRIu32" Mbps now, "
  792|  35.2k|                  "%"PRIu32" Mbps max\n",
  793|  35.2k|                  port->curr_speed / UINT32_C(1000),
  794|  35.2k|                  port->max_speed / UINT32_C(1000));
  795|  35.2k|}
ofputil_phy_ports_format:
  814|  9.95k|{
  815|  9.95k|    struct ofputil_phy_port *ports;
  816|  9.95k|    size_t allocated_ports, n_ports;
  817|  9.95k|    int retval;
  818|  9.95k|    size_t i;
  819|       |
  820|  9.95k|    ports = NULL;
  821|  9.95k|    allocated_ports = 0;
  822|  42.6k|    for (n_ports = 0; ; n_ports++) {
  823|  42.6k|        if (n_ports >= allocated_ports) {
  ------------------
  |  Branch (823:13): [True: 16.8k, False: 25.8k]
  ------------------
  824|  16.8k|            ports = x2nrealloc(ports, &allocated_ports, sizeof *ports);
  825|  16.8k|        }
  826|       |
  827|  42.6k|        retval = ofputil_pull_phy_port(ofp_version, b, &ports[n_ports]);
  828|  42.6k|        if (retval) {
  ------------------
  |  Branch (828:13): [True: 9.95k, False: 32.7k]
  ------------------
  829|  9.95k|            break;
  830|  9.95k|        }
  831|  42.6k|    }
  832|       |
  833|  9.95k|    qsort(ports, n_ports, sizeof *ports, compare_ports);
  834|  42.6k|    for (i = 0; i < n_ports; i++) {
  ------------------
  |  Branch (834:17): [True: 32.7k, False: 9.95k]
  ------------------
  835|  32.7k|        ofputil_phy_port_format(string, &ports[i]);
  836|  32.7k|    }
  837|  9.95k|    free(ports);
  838|       |
  839|  9.95k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (839:12): [True: 1.89k, False: 8.06k]
  ------------------
  840|  9.95k|}
ofputil_decode_port_status:
  849|  6.77k|{
  850|  6.77k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  851|  6.77k|    ofpraw_pull_assert(&b);
  852|       |
  853|  6.77k|    const struct ofp_port_status *ops = ofpbuf_pull(&b, sizeof *ops);
  854|  6.77k|    if (ops->reason != OFPPR_ADD &&
  ------------------
  |  Branch (854:9): [True: 1.92k, False: 4.84k]
  ------------------
  855|  6.77k|        ops->reason != OFPPR_DELETE &&
  ------------------
  |  Branch (855:9): [True: 1.44k, False: 484]
  ------------------
  856|  6.77k|        ops->reason != OFPPR_MODIFY) {
  ------------------
  |  Branch (856:9): [True: 446, False: 996]
  ------------------
  857|    446|        return OFPERR_NXBRC_BAD_REASON;
  858|    446|    }
  859|  6.32k|    ps->reason = ops->reason;
  860|       |
  861|  6.32k|    int retval = ofputil_pull_phy_port(oh->version, &b, &ps->desc);
  862|  6.32k|    ovs_assert(retval != EOF);
  ------------------
  |  |   58|  6.32k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  863|  6.32k|    return retval;
  864|  6.77k|}
ofputil_port_status_format:
  910|  2.53k|{
  911|  2.53k|    if (ps->reason == OFPPR_ADD) {
  ------------------
  |  Branch (911:9): [True: 2.14k, False: 393]
  ------------------
  912|  2.14k|        ds_put_format(s, " ADD:");
  913|  2.14k|    } else if (ps->reason == OFPPR_DELETE) {
  ------------------
  |  Branch (913:16): [True: 314, False: 79]
  ------------------
  914|    314|        ds_put_format(s, " DEL:");
  915|    314|    } else if (ps->reason == OFPPR_MODIFY) {
  ------------------
  |  Branch (915:16): [True: 79, False: 0]
  ------------------
  916|     79|        ds_put_format(s, " MOD:");
  917|     79|    }
  918|       |
  919|  2.53k|    ofputil_phy_port_format(s, &ps->desc);
  920|  2.53k|}
ofputil_decode_port_mod:
 1022|  10.6k|{
 1023|  10.6k|    memset(pm, 0, sizeof *pm);
 1024|       |
 1025|  10.6k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1026|  10.6k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1027|       |
 1028|  10.6k|    enum ofperr error;
 1029|  10.6k|    if (raw == OFPRAW_OFPT10_PORT_MOD) {
  ------------------
  |  Branch (1029:9): [True: 651, False: 10.0k]
  ------------------
 1030|    651|        error = ofputil_decode_ofp10_port_mod(b.data, pm);
 1031|  10.0k|    } else if (raw == OFPRAW_OFPT11_PORT_MOD) {
  ------------------
  |  Branch (1031:16): [True: 1.59k, False: 8.44k]
  ------------------
 1032|  1.59k|        error = ofputil_decode_ofp11_port_mod(b.data, pm);
 1033|  8.44k|    } else if (raw == OFPRAW_OFPT14_PORT_MOD) {
  ------------------
  |  Branch (1033:16): [True: 8.44k, False: 0]
  ------------------
 1034|  8.44k|        error = ofputil_decode_ofp14_port_mod(&b, loose, pm);
 1035|  8.44k|    } else {
 1036|      0|        error = OFPERR_OFPBRC_BAD_TYPE;
 1037|      0|    }
 1038|       |
 1039|  10.6k|    pm->config &= pm->mask;
 1040|  10.6k|    return error;
 1041|  10.6k|}
ofputil_port_mod_format:
 1108|  2.45k|{
 1109|  2.45k|    ds_put_cstr(s, " port: ");
 1110|  2.45k|    ofputil_format_port(pm->port_no, port_map, s);
 1111|  2.45k|    ds_put_format(s, ": addr:"ETH_ADDR_FMT"\n",
 1112|  2.45k|                  ETH_ADDR_ARGS(pm->hw_addr));
  ------------------
  |  |  371|  2.45k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  2.45k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1113|       |
 1114|  2.45k|    ds_put_cstr(s, "     config: ");
 1115|  2.45k|    ofputil_port_config_format(s, pm->config);
 1116|       |
 1117|  2.45k|    ds_put_cstr(s, "     mask:   ");
 1118|  2.45k|    ofputil_port_config_format(s, pm->mask);
 1119|       |
 1120|  2.45k|    ds_put_cstr(s, "     advertise: ");
 1121|  2.45k|    if (pm->advertise) {
  ------------------
  |  Branch (1121:9): [True: 1.92k, False: 524]
  ------------------
 1122|  1.92k|        netdev_features_format(s, pm->advertise);
 1123|  1.92k|    } else {
 1124|    524|        ds_put_cstr(s, "UNCHANGED\n");
 1125|    524|    }
 1126|  2.45k|}
ofputil_count_port_stats:
 1606|  11.0k|{
 1607|  11.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1608|  11.0k|    ofpraw_pull_assert(&b);
 1609|       |
 1610|  24.2k|    for (size_t n = 0; ; n++) {
 1611|  24.2k|        struct ofputil_port_stats ps;
 1612|  24.2k|        if (ofputil_decode_port_stats(&ps, &b)) {
  ------------------
  |  Branch (1612:13): [True: 11.0k, False: 13.2k]
  ------------------
 1613|  11.0k|            return n;
 1614|  11.0k|        }
 1615|  13.2k|        netdev_free_custom_stats_counters(&ps.custom_stats);
 1616|  13.2k|    }
 1617|  11.0k|}
ofputil_decode_port_stats:
 1634|  48.5k|{
 1635|  48.5k|    enum ofperr error;
 1636|  48.5k|    enum ofpraw raw;
 1637|       |
 1638|  48.5k|    memset(&(ps->stats), 0xFF, sizeof (ps->stats));
 1639|  48.5k|    memset(&(ps->custom_stats), 0, sizeof (ps->custom_stats));
 1640|       |
 1641|  48.5k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (1641:14): [True: 37.4k, False: 11.0k]
  ------------------
 1642|  48.5k|             : ofpraw_pull(&raw, msg));
 1643|  48.5k|    if (error) {
  ------------------
  |  Branch (1643:9): [True: 0, False: 48.5k]
  ------------------
 1644|      0|        return error;
 1645|      0|    }
 1646|       |
 1647|  48.5k|    if (!msg->size) {
  ------------------
  |  Branch (1647:9): [True: 12.7k, False: 35.8k]
  ------------------
 1648|  12.7k|        return EOF;
 1649|  35.8k|    } else if (raw == OFPRAW_OFPST14_PORT_REPLY) {
  ------------------
  |  Branch (1649:16): [True: 20.4k, False: 15.3k]
  ------------------
 1650|  20.4k|        return ofputil_pull_ofp14_port_stats(ps, msg);
 1651|  20.4k|    } else if (raw == OFPRAW_OFPST13_PORT_REPLY) {
  ------------------
  |  Branch (1651:16): [True: 2.26k, False: 13.0k]
  ------------------
 1652|  2.26k|        const struct ofp13_port_stats *ps13;
 1653|  2.26k|        ps13 = ofpbuf_try_pull(msg, sizeof *ps13);
 1654|  2.26k|        if (!ps13) {
  ------------------
  |  Branch (1654:13): [True: 0, False: 2.26k]
  ------------------
 1655|      0|            goto bad_len;
 1656|      0|        }
 1657|  2.26k|        return ofputil_port_stats_from_ofp13(ps, ps13);
 1658|  13.0k|    } else if (raw == OFPRAW_OFPST11_PORT_REPLY) {
  ------------------
  |  Branch (1658:16): [True: 218, False: 12.8k]
  ------------------
 1659|    218|        const struct ofp11_port_stats *ps11;
 1660|       |
 1661|    218|        ps11 = ofpbuf_try_pull(msg, sizeof *ps11);
 1662|    218|        if (!ps11) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 218]
  ------------------
 1663|      0|            goto bad_len;
 1664|      0|        }
 1665|    218|        return ofputil_port_stats_from_ofp11(ps, ps11);
 1666|  12.8k|    } else if (raw == OFPRAW_OFPST10_PORT_REPLY) {
  ------------------
  |  Branch (1666:16): [True: 12.8k, False: 0]
  ------------------
 1667|  12.8k|        const struct ofp10_port_stats *ps10;
 1668|       |
 1669|  12.8k|        ps10 = ofpbuf_try_pull(msg, sizeof *ps10);
 1670|  12.8k|        if (!ps10) {
  ------------------
  |  Branch (1670:13): [True: 0, False: 12.8k]
  ------------------
 1671|      0|            goto bad_len;
 1672|      0|        }
 1673|  12.8k|        return ofputil_port_stats_from_ofp10(ps, ps10);
 1674|  12.8k|    } else {
 1675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1676|      0|    }
 1677|       |
 1678|      0| bad_len:
 1679|      0|    VLOG_WARN_RL(&rl, "OFPST_PORT reply has %"PRIu32" leftover "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1680|      0|                 "bytes at end", msg->size);
 1681|      0|    return OFPERR_OFPBRC_BAD_LEN;
 1682|  48.5k|}
ofputil_format_port_stats:
 1712|  13.2k|{
 1713|  13.2k|    ds_put_cstr(string, "  port ");
 1714|  13.2k|    if (ofp_to_u16(ps->port_no) < 10) {
  ------------------
  |  Branch (1714:9): [True: 3.06k, False: 10.1k]
  ------------------
 1715|  3.06k|        ds_put_char(string, ' ');
 1716|  3.06k|    }
 1717|  13.2k|    ofputil_format_port(ps->port_no, port_map, string);
 1718|       |
 1719|  13.2k|    ds_put_cstr(string, ": rx ");
 1720|  13.2k|    print_port_stat(string, "pkts=", ps->stats.rx_packets, 1);
 1721|  13.2k|    print_port_stat(string, "bytes=", ps->stats.rx_bytes, 1);
 1722|  13.2k|    print_port_stat(string, "drop=", ps->stats.rx_dropped, 1);
 1723|  13.2k|    print_port_stat(string, "errs=", ps->stats.rx_errors, 1);
 1724|  13.2k|    print_port_stat(string, "frame=", ps->stats.rx_frame_errors, 1);
 1725|  13.2k|    print_port_stat(string, "over=", ps->stats.rx_over_errors, 1);
 1726|  13.2k|    print_port_stat(string, "crc=", ps->stats.rx_crc_errors, 0);
 1727|       |
 1728|  13.2k|    ds_put_cstr(string, "           tx ");
 1729|  13.2k|    print_port_stat(string, "pkts=", ps->stats.tx_packets, 1);
 1730|  13.2k|    print_port_stat(string, "bytes=", ps->stats.tx_bytes, 1);
 1731|  13.2k|    print_port_stat(string, "drop=", ps->stats.tx_dropped, 1);
 1732|  13.2k|    print_port_stat(string, "errs=", ps->stats.tx_errors, 1);
 1733|  13.2k|    print_port_stat(string, "coll=", ps->stats.collisions, 0);
 1734|       |
 1735|  13.2k|    if (ps->duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (1735:9): [True: 6.22k, False: 6.98k]
  ------------------
 1736|  6.22k|        ds_put_cstr(string, "           duration=");
 1737|  6.22k|        ofp_print_duration(string, ps->duration_sec, ps->duration_nsec);
 1738|  6.22k|        ds_put_char(string, '\n');
 1739|  6.22k|    }
 1740|  13.2k|    struct ds string_ext_stats = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   44|  13.2k|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 1741|       |
 1742|  13.2k|    ds_init(&string_ext_stats);
 1743|       |
 1744|  13.2k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1745|  13.2k|                         ps->stats.rx_1_to_64_packets);
 1746|  13.2k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1747|  13.2k|                         ps->stats.rx_65_to_127_packets);
 1748|  13.2k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1749|  13.2k|                         ps->stats.rx_128_to_255_packets);
 1750|  13.2k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1751|  13.2k|                         ps->stats.rx_256_to_511_packets);
 1752|  13.2k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1753|  13.2k|                         ps->stats.rx_512_to_1023_packets);
 1754|  13.2k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1755|  13.2k|                         ps->stats.rx_1024_to_1522_packets);
 1756|  13.2k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1757|  13.2k|                         ps->stats.rx_1523_to_max_packets);
 1758|  13.2k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1759|  13.2k|                         ps->stats.rx_broadcast_packets);
 1760|  13.2k|    print_port_stat_cond(&string_ext_stats, "undersized_errors=",
 1761|  13.2k|                         ps->stats.rx_undersized_errors);
 1762|  13.2k|    print_port_stat_cond(&string_ext_stats, "oversize_errors=",
 1763|  13.2k|                         ps->stats.rx_oversize_errors);
 1764|  13.2k|    print_port_stat_cond(&string_ext_stats, "rx_fragmented_errors=",
 1765|  13.2k|                         ps->stats.rx_fragmented_errors);
 1766|  13.2k|    print_port_stat_cond(&string_ext_stats, "rx_jabber_errors=",
 1767|  13.2k|                         ps->stats.rx_jabber_errors);
 1768|       |
 1769|  13.2k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1769:9): [True: 0, False: 13.2k]
  ------------------
 1770|       |        /* If at least one statistics counter is reported: */
 1771|      0|        ds_put_cstr(string, "           rx rfc2819 ");
 1772|      0|        ds_put_buffer(string, string_ext_stats.string,
 1773|      0|                      string_ext_stats.length);
 1774|      0|        ds_put_cstr(string, "\n");
 1775|      0|        ds_destroy(&string_ext_stats);
 1776|      0|    }
 1777|       |
 1778|  13.2k|    ds_init(&string_ext_stats);
 1779|       |
 1780|  13.2k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1781|  13.2k|                         ps->stats.tx_1_to_64_packets);
 1782|  13.2k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1783|  13.2k|                         ps->stats.tx_65_to_127_packets);
 1784|  13.2k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1785|  13.2k|                         ps->stats.tx_128_to_255_packets);
 1786|  13.2k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1787|  13.2k|                         ps->stats.tx_256_to_511_packets);
 1788|  13.2k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1789|  13.2k|                         ps->stats.tx_512_to_1023_packets);
 1790|  13.2k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1791|  13.2k|                         ps->stats.tx_1024_to_1522_packets);
 1792|  13.2k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1793|  13.2k|                         ps->stats.tx_1523_to_max_packets);
 1794|  13.2k|    print_port_stat_cond(&string_ext_stats, "multicast_packets=",
 1795|  13.2k|                         ps->stats.tx_multicast_packets);
 1796|  13.2k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1797|  13.2k|                         ps->stats.tx_broadcast_packets);
 1798|       |
 1799|  13.2k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1799:9): [True: 0, False: 13.2k]
  ------------------
 1800|       |        /* If at least one statistics counter is reported: */
 1801|      0|        ds_put_cstr(string, "           tx rfc2819 ");
 1802|      0|        ds_put_buffer(string, string_ext_stats.string,
 1803|      0|                      string_ext_stats.length);
 1804|      0|        ds_put_cstr(string, "\n");
 1805|      0|        ds_destroy(&string_ext_stats);
 1806|      0|    }
 1807|       |
 1808|  13.2k|    if (ps->custom_stats.size) {
  ------------------
  |  Branch (1808:9): [True: 1.90k, False: 11.3k]
  ------------------
 1809|  1.90k|        ds_put_cstr(string, "           CUSTOM Statistics");
 1810|  21.4k|        for (int i = 0; i < ps->custom_stats.size; i++) {
  ------------------
  |  Branch (1810:25): [True: 19.5k, False: 1.90k]
  ------------------
 1811|       |            /* 3 counters in the row */
 1812|  19.5k|            if (ps->custom_stats.counters[i].name[0]) {
  ------------------
  |  Branch (1812:17): [True: 9.92k, False: 9.59k]
  ------------------
 1813|  9.92k|                if (i % 3 == 0) {
  ------------------
  |  Branch (1813:21): [True: 3.93k, False: 5.99k]
  ------------------
 1814|  3.93k|                    ds_put_cstr(string, "\n");
 1815|  3.93k|                    ds_put_cstr(string, "                      ");
 1816|  5.99k|                } else {
 1817|  5.99k|                    ds_put_char(string, ' ');
 1818|  5.99k|                }
 1819|  9.92k|                ds_put_format(string, "%s=%"PRIu64",",
 1820|  9.92k|                              ps->custom_stats.counters[i].name,
 1821|  9.92k|                              ps->custom_stats.counters[i].value);
 1822|  9.92k|            }
 1823|  19.5k|        }
 1824|  1.90k|        ds_put_cstr(string, "\n");
 1825|  1.90k|    }
 1826|  13.2k|}
ofputil_decode_port_stats_request:
 1835|  5.50k|{
 1836|  5.50k|    switch ((enum ofp_version)request->version) {
 1837|  1.42k|    case OFP15_VERSION:
  ------------------
  |  Branch (1837:5): [True: 1.42k, False: 4.08k]
  ------------------
 1838|  1.95k|    case OFP14_VERSION:
  ------------------
  |  Branch (1838:5): [True: 536, False: 4.97k]
  ------------------
 1839|  3.64k|    case OFP13_VERSION:
  ------------------
  |  Branch (1839:5): [True: 1.68k, False: 3.82k]
  ------------------
 1840|  4.22k|    case OFP12_VERSION:
  ------------------
  |  Branch (1840:5): [True: 585, False: 4.92k]
  ------------------
 1841|  5.10k|    case OFP11_VERSION: {
  ------------------
  |  Branch (1841:5): [True: 872, False: 4.63k]
  ------------------
 1842|  5.10k|        const struct ofp11_port_stats_request *psr11 = ofpmsg_body(request);
 1843|  5.10k|        return ofputil_port_from_ofp11(psr11->port_no, ofp10_port);
 1844|  4.22k|    }
 1845|       |
 1846|    406|    case OFP10_VERSION: {
  ------------------
  |  Branch (1846:5): [True: 406, False: 5.10k]
  ------------------
 1847|    406|        const struct ofp10_port_stats_request *psr10 = ofpmsg_body(request);
 1848|    406|        *ofp10_port = u16_to_ofp(ntohs(psr10->port_no));
 1849|    406|        return 0;
 1850|  4.22k|    }
 1851|       |
 1852|      0|    default:
  ------------------
  |  Branch (1852:5): [True: 0, False: 5.50k]
  ------------------
 1853|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1854|  5.50k|    }
 1855|  5.50k|}
ofp-port.c:ofputil_port_config_to_name:
  293|   109k|{
  294|   109k|    enum ofputil_port_config pc = bit;
  295|       |
  296|   109k|    switch (pc) {
  ------------------
  |  Branch (296:13): [True: 0, False: 109k]
  ------------------
  297|  17.3k|    case OFPUTIL_PC_PORT_DOWN:    return "PORT_DOWN";
  ------------------
  |  Branch (297:5): [True: 17.3k, False: 92.3k]
  ------------------
  298|  13.9k|    case OFPUTIL_PC_NO_STP:       return "NO_STP";
  ------------------
  |  Branch (298:5): [True: 13.9k, False: 95.8k]
  ------------------
  299|  19.5k|    case OFPUTIL_PC_NO_RECV:      return "NO_RECV";
  ------------------
  |  Branch (299:5): [True: 19.5k, False: 90.1k]
  ------------------
  300|  15.8k|    case OFPUTIL_PC_NO_RECV_STP:  return "NO_RECV_STP";
  ------------------
  |  Branch (300:5): [True: 15.8k, False: 93.8k]
  ------------------
  301|  12.9k|    case OFPUTIL_PC_NO_FLOOD:     return "NO_FLOOD";
  ------------------
  |  Branch (301:5): [True: 12.9k, False: 96.8k]
  ------------------
  302|  15.5k|    case OFPUTIL_PC_NO_FWD:       return "NO_FWD";
  ------------------
  |  Branch (302:5): [True: 15.5k, False: 94.2k]
  ------------------
  303|  14.5k|    case OFPUTIL_PC_NO_PACKET_IN: return "NO_PACKET_IN";
  ------------------
  |  Branch (303:5): [True: 14.5k, False: 95.1k]
  ------------------
  304|   109k|    }
  305|       |
  306|      0|    return NULL;
  307|   109k|}
ofp-port.c:ofputil_port_state_to_name:
  320|  19.6k|{
  321|  19.6k|    enum ofputil_port_state ps = bit;
  322|       |
  323|  19.6k|    switch (ps) {
  ------------------
  |  Branch (323:13): [True: 0, False: 19.6k]
  ------------------
  324|  15.0k|    case OFPUTIL_PS_LINK_DOWN: return "LINK_DOWN";
  ------------------
  |  Branch (324:5): [True: 15.0k, False: 4.55k]
  ------------------
  325|  2.12k|    case OFPUTIL_PS_BLOCKED:   return "BLOCKED";
  ------------------
  |  Branch (325:5): [True: 2.12k, False: 17.4k]
  ------------------
  326|  2.42k|    case OFPUTIL_PS_LIVE:      return "LIVE";
  ------------------
  |  Branch (326:5): [True: 2.42k, False: 17.1k]
  ------------------
  327|       |
  328|      0|    case OFPUTIL_PS_STP_LISTEN:
  ------------------
  |  Branch (328:5): [True: 0, False: 19.6k]
  ------------------
  329|      0|    case OFPUTIL_PS_STP_LEARN:
  ------------------
  |  Branch (329:5): [True: 0, False: 19.6k]
  ------------------
  330|      0|    case OFPUTIL_PS_STP_FORWARD:
  ------------------
  |  Branch (330:5): [True: 0, False: 19.6k]
  ------------------
  331|      0|    case OFPUTIL_PS_STP_BLOCK:
  ------------------
  |  Branch (331:5): [True: 0, False: 19.6k]
  ------------------
  332|       |        /* Handled elsewhere. */
  333|      0|        return NULL;
  334|  19.6k|    }
  335|       |
  336|      0|    return NULL;
  337|  19.6k|}
ofp-port.c:ofputil_decode_ofp10_phy_port:
  429|  30.2k|{
  430|  30.2k|    pp->port_no = u16_to_ofp(ntohs(opp->port_no));
  431|  30.2k|    pp->hw_addr = opp->hw_addr;
  432|  30.2k|    ovs_strlcpy_arrays(pp->name, opp->name);
  ------------------
  |  |  225|  30.2k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  30.2k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|  30.2k|    pp->config = ntohl(opp->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  30.2k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  30.2k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  30.2k|                     OFPPC_NO_PACKET_IN)
  ------------------
  435|  30.2k|    pp->state = ntohl(opp->state) & OFPPS10_ALL;
  ------------------
  |  |   84|  30.2k|#define OFPPS10_ALL (OFPPS_LINK_DOWN | OFPPS10_STP_MASK)
  ------------------
  436|       |
  437|  30.2k|    pp->curr = netdev_port_features_from_ofp10(opp->curr);
  438|  30.2k|    pp->advertised = netdev_port_features_from_ofp10(opp->advertised);
  439|  30.2k|    pp->supported = netdev_port_features_from_ofp10(opp->supported);
  440|  30.2k|    pp->peer = netdev_port_features_from_ofp10(opp->peer);
  441|       |
  442|  30.2k|    pp->curr_speed = netdev_features_to_bps(pp->curr, 0) / 1000;
  443|  30.2k|    pp->max_speed = netdev_features_to_bps(pp->supported, 0) / 1000;
  444|       |
  445|  30.2k|    return 0;
  446|  30.2k|}
ofp-port.c:netdev_port_features_from_ofp10:
  386|   121k|{
  387|   121k|    uint32_t ofp10 = ntohl(ofp10_);
  388|   121k|    return (ofp10 & 0x7f) | ((ofp10 & 0xf80) << 4);
  389|   121k|}
ofp-port.c:ofputil_decode_ofp11_port:
  451|  5.83k|{
  452|  5.83k|    enum ofperr error;
  453|       |
  454|  5.83k|    error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  455|  5.83k|    if (error) {
  ------------------
  |  Branch (455:9): [True: 1.67k, False: 4.15k]
  ------------------
  456|  1.67k|        return error;
  457|  1.67k|    }
  458|  4.15k|    pp->hw_addr = op->hw_addr;
  459|  4.15k|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  225|  4.15k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  4.15k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|       |
  461|  4.15k|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  4.15k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  462|  4.15k|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|  4.15k|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  463|       |
  464|  4.15k|    pp->curr = netdev_port_features_from_ofp11(op->curr);
  465|  4.15k|    pp->advertised = netdev_port_features_from_ofp11(op->advertised);
  466|  4.15k|    pp->supported = netdev_port_features_from_ofp11(op->supported);
  467|  4.15k|    pp->peer = netdev_port_features_from_ofp11(op->peer);
  468|       |
  469|  4.15k|    pp->curr_speed = ntohl(op->curr_speed);
  470|  4.15k|    pp->max_speed = ntohl(op->max_speed);
  471|       |
  472|  4.15k|    return 0;
  473|  5.83k|}
ofp-port.c:netdev_port_features_from_ofp11:
  416|  18.0k|{
  417|  18.0k|    return ntohl(ofp11) & 0xffff;
  418|  18.0k|}
ofp-port.c:ofputil_pull_ofp14_port:
  531|  4.86k|{
  532|  4.86k|    const struct ofp14_port *op = ofpbuf_try_pull(msg, sizeof *op);
  533|  4.86k|    if (!op) {
  ------------------
  |  Branch (533:9): [True: 36, False: 4.83k]
  ------------------
  534|     36|        return OFPERR_OFPBRC_BAD_LEN;
  535|     36|    }
  536|       |
  537|  4.83k|    size_t len = ntohs(op->length);
  538|  4.83k|    if (len < sizeof *op || len - sizeof *op > msg->size) {
  ------------------
  |  Branch (538:9): [True: 302, False: 4.52k]
  |  Branch (538:29): [True: 516, False: 4.01k]
  ------------------
  539|    818|        return OFPERR_OFPBRC_BAD_LEN;
  540|    818|    }
  541|  4.01k|    len -= sizeof *op;
  542|       |
  543|  4.01k|    enum ofperr error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  544|  4.01k|    if (error) {
  ------------------
  |  Branch (544:9): [True: 1.22k, False: 2.78k]
  ------------------
  545|  1.22k|        return error;
  546|  1.22k|    }
  547|  2.78k|    pp->hw_addr = op->hw_addr;
  548|  2.78k|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  225|  2.78k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  2.78k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|  2.78k|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  2.78k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  551|  2.78k|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|  2.78k|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  552|       |
  553|  2.78k|    return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
  554|  4.01k|}
ofp-port.c:ofputil_pull_ofp14_port_properties:
  499|  2.78k|{
  500|  2.78k|    struct ofpbuf properties = ofpbuf_const_initializer(props, len);
  501|  4.28k|    while (properties.size > 0) {
  ------------------
  |  Branch (501:12): [True: 3.43k, False: 854]
  ------------------
  502|  3.43k|        struct ofpbuf payload;
  503|  3.43k|        enum ofperr error;
  504|  3.43k|        uint64_t type;
  505|       |
  506|  3.43k|        error = ofpprop_pull(&properties, &payload, &type);
  507|  3.43k|        if (error) {
  ------------------
  |  Branch (507:13): [True: 1.86k, False: 1.57k]
  ------------------
  508|  1.86k|            return error;
  509|  1.86k|        }
  510|       |
  511|  1.57k|        switch (type) {
  512|     92|        case OFPPDPT14_ETHERNET:
  ------------------
  |  Branch (512:9): [True: 92, False: 1.48k]
  ------------------
  513|     92|            error = parse_ofp14_port_ethernet_property(&payload, pp);
  514|     92|            break;
  515|       |
  516|  1.48k|        default:
  ------------------
  |  Branch (516:9): [True: 1.48k, False: 92]
  ------------------
  517|  1.48k|            error = OFPPROP_UNKNOWN(true, "port", type);
  ------------------
  |  |  140|  1.48k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  518|  1.48k|            break;
  519|  1.57k|        }
  520|       |
  521|  1.57k|        if (error) {
  ------------------
  |  Branch (521:13): [True: 74, False: 1.50k]
  ------------------
  522|     74|            return error;
  523|     74|        }
  524|  1.57k|    }
  525|       |
  526|    854|    return 0;
  527|  2.78k|}
ofp-port.c:parse_ofp14_port_ethernet_property:
  478|     92|{
  479|     92|    struct ofp14_port_desc_prop_ethernet *eth = payload->data;
  480|       |
  481|     92|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (481:9): [True: 74, False: 18]
  ------------------
  482|     74|        return OFPERR_OFPBPC_BAD_LEN;
  483|     74|    }
  484|       |
  485|     18|    pp->curr = netdev_port_features_from_ofp11(eth->curr);
  486|     18|    pp->advertised = netdev_port_features_from_ofp11(eth->advertised);
  487|     18|    pp->supported = netdev_port_features_from_ofp11(eth->supported);
  488|     18|    pp->peer = netdev_port_features_from_ofp11(eth->peer);
  489|       |
  490|     18|    pp->curr_speed = ntohl(eth->curr_speed);
  491|     18|    pp->max_speed = ntohl(eth->max_speed);
  492|       |
  493|     18|    return 0;
  494|     92|}
ofp-port.c:compare_ports:
  800|   174k|{
  801|   174k|    const struct ofputil_phy_port *a = a_;
  802|   174k|    const struct ofputil_phy_port *b = b_;
  803|   174k|    uint16_t ap = ofp_to_u16(a->port_no);
  804|   174k|    uint16_t bp = ofp_to_u16(b->port_no);
  805|       |
  806|   174k|    return ap < bp ? -1 : ap > bp;
  ------------------
  |  Branch (806:12): [True: 42.2k, False: 131k]
  ------------------
  807|   174k|}
ofp-port.c:ofputil_decode_ofp10_port_mod:
  941|    651|{
  942|    651|    pm->port_no = u16_to_ofp(ntohs(opm->port_no));
  943|    651|    pm->hw_addr = opm->hw_addr;
  944|    651|    pm->config = ntohl(opm->config) & OFPPC10_ALL;
  ------------------
  |  |   65|    651|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|    651|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|    651|                     OFPPC_NO_PACKET_IN)
  ------------------
  945|    651|    pm->mask = ntohl(opm->mask) & OFPPC10_ALL;
  ------------------
  |  |   65|    651|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|    651|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|    651|                     OFPPC_NO_PACKET_IN)
  ------------------
  946|    651|    pm->advertise = netdev_port_features_from_ofp10(opm->advertise);
  947|    651|    return 0;
  948|    651|}
ofp-port.c:ofputil_decode_ofp11_port_mod:
  953|  1.59k|{
  954|  1.59k|    enum ofperr error;
  955|       |
  956|  1.59k|    error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
  957|  1.59k|    if (error) {
  ------------------
  |  Branch (957:9): [True: 1.15k, False: 443]
  ------------------
  958|  1.15k|        return error;
  959|  1.15k|    }
  960|       |
  961|    443|    pm->hw_addr = opm->hw_addr;
  962|    443|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    443|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  963|    443|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|    443|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  964|    443|    pm->advertise = netdev_port_features_from_ofp11(opm->advertise);
  965|       |
  966|    443|    return 0;
  967|  1.59k|}
ofp-port.c:ofputil_decode_ofp14_port_mod:
 1003|  8.44k|{
 1004|  8.44k|    const struct ofp14_port_mod *opm = ofpbuf_pull(b, sizeof *opm);
 1005|  8.44k|    enum ofperr error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
 1006|  8.44k|    if (error) {
  ------------------
  |  Branch (1006:9): [True: 1.25k, False: 7.19k]
  ------------------
 1007|  1.25k|        return error;
 1008|  1.25k|    }
 1009|       |
 1010|  7.19k|    pm->hw_addr = opm->hw_addr;
 1011|  7.19k|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  7.19k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1012|  7.19k|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|  7.19k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1013|       |
 1014|  7.19k|    return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
 1015|  8.44k|}
ofp-port.c:ofputil_decode_ofp14_port_mod_properties:
  972|  7.19k|{
  973|  10.4k|    while (b->size > 0) {
  ------------------
  |  Branch (973:12): [True: 9.04k, False: 1.35k]
  ------------------
  974|  9.04k|        struct ofpbuf property;
  975|  9.04k|        enum ofperr error;
  976|  9.04k|        uint64_t type;
  977|       |
  978|  9.04k|        error = ofpprop_pull(b, &property, &type);
  979|  9.04k|        if (error) {
  ------------------
  |  Branch (979:13): [True: 5.80k, False: 3.24k]
  ------------------
  980|  5.80k|            return error;
  981|  5.80k|        }
  982|       |
  983|  3.24k|        switch (type) {
  984|    947|        case OFPPMPT14_ETHERNET:
  ------------------
  |  Branch (984:9): [True: 947, False: 2.30k]
  ------------------
  985|    947|            error = parse_port_mod_ethernet_property(&property, pm);
  986|    947|            break;
  987|       |
  988|  2.30k|        default:
  ------------------
  |  Branch (988:9): [True: 2.30k, False: 947]
  ------------------
  989|  2.30k|            error = OFPPROP_UNKNOWN(loose, "port_mod", type);
  ------------------
  |  |  140|  2.30k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  990|  2.30k|            break;
  991|  3.24k|        }
  992|       |
  993|  3.24k|        if (error) {
  ------------------
  |  Branch (993:13): [True: 34, False: 3.21k]
  ------------------
  994|     34|            return error;
  995|     34|        }
  996|  3.24k|    }
  997|  1.35k|    return 0;
  998|  7.19k|}
ofp-port.c:parse_port_mod_ethernet_property:
  927|    947|{
  928|    947|    ovs_be32 advertise;
  929|    947|    enum ofperr error;
  930|       |
  931|    947|    error = ofpprop_parse_be32(property, &advertise);
  932|    947|    if (!error) {
  ------------------
  |  Branch (932:9): [True: 913, False: 34]
  ------------------
  933|    913|        pm->advertise = netdev_port_features_from_ofp11(advertise);
  934|    913|    }
  935|    947|    return error;
  936|    947|}
ofp-port.c:ofputil_pull_ofp14_port_stats:
 1538|  20.4k|{
 1539|  20.4k|    const struct ofp14_port_stats *ps14 = ofpbuf_try_pull(msg, sizeof *ps14);
 1540|  20.4k|    if (!ps14) {
  ------------------
  |  Branch (1540:9): [True: 268, False: 20.1k]
  ------------------
 1541|    268|        return OFPERR_OFPBRC_BAD_LEN;
 1542|    268|    }
 1543|       |
 1544|  20.1k|    size_t len = ntohs(ps14->length);
 1545|  20.1k|    if (len < sizeof *ps14 || len - sizeof *ps14 > msg->size) {
  ------------------
  |  Branch (1545:9): [True: 696, False: 19.4k]
  |  Branch (1545:31): [True: 476, False: 19.0k]
  ------------------
 1546|  1.17k|        return OFPERR_OFPBRC_BAD_LEN;
 1547|  1.17k|    }
 1548|  19.0k|    len -= sizeof *ps14;
 1549|       |
 1550|  19.0k|    enum ofperr error = ofputil_port_from_ofp11(ps14->port_no, &ops->port_no);
 1551|  19.0k|    if (error) {
  ------------------
  |  Branch (1551:9): [True: 1.29k, False: 17.7k]
  ------------------
 1552|  1.29k|        return error;
 1553|  1.29k|    }
 1554|       |
 1555|  17.7k|    ops->duration_sec = ntohl(ps14->duration_sec);
 1556|  17.7k|    ops->duration_nsec = ntohl(ps14->duration_nsec);
 1557|  17.7k|    ops->stats.rx_packets = ntohll(ps14->rx_packets);
 1558|  17.7k|    ops->stats.tx_packets = ntohll(ps14->tx_packets);
 1559|  17.7k|    ops->stats.rx_bytes = ntohll(ps14->rx_bytes);
 1560|  17.7k|    ops->stats.tx_bytes = ntohll(ps14->tx_bytes);
 1561|  17.7k|    ops->stats.rx_dropped = ntohll(ps14->rx_dropped);
 1562|  17.7k|    ops->stats.tx_dropped = ntohll(ps14->tx_dropped);
 1563|  17.7k|    ops->stats.rx_errors = ntohll(ps14->rx_errors);
 1564|  17.7k|    ops->stats.tx_errors = ntohll(ps14->tx_errors);
 1565|       |
 1566|       |
 1567|  17.7k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
 1568|  17.7k|                                                        len);
 1569|  24.6k|    while (properties.size > 0) {
  ------------------
  |  Branch (1569:12): [True: 13.4k, False: 11.2k]
  ------------------
 1570|  13.4k|        struct ofpbuf payload;
 1571|  13.4k|        uint64_t type = 0;
 1572|       |
 1573|  13.4k|        error = ofpprop_pull(&properties, &payload, &type);
 1574|  13.4k|        if (error) {
  ------------------
  |  Branch (1574:13): [True: 4.18k, False: 9.21k]
  ------------------
 1575|  4.18k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1576|  4.18k|            return error;
 1577|  4.18k|        }
 1578|  9.21k|        switch (type) {
 1579|     30|        case OFPPSPT14_ETHERNET:
  ------------------
  |  Branch (1579:9): [True: 30, False: 9.18k]
  ------------------
 1580|     30|            error = parse_ofp14_port_stats_ethernet_property(&payload, ops);
 1581|     30|            break;
 1582|    608|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_RFC2819):
  ------------------
  |  |   67|    608|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1582:9): [True: 608, False: 8.61k]
  ------------------
 1583|    608|            error = parse_intel_port_stats_rfc2819_property(&payload, ops);
 1584|    608|            break;
 1585|  6.22k|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_CUSTOM):
  ------------------
  |  |   67|  6.22k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1585:9): [True: 6.22k, False: 2.99k]
  ------------------
 1586|  6.22k|            error = parse_intel_port_custom_property(&payload, ops);
 1587|  6.22k|            break;
 1588|  2.35k|        default:
  ------------------
  |  Branch (1588:9): [True: 2.35k, False: 6.86k]
  ------------------
 1589|  2.35k|            error = OFPPROP_UNKNOWN(true, "port stats", type);
  ------------------
  |  |  140|  2.35k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1590|  2.35k|            break;
 1591|  9.21k|        }
 1592|       |
 1593|  9.21k|        if (error) {
  ------------------
  |  Branch (1593:13): [True: 2.27k, False: 6.94k]
  ------------------
 1594|  2.27k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1595|  2.27k|            return error;
 1596|  2.27k|        }
 1597|  9.21k|    }
 1598|       |
 1599|  11.2k|    return 0;
 1600|  17.7k|}
ofp-port.c:parse_ofp14_port_stats_ethernet_property:
 1434|     30|{
 1435|     30|    const struct ofp14_port_stats_prop_ethernet *eth = payload->data;
 1436|       |
 1437|     30|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (1437:9): [True: 14, False: 16]
  ------------------
 1438|     14|        return OFPERR_OFPBPC_BAD_LEN;
 1439|     14|    }
 1440|       |
 1441|     16|    ops->stats.rx_frame_errors = ntohll(eth->rx_frame_err);
 1442|     16|    ops->stats.rx_over_errors = ntohll(eth->rx_over_err);
 1443|     16|    ops->stats.rx_crc_errors = ntohll(eth->rx_crc_err);
 1444|     16|    ops->stats.collisions = ntohll(eth->collisions);
 1445|       |
 1446|     16|    return 0;
 1447|     30|}
ofp-port.c:parse_intel_port_stats_rfc2819_property:
 1452|    608|{
 1453|    608|    const struct intel_port_stats_rfc2819 *rfc2819 = payload->data;
 1454|       |
 1455|    608|    if (payload->size != sizeof *rfc2819) {
  ------------------
  |  Branch (1455:9): [True: 608, False: 0]
  ------------------
 1456|    608|        return OFPERR_OFPBPC_BAD_LEN;
 1457|    608|    }
 1458|      0|    ops->stats.rx_1_to_64_packets = ntohll(rfc2819->rx_1_to_64_packets);
 1459|      0|    ops->stats.rx_65_to_127_packets = ntohll(rfc2819->rx_65_to_127_packets);
 1460|      0|    ops->stats.rx_128_to_255_packets = ntohll(rfc2819->rx_128_to_255_packets);
 1461|      0|    ops->stats.rx_256_to_511_packets = ntohll(rfc2819->rx_256_to_511_packets);
 1462|      0|    ops->stats.rx_512_to_1023_packets =
 1463|      0|        ntohll(rfc2819->rx_512_to_1023_packets);
 1464|      0|    ops->stats.rx_1024_to_1522_packets =
 1465|      0|        ntohll(rfc2819->rx_1024_to_1522_packets);
 1466|      0|    ops->stats.rx_1523_to_max_packets =
 1467|      0|        ntohll(rfc2819->rx_1523_to_max_packets);
 1468|       |
 1469|      0|    ops->stats.tx_1_to_64_packets = ntohll(rfc2819->tx_1_to_64_packets);
 1470|      0|    ops->stats.tx_65_to_127_packets = ntohll(rfc2819->tx_65_to_127_packets);
 1471|      0|    ops->stats.tx_128_to_255_packets = ntohll(rfc2819->tx_128_to_255_packets);
 1472|      0|    ops->stats.tx_256_to_511_packets = ntohll(rfc2819->tx_256_to_511_packets);
 1473|      0|    ops->stats.tx_512_to_1023_packets =
 1474|      0|        ntohll(rfc2819->tx_512_to_1023_packets);
 1475|      0|    ops->stats.tx_1024_to_1522_packets =
 1476|      0|        ntohll(rfc2819->tx_1024_to_1522_packets);
 1477|      0|    ops->stats.tx_1523_to_max_packets =
 1478|      0|        ntohll(rfc2819->tx_1523_to_max_packets);
 1479|       |
 1480|      0|    ops->stats.tx_multicast_packets = ntohll(rfc2819->tx_multicast_packets);
 1481|      0|    ops->stats.rx_broadcast_packets = ntohll(rfc2819->rx_broadcast_packets);
 1482|      0|    ops->stats.tx_broadcast_packets = ntohll(rfc2819->tx_broadcast_packets);
 1483|      0|    ops->stats.rx_undersized_errors = ntohll(rfc2819->rx_undersized_errors);
 1484|       |
 1485|      0|    ops->stats.rx_oversize_errors = ntohll(rfc2819->rx_oversize_errors);
 1486|      0|    ops->stats.rx_fragmented_errors = ntohll(rfc2819->rx_fragmented_errors);
 1487|      0|    ops->stats.rx_jabber_errors = ntohll(rfc2819->rx_jabber_errors);
 1488|       |
 1489|      0|    return 0;
 1490|    608|}
ofp-port.c:parse_intel_port_custom_property:
 1495|  6.22k|{
 1496|  6.22k|    const struct intel_port_custom_stats *custom_stats
 1497|  6.22k|        = ofpbuf_try_pull(payload, sizeof *custom_stats);
 1498|  6.22k|    if (!custom_stats) {
  ------------------
  |  Branch (1498:9): [True: 14, False: 6.21k]
  ------------------
 1499|     14|        return OFPERR_OFPBPC_BAD_LEN;
 1500|     14|    }
 1501|       |
 1502|  6.21k|    ops->custom_stats.size = ntohs(custom_stats->stats_array_size);
 1503|       |
 1504|  6.21k|    netdev_free_custom_stats_counters(&ops->custom_stats);
 1505|  6.21k|    ops->custom_stats.counters = xcalloc(ops->custom_stats.size,
 1506|  6.21k|                                         sizeof *ops->custom_stats.counters);
 1507|       |
 1508|  54.8k|    for (int i = 0; i < ops->custom_stats.size; i++) {
  ------------------
  |  Branch (1508:21): [True: 50.2k, False: 4.57k]
  ------------------
 1509|  50.2k|        struct netdev_custom_counter *c = &ops->custom_stats.counters[i];
 1510|       |
 1511|       |        /* Counter name. */
 1512|  50.2k|        uint8_t *name_len = ofpbuf_try_pull(payload, sizeof *name_len);
 1513|  50.2k|        char *name = name_len ? ofpbuf_try_pull(payload, *name_len) : NULL;
  ------------------
  |  Branch (1513:22): [True: 50.2k, False: 34]
  ------------------
 1514|  50.2k|        if (!name_len || !name) {
  ------------------
  |  Branch (1514:13): [True: 34, False: 50.2k]
  |  Branch (1514:26): [True: 1.19k, False: 49.0k]
  ------------------
 1515|  1.23k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1516|  1.23k|            return OFPERR_OFPBPC_BAD_LEN;
 1517|  1.23k|        }
 1518|       |
 1519|  49.0k|        size_t len = MIN(*name_len, sizeof c->name - 1);
  ------------------
  |  |   96|  49.0k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 48.8k, False: 150]
  |  |  ------------------
  ------------------
 1520|  49.0k|        memcpy(c->name, name, len);
 1521|  49.0k|        c->name[len] = '\0';
 1522|       |
 1523|       |        /* Counter value. */
 1524|  49.0k|        ovs_be64 *value = ofpbuf_try_pull(payload, sizeof *value);
 1525|  49.0k|        if (!value) {
  ------------------
  |  Branch (1525:13): [True: 410, False: 48.6k]
  ------------------
 1526|    410|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1527|    410|            return OFPERR_OFPBPC_BAD_LEN;
 1528|    410|        }
 1529|  48.6k|        c->value = ntohll(get_unaligned_be64(value));
 1530|  48.6k|    }
 1531|       |
 1532|  4.57k|    return 0;
 1533|  6.21k|}
ofp-port.c:ofputil_port_stats_from_ofp13:
 1422|  2.26k|{
 1423|  2.26k|    enum ofperr error = ofputil_port_stats_from_ofp11(ops, &ps13->ps);
 1424|  2.26k|    if (!error) {
  ------------------
  |  Branch (1424:9): [True: 2.22k, False: 42]
  ------------------
 1425|  2.22k|        ops->duration_sec = ntohl(ps13->duration_sec);
 1426|  2.22k|        ops->duration_nsec = ntohl(ps13->duration_nsec);
 1427|  2.22k|    }
 1428|  2.26k|    return error;
 1429|  2.26k|}
ofp-port.c:ofputil_port_stats_from_ofp11:
 1394|  2.48k|{
 1395|  2.48k|    enum ofperr error;
 1396|       |
 1397|  2.48k|    error = ofputil_port_from_ofp11(ps11->port_no, &ops->port_no);
 1398|  2.48k|    if (error) {
  ------------------
  |  Branch (1398:9): [True: 168, False: 2.31k]
  ------------------
 1399|    168|        return error;
 1400|    168|    }
 1401|       |
 1402|  2.31k|    ops->stats.rx_packets = ntohll(ps11->rx_packets);
 1403|  2.31k|    ops->stats.tx_packets = ntohll(ps11->tx_packets);
 1404|  2.31k|    ops->stats.rx_bytes = ntohll(ps11->rx_bytes);
 1405|  2.31k|    ops->stats.tx_bytes = ntohll(ps11->tx_bytes);
 1406|  2.31k|    ops->stats.rx_dropped = ntohll(ps11->rx_dropped);
 1407|  2.31k|    ops->stats.tx_dropped = ntohll(ps11->tx_dropped);
 1408|  2.31k|    ops->stats.rx_errors = ntohll(ps11->rx_errors);
 1409|  2.31k|    ops->stats.tx_errors = ntohll(ps11->tx_errors);
 1410|  2.31k|    ops->stats.rx_frame_errors = ntohll(ps11->rx_frame_err);
 1411|  2.31k|    ops->stats.rx_over_errors = ntohll(ps11->rx_over_err);
 1412|  2.31k|    ops->stats.rx_crc_errors = ntohll(ps11->rx_crc_err);
 1413|  2.31k|    ops->stats.collisions = ntohll(ps11->collisions);
 1414|  2.31k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1415|       |
 1416|  2.31k|    return 0;
 1417|  2.48k|}
ofp-port.c:ofputil_port_stats_from_ofp10:
 1370|  12.8k|{
 1371|       |
 1372|  12.8k|    ops->port_no = u16_to_ofp(ntohs(ps10->port_no));
 1373|  12.8k|    ops->stats.rx_packets = ntohll(get_32aligned_be64(&ps10->rx_packets));
 1374|  12.8k|    ops->stats.tx_packets = ntohll(get_32aligned_be64(&ps10->tx_packets));
 1375|  12.8k|    ops->stats.rx_bytes = ntohll(get_32aligned_be64(&ps10->rx_bytes));
 1376|  12.8k|    ops->stats.tx_bytes = ntohll(get_32aligned_be64(&ps10->tx_bytes));
 1377|  12.8k|    ops->stats.rx_dropped = ntohll(get_32aligned_be64(&ps10->rx_dropped));
 1378|  12.8k|    ops->stats.tx_dropped = ntohll(get_32aligned_be64(&ps10->tx_dropped));
 1379|  12.8k|    ops->stats.rx_errors = ntohll(get_32aligned_be64(&ps10->rx_errors));
 1380|  12.8k|    ops->stats.tx_errors = ntohll(get_32aligned_be64(&ps10->tx_errors));
 1381|  12.8k|    ops->stats.rx_frame_errors =
 1382|  12.8k|        ntohll(get_32aligned_be64(&ps10->rx_frame_err));
 1383|  12.8k|    ops->stats.rx_over_errors = ntohll(get_32aligned_be64(&ps10->rx_over_err));
 1384|  12.8k|    ops->stats.rx_crc_errors = ntohll(get_32aligned_be64(&ps10->rx_crc_err));
 1385|  12.8k|    ops->stats.collisions = ntohll(get_32aligned_be64(&ps10->collisions));
 1386|  12.8k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1387|       |
 1388|  12.8k|    return 0;
 1389|  12.8k|}
ofp-port.c:print_port_stat:
 1686|   158k|{
 1687|   158k|    ds_put_cstr(string, leader);
 1688|   158k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1688:9): [True: 94.9k, False: 63.6k]
  ------------------
 1689|  94.9k|        ds_put_format(string, "%"PRIu64, stat);
 1690|  94.9k|    } else {
 1691|  63.6k|        ds_put_char(string, '?');
 1692|  63.6k|    }
 1693|   158k|    if (more) {
  ------------------
  |  Branch (1693:9): [True: 132k, False: 26.4k]
  ------------------
 1694|   132k|        ds_put_cstr(string, ", ");
 1695|   132k|    } else {
 1696|  26.4k|        ds_put_cstr(string, "\n");
 1697|  26.4k|    }
 1698|   158k|}
ofp-port.c:print_port_stat_cond:
 1702|   277k|{
 1703|   277k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1703:9): [True: 0, False: 277k]
  ------------------
 1704|      0|        ds_put_format(string, "%s%"PRIu64", ", leader, stat);
 1705|      0|    }
 1706|   277k|}

ofp_packet_to_string:
   74|   114k|{
   75|   114k|    struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   44|   114k|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
   76|   114k|    struct dp_packet buf;
   77|   114k|    struct flow flow;
   78|   114k|    size_t l4_size;
   79|       |
   80|   114k|    dp_packet_use_const(&buf, data, len);
   81|   114k|    buf.packet_type = packet_type;
   82|   114k|    flow_extract(&buf, &flow);
   83|   114k|    flow_format(&ds, &flow, NULL);
   84|       |
   85|   114k|    l4_size = dp_packet_l4_size(&buf);
   86|       |
   87|   114k|    if (flow.nw_proto == IPPROTO_TCP && l4_size >= TCP_HEADER_LEN) {
  ------------------
  |  |  891|  14.4k|#define TCP_HEADER_LEN 20
  ------------------
  |  Branch (87:9): [True: 14.4k, False: 100k]
  |  Branch (87:41): [True: 14.3k, False: 77]
  ------------------
   88|  14.3k|        struct tcp_header *th = dp_packet_l4(&buf);
   89|  14.3k|        ds_put_format(&ds, " tcp_csum:%"PRIx16, ntohs(th->tcp_csum));
   90|   100k|    } else if (flow.nw_proto == IPPROTO_UDP && l4_size >= UDP_HEADER_LEN) {
  ------------------
  |  |  853|  13.7k|#define UDP_HEADER_LEN 8
  ------------------
  |  Branch (90:16): [True: 13.7k, False: 86.6k]
  |  Branch (90:48): [True: 13.5k, False: 221]
  ------------------
   91|  13.5k|        struct udp_header *uh = dp_packet_l4(&buf);
   92|  13.5k|        ds_put_format(&ds, " udp_csum:%"PRIx16, ntohs(uh->udp_csum));
   93|  86.9k|    } else if (flow.nw_proto == IPPROTO_SCTP && l4_size >= SCTP_HEADER_LEN) {
  ------------------
  |  |  844|    834|#define SCTP_HEADER_LEN 12
  ------------------
  |  Branch (93:16): [True: 834, False: 86.0k]
  |  Branch (93:49): [True: 821, False: 13]
  ------------------
   94|    821|        struct sctp_header *sh = dp_packet_l4(&buf);
   95|    821|        ds_put_format(&ds, " sctp_csum:%"PRIx32,
   96|    821|                      ntohl(get_16aligned_be32(&sh->sctp_csum)));
   97|  86.0k|    } else if (flow.nw_proto == IPPROTO_ICMP && l4_size >= ICMP_HEADER_LEN) {
  ------------------
  |  |  764|  5.27k|#define ICMP_HEADER_LEN 8
  ------------------
  |  Branch (97:16): [True: 5.27k, False: 80.8k]
  |  Branch (97:49): [True: 4.73k, False: 535]
  ------------------
   98|  4.73k|        struct icmp_header *icmph = dp_packet_l4(&buf);
   99|  4.73k|        ds_put_format(&ds, " icmp_csum:%"PRIx16,
  100|  4.73k|                      ntohs(icmph->icmp_csum));
  101|  81.3k|    } else if (flow.nw_proto == IPPROTO_ICMPV6 && l4_size >= ICMP6_HEADER_LEN) {
  ------------------
  |  |  991|  4.69k|#define ICMP6_HEADER_LEN 4
  ------------------
  |  Branch (101:16): [True: 4.69k, False: 76.6k]
  |  Branch (101:51): [True: 4.60k, False: 83]
  ------------------
  102|  4.60k|        struct icmp6_header *icmp6h = dp_packet_l4(&buf);
  103|  4.60k|        ds_put_format(&ds, " icmp6_csum:%"PRIx16,
  104|  4.60k|                      ntohs(icmp6h->icmp6_cksum));
  105|  4.60k|    }
  106|       |
  107|   114k|    ds_put_char(&ds, '\n');
  108|       |
  109|   114k|    return ds_cstr(&ds);
  110|   114k|}
ofp_print_bit_names:
  161|   227k|{
  162|   227k|    int n = 0;
  163|   227k|    int i;
  164|       |
  165|   227k|    if (!bits) {
  ------------------
  |  Branch (165:9): [True: 42.0k, False: 185k]
  ------------------
  166|  42.0k|        ds_put_cstr(string, "0");
  167|  42.0k|        return;
  168|  42.0k|    }
  169|       |
  170|  6.11M|    for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (170:17): [True: 5.93M, False: 185k]
  ------------------
  171|  5.93M|        uint32_t bit = UINT32_C(1) << i;
  172|       |
  173|  5.93M|        if (bits & bit) {
  ------------------
  |  Branch (173:13): [True: 920k, False: 5.01M]
  ------------------
  174|   920k|            const char *name = bit_to_name(bit);
  175|   920k|            if (name) {
  ------------------
  |  Branch (175:17): [True: 897k, False: 23.2k]
  ------------------
  176|   897k|                if (n++) {
  ------------------
  |  Branch (176:21): [True: 713k, False: 183k]
  ------------------
  177|   713k|                    ds_put_char(string, separator);
  178|   713k|                }
  179|   897k|                ds_put_cstr(string, name);
  180|   897k|                bits &= ~bit;
  181|   897k|            }
  182|   920k|        }
  183|  5.93M|    }
  184|       |
  185|   185k|    if (bits) {
  ------------------
  |  Branch (185:9): [True: 2.73k, False: 182k]
  ------------------
  186|  2.73k|        if (n) {
  ------------------
  |  Branch (186:13): [True: 1.28k, False: 1.44k]
  ------------------
  187|  1.28k|            ds_put_char(string, separator);
  188|  1.28k|        }
  189|  2.73k|        ds_put_format(string, "0x%"PRIx32, bits);
  190|  2.73k|    }
  191|   185k|}
ofp_print_duration:
  253|  44.2k|{
  254|  44.2k|    ds_put_format(string, "%u", sec);
  255|       |
  256|       |    /* If there are no fractional seconds, don't print any decimals.
  257|       |     *
  258|       |     * If the fractional seconds can be expressed exactly as milliseconds,
  259|       |     * print 3 decimals.  Open vSwitch provides millisecond precision for most
  260|       |     * time measurements, so printing 3 decimals every time makes it easier to
  261|       |     * spot real changes in flow dumps that refresh themselves quickly.
  262|       |     *
  263|       |     * If the fractional seconds are more precise than milliseconds, print the
  264|       |     * number of decimals needed to express them exactly.
  265|       |     */
  266|  44.2k|    if (nsec > 0) {
  ------------------
  |  Branch (266:9): [True: 36.8k, False: 7.45k]
  ------------------
  267|  36.8k|        unsigned int msec = nsec / 1000000;
  268|  36.8k|        if (msec * 1000000 == nsec) {
  ------------------
  |  Branch (268:13): [True: 171, False: 36.6k]
  ------------------
  269|    171|            ds_put_format(string, ".%03u", msec);
  270|  36.6k|        } else {
  271|  36.6k|            ds_put_format(string, ".%09u", nsec);
  272|  46.3k|            while (string->string[string->length - 1] == '0') {
  ------------------
  |  Branch (272:20): [True: 9.70k, False: 36.6k]
  ------------------
  273|  9.70k|                string->length--;
  274|  9.70k|            }
  275|  36.6k|        }
  276|  36.8k|    }
  277|  44.2k|    ds_put_char(string, 's');
  278|  44.2k|}
ofp_print_version:
  792|  3.40M|{
  793|  3.40M|    switch (oh->version) {
  794|   637k|    case OFP10_VERSION:
  ------------------
  |  Branch (794:5): [True: 637k, False: 2.76M]
  ------------------
  795|   637k|        break;
  796|   294k|    case OFP11_VERSION:
  ------------------
  |  Branch (796:5): [True: 294k, False: 3.10M]
  ------------------
  797|   294k|        ds_put_cstr(string, " (OF1.1)");
  798|   294k|        break;
  799|   564k|    case OFP12_VERSION:
  ------------------
  |  Branch (799:5): [True: 564k, False: 2.83M]
  ------------------
  800|   564k|        ds_put_cstr(string, " (OF1.2)");
  801|   564k|        break;
  802|   292k|    case OFP13_VERSION:
  ------------------
  |  Branch (802:5): [True: 292k, False: 3.11M]
  ------------------
  803|   292k|        ds_put_cstr(string, " (OF1.3)");
  804|   292k|        break;
  805|   730k|    case OFP14_VERSION:
  ------------------
  |  Branch (805:5): [True: 730k, False: 2.67M]
  ------------------
  806|   730k|        ds_put_cstr(string, " (OF1.4)");
  807|   730k|        break;
  808|   650k|    case OFP15_VERSION:
  ------------------
  |  Branch (808:5): [True: 650k, False: 2.75M]
  ------------------
  809|   650k|        ds_put_cstr(string, " (OF1.5)");
  810|   650k|        break;
  811|   232k|    default:
  ------------------
  |  Branch (811:5): [True: 232k, False: 3.17M]
  ------------------
  812|   232k|        ds_put_format(string, " (OF 0x%02"PRIx8")", oh->version);
  813|   232k|        break;
  814|  3.40M|    }
  815|  3.40M|    ds_put_format(string, " (xid=0x%"PRIx32"):", ntohl(oh->xid));
  816|  3.40M|}
ofp_to_string:
 1229|  6.15M|{
 1230|  6.15M|    struct ds string = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   44|  6.15M|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 1231|  6.15M|    const struct ofp_header *oh = oh_;
 1232|       |
 1233|  6.15M|    if (!len) {
  ------------------
  |  Branch (1233:9): [True: 921k, False: 5.23M]
  ------------------
 1234|   921k|        ds_put_cstr(&string, "OpenFlow message is empty\n");
 1235|  5.23M|    } else if (len < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (1235:16): [True: 147k, False: 5.08M]
  ------------------
 1236|   147k|        ds_put_format(&string, "OpenFlow packet too short (only %"PRIuSIZE" bytes):\n",
 1237|   147k|                      len);
 1238|  5.08M|    } else if (ntohs(oh->length) > len) {
  ------------------
  |  Branch (1238:16): [True: 16.6k, False: 5.06M]
  ------------------
 1239|  16.6k|        enum ofperr error;
 1240|  16.6k|        enum ofpraw raw;
 1241|       |
 1242|  16.6k|        error = ofpraw_decode_partial(&raw, oh, len);
 1243|  16.6k|        if (!error) {
  ------------------
  |  Branch (1243:13): [True: 8.70k, False: 7.91k]
  ------------------
 1244|  8.70k|            ofp_header_to_string__(oh, raw, &string);
 1245|  8.70k|            ds_put_char(&string, '\n');
 1246|  8.70k|        }
 1247|       |
 1248|  16.6k|        ds_put_format(&string,
 1249|  16.6k|                      "(***truncated to %"PRIuSIZE" bytes from %"PRIu16"***)\n",
 1250|  16.6k|                      len, ntohs(oh->length));
 1251|  5.06M|    } else if (ntohs(oh->length) < len) {
  ------------------
  |  Branch (1251:16): [True: 9.30k, False: 5.05M]
  ------------------
 1252|  9.30k|        ds_put_format(&string,
 1253|  9.30k|                      "(***only uses %"PRIu16" bytes out of %"PRIuSIZE"***)\n",
 1254|  9.30k|                      ntohs(oh->length), len);
 1255|  5.05M|    } else {
 1256|  5.05M|        enum ofperr error;
 1257|  5.05M|        enum ofpraw raw;
 1258|       |
 1259|  5.05M|        error = ofpraw_decode(&raw, oh);
 1260|  5.05M|        if (!error) {
  ------------------
  |  Branch (1260:13): [True: 3.39M, False: 1.66M]
  ------------------
 1261|  3.39M|            ofp_header_to_string__(oh, raw, &string);
 1262|  3.39M|            size_t header_len = string.length;
 1263|       |
 1264|  3.39M|            error = ofp_to_string__(oh, port_map, table_map,
 1265|  3.39M|                                    raw, &string, verbosity);
 1266|  3.39M|            if (error) {
  ------------------
  |  Branch (1266:17): [True: 1.62M, False: 1.76M]
  ------------------
 1267|  1.62M|                if (string.length > header_len) {
  ------------------
  |  Branch (1267:21): [True: 132k, False: 1.49M]
  ------------------
 1268|   132k|                    ds_chomp(&string, ' ');
 1269|   132k|                    add_newline(&string);
 1270|  1.49M|                } else {
 1271|  1.49M|                    ds_put_char(&string, ' ');
 1272|  1.49M|                }
 1273|  1.62M|                ofp_print_error(&string, error);
 1274|  1.76M|            } else {
 1275|  1.76M|                ds_chomp(&string, ' ');
 1276|  1.76M|            }
 1277|  3.39M|        } else {
 1278|  1.66M|            ofp_print_error(&string, error);
 1279|  1.66M|        }
 1280|       |
 1281|  5.05M|        if (verbosity >= 5 || error) {
  ------------------
  |  Branch (1281:13): [True: 0, False: 5.05M]
  |  Branch (1281:31): [True: 3.29M, False: 1.76M]
  ------------------
 1282|  3.29M|            add_newline(&string);
 1283|  3.29M|            ds_put_hex_dump(&string, oh, len, 0, true);
 1284|  3.29M|        }
 1285|       |
 1286|  5.05M|        add_newline(&string);
 1287|  5.05M|        return ds_steal_cstr(&string);
 1288|  5.05M|    }
 1289|  1.09M|    ds_put_hex_dump(&string, oh, len, 0, true);
 1290|  1.09M|    return ds_steal_cstr(&string);
 1291|  6.15M|}
ofp_print:
 1307|  5.03M|{
 1308|  5.03M|    print_and_free(stream, ofp_to_string(oh, len, port_map, table_map,
 1309|  5.03M|                                         verbosity));
 1310|  5.03M|}
ofp-print.c:ofp_header_to_string__:
  821|  3.40M|{
  822|  3.40M|    ds_put_cstr(string, ofpraw_get_name(raw));
  823|  3.40M|    ofp_print_version(oh, string);
  824|  3.40M|}
ofp-print.c:ofp_to_string__:
  975|  3.39M|{
  976|  3.39M|    if (ofpmsg_is_stat(oh)) {
  ------------------
  |  Branch (976:9): [True: 202k, False: 3.19M]
  ------------------
  977|   202k|        ofp_print_stats(string, oh);
  978|   202k|    }
  979|       |
  980|  3.39M|    const void *msg = oh;
  981|  3.39M|    enum ofptype type = ofptype_from_ofpraw(raw);
  982|  3.39M|    switch (type) {
  ------------------
  |  Branch (982:13): [True: 0, False: 3.39M]
  ------------------
  983|  1.95k|    case OFPTYPE_GROUP_STATS_REQUEST:
  ------------------
  |  Branch (983:5): [True: 1.95k, False: 3.39M]
  ------------------
  984|  1.95k|        return ofputil_group_stats_request_format(string, oh);
  985|       |
  986|  5.59k|    case OFPTYPE_GROUP_STATS_REPLY:
  ------------------
  |  Branch (986:5): [True: 5.59k, False: 3.38M]
  ------------------
  987|  5.59k|        return ofputil_group_stats_format(string, oh);
  988|       |
  989|  1.21k|    case OFPTYPE_GROUP_DESC_STATS_REQUEST:
  ------------------
  |  Branch (989:5): [True: 1.21k, False: 3.39M]
  ------------------
  990|  1.21k|        return ofputil_group_desc_request_format(string, oh);
  991|       |
  992|  7.10k|    case OFPTYPE_GROUP_DESC_STATS_REPLY:
  ------------------
  |  Branch (992:5): [True: 7.10k, False: 3.38M]
  ------------------
  993|  7.10k|        return ofputil_group_desc_format(string, oh, port_map, table_map);
  994|       |
  995|     33|    case OFPTYPE_GROUP_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (995:5): [True: 33, False: 3.39M]
  ------------------
  996|     33|        break;
  997|       |
  998|    699|    case OFPTYPE_GROUP_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (998:5): [True: 699, False: 3.39M]
  ------------------
  999|    699|        return ofputil_group_features_format(string, oh);
 1000|       |
 1001|   105k|    case OFPTYPE_GROUP_MOD:
  ------------------
  |  Branch (1001:5): [True: 105k, False: 3.28M]
  ------------------
 1002|   105k|        return ofputil_group_mod_format(string, oh, port_map, table_map);
 1003|       |
 1004|  2.49k|    case OFPTYPE_TABLE_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (1004:5): [True: 2.49k, False: 3.39M]
  ------------------
 1005|  18.5k|    case OFPTYPE_TABLE_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (1005:5): [True: 16.0k, False: 3.37M]
  ------------------
 1006|  18.5k|        return ofp_print_table_features_reply(string, oh);
 1007|       |
 1008|     66|    case OFPTYPE_TABLE_DESC_REQUEST:
  ------------------
  |  Branch (1008:5): [True: 66, False: 3.39M]
  ------------------
 1009|  3.16k|    case OFPTYPE_TABLE_DESC_REPLY:
  ------------------
  |  Branch (1009:5): [True: 3.09k, False: 3.39M]
  ------------------
 1010|  3.16k|        return ofp_print_table_desc_reply(string, oh, table_map);
 1011|       |
 1012|   150k|    case OFPTYPE_HELLO:
  ------------------
  |  Branch (1012:5): [True: 150k, False: 3.24M]
  ------------------
 1013|   150k|        return ofp_print_hello(string, oh);
 1014|       |
 1015|  1.88M|    case OFPTYPE_ERROR:
  ------------------
  |  Branch (1015:5): [True: 1.88M, False: 1.51M]
  ------------------
 1016|  1.88M|        return ofp_print_error_msg(string, oh, port_map, table_map);
 1017|       |
 1018|  28.7k|    case OFPTYPE_ECHO_REQUEST:
  ------------------
  |  Branch (1018:5): [True: 28.7k, False: 3.36M]
  ------------------
 1019|  54.6k|    case OFPTYPE_ECHO_REPLY:
  ------------------
  |  Branch (1019:5): [True: 25.8k, False: 3.36M]
  ------------------
 1020|  54.6k|        return ofp_print_echo(string, oh, verbosity);
 1021|       |
 1022|  4.02k|    case OFPTYPE_FEATURES_REQUEST:
  ------------------
  |  Branch (1022:5): [True: 4.02k, False: 3.39M]
  ------------------
 1023|  4.02k|        break;
 1024|       |
 1025|  9.32k|    case OFPTYPE_FEATURES_REPLY:
  ------------------
  |  Branch (1025:5): [True: 9.32k, False: 3.38M]
  ------------------
 1026|  9.32k|        return ofp_print_switch_features(string, oh);
 1027|       |
 1028|    439|    case OFPTYPE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (1028:5): [True: 439, False: 3.39M]
  ------------------
 1029|    439|        break;
 1030|       |
 1031|  2.98k|    case OFPTYPE_GET_CONFIG_REPLY:
  ------------------
  |  Branch (1031:5): [True: 2.98k, False: 3.39M]
  ------------------
 1032|  2.98k|        return ofp_print_get_config_reply(string, oh);
 1033|       |
 1034|  12.4k|    case OFPTYPE_SET_CONFIG:
  ------------------
  |  Branch (1034:5): [True: 12.4k, False: 3.38M]
  ------------------
 1035|  12.4k|        return ofp_print_set_config(string, oh);
 1036|       |
 1037|   213k|    case OFPTYPE_PACKET_IN:
  ------------------
  |  Branch (1037:5): [True: 213k, False: 3.18M]
  ------------------
 1038|   213k|        return ofp_print_packet_in(string, oh, port_map, table_map, verbosity);
 1039|       |
 1040|  34.3k|    case OFPTYPE_FLOW_REMOVED:
  ------------------
  |  Branch (1040:5): [True: 34.3k, False: 3.36M]
  ------------------
 1041|  34.3k|        return ofp_print_flow_removed(string, oh, port_map, table_map);
 1042|       |
 1043|  6.77k|    case OFPTYPE_PORT_STATUS:
  ------------------
  |  Branch (1043:5): [True: 6.77k, False: 3.38M]
  ------------------
 1044|  6.77k|        return ofp_print_port_status(string, oh);
 1045|       |
 1046|   330k|    case OFPTYPE_PACKET_OUT:
  ------------------
  |  Branch (1046:5): [True: 330k, False: 3.06M]
  ------------------
 1047|   330k|        return ofp_print_packet_out(string, oh, port_map, table_map,
 1048|   330k|                                    verbosity);
 1049|       |
 1050|   227k|    case OFPTYPE_FLOW_MOD:
  ------------------
  |  Branch (1050:5): [True: 227k, False: 3.16M]
  ------------------
 1051|   227k|        return ofputil_flow_mod_format(string, oh, port_map, table_map,
 1052|   227k|                                       verbosity);
 1053|       |
 1054|  10.6k|    case OFPTYPE_PORT_MOD:
  ------------------
  |  Branch (1054:5): [True: 10.6k, False: 3.38M]
  ------------------
 1055|  10.6k|        return ofp_print_port_mod(string, oh, port_map);
 1056|       |
 1057|  16.1k|    case OFPTYPE_TABLE_MOD:
  ------------------
  |  Branch (1057:5): [True: 16.1k, False: 3.37M]
  ------------------
 1058|  16.1k|        return ofp_print_table_mod(string, oh, table_map);
 1059|       |
 1060|  11.9k|    case OFPTYPE_METER_MOD:
  ------------------
  |  Branch (1060:5): [True: 11.9k, False: 3.38M]
  ------------------
 1061|  11.9k|        return ofp_print_meter_mod(string, oh);
 1062|       |
 1063|    988|    case OFPTYPE_BARRIER_REQUEST:
  ------------------
  |  Branch (1063:5): [True: 988, False: 3.39M]
  ------------------
 1064|  3.75k|    case OFPTYPE_BARRIER_REPLY:
  ------------------
  |  Branch (1064:5): [True: 2.77k, False: 3.39M]
  ------------------
 1065|  3.75k|        break;
 1066|       |
 1067|  2.00k|    case OFPTYPE_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (1067:5): [True: 2.00k, False: 3.39M]
  ------------------
 1068|  2.00k|        return ofputil_queue_get_config_request_format(string, oh, port_map);
 1069|       |
 1070|  12.6k|    case OFPTYPE_QUEUE_GET_CONFIG_REPLY:
  ------------------
  |  Branch (1070:5): [True: 12.6k, False: 3.38M]
  ------------------
 1071|  12.6k|        return ofputil_queue_get_config_reply_format(string, oh, port_map);
 1072|       |
 1073|  3.38k|    case OFPTYPE_ROLE_REQUEST:
  ------------------
  |  Branch (1073:5): [True: 3.38k, False: 3.39M]
  ------------------
 1074|  13.7k|    case OFPTYPE_ROLE_REPLY:
  ------------------
  |  Branch (1074:5): [True: 10.3k, False: 3.38M]
  ------------------
 1075|  13.7k|        return ofp_print_role_message(string, oh);
 1076|  1.07k|    case OFPTYPE_ROLE_STATUS:
  ------------------
  |  Branch (1076:5): [True: 1.07k, False: 3.39M]
  ------------------
 1077|  1.07k|        return ofp_print_role_status_message(string, oh);
 1078|       |
 1079|  9.78k|    case OFPTYPE_REQUESTFORWARD:
  ------------------
  |  Branch (1079:5): [True: 9.78k, False: 3.38M]
  ------------------
 1080|  9.78k|        return ofp_print_requestforward(string, oh, port_map, table_map);
 1081|       |
 1082|  3.94k|    case OFPTYPE_TABLE_STATUS:
  ------------------
  |  Branch (1082:5): [True: 3.94k, False: 3.39M]
  ------------------
 1083|  3.94k|        return ofp_print_table_status_message(string, oh, table_map);
 1084|       |
 1085|    130|    case OFPTYPE_METER_STATS_REQUEST:
  ------------------
  |  Branch (1085:5): [True: 130, False: 3.39M]
  ------------------
 1086|    591|    case OFPTYPE_METER_CONFIG_STATS_REQUEST:
  ------------------
  |  Branch (1086:5): [True: 461, False: 3.39M]
  ------------------
 1087|    591|        return ofp_print_meter_stats_request(string, oh);
 1088|       |
 1089|  1.57k|    case OFPTYPE_METER_STATS_REPLY:
  ------------------
  |  Branch (1089:5): [True: 1.57k, False: 3.39M]
  ------------------
 1090|  1.57k|        return ofp_print_meter_stats_reply(string, oh);
 1091|       |
 1092|  2.10k|    case OFPTYPE_METER_CONFIG_STATS_REPLY:
  ------------------
  |  Branch (1092:5): [True: 2.10k, False: 3.39M]
  ------------------
 1093|  2.10k|        return ofp_print_meter_config_reply(string, oh);
 1094|       |
 1095|    407|    case OFPTYPE_METER_FEATURES_STATS_REPLY:
  ------------------
  |  Branch (1095:5): [True: 407, False: 3.39M]
  ------------------
 1096|    407|        return ofp_print_meter_features_reply(string, oh);
 1097|       |
 1098|     15|    case OFPTYPE_DESC_STATS_REQUEST:
  ------------------
  |  Branch (1098:5): [True: 15, False: 3.39M]
  ------------------
 1099|     16|    case OFPTYPE_METER_FEATURES_STATS_REQUEST:
  ------------------
  |  Branch (1099:5): [True: 1, False: 3.39M]
  ------------------
 1100|     16|        break;
 1101|       |
 1102|  4.69k|    case OFPTYPE_FLOW_STATS_REQUEST:
  ------------------
  |  Branch (1102:5): [True: 4.69k, False: 3.38M]
  ------------------
 1103|  5.61k|    case OFPTYPE_AGGREGATE_STATS_REQUEST:
  ------------------
  |  Branch (1103:5): [True: 920, False: 3.39M]
  ------------------
 1104|  5.61k|        return ofp_print_flow_stats_request(string, oh, port_map, table_map);
 1105|       |
 1106|     18|    case OFPTYPE_TABLE_STATS_REQUEST:
  ------------------
  |  Branch (1106:5): [True: 18, False: 3.39M]
  ------------------
 1107|     18|        break;
 1108|       |
 1109|  5.50k|    case OFPTYPE_PORT_STATS_REQUEST:
  ------------------
  |  Branch (1109:5): [True: 5.50k, False: 3.38M]
  ------------------
 1110|  5.50k|        return ofp_print_ofpst_port_request(string, oh, port_map);
 1111|       |
 1112|  1.57k|    case OFPTYPE_QUEUE_STATS_REQUEST:
  ------------------
  |  Branch (1112:5): [True: 1.57k, False: 3.39M]
  ------------------
 1113|  1.57k|        return ofputil_queue_stats_request_format(string, oh, port_map);
 1114|       |
 1115|     44|    case OFPTYPE_DESC_STATS_REPLY:
  ------------------
  |  Branch (1115:5): [True: 44, False: 3.39M]
  ------------------
 1116|     44|        return ofp_print_ofpst_desc_reply(string, oh);
 1117|       |
 1118|  60.7k|    case OFPTYPE_FLOW_STATS_REPLY:
  ------------------
  |  Branch (1118:5): [True: 60.7k, False: 3.33M]
  ------------------
 1119|  60.7k|        return ofp_print_flow_stats_reply(string, oh, port_map, table_map);
 1120|       |
 1121|  5.24k|    case OFPTYPE_QUEUE_STATS_REPLY:
  ------------------
  |  Branch (1121:5): [True: 5.24k, False: 3.38M]
  ------------------
 1122|  5.24k|        return ofputil_queue_stats_reply_format(string, oh, port_map,
 1123|  5.24k|                                                verbosity);
 1124|       |
 1125|  11.0k|    case OFPTYPE_PORT_STATS_REPLY:
  ------------------
  |  Branch (1125:5): [True: 11.0k, False: 3.38M]
  ------------------
 1126|  11.0k|        return ofp_print_ofpst_port_reply(string, oh, port_map, verbosity);
 1127|       |
 1128|  8.17k|    case OFPTYPE_TABLE_STATS_REPLY:
  ------------------
  |  Branch (1128:5): [True: 8.17k, False: 3.38M]
  ------------------
 1129|  8.17k|        return ofp_print_table_stats_reply(string, oh);
 1130|       |
 1131|  9.39k|    case OFPTYPE_AGGREGATE_STATS_REPLY:
  ------------------
  |  Branch (1131:5): [True: 9.39k, False: 3.38M]
  ------------------
 1132|  9.39k|        return ofp_print_aggregate_stats_reply(string, oh);
 1133|       |
 1134|    291|    case OFPTYPE_PORT_DESC_STATS_REQUEST:
  ------------------
  |  Branch (1134:5): [True: 291, False: 3.39M]
  ------------------
 1135|    291|        return ofp_print_ofpst_port_desc_request(string, oh, port_map);
 1136|       |
 1137|    627|    case OFPTYPE_PORT_DESC_STATS_REPLY:
  ------------------
  |  Branch (1137:5): [True: 627, False: 3.39M]
  ------------------
 1138|    627|        return ofp_print_ofpst_port_desc_reply(string, oh);
 1139|       |
 1140|     18|    case OFPTYPE_FLOW_MOD_TABLE_ID:
  ------------------
  |  Branch (1140:5): [True: 18, False: 3.39M]
  ------------------
 1141|     18|        return ofp_print_nxt_flow_mod_table_id(string, oh);
 1142|       |
 1143|    469|    case OFPTYPE_SET_FLOW_FORMAT:
  ------------------
  |  Branch (1143:5): [True: 469, False: 3.39M]
  ------------------
 1144|    469|        return ofp_print_nxt_set_flow_format(string, oh);
 1145|       |
 1146|    673|    case OFPTYPE_SET_PACKET_IN_FORMAT:
  ------------------
  |  Branch (1146:5): [True: 673, False: 3.39M]
  ------------------
 1147|    673|        return ofp_print_nxt_set_packet_in_format(string, oh);
 1148|       |
 1149|      0|    case OFPTYPE_FLOW_AGE:
  ------------------
  |  Branch (1149:5): [True: 0, False: 3.39M]
  ------------------
 1150|      0|        break;
 1151|       |
 1152|     18|    case OFPTYPE_SET_CONTROLLER_ID:
  ------------------
  |  Branch (1152:5): [True: 18, False: 3.39M]
  ------------------
 1153|     18|        return ofp_print_nxt_set_controller_id(string, ofpmsg_body(oh));
 1154|       |
 1155|  5.83k|    case OFPTYPE_GET_ASYNC_REPLY:
  ------------------
  |  Branch (1155:5): [True: 5.83k, False: 3.38M]
  ------------------
 1156|  16.0k|    case OFPTYPE_SET_ASYNC_CONFIG:
  ------------------
  |  Branch (1156:5): [True: 10.2k, False: 3.38M]
  ------------------
 1157|  16.0k|        return ofp_print_set_async_config(string, oh, type);
 1158|      9|    case OFPTYPE_GET_ASYNC_REQUEST:
  ------------------
  |  Branch (1158:5): [True: 9, False: 3.39M]
  ------------------
 1159|      9|        break;
 1160|     24|    case OFPTYPE_FLOW_MONITOR_CANCEL:
  ------------------
  |  Branch (1160:5): [True: 24, False: 3.39M]
  ------------------
 1161|     24|        return ofp_print_nxt_flow_monitor_cancel(string, msg);
 1162|       |
 1163|      0|    case OFPTYPE_FLOW_MONITOR_PAUSED:
  ------------------
  |  Branch (1163:5): [True: 0, False: 3.39M]
  ------------------
 1164|      0|    case OFPTYPE_FLOW_MONITOR_RESUMED:
  ------------------
  |  Branch (1164:5): [True: 0, False: 3.39M]
  ------------------
 1165|      0|        break;
 1166|       |
 1167|  7.86k|    case OFPTYPE_FLOW_MONITOR_STATS_REQUEST:
  ------------------
  |  Branch (1167:5): [True: 7.86k, False: 3.38M]
  ------------------
 1168|  7.86k|        return ofp_print_flow_monitor_request(string, msg, port_map,
 1169|  7.86k|                                              table_map);
 1170|       |
 1171|  34.0k|    case OFPTYPE_FLOW_MONITOR_STATS_REPLY:
  ------------------
  |  Branch (1171:5): [True: 34.0k, False: 3.36M]
  ------------------
 1172|  34.0k|        return ofp_print_flow_monitor_reply(string, msg, port_map,
 1173|  34.0k|                                            table_map);
 1174|       |
 1175|    561|    case OFPTYPE_BUNDLE_CONTROL:
  ------------------
  |  Branch (1175:5): [True: 561, False: 3.39M]
  ------------------
 1176|    561|        return ofp_print_bundle_ctrl(string, msg);
 1177|       |
 1178|  22.2k|    case OFPTYPE_BUNDLE_ADD_MESSAGE:
  ------------------
  |  Branch (1178:5): [True: 22.2k, False: 3.37M]
  ------------------
 1179|  22.2k|        return ofp_print_bundle_add(string, msg, port_map, table_map,
 1180|  22.2k|                                    verbosity);
 1181|       |
 1182|  5.96k|    case OFPTYPE_NXT_TLV_TABLE_MOD:
  ------------------
  |  Branch (1182:5): [True: 5.96k, False: 3.38M]
  ------------------
 1183|  5.96k|        return ofp_print_tlv_table_mod(string, msg);
 1184|       |
 1185|      0|    case OFPTYPE_NXT_TLV_TABLE_REQUEST:
  ------------------
  |  Branch (1185:5): [True: 0, False: 3.39M]
  ------------------
 1186|      0|        break;
 1187|       |
 1188|  1.47k|    case OFPTYPE_NXT_TLV_TABLE_REPLY:
  ------------------
  |  Branch (1188:5): [True: 1.47k, False: 3.39M]
  ------------------
 1189|  1.47k|        return ofp_print_tlv_table_reply(string, msg);
 1190|       |
 1191|  19.2k|    case OFPTYPE_NXT_RESUME:
  ------------------
  |  Branch (1191:5): [True: 19.2k, False: 3.37M]
  ------------------
 1192|  19.2k|        return ofp_print_packet_in(string, msg, port_map, table_map,
 1193|  19.2k|                                   verbosity);
 1194|      0|    case OFPTYPE_IPFIX_BRIDGE_STATS_REQUEST:
  ------------------
  |  Branch (1194:5): [True: 0, False: 3.39M]
  ------------------
 1195|      0|        break;
 1196|    358|    case OFPTYPE_IPFIX_BRIDGE_STATS_REPLY:
  ------------------
  |  Branch (1196:5): [True: 358, False: 3.39M]
  ------------------
 1197|    358|        return ofp_print_nxst_ipfix_bridge_reply(string, oh);
 1198|      0|    case OFPTYPE_IPFIX_FLOW_STATS_REQUEST:
  ------------------
  |  Branch (1198:5): [True: 0, False: 3.39M]
  ------------------
 1199|      0|        break;
 1200|  1.42k|    case OFPTYPE_IPFIX_FLOW_STATS_REPLY:
  ------------------
  |  Branch (1200:5): [True: 1.42k, False: 3.39M]
  ------------------
 1201|  1.42k|        return ofp_print_nxst_ipfix_flow_reply(string, oh);
 1202|       |
 1203|     11|    case OFPTYPE_CT_FLUSH_ZONE:
  ------------------
  |  Branch (1203:5): [True: 11, False: 3.39M]
  ------------------
 1204|     11|        return ofp_print_nxt_ct_flush_zone(string, ofpmsg_body(oh));
 1205|  11.6k|    case OFPTYPE_CT_FLUSH:
  ------------------
  |  Branch (1205:5): [True: 11.6k, False: 3.38M]
  ------------------
 1206|  11.6k|        return ofp_print_nxt_ct_flush(string, oh);
 1207|  3.39M|    }
 1208|       |
 1209|  8.29k|    return 0;
 1210|  3.39M|}
ofp-print.c:ofp_print_stats:
  629|   202k|{
  630|   202k|    uint16_t flags = ofpmp_flags(oh);
  631|       |
  632|   202k|    if (flags) {
  ------------------
  |  Branch (632:9): [True: 171k, False: 30.6k]
  ------------------
  633|   171k|        ds_put_cstr(string, " flags=");
  634|   171k|        if ((!ofpmsg_is_stat_request(oh) || oh->version >= OFP13_VERSION)
  ------------------
  |  Branch (634:14): [True: 144k, False: 26.7k]
  |  Branch (634:45): [True: 13.3k, False: 13.4k]
  ------------------
  635|   171k|            && (flags & OFPSF_REPLY_MORE)) {
  ------------------
  |  Branch (635:16): [True: 82.3k, False: 75.8k]
  ------------------
  636|  82.3k|            ds_put_cstr(string, "[more]");
  637|  82.3k|            flags &= ~OFPSF_REPLY_MORE;
  638|  82.3k|        }
  639|   171k|        if (flags) {
  ------------------
  |  Branch (639:13): [True: 168k, False: 2.94k]
  ------------------
  640|   168k|            ds_put_format(string, "[***unknown flags 0x%04"PRIx16"***]",
  641|   168k|                          flags);
  642|   168k|        }
  643|   171k|    }
  644|   202k|}
ofp-print.c:ofp_print_table_features_reply:
  231|  18.5k|{
  232|  18.5k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  233|       |
  234|  18.5k|    struct ofputil_table_features prev;
  235|  18.5k|    int first_ditto = -1, last_ditto = -1;
  236|  19.2k|    for (int i = 0; ; i++) {
  237|  19.2k|        struct ofputil_table_features tf;
  238|  19.2k|        struct ofpbuf raw_properties;
  239|  19.2k|        int retval = ofputil_decode_table_features(&b, &tf, &raw_properties);
  240|  19.2k|        if (retval) {
  ------------------
  |  Branch (240:13): [True: 18.5k, False: 736]
  ------------------
  241|  18.5k|            ofputil_table_features_format_finish(s, first_ditto, last_ditto);
  242|  18.5k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (242:20): [True: 18.2k, False: 304]
  ------------------
  243|  18.5k|        }
  244|       |
  245|    736|        ofputil_table_features_format(s, &tf, i ? &prev : NULL, NULL, NULL,
  ------------------
  |  Branch (245:47): [True: 197, False: 539]
  ------------------
  246|    736|                                      &first_ditto, &last_ditto);
  247|    736|        prev = tf;
  248|    736|    }
  249|  18.5k|}
ofp-print.c:ofp_print_table_desc_reply:
  829|  3.16k|{
  830|  3.16k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  831|  7.05k|    for (;;) {
  832|  7.05k|        struct ofputil_table_desc td;
  833|  7.05k|        int retval;
  834|       |
  835|  7.05k|        retval = ofputil_decode_table_desc(&b, &td, oh->version);
  836|  7.05k|        if (retval) {
  ------------------
  |  Branch (836:13): [True: 3.16k, False: 3.89k]
  ------------------
  837|  3.16k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (837:20): [True: 2.40k, False: 760]
  ------------------
  838|  3.16k|        }
  839|  3.89k|        ofputil_table_desc_format(s, &td, table_map);
  840|  3.89k|    }
  841|  3.16k|}
ofp-print.c:ofp_print_hello:
  421|   150k|{
  422|   150k|    ofputil_hello_format(string, oh);
  423|   150k|    return 0;
  424|   150k|}
ofp-print.c:ofp_print_error_msg:
  430|  1.88M|{
  431|  1.88M|    struct ofpbuf payload;
  432|  1.88M|    enum ofperr error = ofperr_decode_msg(oh, &payload);
  433|  1.88M|    if (!error) {
  ------------------
  |  Branch (433:9): [True: 748k, False: 1.13M]
  ------------------
  434|   748k|        return OFPERR_OFPBRC_BAD_LEN;
  435|   748k|    }
  436|  1.13M|    ofperr_msg_format(string, error, &payload, port_map, table_map);
  437|  1.13M|    ofpbuf_uninit(&payload);
  438|       |
  439|  1.13M|    return 0;
  440|  1.88M|}
ofp-print.c:ofp_print_echo:
  648|  54.6k|{
  649|  54.6k|    size_t len = ntohs(oh->length);
  650|       |
  651|  54.6k|    ds_put_format(string, " %"PRIuSIZE" bytes of payload\n", len - sizeof *oh);
  652|  54.6k|    if (verbosity > 1) {
  ------------------
  |  Branch (652:9): [True: 52.3k, False: 2.30k]
  ------------------
  653|  52.3k|        ds_put_hex_dump(string, oh + 1, len - sizeof *oh, 0, true);
  654|  52.3k|    }
  655|       |
  656|  54.6k|    return 0;
  657|  54.6k|}
ofp-print.c:ofp_print_switch_features:
  195|  9.32k|{
  196|  9.32k|    struct ofputil_switch_features features;
  197|  9.32k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  198|  9.32k|    enum ofperr error = ofputil_pull_switch_features(&b, &features);
  199|  9.32k|    if (!error) {
  ------------------
  |  Branch (199:9): [True: 9.32k, False: 0]
  ------------------
  200|  9.32k|        ofputil_switch_features_format(string, &features);
  201|  9.32k|        error = ofputil_phy_ports_format(string, oh->version, &b);
  202|  9.32k|    }
  203|  9.32k|    return error;
  204|  9.32k|}
ofp-print.c:ofp_print_get_config_reply:
  222|  2.98k|{
  223|  2.98k|    struct ofputil_switch_config config;
  224|  2.98k|    ofputil_decode_get_config_reply(oh, &config);
  225|  2.98k|    ofputil_switch_config_format(string, &config);
  226|  2.98k|    return 0;
  227|  2.98k|}
ofp-print.c:ofp_print_set_config:
  208|  12.4k|{
  209|  12.4k|    struct ofputil_switch_config config;
  210|  12.4k|    enum ofperr error;
  211|       |
  212|  12.4k|    error = ofputil_decode_set_config(oh, &config);
  213|  12.4k|    if (error) {
  ------------------
  |  Branch (213:9): [True: 10.4k, False: 2.00k]
  ------------------
  214|  10.4k|        return error;
  215|  10.4k|    }
  216|  2.00k|    ofputil_switch_config_format(string, &config);
  217|  2.00k|    return 0;
  218|  12.4k|}
ofp-print.c:ofp_print_packet_in:
  124|   232k|{
  125|   232k|    struct ofputil_packet_in_private pin;
  126|   232k|    uint32_t buffer_id;
  127|   232k|    size_t total_len;
  128|   232k|    enum ofperr error = ofputil_decode_packet_in_private(oh, true, NULL, NULL,
  129|   232k|                                                         &pin, &total_len,
  130|   232k|                                                         &buffer_id);
  131|   232k|    if (!error) {
  ------------------
  |  Branch (131:9): [True: 113k, False: 119k]
  ------------------
  132|   113k|        ofputil_packet_in_private_format(string, &pin, total_len, buffer_id,
  133|   113k|                                         port_map, table_map, verbosity);
  134|   113k|        ofputil_packet_in_private_destroy(&pin);
  135|   113k|    }
  136|   232k|    return error;
  137|   232k|}
ofp-print.c:ofp_print_flow_removed:
  284|  34.3k|{
  285|  34.3k|    struct ofputil_flow_removed fr;
  286|  34.3k|    enum ofperr error = ofputil_decode_flow_removed(&fr, oh);
  287|  34.3k|    if (!error) {
  ------------------
  |  Branch (287:9): [True: 7.70k, False: 26.6k]
  ------------------
  288|  7.70k|        ofputil_flow_removed_format(string, &fr, port_map, table_map);
  289|  7.70k|    }
  290|  34.3k|    return error;
  291|  34.3k|}
ofp-print.c:ofp_print_port_status:
  444|  6.77k|{
  445|  6.77k|    struct ofputil_port_status ps;
  446|  6.77k|    enum ofperr error = ofputil_decode_port_status(oh, &ps);
  447|  6.77k|    if (!error) {
  ------------------
  |  Branch (447:9): [True: 2.53k, False: 4.24k]
  ------------------
  448|  2.53k|        ofputil_port_status_format(string, &ps);
  449|  2.53k|    }
  450|  6.77k|    return error;
  451|  6.77k|}
ofp-print.c:ofp_print_packet_out:
  143|   330k|{
  144|   330k|    struct ofputil_packet_out po;
  145|   330k|    struct ofpbuf ofpacts;
  146|   330k|    enum ofperr error;
  147|       |
  148|   330k|    ofpbuf_init(&ofpacts, 64);
  149|   330k|    error = ofputil_decode_packet_out(&po, oh, NULL, &ofpacts);
  150|   330k|    if (!error) {
  ------------------
  |  Branch (150:9): [True: 59.6k, False: 270k]
  ------------------
  151|  59.6k|        ofputil_packet_out_format(string, &po, port_map, table_map, verbosity);
  152|  59.6k|    }
  153|   330k|    ofpbuf_uninit(&ofpacts);
  154|   330k|    return error;
  155|   330k|}
ofp-print.c:ofp_print_port_mod:
  296|  10.6k|{
  297|  10.6k|    struct ofputil_port_mod pm;
  298|  10.6k|    enum ofperr error = ofputil_decode_port_mod(oh, &pm, true);
  299|  10.6k|    if (!error) {
  ------------------
  |  Branch (299:9): [True: 2.45k, False: 8.24k]
  ------------------
  300|  2.45k|        ofputil_port_mod_format(string, &pm, port_map);
  301|  2.45k|    }
  302|  10.6k|    return error;
  303|  10.6k|}
ofp-print.c:ofp_print_table_mod:
  308|  16.1k|{
  309|  16.1k|    struct ofputil_table_mod tm;
  310|  16.1k|    enum ofperr error = ofputil_decode_table_mod(oh, &tm);
  311|  16.1k|    if (!error) {
  ------------------
  |  Branch (311:9): [True: 10.5k, False: 5.50k]
  ------------------
  312|  10.5k|        ofputil_table_mod_format(string, &tm, table_map);
  313|  10.5k|    }
  314|  16.1k|    return error;
  315|  16.1k|}
ofp-print.c:ofp_print_meter_mod:
  331|  11.9k|{
  332|  11.9k|    struct ofputil_meter_mod mm;
  333|  11.9k|    struct ofpbuf bands;
  334|       |
  335|  11.9k|    ofpbuf_init(&bands, 64);
  336|  11.9k|    enum ofperr error = ofputil_decode_meter_mod(oh, &mm, &bands);
  337|  11.9k|    if (!error) {
  ------------------
  |  Branch (337:9): [True: 1.52k, False: 10.3k]
  ------------------
  338|  1.52k|        ofputil_format_meter_mod(s, &mm);
  339|  1.52k|    }
  340|  11.9k|    ofpbuf_uninit(&bands);
  341|       |
  342|  11.9k|    return error;
  343|  11.9k|}
ofp-print.c:ofp_print_role_message:
  661|  13.7k|{
  662|  13.7k|    struct ofputil_role_request rr;
  663|  13.7k|    enum ofperr error = ofputil_decode_role_message(oh, &rr);
  664|  13.7k|    if (!error) {
  ------------------
  |  Branch (664:9): [True: 9.81k, False: 3.94k]
  ------------------
  665|  9.81k|        ofputil_format_role_message(string, &rr);
  666|  9.81k|    }
  667|  13.7k|    return error;
  668|  13.7k|}
ofp-print.c:ofp_print_role_status_message:
  672|  1.07k|{
  673|  1.07k|    struct ofputil_role_status rs;
  674|  1.07k|    enum ofperr error = ofputil_decode_role_status(oh, &rs);
  675|  1.07k|    if (!error) {
  ------------------
  |  Branch (675:9): [True: 552, False: 523]
  ------------------
  676|    552|        ofputil_format_role_status(string, &rs);
  677|    552|    }
  678|  1.07k|    return error;
  679|  1.07k|}
ofp-print.c:ofp_print_requestforward:
  901|  9.78k|{
  902|  9.78k|    struct ofputil_requestforward rf;
  903|  9.78k|    enum ofperr error = ofputil_decode_requestforward(oh, &rf);
  904|  9.78k|    if (!error) {
  ------------------
  |  Branch (904:9): [True: 1.19k, False: 8.58k]
  ------------------
  905|  1.19k|        ofputil_format_requestforward(string, oh->version,
  906|  1.19k|                                      &rf, port_map, table_map);
  907|  1.19k|        ofputil_destroy_requestforward(&rf);
  908|  1.19k|    }
  909|  9.78k|    return error;
  910|  9.78k|}
ofp-print.c:ofp_print_table_status_message:
  320|  3.94k|{
  321|  3.94k|    struct ofputil_table_status ts;
  322|  3.94k|    enum ofperr error = ofputil_decode_table_status(oh, &ts);
  323|  3.94k|    if (!error) {
  ------------------
  |  Branch (323:9): [True: 2.25k, False: 1.68k]
  ------------------
  324|  2.25k|        ofputil_format_table_status(string, &ts, table_map);
  325|  2.25k|    }
  326|  3.94k|    return error;
  327|  3.94k|}
ofp-print.c:ofp_print_meter_stats_request:
  347|    591|{
  348|    591|    uint32_t meter_id;
  349|       |
  350|    591|    ofputil_decode_meter_request(oh, &meter_id);
  351|    591|    ds_put_char(s, ' ');
  352|       |
  353|    591|    ofputil_format_meter_id(s, meter_id, '=');
  354|       |
  355|    591|    return 0;
  356|    591|}
ofp-print.c:ofp_print_meter_stats_reply:
  392|  1.57k|{
  393|  1.57k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  394|  1.57k|    struct ofpbuf bands;
  395|  1.57k|    int retval;
  396|       |
  397|  1.57k|    ofpbuf_init(&bands, 64);
  398|  3.22k|    for (;;) {
  399|  3.22k|        struct ofputil_meter_stats ms;
  400|       |
  401|  3.22k|        retval = ofputil_decode_meter_stats(&b, &ms, &bands);
  402|  3.22k|        if (retval) {
  ------------------
  |  Branch (402:13): [True: 1.57k, False: 1.65k]
  ------------------
  403|  1.57k|            break;
  404|  1.57k|        }
  405|  1.65k|        ds_put_char(s, '\n');
  406|  1.65k|        ofputil_format_meter_stats(s, &ms);
  407|  1.65k|    }
  408|  1.57k|    ofpbuf_uninit(&bands);
  409|       |
  410|  1.57k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (410:12): [True: 1.40k, False: 175]
  ------------------
  411|  1.57k|}
ofp-print.c:ofp_print_meter_config_reply:
  369|  2.10k|{
  370|  2.10k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  371|  2.10k|    struct ofpbuf bands;
  372|  2.10k|    int retval;
  373|       |
  374|  2.10k|    ofpbuf_init(&bands, 64);
  375|  4.14k|    for (;;) {
  376|  4.14k|        struct ofputil_meter_config mc;
  377|       |
  378|  4.14k|        retval = ofputil_decode_meter_config(&b, &mc, &bands);
  379|  4.14k|        if (retval) {
  ------------------
  |  Branch (379:13): [True: 2.10k, False: 2.04k]
  ------------------
  380|  2.10k|            break;
  381|  2.10k|        }
  382|  2.04k|        ds_put_char(s, '\n');
  383|  2.04k|        ofputil_format_meter_config(s, &mc);
  384|  2.04k|    }
  385|  2.10k|    ofpbuf_uninit(&bands);
  386|       |
  387|  2.10k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (387:12): [True: 1.27k, False: 829]
  ------------------
  388|  2.10k|}
ofp-print.c:ofp_print_meter_features_reply:
  360|    407|{
  361|    407|    struct ofputil_meter_features mf;
  362|    407|    ofputil_decode_meter_features(oh, &mf);
  363|    407|    ofputil_format_meter_features(s, &mf);
  364|    407|    return 0;
  365|    407|}
ofp-print.c:ofp_print_flow_stats_request:
  477|  5.61k|{
  478|  5.61k|    struct ofputil_flow_stats_request fsr;
  479|  5.61k|    enum ofperr error = ofputil_decode_flow_stats_request(&fsr, oh, NULL,
  480|  5.61k|                                                          NULL);
  481|  5.61k|    if (!error) {
  ------------------
  |  Branch (481:9): [True: 909, False: 4.70k]
  ------------------
  482|    909|        ofputil_flow_stats_request_format(string, &fsr, port_map, table_map);
  483|    909|    }
  484|  5.61k|    return error;
  485|  5.61k|}
ofp-print.c:ofp_print_ofpst_port_request:
  528|  5.50k|{
  529|  5.50k|    ofp_port_t ofp10_port;
  530|  5.50k|    enum ofperr error;
  531|       |
  532|  5.50k|    error = ofputil_decode_port_stats_request(oh, &ofp10_port);
  533|  5.50k|    if (error) {
  ------------------
  |  Branch (533:9): [True: 1.58k, False: 3.91k]
  ------------------
  534|  1.58k|        return error;
  535|  1.58k|    }
  536|       |
  537|  3.91k|    ds_put_cstr(string, " port_no=");
  538|  3.91k|    ofputil_format_port(ofp10_port, port_map, string);
  539|       |
  540|  3.91k|    return 0;
  541|  5.50k|}
ofp-print.c:ofp_print_ofpst_desc_reply:
  455|     44|{
  456|     44|    const struct ofp_desc_stats *ods = ofpmsg_body(oh);
  457|       |
  458|     44|    ds_put_char(string, '\n');
  459|     44|    ds_put_format(string, "Manufacturer: %.*s\n",
  460|     44|            (int) sizeof ods->mfr_desc, ods->mfr_desc);
  461|     44|    ds_put_format(string, "Hardware: %.*s\n",
  462|     44|            (int) sizeof ods->hw_desc, ods->hw_desc);
  463|     44|    ds_put_format(string, "Software: %.*s\n",
  464|     44|            (int) sizeof ods->sw_desc, ods->sw_desc);
  465|     44|    ds_put_format(string, "Serial Num: %.*s\n",
  466|     44|            (int) sizeof ods->serial_num, ods->serial_num);
  467|     44|    ds_put_format(string, "DP Description: %.*s\n",
  468|     44|            (int) sizeof ods->dp_desc, ods->dp_desc);
  469|       |
  470|     44|    return 0;
  471|     44|}
ofp-print.c:ofp_print_flow_stats_reply:
  491|  60.7k|{
  492|  60.7k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  493|  60.7k|    struct ofpbuf ofpacts;
  494|  60.7k|    int retval;
  495|       |
  496|  60.7k|    ofpbuf_init(&ofpacts, 64);
  497|  81.6k|    for (;;) {
  498|  81.6k|        struct ofputil_flow_stats fs;
  499|       |
  500|  81.6k|        retval = ofputil_decode_flow_stats_reply(&fs, &b, true, &ofpacts);
  501|  81.6k|        if (retval) {
  ------------------
  |  Branch (501:13): [True: 60.7k, False: 20.8k]
  ------------------
  502|  60.7k|            break;
  503|  60.7k|        }
  504|  20.8k|        ds_put_cstr(string, "\n ");
  505|  20.8k|        ofputil_flow_stats_format(string, &fs, port_map, table_map, true);
  506|  20.8k|     }
  507|  60.7k|    ofpbuf_uninit(&ofpacts);
  508|       |
  509|  60.7k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (509:12): [True: 48.6k, False: 12.1k]
  ------------------
  510|  60.7k|}
ofp-print.c:ofp_print_ofpst_port_reply:
  547|  11.0k|{
  548|  11.0k|    ds_put_format(string, " %"PRIuSIZE" ports\n",
  549|  11.0k|                  ofputil_count_port_stats(oh));
  550|  11.0k|    if (verbosity < 1) {
  ------------------
  |  Branch (550:9): [True: 0, False: 11.0k]
  ------------------
  551|      0|        return 0;
  552|      0|    }
  553|       |
  554|  11.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  555|  24.2k|    for (;;) {
  556|  24.2k|        struct ofputil_port_stats ps;
  557|  24.2k|        int retval;
  558|       |
  559|  24.2k|        retval = ofputil_decode_port_stats(&ps, &b);
  560|  24.2k|        if (retval) {
  ------------------
  |  Branch (560:13): [True: 11.0k, False: 13.2k]
  ------------------
  561|  11.0k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (561:20): [True: 4.68k, False: 6.37k]
  ------------------
  562|  11.0k|        }
  563|  13.2k|        ofputil_format_port_stats(string, &ps, port_map);
  564|  13.2k|        netdev_free_custom_stats_counters(&ps.custom_stats);
  565|  13.2k|    }
  566|  11.0k|}
ofp-print.c:ofp_print_table_stats_reply:
  570|  8.17k|{
  571|  8.17k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  572|  8.17k|    ofpraw_pull_assert(&b);
  573|       |
  574|  8.17k|    struct ofputil_table_features prev_features;
  575|  8.17k|    struct ofputil_table_stats prev_stats;
  576|  8.17k|    int first_ditto = -1, last_ditto = -1;
  577|  48.4k|    for (int i = 0;; i++) {
  578|  48.4k|        struct ofputil_table_features features;
  579|  48.4k|        struct ofputil_table_stats stats;
  580|  48.4k|        int retval;
  581|       |
  582|  48.4k|        retval = ofputil_decode_table_stats_reply(&b, &stats, &features);
  583|  48.4k|        if (retval) {
  ------------------
  |  Branch (583:13): [True: 8.17k, False: 40.3k]
  ------------------
  584|  8.17k|            ofputil_table_features_format_finish(string,
  585|  8.17k|                                                 first_ditto, last_ditto);
  586|  8.17k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (586:20): [True: 0, False: 8.17k]
  ------------------
  587|  8.17k|        }
  588|       |
  589|  40.3k|        ofputil_table_features_format(string,
  590|  40.3k|                                      &features, i ? &prev_features : NULL,
  ------------------
  |  Branch (590:50): [True: 36.8k, False: 3.48k]
  ------------------
  591|  40.3k|                                      &stats, i ? &prev_stats : NULL,
  ------------------
  |  Branch (591:47): [True: 36.8k, False: 3.48k]
  ------------------
  592|  40.3k|                                      &first_ditto, &last_ditto);
  593|  40.3k|        prev_features = features;
  594|  40.3k|        prev_stats = stats;
  595|  40.3k|    }
  596|  8.17k|}
ofp-print.c:ofp_print_aggregate_stats_reply:
  514|  9.39k|{
  515|  9.39k|    struct ofputil_aggregate_stats as;
  516|  9.39k|    enum ofperr error;
  517|       |
  518|  9.39k|    error = ofputil_decode_aggregate_stats_reply(&as, oh);
  519|  9.39k|    if (!error) {
  ------------------
  |  Branch (519:9): [True: 2.28k, False: 7.11k]
  ------------------
  520|  2.28k|        ofputil_aggregate_stats_format(string, &as);
  521|  2.28k|    }
  522|  9.39k|    return error;
  523|  9.39k|}
ofp-print.c:ofp_print_ofpst_port_desc_request:
  602|    291|{
  603|    291|    enum ofperr error;
  604|    291|    ofp_port_t port;
  605|       |
  606|    291|    error = ofputil_decode_port_desc_stats_request(oh, &port);
  607|    291|    if (error) {
  ------------------
  |  Branch (607:9): [True: 104, False: 187]
  ------------------
  608|    104|        return error;
  609|    104|    }
  610|       |
  611|    187|    ds_put_cstr(string, " port=");
  612|    187|    ofputil_format_port(port, port_map, string);
  613|       |
  614|    187|    return 0;
  615|    291|}
ofp-print.c:ofp_print_ofpst_port_desc_reply:
  620|    627|{
  621|    627|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  622|    627|    ofpraw_pull_assert(&b);
  623|    627|    ds_put_char(string, '\n');
  624|    627|    return ofputil_phy_ports_format(string, oh->version, &b);
  625|    627|}
ofp-print.c:ofp_print_nxt_flow_mod_table_id:
  683|     18|{
  684|     18|    bool enable = ofputil_decode_nx_flow_mod_table_id(oh);
  685|     18|    ds_put_format(string, " %s", enable ? "enable" : "disable");
  ------------------
  |  Branch (685:34): [True: 16, False: 2]
  ------------------
  686|     18|    return 0;
  687|     18|}
ofp-print.c:ofp_print_nxt_set_flow_format:
  691|    469|{
  692|    469|    enum ofputil_protocol p = ofputil_decode_nx_set_flow_format(oh);
  693|    469|    ds_put_format(string, " format=%s",
  694|    469|                  p == OFPUTIL_P_OF10_STD ? "openflow10"
  ------------------
  |  Branch (694:19): [True: 39, False: 430]
  ------------------
  695|    469|                  : p == OFPUTIL_P_OF10_NXM ? "nxm"
  ------------------
  |  Branch (695:21): [True: 252, False: 178]
  ------------------
  696|    430|                  : "(unknown)");
  697|    469|    return 0;
  698|    469|}
ofp-print.c:ofp_print_nxt_set_packet_in_format:
  703|    673|{
  704|    673|    enum ofputil_packet_in_format format;
  705|    673|    enum ofperr error = ofputil_decode_set_packet_in_format(oh, &format);
  706|    673|    if (!error) {
  ------------------
  |  Branch (706:9): [True: 228, False: 445]
  ------------------
  707|    228|        ds_put_format(string, " format=%s",
  708|    228|                      ofputil_packet_in_format_to_string(format));
  709|    228|    }
  710|    673|    return error;
  711|    673|}
ofp-print.c:ofp_print_nxt_set_controller_id:
  733|     18|{
  734|     18|    ds_put_format(string, " id=%"PRIu16, ntohs(nci->controller_id));
  735|     18|    return 0;
  736|     18|}
ofp-print.c:ofp_print_set_async_config:
  716|  16.0k|{
  717|  16.0k|    struct ofputil_async_cfg basis = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  16.0k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  718|  16.0k|    struct ofputil_async_cfg ac;
  719|       |
  720|  16.0k|    bool is_reply = ofptype == OFPTYPE_GET_ASYNC_REPLY;
  721|  16.0k|    enum ofperr error = ofputil_decode_set_async_config(oh, is_reply,
  722|  16.0k|                                                        &basis, &ac);
  723|  16.0k|    if (error) {
  ------------------
  |  Branch (723:9): [True: 7.09k, False: 8.93k]
  ------------------
  724|  7.09k|        return error;
  725|  7.09k|    }
  726|  8.93k|    ofputil_format_set_async_config(string, &ac);
  727|  8.93k|    return 0;
  728|  16.0k|}
ofp-print.c:ofp_print_nxt_flow_monitor_cancel:
  741|     24|{
  742|     24|    ds_put_format(string, " id=%"PRIu32,
  743|     24|                  ofputil_decode_flow_monitor_cancel(oh));
  744|     24|    return 0;
  745|     24|}
ofp-print.c:ofp_print_flow_monitor_request:
  752|  7.86k|{
  753|  7.86k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  754|  13.9k|    for (;;) {
  755|  13.9k|        struct ofputil_flow_monitor_request request;
  756|  13.9k|        int retval;
  757|       |
  758|  13.9k|        retval = ofputil_decode_flow_monitor_request(&request, &b);
  759|  13.9k|        if (retval) {
  ------------------
  |  Branch (759:13): [True: 7.86k, False: 6.04k]
  ------------------
  760|  7.86k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (760:20): [True: 6.96k, False: 899]
  ------------------
  761|  7.86k|        }
  762|       |
  763|  6.04k|        ofputil_flow_monitor_request_format(string, &request,
  764|  6.04k|                                            port_map, table_map);
  765|  6.04k|    }
  766|  7.86k|}
ofp-print.c:ofp_print_flow_monitor_reply:
  773|  34.0k|{
  774|  34.0k|    uint64_t ofpacts_stub[1024 / 8];
  775|  34.0k|    struct ofpbuf ofpacts = OFPBUF_STUB_INITIALIZER(ofpacts_stub);
  ------------------
  |  |   78|  34.0k|#define OFPBUF_STUB_INITIALIZER(STUB) {         \
  |  |   79|  34.0k|        .base = (STUB),                         \
  |  |   80|  34.0k|        .data = (STUB),                         \
  |  |   81|  34.0k|        .size = 0,                              \
  |  |   82|  34.0k|        .allocated = sizeof (STUB),             \
  |  |   83|  34.0k|        .header = NULL,                         \
  |  |   84|  34.0k|        .msg = NULL,                            \
  |  |   85|  34.0k|        .list_node = OVS_LIST_POISON,           \
  |  |   86|  34.0k|        .source = OFPBUF_STUB,                  \
  |  |   87|  34.0k|    }
  ------------------
  776|  34.0k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  777|       |
  778|  46.6k|    for (;;) {
  779|  46.6k|        struct ofputil_flow_update update;
  780|  46.6k|        int retval = ofputil_decode_flow_update(&update, &b, &ofpacts);
  781|  46.6k|        if (retval) {
  ------------------
  |  Branch (781:13): [True: 34.0k, False: 12.5k]
  ------------------
  782|  34.0k|            ofpbuf_uninit(&ofpacts);
  783|  34.0k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (783:20): [True: 24.5k, False: 9.58k]
  ------------------
  784|  34.0k|        }
  785|  12.5k|        ofputil_flow_update_format(string, &update, port_map, table_map);
  786|  12.5k|    }
  787|  34.0k|}
ofp-print.c:ofp_print_bundle_ctrl:
  845|    561|{
  846|    561|    int error;
  847|    561|    struct ofputil_bundle_ctrl_msg bctrl;
  848|       |
  849|    561|    error = ofputil_decode_bundle_ctrl(oh, &bctrl);
  850|    561|    if (error) {
  ------------------
  |  Branch (850:9): [True: 0, False: 561]
  ------------------
  851|      0|        return error;
  852|      0|    }
  853|    561|    ofputil_format_bundle_ctrl_request(s, &bctrl);
  854|    561|    return 0;
  855|    561|}
ofp-print.c:ofp_print_bundle_add:
  862|  22.2k|{
  863|  22.2k|    struct ofputil_bundle_add_msg badd;
  864|  22.2k|    int error = ofputil_decode_bundle_add(oh, &badd, NULL);
  865|  22.2k|    if (!error) {
  ------------------
  |  Branch (865:9): [True: 14.9k, False: 7.30k]
  ------------------
  866|  14.9k|        ofputil_format_bundle_add(s, &badd, port_map, table_map, verbosity);
  867|  14.9k|    }
  868|  22.2k|    return error;
  869|  22.2k|}
ofp-print.c:ofp_print_tlv_table_mod:
  873|  5.96k|{
  874|  5.96k|    struct ofputil_tlv_table_mod ttm;
  875|  5.96k|    int error = ofputil_decode_tlv_table_mod(oh, &ttm);
  876|  5.96k|    if (!error) {
  ------------------
  |  Branch (876:9): [True: 1.51k, False: 4.44k]
  ------------------
  877|  1.51k|        ofputil_format_tlv_table_mod(s, &ttm);
  878|  1.51k|        ofputil_uninit_tlv_table(&ttm.mappings);
  879|  1.51k|    }
  880|  5.96k|    return error;
  881|  5.96k|}
ofp-print.c:ofp_print_tlv_table_reply:
  885|  1.47k|{
  886|  1.47k|    struct ofputil_tlv_table_reply ttr;
  887|  1.47k|    int error = ofputil_decode_tlv_table_reply(oh, &ttr);
  888|  1.47k|    if (!error) {
  ------------------
  |  Branch (888:9): [True: 861, False: 612]
  ------------------
  889|    861|        ofputil_format_tlv_table_reply(s, &ttr);
  890|    861|        ofputil_uninit_tlv_table(&ttr.mappings);
  891|    861|    }
  892|  1.47k|    return error;
  893|  1.47k|}
ofp-print.c:ofp_print_nxst_ipfix_bridge_reply:
  914|    358|{
  915|    358|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  916|    716|    for (;;) {
  917|    716|        struct ofputil_ipfix_stats is;
  918|    716|        int retval;
  919|       |
  920|    716|        retval = ofputil_pull_ipfix_stats(&is, &b);
  921|    716|        if (retval) {
  ------------------
  |  Branch (921:13): [True: 358, False: 358]
  ------------------
  922|    358|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (922:20): [True: 0, False: 358]
  ------------------
  923|    358|        }
  924|    358|        ofputil_format_ipfix_stats_bridge(string, &is);
  925|    358|    }
  926|    358|}
ofp-print.c:ofp_print_nxst_ipfix_flow_reply:
  930|  1.42k|{
  931|  1.42k|    ds_put_format(string, " %"PRIuSIZE" ids\n", ofputil_count_ipfix_stats(oh));
  932|       |
  933|  1.42k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  934|  7.94k|    for (;;) {
  935|  7.94k|        struct ofputil_ipfix_stats is;
  936|  7.94k|        int retval;
  937|       |
  938|  7.94k|        retval = ofputil_pull_ipfix_stats(&is, &b);
  939|  7.94k|        if (retval) {
  ------------------
  |  Branch (939:13): [True: 1.42k, False: 6.51k]
  ------------------
  940|  1.42k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (940:20): [True: 0, False: 1.42k]
  ------------------
  941|  1.42k|        }
  942|  6.51k|        ofputil_format_ipfix_stats_flow(string, &is);
  943|  6.51k|    }
  944|  1.42k|}
ofp-print.c:ofp_print_nxt_ct_flush_zone:
  948|     11|{
  949|     11|    ds_put_format(string, " zone_id=%"PRIu16, ntohs(nzi->zone_id));
  950|     11|    return 0;
  951|     11|}
ofp-print.c:ofp_print_nxt_ct_flush:
  955|  11.6k|{
  956|  11.6k|    uint16_t zone_id = 0;
  957|  11.6k|    struct ofp_ct_match match = {0};
  958|       |
  959|  11.6k|    enum ofperr error = ofp_ct_match_decode(&match, NULL, &zone_id, oh);
  960|  11.6k|    if (error) {
  ------------------
  |  Branch (960:9): [True: 7.04k, False: 4.62k]
  ------------------
  961|  7.04k|        return error;
  962|  7.04k|    }
  963|       |
  964|  4.62k|    ds_put_format(string, " zone=%"PRIu16" ", zone_id);
  965|  4.62k|    ofp_ct_match_format(string, &match);
  966|       |
  967|  4.62k|    return 0;
  968|  11.6k|}
ofp-print.c:add_newline:
 1214|  8.48M|{
 1215|  8.48M|    if (s->length && s->string[s->length - 1] != '\n') {
  ------------------
  |  Branch (1215:9): [True: 8.48M, False: 0]
  |  Branch (1215:22): [True: 422k, False: 8.05M]
  ------------------
 1216|   422k|        ds_put_char(s, '\n');
 1217|   422k|    }
 1218|  8.48M|}
ofp-print.c:ofp_print_error:
  415|  3.29M|{
  416|  3.29M|    ds_put_format(string, "***decode error: %s***\n", ofperr_get_name(error));
  417|  3.29M|}
ofp-print.c:print_and_free:
 1295|  5.03M|{
 1296|  5.03M|    fputs(string, stream);
 1297|  5.03M|    free(string);
 1298|  5.03M|}

ofpprop_pull__:
   74|   363k|{
   75|   363k|    struct ofp_prop_header *oph;
   76|   363k|    unsigned int padded_len;
   77|   363k|    unsigned int len;
   78|       |
   79|   363k|    if (msg->size < sizeof *oph) {
  ------------------
  |  Branch (79:9): [True: 690, False: 363k]
  ------------------
   80|    690|        return OFPERR_OFPBPC_BAD_LEN;
   81|    690|    }
   82|       |
   83|   363k|    oph = msg->data;
   84|   363k|    len = ntohs(oph->len);
   85|   363k|    padded_len = ROUND_UP(len, alignment);
  ------------------
  |  |  299|   363k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|   363k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   86|   363k|    if (len < sizeof *oph || padded_len > msg->size) {
  ------------------
  |  Branch (86:9): [True: 12.8k, False: 350k]
  |  Branch (86:30): [True: 45.0k, False: 305k]
  ------------------
   87|  57.8k|        return OFPERR_OFPBPC_BAD_LEN;
   88|  57.8k|    }
   89|       |
   90|   305k|    uint16_t type = ntohs(oph->type);
   91|   305k|    if (type < min_exp) {
  ------------------
  |  Branch (91:9): [True: 258k, False: 46.9k]
  ------------------
   92|   258k|        *typep = type;
   93|   258k|    } else {
   94|  46.9k|        struct ofp_prop_experimenter *ope = msg->data;
   95|  46.9k|        if (len < sizeof *ope) {
  ------------------
  |  Branch (95:13): [True: 243, False: 46.6k]
  ------------------
   96|    243|            return OFPERR_OFPBPC_BAD_LEN;
   97|    243|        }
   98|       |
   99|  46.6k|        if (!ope->experimenter) {
  ------------------
  |  Branch (99:13): [True: 198, False: 46.4k]
  ------------------
  100|       |            /* Reject experimenter 0 because it yields ambiguity with standard
  101|       |             * property types. */
  102|    198|            return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  103|    198|        }
  104|       |
  105|  46.4k|        *typep = OFPPROP_EXP(ntohl(ope->experimenter), ntohl(ope->exp_type));
  ------------------
  |  |   67|  46.4k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  106|  46.4k|    }
  107|       |
  108|   304k|    if (property) {
  ------------------
  |  Branch (108:9): [True: 298k, False: 6.62k]
  ------------------
  109|   298k|        ofpbuf_use_const(property, msg->data, len);
  110|   298k|        property->header = property->data;
  111|   298k|        property->msg = ((uint8_t *) property->data
  112|   298k|                         + (type < min_exp
  ------------------
  |  Branch (112:29): [True: 251k, False: 46.4k]
  ------------------
  113|   298k|                            ? sizeof(struct ofp_prop_header)
  114|   298k|                            : sizeof(struct ofp_prop_experimenter)));
  115|   298k|    }
  116|   304k|    ofpbuf_pull(msg, padded_len);
  117|   304k|    return 0;
  118|   305k|}
ofpprop_pull:
  135|   339k|{
  136|   339k|    return ofpprop_pull__(msg, property, 8, 0xffff, typep);
  137|   339k|}
ofpprop_parse_be16:
  144|  8.73k|{
  145|       |    /* OpenFlow uses 8-byte properties for 16-bit values, which doesn't really
  146|       |     * make sense.  Be forgiving by allowing any size payload as long as it's
  147|       |     * at least big enough.  */
  148|  8.73k|    ovs_be16 *p = property->msg;
  149|  8.73k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (149:9): [True: 1.31k, False: 7.41k]
  ------------------
  150|  1.31k|        return OFPERR_OFPBPC_BAD_LEN;
  151|  1.31k|    }
  152|  7.41k|    *value = *p;
  153|  7.41k|    return 0;
  154|  8.73k|}
ofpprop_parse_be32:
  161|  13.0k|{
  162|  13.0k|    ovs_be32 *p = property->msg;
  163|  13.0k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (163:9): [True: 1.39k, False: 11.7k]
  ------------------
  164|  1.39k|        return OFPERR_OFPBPC_BAD_LEN;
  165|  1.39k|    }
  166|  11.7k|    *value = *p;
  167|  11.7k|    return 0;
  168|  13.0k|}
ofpprop_parse_be64:
  175|    192|{
  176|    192|    ovs_be64 *p;
  177|    192|    size_t be64_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  299|    192|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|    192|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  178|    192|    if (property->size != be64_offset + sizeof *p) {
  ------------------
  |  Branch (178:9): [True: 158, False: 34]
  ------------------
  179|    158|        return OFPERR_OFPBPC_BAD_LEN;
  180|    158|    }
  181|       |
  182|     34|    p = ALIGNED_CAST(ovs_be64 *, (char *) property->data + be64_offset);
  ------------------
  |  |  430|     34|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  183|     34|    *value = *p;
  184|     34|    return 0;
  185|    192|}
ofpprop_parse_u8:
  192|  5.64k|{
  193|       |    /* OpenFlow 1.5 and earlier don't have any 8-bit properties, but it uses
  194|       |     * 8-byte properties for 16-bit values, which doesn't really make sense.
  195|       |     * Be forgiving by allowing any size payload as long as it's at least big
  196|       |     * enough. */
  197|  5.64k|    uint8_t *p = property->msg;
  198|  5.64k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (198:9): [True: 1.57k, False: 4.07k]
  ------------------
  199|  1.57k|        return OFPERR_OFPBPC_BAD_LEN;
  200|  1.57k|    }
  201|  4.07k|    *value = *p;
  202|  4.07k|    return 0;
  203|  5.64k|}
ofpprop_parse_u16:
  210|  9.68k|{
  211|       |    /* OpenFlow uses 8-byte properties for 16-bit values, which doesn't really
  212|       |     * make sense.  Be forgiving by allowing any size payload as long as it's
  213|       |     * at least big enough.  */
  214|  9.68k|    ovs_be16 *p = property->msg;
  215|  9.68k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (215:9): [True: 112, False: 9.57k]
  ------------------
  216|    112|        return OFPERR_OFPBPC_BAD_LEN;
  217|    112|    }
  218|  9.57k|    *value = ntohs(*p);
  219|  9.57k|    return 0;
  220|  9.68k|}
ofpprop_parse_u32:
  227|  29.4k|{
  228|  29.4k|    ovs_be32 *p = property->msg;
  229|  29.4k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (229:9): [True: 2.35k, False: 27.0k]
  ------------------
  230|  2.35k|        return OFPERR_OFPBPC_BAD_LEN;
  231|  2.35k|    }
  232|  27.0k|    *value = ntohl(*p);
  233|  27.0k|    return 0;
  234|  29.4k|}
ofpprop_parse_uuid:
  258|    378|{
  259|    378|    struct uuid *p = property->msg;
  260|    378|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (260:9): [True: 222, False: 156]
  ------------------
  261|    222|        return OFPERR_OFPBPC_BAD_LEN;
  262|    222|    }
  263|    156|    *uuid = *p;
  264|    156|    return 0;
  265|    378|}
ofpprop_parse_nested:
  277|  26.0k|{
  278|  26.0k|    size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  299|  26.0k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  26.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  279|  26.0k|    if (property->size < nested_offset) {
  ------------------
  |  Branch (279:9): [True: 265, False: 25.8k]
  ------------------
  280|    265|        return OFPERR_OFPBPC_BAD_LEN;
  281|    265|    }
  282|       |
  283|  25.8k|    ofpbuf_use_const(nested, property->data, property->size);
  284|  25.8k|    ofpbuf_pull(nested, nested_offset);
  285|  25.8k|    return 0;
  286|  26.0k|}
ofpprop_unknown:
  483|  43.2k|{
  484|  43.2k|    bool is_experimenter = ofpprop_is_experimenter(type);
  485|       |
  486|  43.2k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
  ------------------
  |  |  110|  43.2k|        {                                                                 \
  |  |  111|  43.2k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   172k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  |  Branch (37:48): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  43.2k|            0,                              /* first_dropped */           \
  |  |  113|  43.2k|            0,                              /* last_dropped */            \
  |  |  114|  43.2k|            0,                              /* n_dropped */               \
  |  |  115|  43.2k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  43.2k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  43.2k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  43.2k|        }
  ------------------
  487|  43.2k|    enum vlog_level level = loose ? VLL_DBG : VLL_WARN;
  ------------------
  |  Branch (487:29): [True: 33.5k, False: 9.69k]
  ------------------
  488|  43.2k|    if (!is_experimenter) {
  ------------------
  |  Branch (488:9): [True: 35.5k, False: 7.68k]
  ------------------
  489|  35.5k|        vlog_rate_limit(module, level, &rl, "unknown %s property type %"PRId64,
  490|  35.5k|                        msg, type);
  491|  35.5k|    } else {
  492|  7.68k|        vlog_rate_limit(module, level, &rl,
  493|  7.68k|                        "unknown %s property type for exp_id 0x%"PRIx32", "
  494|  7.68k|                        "exp_type %"PRId32, msg,
  495|  7.68k|                        ofpprop_type_to_exp_id(type),
  496|  7.68k|                        ofpprop_type_to_exp_type(type));
  497|  7.68k|    }
  498|       |
  499|       |    /* There's an error OFPBPC_BAD_EXPERIMENTER that we could use for
  500|       |     * experimenter IDs that we don't know at all, but that seems like a
  501|       |     * difficult distinction and OFPERR_OFPBPC_BAD_EXP_TYPE communicates the
  502|       |     * problem quite well. */
  503|  43.2k|    return (loose ? 0
  ------------------
  |  Branch (503:13): [True: 33.5k, False: 9.69k]
  ------------------
  504|  43.2k|            : is_experimenter ? OFPERR_OFPBPC_BAD_EXP_TYPE
  ------------------
  |  Branch (504:15): [True: 5.46k, False: 4.23k]
  ------------------
  505|  9.69k|            : OFPERR_OFPBPC_BAD_TYPE);
  506|  43.2k|}
ofp-prop.c:ofpprop_type_to_exp_id:
   44|  7.68k|{
   45|  7.68k|    return type >> 32;
   46|  7.68k|}
ofp-prop.c:ofpprop_type_to_exp_type:
   50|  7.68k|{
   51|  7.68k|    return type & UINT32_MAX;
   52|  7.68k|}

ofputil_protocols_from_ofp_version:
   65|   227k|{
   66|   227k|    switch (version) {
   67|   149k|    case OFP10_VERSION:
  ------------------
  |  Branch (67:5): [True: 149k, False: 78.1k]
  ------------------
   68|   149k|        return OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY;
  ------------------
  |  |   58|   149k|#define OFPUTIL_P_OF10_STD_ANY (OFPUTIL_P_OF10_STD | OFPUTIL_P_OF10_STD_TID)
  ------------------
                      return OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY;
  ------------------
  |  |   59|   149k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  ------------------
   69|  8.02k|    case OFP11_VERSION:
  ------------------
  |  Branch (69:5): [True: 8.02k, False: 219k]
  ------------------
   70|  8.02k|        return OFPUTIL_P_OF11_STD;
   71|  8.08k|    case OFP12_VERSION:
  ------------------
  |  Branch (71:5): [True: 8.08k, False: 219k]
  ------------------
   72|  8.08k|        return OFPUTIL_P_OF12_OXM;
   73|    410|    case OFP13_VERSION:
  ------------------
  |  Branch (73:5): [True: 410, False: 226k]
  ------------------
   74|    410|        return OFPUTIL_P_OF13_OXM;
   75|  61.1k|    case OFP14_VERSION:
  ------------------
  |  Branch (75:5): [True: 61.1k, False: 166k]
  ------------------
   76|  61.1k|        return OFPUTIL_P_OF14_OXM;
   77|    494|    case OFP15_VERSION:
  ------------------
  |  Branch (77:5): [True: 494, False: 226k]
  ------------------
   78|    494|        return OFPUTIL_P_OF15_OXM;
   79|      0|    default:
  ------------------
  |  Branch (79:5): [True: 0, False: 227k]
  ------------------
   80|      0|        return 0;
   81|   227k|    }
   82|   227k|}
ofputil_protocol_from_ofp_version:
   91|   227k|{
   92|   227k|    return rightmost_1bit(ofputil_protocols_from_ofp_version(version));
   93|   227k|}
ofputil_protocol_set_tid:
  173|   227k|{
  174|   227k|    switch (protocol) {
  175|   149k|    case OFPUTIL_P_OF10_STD:
  ------------------
  |  Branch (175:5): [True: 149k, False: 78.1k]
  ------------------
  176|   149k|    case OFPUTIL_P_OF10_STD_TID:
  ------------------
  |  Branch (176:5): [True: 0, False: 227k]
  ------------------
  177|   149k|        return enable ? OFPUTIL_P_OF10_STD_TID : OFPUTIL_P_OF10_STD;
  ------------------
  |  Branch (177:16): [True: 149k, False: 0]
  ------------------
  178|       |
  179|      0|    case OFPUTIL_P_OF10_NXM:
  ------------------
  |  Branch (179:5): [True: 0, False: 227k]
  ------------------
  180|      0|    case OFPUTIL_P_OF10_NXM_TID:
  ------------------
  |  Branch (180:5): [True: 0, False: 227k]
  ------------------
  181|      0|        return enable ? OFPUTIL_P_OF10_NXM_TID : OFPUTIL_P_OF10_NXM;
  ------------------
  |  Branch (181:16): [True: 0, False: 0]
  ------------------
  182|       |
  183|  8.02k|    case OFPUTIL_P_OF11_STD:
  ------------------
  |  Branch (183:5): [True: 8.02k, False: 219k]
  ------------------
  184|  8.02k|        return OFPUTIL_P_OF11_STD;
  185|       |
  186|  8.08k|    case OFPUTIL_P_OF12_OXM:
  ------------------
  |  Branch (186:5): [True: 8.08k, False: 219k]
  ------------------
  187|  8.08k|        return OFPUTIL_P_OF12_OXM;
  188|       |
  189|    410|    case OFPUTIL_P_OF13_OXM:
  ------------------
  |  Branch (189:5): [True: 410, False: 226k]
  ------------------
  190|    410|        return OFPUTIL_P_OF13_OXM;
  191|       |
  192|  61.1k|    case OFPUTIL_P_OF14_OXM:
  ------------------
  |  Branch (192:5): [True: 61.1k, False: 166k]
  ------------------
  193|  61.1k|        return OFPUTIL_P_OF14_OXM;
  194|       |
  195|    494|    case OFPUTIL_P_OF15_OXM:
  ------------------
  |  Branch (195:5): [True: 494, False: 226k]
  ------------------
  196|    494|        return OFPUTIL_P_OF15_OXM;
  197|       |
  198|      0|    default:
  ------------------
  |  Branch (198:5): [True: 0, False: 227k]
  ------------------
  199|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  200|   227k|    }
  201|   227k|}
ofputil_format_version:
  508|  2.70M|{
  509|  2.70M|    ds_put_format(msg, "0x%02x", version);
  510|  2.70M|}
ofputil_format_version_bitmap:
  534|   150k|{
  535|   150k|    ofputil_format_version_bitmap__(msg, bitmap, ofputil_format_version);
  536|   150k|}
ofputil_decode_nx_set_flow_format:
  635|    469|{
  636|    469|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  637|    469|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_FLOW_FORMAT);
  ------------------
  |  |   58|    469|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  638|       |
  639|    469|    ovs_be32 *flow_formatp = ofpbuf_pull(&b, sizeof *flow_formatp);
  640|    469|    uint32_t flow_format = ntohl(*flow_formatp);
  641|    469|    switch (flow_format) {
  642|     39|    case NXFF_OPENFLOW10:
  ------------------
  |  Branch (642:5): [True: 39, False: 430]
  ------------------
  643|     39|        return OFPUTIL_P_OF10_STD;
  644|       |
  645|    252|    case NXFF_NXM:
  ------------------
  |  Branch (645:5): [True: 252, False: 217]
  ------------------
  646|    252|        return OFPUTIL_P_OF10_NXM;
  647|       |
  648|    178|    default:
  ------------------
  |  Branch (648:5): [True: 178, False: 291]
  ------------------
  649|    178|        VLOG_WARN_RL(&rl, "NXT_SET_FLOW_FORMAT message specified invalid "
  ------------------
  |  |  223|    178|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    178|    do {                                                                \
  |  |  |  |  287|    178|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    178|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 178]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    178|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  650|    178|                     "flow format %"PRIu32, flow_format);
  651|    178|        return 0;
  652|    469|    }
  653|    469|}
ofputil_decode_nx_flow_mod_table_id:
  712|     18|{
  713|     18|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  714|     18|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_FLOW_MOD_TABLE_ID);
  ------------------
  |  |   58|     18|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  715|     18|    uint8_t *enable = ofpbuf_pull(&b, 8);
  716|     18|    return *enable != 0;
  717|     18|}
ofp-protocol.c:ofputil_format_version_bitmap__:
  522|   150k|{
  523|  2.85M|    while (bitmap) {
  ------------------
  |  Branch (523:12): [True: 2.70M, False: 150k]
  ------------------
  524|  2.70M|        format_version(msg, raw_ctz(bitmap));
  525|  2.70M|        bitmap = zero_rightmost_1bit(bitmap);
  526|  2.70M|        if (bitmap) {
  ------------------
  |  Branch (526:13): [True: 2.55M, False: 150k]
  ------------------
  527|  2.55M|            ds_put_cstr(msg, ", ");
  528|  2.55M|        }
  529|  2.70M|    }
  530|   150k|}

ofputil_decode_queue_get_config_request:
   90|  2.00k|{
   91|  2.00k|    const struct ofp10_queue_get_config_request *qgcr10;
   92|  2.00k|    const struct ofp11_queue_get_config_request *qgcr11;
   93|  2.00k|    const struct ofp14_queue_desc_request *qdr14;
   94|  2.00k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   95|  2.00k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   96|       |
   97|  2.00k|    switch ((int) raw) {
   98|  1.08k|    case OFPRAW_OFPT10_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (98:5): [True: 1.08k, False: 919]
  ------------------
   99|  1.08k|        qgcr10 = b.data;
  100|  1.08k|        *port = u16_to_ofp(ntohs(qgcr10->port));
  101|  1.08k|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|  1.08k|#define OFPQ_ALL      0xffffffff
  ------------------
  102|  1.08k|        break;
  103|       |
  104|    277|    case OFPRAW_OFPT11_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (104:5): [True: 277, False: 1.72k]
  ------------------
  105|    277|        qgcr11 = b.data;
  106|    277|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|    277|#define OFPQ_ALL      0xffffffff
  ------------------
  107|    277|        enum ofperr error = ofputil_port_from_ofp11(qgcr11->port, port);
  108|    277|        if (error || *port == OFPP_ANY) {
  ------------------
  |  |   80|    174|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    174|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    174|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:13): [True: 103, False: 174]
  |  Branch (108:22): [True: 18, False: 156]
  ------------------
  109|    121|            return error;
  110|    121|        }
  111|    156|        break;
  112|       |
  113|    642|    case OFPRAW_OFPST14_QUEUE_DESC_REQUEST:
  ------------------
  |  Branch (113:5): [True: 642, False: 1.36k]
  ------------------
  114|    642|        qdr14 = b.data;
  115|    642|        *queue = ntohl(qdr14->queue);
  116|    642|        return ofputil_port_from_ofp11(qdr14->port, port);
  117|       |
  118|      0|    default:
  ------------------
  |  Branch (118:5): [True: 0, False: 2.00k]
  ------------------
  119|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  120|  2.00k|    }
  121|       |
  122|  1.24k|    return (ofp_to_u16(*port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  1.24k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.24k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (122:13): [True: 1.15k, False: 84]
  ------------------
  123|  1.24k|            ? 0
  124|  1.24k|            : OFPERR_OFPQOFC_BAD_PORT);
  125|  2.00k|}
ofputil_queue_get_config_request_format:
  131|  2.00k|{
  132|  2.00k|    enum ofperr error;
  133|  2.00k|    ofp_port_t port;
  134|  2.00k|    uint32_t queue;
  135|       |
  136|  2.00k|    error = ofputil_decode_queue_get_config_request(oh, &port, &queue);
  137|  2.00k|    if (error) {
  ------------------
  |  Branch (137:9): [True: 363, False: 1.64k]
  ------------------
  138|    363|        return error;
  139|    363|    }
  140|       |
  141|  1.64k|    ds_put_cstr(string, " port=");
  142|  1.64k|    ofputil_format_port(port, port_map, string);
  143|       |
  144|  1.64k|    if (queue != OFPQ_ALL) {
  ------------------
  |  |  416|  1.64k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (144:9): [True: 466, False: 1.17k]
  ------------------
  145|    466|        ds_put_cstr(string, " queue=");
  146|    466|        ofp_print_queue_name(string, queue);
  147|    466|    }
  148|       |
  149|  1.64k|    return 0;
  150|  2.00k|}
ofputil_pull_queue_get_config_reply:
  430|  23.7k|{
  431|  23.7k|    enum ofpraw raw;
  432|  23.7k|    if (!msg->header) {
  ------------------
  |  Branch (432:9): [True: 12.6k, False: 11.1k]
  ------------------
  433|       |        /* Pull OpenFlow header. */
  434|  12.6k|        raw = ofpraw_pull_assert(msg);
  435|       |
  436|       |        /* Pull protocol-specific ofp_queue_get_config_reply header (OF1.4
  437|       |         * doesn't have one at all). */
  438|  12.6k|        if (raw == OFPRAW_OFPT10_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (438:13): [True: 5.82k, False: 6.80k]
  ------------------
  439|  5.82k|            ofpbuf_pull(msg, sizeof(struct ofp10_queue_get_config_reply));
  440|  6.80k|        } else if (raw == OFPRAW_OFPT11_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (440:20): [True: 210, False: 6.59k]
  ------------------
  441|    210|            ofpbuf_pull(msg, sizeof(struct ofp11_queue_get_config_reply));
  442|  6.59k|        } else {
  443|  6.59k|            ovs_assert(raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY);
  ------------------
  |  |   58|  6.59k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  444|  6.59k|        }
  445|  12.6k|    } else {
  446|  11.1k|        raw = ofpraw_decode_assert(msg->header);
  447|  11.1k|    }
  448|       |
  449|  23.7k|    queue->min_rate = UINT16_MAX;
  450|  23.7k|    queue->max_rate = UINT16_MAX;
  451|       |
  452|  23.7k|    if (!msg->size) {
  ------------------
  |  Branch (452:9): [True: 1.86k, False: 21.9k]
  ------------------
  453|  1.86k|        return EOF;
  454|  21.9k|    } else if (raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY) {
  ------------------
  |  Branch (454:16): [True: 13.1k, False: 8.73k]
  ------------------
  455|  13.1k|        return ofputil_pull_queue_get_config_reply14(msg, queue);
  456|  13.1k|    } else {
  457|  8.73k|        return ofputil_pull_queue_get_config_reply10(msg, queue);
  458|  8.73k|    }
  459|  23.7k|}
ofputil_queue_get_config_reply_format:
  493|  12.6k|{
  494|  12.6k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  495|       |
  496|  12.6k|    struct ofputil_queue_config *queues = NULL;
  497|  12.6k|    size_t allocated_queues = 0;
  498|  12.6k|    size_t n = 0;
  499|       |
  500|  12.6k|    int retval = 0;
  501|  23.7k|    for (;;) {
  502|  23.7k|        if (n >= allocated_queues) {
  ------------------
  |  Branch (502:13): [True: 20.9k, False: 2.85k]
  ------------------
  503|  20.9k|            queues = x2nrealloc(queues, &allocated_queues, sizeof *queues);
  504|  20.9k|        }
  505|  23.7k|        retval = ofputil_pull_queue_get_config_reply(&b, &queues[n]);
  506|  23.7k|        if (retval) {
  ------------------
  |  Branch (506:13): [True: 12.6k, False: 11.1k]
  ------------------
  507|  12.6k|            break;
  508|  12.6k|        }
  509|  11.1k|        n++;
  510|  11.1k|    }
  511|       |
  512|  12.6k|    qsort(queues, n, sizeof *queues, compare_queues);
  513|       |
  514|  12.6k|    ds_put_char(string, ' ');
  515|       |
  516|  12.6k|    ofp_port_t port = 0;
  517|  23.7k|    for (const struct ofputil_queue_config *q = queues; q < &queues[n]; q++) {
  ------------------
  |  Branch (517:57): [True: 11.1k, False: 12.6k]
  ------------------
  518|  11.1k|        if (q->port != port) {
  ------------------
  |  Branch (518:13): [True: 5.70k, False: 5.44k]
  ------------------
  519|  5.70k|            port = q->port;
  520|       |
  521|  5.70k|            ds_put_cstr(string, "port=");
  522|  5.70k|            ofputil_format_port(port, port_map, string);
  523|  5.70k|            ds_put_char(string, '\n');
  524|  5.70k|        }
  525|       |
  526|  11.1k|        ds_put_format(string, "queue %"PRIu32":", q->queue);
  527|  11.1k|        print_queue_rate(string, "min_rate", q->min_rate);
  528|  11.1k|        print_queue_rate(string, "max_rate", q->max_rate);
  529|  11.1k|        ds_put_char(string, '\n');
  530|  11.1k|    }
  531|       |
  532|  12.6k|    ds_chomp(string, ' ');
  533|  12.6k|    free(queues);
  534|       |
  535|  12.6k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (535:12): [True: 10.7k, False: 1.86k]
  ------------------
  536|  12.6k|}
ofputil_decode_queue_stats_request:
  543|  1.57k|{
  544|  1.57k|    switch ((enum ofp_version)request->version) {
  545|    297|    case OFP15_VERSION:
  ------------------
  |  Branch (545:5): [True: 297, False: 1.27k]
  ------------------
  546|    490|    case OFP14_VERSION:
  ------------------
  |  Branch (546:5): [True: 193, False: 1.37k]
  ------------------
  547|    557|    case OFP13_VERSION:
  ------------------
  |  Branch (547:5): [True: 67, False: 1.50k]
  ------------------
  548|    624|    case OFP12_VERSION:
  ------------------
  |  Branch (548:5): [True: 67, False: 1.50k]
  ------------------
  549|  1.30k|    case OFP11_VERSION: {
  ------------------
  |  Branch (549:5): [True: 680, False: 892]
  ------------------
  550|  1.30k|        const struct ofp11_queue_stats_request *qsr11 = ofpmsg_body(request);
  551|  1.30k|        oqsr->queue_id = ntohl(qsr11->queue_id);
  552|  1.30k|        return ofputil_port_from_ofp11(qsr11->port_no, &oqsr->port_no);
  553|    624|    }
  554|       |
  555|    268|    case OFP10_VERSION: {
  ------------------
  |  Branch (555:5): [True: 268, False: 1.30k]
  ------------------
  556|    268|        const struct ofp10_queue_stats_request *qsr10 = ofpmsg_body(request);
  557|    268|        oqsr->queue_id = ntohl(qsr10->queue_id);
  558|    268|        oqsr->port_no = u16_to_ofp(ntohs(qsr10->port_no));
  559|       |        /* OF 1.0 uses OFPP_ALL for OFPP_ANY */
  560|    268|        if (oqsr->port_no == OFPP_ALL) {
  ------------------
  |  |   44|    268|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|    268|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (560:13): [True: 116, False: 152]
  ------------------
  561|    116|            oqsr->port_no = OFPP_ANY;
  ------------------
  |  |   80|    116|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    116|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    116|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    116|        }
  563|    268|        return 0;
  564|    624|    }
  565|       |
  566|      0|    default:
  ------------------
  |  Branch (566:5): [True: 0, False: 1.57k]
  ------------------
  567|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  568|  1.57k|    }
  569|  1.57k|}
ofputil_queue_stats_request_format:
  615|  1.57k|{
  616|  1.57k|    struct ofputil_queue_stats_request oqsr;
  617|  1.57k|    enum ofperr error;
  618|       |
  619|  1.57k|    error = ofputil_decode_queue_stats_request(oh, &oqsr);
  620|  1.57k|    if (error) {
  ------------------
  |  Branch (620:9): [True: 1.09k, False: 474]
  ------------------
  621|  1.09k|        return error;
  622|  1.09k|    }
  623|       |
  624|    474|    ds_put_cstr(string, " port=");
  625|    474|    ofputil_format_port(oqsr.port_no, port_map, string);
  626|       |
  627|    474|    ds_put_cstr(string, " queue=");
  628|    474|    ofp_print_queue_name(string, oqsr.queue_id);
  629|       |
  630|    474|    return 0;
  631|  1.57k|}
ofputil_count_queue_stats:
  637|  5.24k|{
  638|  5.24k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  639|  5.24k|    ofpraw_pull_assert(&b);
  640|       |
  641|  16.0k|    for (size_t n = 0; ; n++) {
  642|  16.0k|        struct ofputil_queue_stats qs;
  643|  16.0k|        if (ofputil_decode_queue_stats(&qs, &b)) {
  ------------------
  |  Branch (643:13): [True: 5.24k, False: 10.7k]
  ------------------
  644|  5.24k|            return n;
  645|  5.24k|        }
  646|  16.0k|    }
  647|  5.24k|}
ofputil_decode_queue_stats:
  731|  32.0k|{
  732|  32.0k|    enum ofperr error;
  733|  32.0k|    enum ofpraw raw;
  734|       |
  735|  32.0k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (735:14): [True: 26.8k, False: 5.24k]
  ------------------
  736|  32.0k|             : ofpraw_pull(&raw, msg));
  737|  32.0k|    if (error) {
  ------------------
  |  Branch (737:9): [True: 0, False: 32.0k]
  ------------------
  738|      0|        return error;
  739|      0|    }
  740|       |
  741|  32.0k|    if (!msg->size) {
  ------------------
  |  Branch (741:9): [True: 786, False: 31.2k]
  ------------------
  742|    786|        return EOF;
  743|  31.2k|    } else if (raw == OFPRAW_OFPST14_QUEUE_REPLY) {
  ------------------
  |  Branch (743:16): [True: 11.6k, False: 19.6k]
  ------------------
  744|  11.6k|        return ofputil_pull_ofp14_queue_stats(qs, msg);
  745|  19.6k|    } else if (raw == OFPRAW_OFPST13_QUEUE_REPLY) {
  ------------------
  |  Branch (745:16): [True: 1.14k, False: 18.4k]
  ------------------
  746|  1.14k|        const struct ofp13_queue_stats *qs13;
  747|       |
  748|  1.14k|        qs13 = ofpbuf_try_pull(msg, sizeof *qs13);
  749|  1.14k|        if (!qs13) {
  ------------------
  |  Branch (749:13): [True: 0, False: 1.14k]
  ------------------
  750|      0|            goto bad_len;
  751|      0|        }
  752|  1.14k|        return ofputil_queue_stats_from_ofp13(qs, qs13);
  753|  18.4k|    } else if (raw == OFPRAW_OFPST11_QUEUE_REPLY) {
  ------------------
  |  Branch (753:16): [True: 9.56k, False: 8.91k]
  ------------------
  754|  9.56k|        const struct ofp11_queue_stats *qs11;
  755|       |
  756|  9.56k|        qs11 = ofpbuf_try_pull(msg, sizeof *qs11);
  757|  9.56k|        if (!qs11) {
  ------------------
  |  Branch (757:13): [True: 0, False: 9.56k]
  ------------------
  758|      0|            goto bad_len;
  759|      0|        }
  760|  9.56k|        return ofputil_queue_stats_from_ofp11(qs, qs11);
  761|  9.56k|    } else if (raw == OFPRAW_OFPST10_QUEUE_REPLY) {
  ------------------
  |  Branch (761:16): [True: 8.91k, False: 0]
  ------------------
  762|  8.91k|        const struct ofp10_queue_stats *qs10;
  763|       |
  764|  8.91k|        qs10 = ofpbuf_try_pull(msg, sizeof *qs10);
  765|  8.91k|        if (!qs10) {
  ------------------
  |  Branch (765:13): [True: 0, False: 8.91k]
  ------------------
  766|      0|            goto bad_len;
  767|      0|        }
  768|  8.91k|        return ofputil_queue_stats_from_ofp10(qs, qs10);
  769|  8.91k|    } else {
  770|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  771|      0|    }
  772|       |
  773|      0| bad_len:
  774|      0|    VLOG_WARN_RL(&rl, "OFPST_QUEUE reply has %"PRIu32" leftover "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  775|      0|                 "bytes at end", msg->size);
  776|      0|    return OFPERR_OFPBRC_BAD_LEN;
  777|  32.0k|}
ofputil_queue_stats_reply_format:
  885|  5.24k|{
  886|  5.24k|    ds_put_format(string, " %"PRIuSIZE" queues\n",
  887|  5.24k|                  ofputil_count_queue_stats(oh));
  888|  5.24k|    if (verbosity < 1) {
  ------------------
  |  Branch (888:9): [True: 0, False: 5.24k]
  ------------------
  889|      0|        return 0;
  890|      0|    }
  891|       |
  892|  5.24k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  893|  16.0k|    for (;;) {
  894|  16.0k|        struct ofputil_queue_stats qs;
  895|  16.0k|        int retval;
  896|       |
  897|  16.0k|        retval = ofputil_decode_queue_stats(&qs, &b);
  898|  16.0k|        if (retval) {
  ------------------
  |  Branch (898:13): [True: 5.24k, False: 10.7k]
  ------------------
  899|  5.24k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (899:20): [True: 4.85k, False: 393]
  ------------------
  900|  5.24k|        }
  901|       |
  902|  10.7k|        ds_put_cstr(string, "  port ");
  903|  10.7k|        ofputil_format_port(qs.port_no, port_map, string);
  904|  10.7k|        ds_put_cstr(string, " queue ");
  905|  10.7k|        ofp_print_queue_name(string, qs.queue_id);
  906|  10.7k|        ds_put_cstr(string, ": ");
  907|       |
  908|  10.7k|        print_queue_stat(string, "bytes=", qs.tx_bytes, 1);
  909|  10.7k|        print_queue_stat(string, "pkts=", qs.tx_packets, 1);
  910|  10.7k|        print_queue_stat(string, "errors=", qs.tx_errors, 1);
  911|       |
  912|  10.7k|        ds_put_cstr(string, "duration=");
  913|  10.7k|        if (qs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (913:13): [True: 2.83k, False: 7.94k]
  ------------------
  914|  2.83k|            ofp_print_duration(string, qs.duration_sec, qs.duration_nsec);
  915|  7.94k|        } else {
  916|  7.94k|            ds_put_char(string, '?');
  917|  7.94k|        }
  918|  10.7k|        ds_put_char(string, '\n');
  919|  10.7k|    }
  920|  5.24k|}
ofp-queue.c:ofp_print_queue_name:
   35|  11.7k|{
   36|  11.7k|    if (queue_id == OFPQ_ALL) {
  ------------------
  |  |  416|  11.7k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (36:9): [True: 2.68k, False: 9.04k]
  ------------------
   37|  2.68k|        ds_put_cstr(string, "ALL");
   38|  9.04k|    } else {
   39|  9.04k|        ds_put_format(string, "%"PRIu32, queue_id);
   40|  9.04k|    }
   41|  11.7k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply14:
  369|  13.1k|{
  370|  13.1k|    struct ofp14_queue_desc *oqd14 = ofpbuf_try_pull(msg, sizeof *oqd14);
  371|  13.1k|    if (!oqd14) {
  ------------------
  |  Branch (371:9): [True: 396, False: 12.7k]
  ------------------
  372|    396|        return OFPERR_OFPBRC_BAD_LEN;
  373|    396|    }
  374|  12.7k|    enum ofperr error = ofputil_port_from_ofp11(oqd14->port_no, &queue->port);
  375|  12.7k|    if (error) {
  ------------------
  |  Branch (375:9): [True: 1.77k, False: 11.0k]
  ------------------
  376|  1.77k|        return error;
  377|  1.77k|    }
  378|  11.0k|    queue->queue = ntohl(oqd14->queue_id);
  379|       |
  380|       |    /* Length check. */
  381|  11.0k|    unsigned int len = ntohs(oqd14->len);
  382|  11.0k|    if (len < sizeof *oqd14 || len > msg->size + sizeof *oqd14 || len % 8) {
  ------------------
  |  Branch (382:9): [True: 1.30k, False: 9.69k]
  |  Branch (382:32): [True: 381, False: 9.31k]
  |  Branch (382:67): [True: 178, False: 9.14k]
  ------------------
  383|  1.86k|        return OFPERR_OFPBRC_BAD_LEN;
  384|  1.86k|    }
  385|  9.14k|    len -= sizeof *oqd14;
  386|       |
  387|  9.14k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  388|  9.14k|                                                        len);
  389|  12.0k|    while (properties.size > 0) {
  ------------------
  |  Branch (389:12): [True: 4.34k, False: 7.68k]
  ------------------
  390|  4.34k|        struct ofpbuf payload;
  391|  4.34k|        uint64_t type;
  392|       |
  393|  4.34k|        error = ofpprop_pull(&properties, &payload, &type);
  394|  4.34k|        if (error) {
  ------------------
  |  Branch (394:13): [True: 1.36k, False: 2.97k]
  ------------------
  395|  1.36k|            return error;
  396|  1.36k|        }
  397|       |
  398|  2.97k|        switch (type) {
  399|  1.56k|        case OFPQDPT14_MIN_RATE:
  ------------------
  |  Branch (399:9): [True: 1.56k, False: 1.41k]
  ------------------
  400|  1.56k|            error = ofpprop_parse_u16(&payload, &queue->min_rate);
  401|  1.56k|            break;
  402|       |
  403|    904|        case OFPQDPT14_MAX_RATE:
  ------------------
  |  Branch (403:9): [True: 904, False: 2.07k]
  ------------------
  404|    904|            error = ofpprop_parse_u16(&payload, &queue->max_rate);
  405|    904|            break;
  406|       |
  407|    508|        default:
  ------------------
  |  Branch (407:9): [True: 508, False: 2.47k]
  ------------------
  408|    508|            error = OFPPROP_UNKNOWN(true, "queue desc", type);
  ------------------
  |  |  140|    508|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  409|    508|            break;
  410|  2.97k|        }
  411|       |
  412|  2.97k|        if (error) {
  ------------------
  |  Branch (412:13): [True: 92, False: 2.88k]
  ------------------
  413|     92|            return error;
  414|     92|        }
  415|  2.97k|    }
  416|       |
  417|  7.68k|    return 0;
  418|  9.14k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply10:
  283|  8.73k|{
  284|  8.73k|    const struct ofp_header *oh = msg->header;
  285|  8.73k|    unsigned int opq_len;       /* Length of protocol-specific queue header. */
  286|  8.73k|    unsigned int len;           /* Total length of queue + properties. */
  287|       |
  288|       |    /* Obtain the port number from the message header. */
  289|  8.73k|    if (oh->version == OFP10_VERSION) {
  ------------------
  |  Branch (289:9): [True: 7.81k, False: 923]
  ------------------
  290|  7.81k|        const struct ofp10_queue_get_config_reply *oqgcr10 = msg->msg;
  291|  7.81k|        queue->port = u16_to_ofp(ntohs(oqgcr10->port));
  292|  7.81k|    } else {
  293|    923|        const struct ofp11_queue_get_config_reply *oqgcr11 = msg->msg;
  294|    923|        enum ofperr error = ofputil_port_from_ofp11(oqgcr11->port,
  295|    923|                                                    &queue->port);
  296|    923|        if (error) {
  ------------------
  |  Branch (296:13): [True: 24, False: 899]
  ------------------
  297|     24|            return error;
  298|     24|        }
  299|    923|    }
  300|       |
  301|       |    /* Pull off the queue header and get the queue number and length. */
  302|  8.70k|    if (oh->version < OFP12_VERSION) {
  ------------------
  |  Branch (302:9): [True: 8.61k, False: 96]
  ------------------
  303|  8.61k|        const struct ofp10_packet_queue *opq10;
  304|  8.61k|        opq10 = ofpbuf_try_pull(msg, sizeof *opq10);
  305|  8.61k|        if (!opq10) {
  ------------------
  |  Branch (305:13): [True: 0, False: 8.61k]
  ------------------
  306|      0|            return OFPERR_OFPBRC_BAD_LEN;
  307|      0|        }
  308|  8.61k|        queue->queue = ntohl(opq10->queue_id);
  309|  8.61k|        len = ntohs(opq10->len);
  310|  8.61k|        opq_len = sizeof *opq10;
  311|  8.61k|    } else {
  312|     96|        const struct ofp12_packet_queue *opq12;
  313|     96|        opq12 = ofpbuf_try_pull(msg, sizeof *opq12);
  314|     96|        if (!opq12) {
  ------------------
  |  Branch (314:13): [True: 34, False: 62]
  ------------------
  315|     34|            return OFPERR_OFPBRC_BAD_LEN;
  316|     34|        }
  317|     62|        queue->queue = ntohl(opq12->queue_id);
  318|     62|        len = ntohs(opq12->len);
  319|     62|        opq_len = sizeof *opq12;
  320|     62|    }
  321|       |
  322|       |    /* Length check. */
  323|  8.67k|    if (len < opq_len || len > msg->size + opq_len || len % 8) {
  ------------------
  |  Branch (323:9): [True: 626, False: 8.04k]
  |  Branch (323:26): [True: 924, False: 7.12k]
  |  Branch (323:55): [True: 90, False: 7.03k]
  ------------------
  324|  1.64k|        return OFPERR_OFPBRC_BAD_LEN;
  325|  1.64k|    }
  326|  7.03k|    len -= opq_len;
  327|       |
  328|       |    /* Pull properties.  The format of these properties differs from used in
  329|       |     * OF1.4+ so we can't use the common property functions. */
  330|  7.31k|    while (len > 0) {
  ------------------
  |  Branch (330:12): [True: 3.85k, False: 3.46k]
  ------------------
  331|  3.85k|        const struct ofp10_queue_prop_header *hdr;
  332|  3.85k|        unsigned int property;
  333|  3.85k|        unsigned int prop_len;
  334|  3.85k|        enum ofperr error = 0;
  335|       |
  336|  3.85k|        hdr = ofpbuf_at_assert(msg, 0, sizeof *hdr);
  337|  3.85k|        prop_len = ntohs(hdr->len);
  338|  3.85k|        if (prop_len < sizeof *hdr || prop_len > len || prop_len % 8) {
  ------------------
  |  Branch (338:13): [True: 40, False: 3.81k]
  |  Branch (338:39): [True: 226, False: 3.58k]
  |  Branch (338:57): [True: 11, False: 3.57k]
  ------------------
  339|    277|            return OFPERR_OFPBRC_BAD_LEN;
  340|    277|        }
  341|       |
  342|  3.57k|        property = ntohs(hdr->property);
  343|  3.57k|        switch (property) {
  344|  1.78k|        case OFPQT10_MIN_RATE:
  ------------------
  |  Branch (344:9): [True: 1.78k, False: 1.78k]
  ------------------
  345|  1.78k|            error = parse_ofp10_queue_rate(hdr, &queue->min_rate);
  346|  1.78k|            break;
  347|       |
  348|  1.57k|        case OFPQT11_MAX_RATE:
  ------------------
  |  Branch (348:9): [True: 1.57k, False: 1.99k]
  ------------------
  349|  1.57k|            error = parse_ofp10_queue_rate(hdr, &queue->max_rate);
  350|  1.57k|            break;
  351|       |
  352|    208|        default:
  ------------------
  |  Branch (352:9): [True: 208, False: 3.36k]
  ------------------
  353|    208|            VLOG_INFO_RL(&rl, "unknown queue property %u", property);
  ------------------
  |  |  224|    208|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    208|    do {                                                                \
  |  |  |  |  287|    208|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    208|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 208]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    208|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|    208|            break;
  355|  3.57k|        }
  356|  3.57k|        if (error) {
  ------------------
  |  Branch (356:13): [True: 3.29k, False: 279]
  ------------------
  357|  3.29k|            return error;
  358|  3.29k|        }
  359|       |
  360|    279|        ofpbuf_pull(msg, prop_len);
  361|    279|        len -= prop_len;
  362|    279|    }
  363|  3.46k|    return 0;
  364|  7.03k|}
ofp-queue.c:parse_ofp10_queue_rate:
  268|  3.36k|{
  269|  3.36k|    const struct ofp10_queue_prop_rate *oqpr;
  270|       |
  271|  3.36k|    if (hdr->len == htons(sizeof *oqpr)) {
  ------------------
  |  Branch (271:9): [True: 71, False: 3.29k]
  ------------------
  272|     71|        oqpr = (const struct ofp10_queue_prop_rate *) hdr;
  273|     71|        *rate = ntohs(oqpr->rate);
  274|     71|        return 0;
  275|  3.29k|    } else {
  276|  3.29k|        return OFPERR_OFPBRC_BAD_LEN;
  277|  3.29k|    }
  278|  3.36k|}
ofp-queue.c:compare_queues:
  474|  10.9k|{
  475|  10.9k|    const struct ofputil_queue_config *a = a_;
  476|  10.9k|    const struct ofputil_queue_config *b = b_;
  477|       |
  478|  10.9k|    uint16_t ap = ofp_to_u16(a->port);
  479|  10.9k|    uint16_t bp = ofp_to_u16(b->port);
  480|  10.9k|    if (ap != bp) {
  ------------------
  |  Branch (480:9): [True: 4.34k, False: 6.62k]
  ------------------
  481|  4.34k|        return ap < bp ? -1 : 1;
  ------------------
  |  Branch (481:16): [True: 1.46k, False: 2.87k]
  ------------------
  482|  4.34k|    }
  483|       |
  484|  6.62k|    uint32_t aq = a->queue;
  485|  6.62k|    uint32_t bq = b->queue;
  486|  6.62k|    return aq < bq ? -1 : aq > bq;
  ------------------
  |  Branch (486:12): [True: 3.56k, False: 3.06k]
  ------------------
  487|  10.9k|}
ofp-queue.c:print_queue_rate:
  463|  22.2k|{
  464|  22.2k|    if (rate <= 1000) {
  ------------------
  |  Branch (464:9): [True: 610, False: 21.6k]
  ------------------
  465|    610|        ds_put_format(string, " %s:%u.%u%%", name, rate / 10, rate % 10);
  466|  21.6k|    } else if (rate < UINT16_MAX) {
  ------------------
  |  Branch (466:16): [True: 906, False: 20.7k]
  ------------------
  467|    906|        ds_put_format(string, " %s:(disabled)", name);
  468|    906|    }
  469|  22.2k|}
ofp-queue.c:ofputil_pull_ofp14_queue_stats:
  699|  11.6k|{
  700|  11.6k|    const struct ofp14_queue_stats *qs14;
  701|  11.6k|    size_t len;
  702|       |
  703|  11.6k|    qs14 = ofpbuf_try_pull(msg, sizeof *qs14);
  704|  11.6k|    if (!qs14) {
  ------------------
  |  Branch (704:9): [True: 80, False: 11.5k]
  ------------------
  705|     80|        return OFPERR_OFPBRC_BAD_LEN;
  706|     80|    }
  707|       |
  708|  11.5k|    len = ntohs(qs14->length);
  709|  11.5k|    if (len < sizeof *qs14 || len - sizeof *qs14 > msg->size) {
  ------------------
  |  Branch (709:9): [True: 5.46k, False: 6.10k]
  |  Branch (709:31): [True: 792, False: 5.31k]
  ------------------
  710|  6.25k|        return OFPERR_OFPBRC_BAD_LEN;
  711|  6.25k|    }
  712|  5.31k|    ofpbuf_pull(msg, len - sizeof *qs14);
  713|       |
  714|       |    /* No properties yet defined, so ignore them for now. */
  715|       |
  716|  5.31k|    return ofputil_queue_stats_from_ofp13(oqs, &qs14->qs);
  717|  11.5k|}
ofp-queue.c:ofputil_queue_stats_from_ofp13:
  686|  6.46k|{
  687|  6.46k|    enum ofperr error = ofputil_queue_stats_from_ofp11(oqs, &qs13->qs);
  688|  6.46k|    if (!error) {
  ------------------
  |  Branch (688:9): [True: 5.76k, False: 694]
  ------------------
  689|  5.76k|        oqs->duration_sec = ntohl(qs13->duration_sec);
  690|  5.76k|        oqs->duration_nsec = ntohl(qs13->duration_nsec);
  691|  5.76k|    }
  692|       |
  693|  6.46k|    return error;
  694|  6.46k|}
ofp-queue.c:ofputil_queue_stats_from_ofp11:
  666|  16.0k|{
  667|  16.0k|    enum ofperr error;
  668|       |
  669|  16.0k|    error = ofputil_port_from_ofp11(qs11->port_no, &oqs->port_no);
  670|  16.0k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 3.36k, False: 12.6k]
  ------------------
  671|  3.36k|        return error;
  672|  3.36k|    }
  673|       |
  674|  12.6k|    oqs->queue_id = ntohl(qs11->queue_id);
  675|  12.6k|    oqs->tx_bytes = ntohll(qs11->tx_bytes);
  676|  12.6k|    oqs->tx_packets = ntohll(qs11->tx_packets);
  677|  12.6k|    oqs->tx_errors = ntohll(qs11->tx_errors);
  678|  12.6k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  679|       |
  680|  12.6k|    return 0;
  681|  16.0k|}
ofp-queue.c:ofputil_queue_stats_from_ofp10:
  652|  8.91k|{
  653|  8.91k|    oqs->port_no = u16_to_ofp(ntohs(qs10->port_no));
  654|  8.91k|    oqs->queue_id = ntohl(qs10->queue_id);
  655|  8.91k|    oqs->tx_bytes = ntohll(get_32aligned_be64(&qs10->tx_bytes));
  656|  8.91k|    oqs->tx_packets = ntohll(get_32aligned_be64(&qs10->tx_packets));
  657|  8.91k|    oqs->tx_errors = ntohll(get_32aligned_be64(&qs10->tx_errors));
  658|  8.91k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  659|       |
  660|  8.91k|    return 0;
  661|  8.91k|}
ofp-queue.c:print_queue_stat:
  866|  32.3k|{
  867|  32.3k|    ds_put_cstr(string, leader);
  868|  32.3k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (868:9): [True: 25.5k, False: 6.82k]
  ------------------
  869|  25.5k|        ds_put_format(string, "%"PRIu64, stat);
  870|  25.5k|    } else {
  871|  6.82k|        ds_put_char(string, '?');
  872|  6.82k|    }
  873|  32.3k|    if (more) {
  ------------------
  |  Branch (873:9): [True: 32.3k, False: 0]
  ------------------
  874|  32.3k|        ds_put_cstr(string, ", ");
  875|  32.3k|    } else {
  876|      0|        ds_put_cstr(string, "\n");
  877|      0|    }
  878|  32.3k|}

ofputil_pull_switch_features:
   71|  9.32k|{
   72|  9.32k|    const struct ofp_header *oh = b->data;
   73|  9.32k|    enum ofpraw raw = ofpraw_pull_assert(b);
   74|  9.32k|    const struct ofp_switch_features *osf = ofpbuf_pull(b, sizeof *osf);
   75|  9.32k|    features->datapath_id = ntohll(osf->datapath_id);
   76|  9.32k|    features->n_buffers = ntohl(osf->n_buffers);
   77|  9.32k|    features->n_tables = osf->n_tables;
   78|  9.32k|    features->auxiliary_id = 0;
   79|       |
   80|  9.32k|    features->capabilities = ntohl(osf->capabilities) &
   81|  9.32k|        ofputil_capabilities_mask(oh->version);
   82|       |
   83|  9.32k|    if (raw == OFPRAW_OFPT10_FEATURES_REPLY) {
  ------------------
  |  Branch (83:9): [True: 2.50k, False: 6.82k]
  ------------------
   84|  2.50k|        if (osf->capabilities & htonl(OFPC10_STP)) {
  ------------------
  |  Branch (84:13): [True: 937, False: 1.56k]
  ------------------
   85|    937|            features->capabilities |= OFPUTIL_C_STP;
   86|    937|        }
   87|  2.50k|        features->ofpacts = ofpact_bitmap_from_openflow(osf->actions,
   88|  2.50k|                                                        OFP10_VERSION);
   89|  6.82k|    } else if (raw == OFPRAW_OFPT11_FEATURES_REPLY
  ------------------
  |  Branch (89:16): [True: 2.15k, False: 4.66k]
  ------------------
   90|  6.82k|               || raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (90:19): [True: 4.66k, False: 0]
  ------------------
   91|  6.82k|        if (osf->capabilities & htonl(OFPC11_GROUP_STATS)) {
  ------------------
  |  Branch (91:13): [True: 1.78k, False: 5.03k]
  ------------------
   92|  1.78k|            features->capabilities |= OFPUTIL_C_GROUP_STATS;
   93|  1.78k|        }
   94|  6.82k|        features->ofpacts = 0;
   95|  6.82k|        if (raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (95:13): [True: 4.66k, False: 2.15k]
  ------------------
   96|  4.66k|            features->auxiliary_id = osf->auxiliary_id;
   97|  4.66k|        }
   98|  6.82k|    } else {
   99|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  100|      0|    }
  101|       |
  102|  9.32k|    return 0;
  103|  9.32k|}
ofputil_switch_features_format:
  255|  9.32k|{
  256|  9.32k|    ds_put_format(s, " dpid:%016"PRIx64"\n", features->datapath_id);
  257|       |
  258|  9.32k|    ds_put_format(s, "n_tables:%"PRIu8", n_buffers:%"PRIu32,
  259|  9.32k|                  features->n_tables, features->n_buffers);
  260|  9.32k|    if (features->auxiliary_id) {
  ------------------
  |  Branch (260:9): [True: 4.24k, False: 5.08k]
  ------------------
  261|  4.24k|        ds_put_format(s, ", auxiliary_id:%"PRIu8, features->auxiliary_id);
  262|  4.24k|    }
  263|  9.32k|    ds_put_char(s, '\n');
  264|       |
  265|  9.32k|    ds_put_cstr(s, "capabilities: ");
  266|  9.32k|    ofp_print_bit_names(s, features->capabilities,
  267|  9.32k|                        ofputil_capabilities_to_name, ' ');
  268|  9.32k|    ds_put_char(s, '\n');
  269|       |
  270|  9.32k|    if (features->ofpacts) {
  ------------------
  |  Branch (270:9): [True: 1.96k, False: 7.36k]
  ------------------
  271|  1.96k|        ds_put_cstr(s, "actions: ");
  272|  1.96k|        ofpact_bitmap_format(features->ofpacts, s);
  273|  1.96k|        ds_put_char(s, '\n');
  274|  1.96k|    }
  275|  9.32k|}
ofputil_frag_handling_to_string:
  279|  4.98k|{
  280|  4.98k|    switch (frag) {
  ------------------
  |  Branch (280:13): [True: 0, False: 4.98k]
  ------------------
  281|  2.04k|    case OFPUTIL_FRAG_NORMAL:   return "normal";
  ------------------
  |  Branch (281:5): [True: 2.04k, False: 2.93k]
  ------------------
  282|  2.44k|    case OFPUTIL_FRAG_DROP:     return "drop";
  ------------------
  |  Branch (282:5): [True: 2.44k, False: 2.54k]
  ------------------
  283|     21|    case OFPUTIL_FRAG_REASM:    return "reassemble";
  ------------------
  |  Branch (283:5): [True: 21, False: 4.96k]
  ------------------
  284|    476|    case OFPUTIL_FRAG_NX_MATCH: return "nx-match";
  ------------------
  |  Branch (284:5): [True: 476, False: 4.51k]
  ------------------
  285|  4.98k|    }
  286|       |
  287|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  288|  4.98k|}
ofputil_decode_get_config_reply:
  339|  2.98k|{
  340|  2.98k|    ofputil_decode_switch_config(oh, config);
  341|  2.98k|}
ofputil_decode_set_config:
  346|  12.4k|{
  347|  12.4k|    return (ofputil_decode_switch_config(oh, config)
  ------------------
  |  Branch (347:13): [True: 2.00k, False: 10.4k]
  ------------------
  348|  12.4k|            ? 0
  349|  12.4k|            : OFPERR_OFPSCFC_BAD_FLAGS);
  350|  12.4k|}
ofputil_switch_config_format:
  386|  4.98k|{
  387|  4.98k|    ds_put_format(s, " frags=%s",
  388|  4.98k|                  ofputil_frag_handling_to_string(config->frag));
  389|       |
  390|  4.98k|    if (config->invalid_ttl_to_controller > 0) {
  ------------------
  |  Branch (390:9): [True: 1.15k, False: 3.83k]
  ------------------
  391|  1.15k|        ds_put_format(s, " invalid_ttl_to_controller");
  392|  1.15k|    }
  393|       |
  394|  4.98k|    ds_put_format(s, " miss_send_len=%"PRIu16"\n", config->miss_send_len);
  395|  4.98k|}
ofp-switch.c:ofputil_capabilities_mask:
   44|  9.32k|{
   45|       |    /* Handle capabilities whose bit is unique for all OpenFlow versions */
   46|  9.32k|    switch (ofp_version) {
   47|  2.50k|    case OFP10_VERSION:
  ------------------
  |  Branch (47:5): [True: 2.50k, False: 6.82k]
  ------------------
   48|  4.45k|    case OFP11_VERSION:
  ------------------
  |  Branch (48:5): [True: 1.95k, False: 7.37k]
  ------------------
   49|  4.45k|        return OFPC_COMMON | OFPC_ARP_MATCH_IP;
  ------------------
  |  |   30|  4.45k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  4.45k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   50|    198|    case OFP12_VERSION:
  ------------------
  |  Branch (50:5): [True: 198, False: 9.12k]
  ------------------
   51|  1.45k|    case OFP13_VERSION:
  ------------------
  |  Branch (51:5): [True: 1.25k, False: 8.07k]
  ------------------
   52|  1.45k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED;
  ------------------
  |  |   30|  1.45k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.45k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   53|  1.59k|    case OFP14_VERSION:
  ------------------
  |  Branch (53:5): [True: 1.59k, False: 7.72k]
  ------------------
   54|  3.41k|    case OFP15_VERSION:
  ------------------
  |  Branch (54:5): [True: 1.81k, False: 7.50k]
  ------------------
   55|  3.41k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
  ------------------
  |  |   30|  3.41k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  3.41k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   56|  3.41k|            | OFPC14_FLOW_MONITORING;
   57|      0|    default:
  ------------------
  |  Branch (57:5): [True: 0, False: 9.32k]
  ------------------
   58|       |        /* Caller needs to check osf->header.version itself */
   59|      0|        return 0;
   60|  9.32k|    }
   61|  9.32k|}
ofp-switch.c:ofputil_capabilities_to_name:
  232|  26.7k|{
  233|  26.7k|    enum ofputil_capabilities capabilities = bit;
  234|       |
  235|  26.7k|    switch (capabilities) {
  ------------------
  |  Branch (235:13): [True: 0, False: 26.7k]
  ------------------
  236|  3.71k|    case OFPUTIL_C_FLOW_STATS:   return "FLOW_STATS";
  ------------------
  |  Branch (236:5): [True: 3.71k, False: 23.0k]
  ------------------
  237|  2.54k|    case OFPUTIL_C_TABLE_STATS:  return "TABLE_STATS";
  ------------------
  |  Branch (237:5): [True: 2.54k, False: 24.2k]
  ------------------
  238|  4.66k|    case OFPUTIL_C_PORT_STATS:   return "PORT_STATS";
  ------------------
  |  Branch (238:5): [True: 4.66k, False: 22.0k]
  ------------------
  239|  3.70k|    case OFPUTIL_C_IP_REASM:     return "IP_REASM";
  ------------------
  |  Branch (239:5): [True: 3.70k, False: 23.0k]
  ------------------
  240|  2.91k|    case OFPUTIL_C_QUEUE_STATS:  return "QUEUE_STATS";
  ------------------
  |  Branch (240:5): [True: 2.91k, False: 23.8k]
  ------------------
  241|  1.27k|    case OFPUTIL_C_ARP_MATCH_IP: return "ARP_MATCH_IP";
  ------------------
  |  Branch (241:5): [True: 1.27k, False: 25.4k]
  ------------------
  242|    937|    case OFPUTIL_C_STP:          return "STP";
  ------------------
  |  Branch (242:5): [True: 937, False: 25.8k]
  ------------------
  243|  1.78k|    case OFPUTIL_C_GROUP_STATS:  return "GROUP_STATS";
  ------------------
  |  Branch (243:5): [True: 1.78k, False: 24.9k]
  ------------------
  244|  2.75k|    case OFPUTIL_C_PORT_BLOCKED: return "PORT_BLOCKED";
  ------------------
  |  Branch (244:5): [True: 2.75k, False: 23.9k]
  ------------------
  245|    382|    case OFPUTIL_C_BUNDLES:      return "BUNDLES";
  ------------------
  |  Branch (245:5): [True: 382, False: 26.3k]
  ------------------
  246|  2.06k|    case OFPUTIL_C_FLOW_MONITORING: return "FLOW_MONITORING";
  ------------------
  |  Branch (246:5): [True: 2.06k, False: 24.6k]
  ------------------
  247|  26.7k|    }
  248|       |
  249|      0|    return NULL;
  250|  26.7k|}
ofp-switch.c:ofputil_decode_switch_config:
  316|  15.4k|{
  317|  15.4k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  318|  15.4k|    ofpraw_pull_assert(&b);
  319|       |
  320|  15.4k|    const struct ofp_switch_config *osc = ofpbuf_pull(&b, sizeof *osc);
  321|  15.4k|    config->frag = ntohs(osc->flags) & OFPC_FRAG_MASK;
  322|  15.4k|    config->miss_send_len = ntohs(osc->miss_send_len);
  323|       |
  324|  15.4k|    ovs_be16 valid_mask = htons(OFPC_FRAG_MASK);
  325|  15.4k|    if (oh->version < OFP13_VERSION) {
  ------------------
  |  Branch (325:9): [True: 5.03k, False: 10.3k]
  ------------------
  326|  5.03k|        const ovs_be16 ttl_bit = htons(OFPC_INVALID_TTL_TO_CONTROLLER);
  327|  5.03k|        valid_mask |= ttl_bit;
  328|  5.03k|        config->invalid_ttl_to_controller = (osc->flags & ttl_bit) != 0;
  329|  10.3k|    } else {
  330|  10.3k|        config->invalid_ttl_to_controller = -1;
  331|  10.3k|    }
  332|       |
  333|  15.4k|    return !(osc->flags & ~valid_mask);
  334|  15.4k|}

ofputil_table_miss_to_string:
   46|  31.9k|{
   47|  31.9k|    switch (miss) {
   48|      0|    case OFPUTIL_TABLE_MISS_DEFAULT: return "default";
  ------------------
  |  Branch (48:5): [True: 0, False: 31.9k]
  ------------------
   49|  23.5k|    case OFPUTIL_TABLE_MISS_CONTROLLER: return "controller";
  ------------------
  |  Branch (49:5): [True: 23.5k, False: 8.38k]
  ------------------
   50|  3.71k|    case OFPUTIL_TABLE_MISS_CONTINUE: return "continue";
  ------------------
  |  Branch (50:5): [True: 3.71k, False: 28.2k]
  ------------------
   51|  4.67k|    case OFPUTIL_TABLE_MISS_DROP: return "drop";
  ------------------
  |  Branch (51:5): [True: 4.67k, False: 27.2k]
  ------------------
   52|      0|    default: return "***error***";
  ------------------
  |  Branch (52:5): [True: 0, False: 31.9k]
  ------------------
   53|  31.9k|    }
   54|  31.9k|}
ofputil_table_eviction_to_string:
   58|  10.1k|{
   59|  10.1k|    switch (eviction) {
   60|      0|    case OFPUTIL_TABLE_EVICTION_DEFAULT: return "default";
  ------------------
  |  Branch (60:5): [True: 0, False: 10.1k]
  ------------------
   61|  3.54k|    case OFPUTIL_TABLE_EVICTION_ON: return "on";
  ------------------
  |  Branch (61:5): [True: 3.54k, False: 6.59k]
  ------------------
   62|  6.42k|    case OFPUTIL_TABLE_EVICTION_OFF: return "off";
  ------------------
  |  Branch (62:5): [True: 6.42k, False: 3.71k]
  ------------------
   63|    170|    default: return "***error***";
  ------------------
  |  Branch (63:5): [True: 170, False: 9.96k]
  ------------------
   64|  10.1k|    }
   65|  10.1k|}
ofputil_table_vacancy_to_string:
   69|  10.1k|{
   70|  10.1k|    switch (vacancy) {
   71|      0|    case OFPUTIL_TABLE_VACANCY_DEFAULT: return "default";
  ------------------
  |  Branch (71:5): [True: 0, False: 10.1k]
  ------------------
   72|  4.78k|    case OFPUTIL_TABLE_VACANCY_ON: return "on";
  ------------------
  |  Branch (72:5): [True: 4.78k, False: 5.37k]
  ------------------
   73|  5.37k|    case OFPUTIL_TABLE_VACANCY_OFF: return "off";
  ------------------
  |  Branch (73:5): [True: 5.37k, False: 4.78k]
  ------------------
   74|      0|    default: return "***error***";
  ------------------
  |  Branch (74:5): [True: 0, False: 10.1k]
  ------------------
   75|  10.1k|    }
   76|  10.1k|}
ofputil_table_map_get_name:
  123|   309k|{
  124|   309k|    struct namemap_node *node
  125|   309k|        = map ? namemap_find_by_number(&map->map, table_id) : NULL;
  ------------------
  |  Branch (125:11): [True: 0, False: 309k]
  ------------------
  126|   309k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (126:12): [True: 0, False: 309k]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|   309k|}
ofputil_format_table:
  201|   190k|{
  202|   190k|    const char *table_name = ofputil_table_map_get_name(table_map, table);
  203|   190k|    if (table_name) {
  ------------------
  |  Branch (203:9): [True: 0, False: 190k]
  ------------------
  204|      0|        namemap_put_name(table_name, s);
  205|   190k|    } else {
  206|   190k|        ds_put_format(s, "%"PRIu8, table);
  207|   190k|    }
  208|   190k|}
ofputil_decode_table_features:
  375|  19.2k|{
  376|  19.2k|    bool loose = raw_properties != NULL;
  377|       |
  378|  19.2k|    memset(tf, 0, sizeof *tf);
  379|       |
  380|  19.2k|    if (!msg->header) {
  ------------------
  |  Branch (380:9): [True: 18.5k, False: 736]
  ------------------
  381|  18.5k|        ofpraw_pull_assert(msg);
  382|  18.5k|    }
  383|       |
  384|  19.2k|    if (!msg->size) {
  ------------------
  |  Branch (384:9): [True: 304, False: 18.9k]
  ------------------
  385|    304|        return EOF;
  386|    304|    }
  387|       |
  388|  18.9k|    const struct ofp_header *oh = msg->header;
  389|  18.9k|    struct ofp13_table_features *otf = msg->data;
  390|  18.9k|    if (msg->size < sizeof *otf) {
  ------------------
  |  Branch (390:9): [True: 332, False: 18.6k]
  ------------------
  391|    332|        return OFPERR_OFPBPC_BAD_LEN;
  392|    332|    }
  393|       |
  394|  18.6k|    unsigned int len = ntohs(otf->length);
  395|  18.6k|    if (len < sizeof *otf || len % 8 || len > msg->size) {
  ------------------
  |  Branch (395:9): [True: 1.62k, False: 17.0k]
  |  Branch (395:30): [True: 1.61k, False: 15.3k]
  |  Branch (395:41): [True: 1.03k, False: 14.3k]
  ------------------
  396|  4.27k|        return OFPERR_OFPBPC_BAD_LEN;
  397|  4.27k|    }
  398|       |
  399|  14.3k|    if (oh->version >= OFP15_VERSION) {
  ------------------
  |  Branch (399:9): [True: 11.9k, False: 2.43k]
  ------------------
  400|  11.9k|        if (!ofp15_table_features_command_is_valid(otf->command)) {
  ------------------
  |  Branch (400:13): [True: 122, False: 11.8k]
  ------------------
  401|    122|            return OFPERR_OFPTFFC_BAD_COMMAND;
  402|    122|        }
  403|  11.8k|        tf->command = otf->command;
  404|  11.8k|    } else {
  405|  2.43k|        tf->command = OFPTFC15_REPLACE;
  406|  2.43k|    }
  407|       |
  408|  14.2k|    tf->table_id = otf->table_id;
  409|  14.2k|    if (tf->table_id == OFPTT_ALL) {
  ------------------
  |  Branch (409:9): [True: 10, False: 14.2k]
  ------------------
  410|     10|        return OFPERR_OFPTFFC_BAD_TABLE;
  411|     10|    }
  412|       |
  413|  14.2k|    ovs_strlcpy_arrays(tf->name, otf->name);
  ------------------
  |  |  225|  14.2k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  14.2k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  14.2k|    tf->metadata_match = otf->metadata_match;
  415|  14.2k|    tf->metadata_write = otf->metadata_write;
  416|  14.2k|    tf->miss_config = OFPUTIL_TABLE_MISS_DEFAULT;
  417|  14.2k|    if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (417:9): [True: 14.1k, False: 98]
  ------------------
  418|  14.1k|        uint32_t caps = ntohl(otf->capabilities);
  419|  14.1k|        tf->supports_eviction = (caps & OFPTC14_EVICTION) != 0;
  420|  14.1k|        tf->supports_vacancy_events = (caps & OFPTC14_VACANCY_EVENTS) != 0;
  421|  14.1k|    } else {
  422|     98|        tf->supports_eviction = -1;
  423|     98|        tf->supports_vacancy_events = -1;
  424|     98|    }
  425|  14.2k|    tf->max_entries = ntohl(otf->max_entries);
  426|       |
  427|  14.2k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  428|  14.2k|                                                        len);
  429|  14.2k|    ofpbuf_pull(&properties, sizeof *otf);
  430|  14.2k|    tf->any_properties = properties.size > 0;
  431|  14.2k|    if (raw_properties) {
  ------------------
  |  Branch (431:9): [True: 14.2k, False: 0]
  ------------------
  432|  14.2k|        *raw_properties = properties;
  433|  14.2k|    }
  434|  14.2k|    uint32_t seen = 0;
  435|  45.8k|    while (properties.size > 0) {
  ------------------
  |  Branch (435:12): [True: 44.5k, False: 1.25k]
  ------------------
  436|  44.5k|        struct ofpbuf payload;
  437|  44.5k|        enum ofperr error;
  438|  44.5k|        uint64_t type;
  439|       |
  440|  44.5k|        error = pull_table_feature_property(&properties, &payload, &type);
  441|  44.5k|        if (error) {
  ------------------
  |  Branch (441:13): [True: 4.30k, False: 40.2k]
  ------------------
  442|  4.30k|            return error;
  443|  4.30k|        }
  444|       |
  445|  40.2k|        if (type < 32) {
  ------------------
  |  Branch (445:13): [True: 32.2k, False: 8.03k]
  ------------------
  446|  32.2k|            uint32_t bit = 1u << type;
  447|  32.2k|            if (seen & bit) {
  ------------------
  |  Branch (447:17): [True: 833, False: 31.3k]
  ------------------
  448|    833|                return OFPERR_OFPTFFC_BAD_FEATURES;
  449|    833|            }
  450|  31.3k|            seen |= bit;
  451|  31.3k|        }
  452|       |
  453|  39.4k|        switch ((enum ofp13_table_feature_prop_type) type) {
  454|  1.48k|        case OFPTFPT13_INSTRUCTIONS:
  ------------------
  |  Branch (454:9): [True: 1.48k, False: 37.9k]
  ------------------
  455|  1.48k|            error = parse_instruction_ids(&payload, loose,
  456|  1.48k|                                          &tf->nonmiss.instructions);
  457|  1.48k|            break;
  458|  4.46k|        case OFPTFPT13_INSTRUCTIONS_MISS:
  ------------------
  |  Branch (458:9): [True: 4.46k, False: 34.9k]
  ------------------
  459|  4.46k|            error = parse_instruction_ids(&payload, loose,
  460|  4.46k|                                          &tf->miss.instructions);
  461|  4.46k|            break;
  462|       |
  463|  4.17k|        case OFPTFPT13_NEXT_TABLES:
  ------------------
  |  Branch (463:9): [True: 4.17k, False: 35.2k]
  ------------------
  464|  4.17k|            error = parse_table_features_next_table(&payload,
  465|  4.17k|                                                    tf->nonmiss.next);
  466|  4.17k|            break;
  467|  4.11k|        case OFPTFPT13_NEXT_TABLES_MISS:
  ------------------
  |  Branch (467:9): [True: 4.11k, False: 35.3k]
  ------------------
  468|  4.11k|            error = parse_table_features_next_table(&payload, tf->miss.next);
  469|  4.11k|            break;
  470|       |
  471|     59|        case OFPTFPT13_WRITE_ACTIONS:
  ------------------
  |  Branch (471:9): [True: 59, False: 39.3k]
  ------------------
  472|     59|            error = parse_action_bitmap(&payload, oh->version,
  473|     59|                                        &tf->nonmiss.write.ofpacts);
  474|     59|            break;
  475|    604|        case OFPTFPT13_WRITE_ACTIONS_MISS:
  ------------------
  |  Branch (475:9): [True: 604, False: 38.8k]
  ------------------
  476|    604|            error = parse_action_bitmap(&payload, oh->version,
  477|    604|                                        &tf->miss.write.ofpacts);
  478|    604|            break;
  479|       |
  480|  4.67k|        case OFPTFPT13_APPLY_ACTIONS:
  ------------------
  |  Branch (480:9): [True: 4.67k, False: 34.7k]
  ------------------
  481|  4.67k|            error = parse_action_bitmap(&payload, oh->version,
  482|  4.67k|                                        &tf->nonmiss.apply.ofpacts);
  483|  4.67k|            break;
  484|    552|        case OFPTFPT13_APPLY_ACTIONS_MISS:
  ------------------
  |  Branch (484:9): [True: 552, False: 38.8k]
  ------------------
  485|    552|            error = parse_action_bitmap(&payload, oh->version,
  486|    552|                                        &tf->miss.apply.ofpacts);
  487|    552|            break;
  488|       |
  489|    600|        case OFPTFPT13_MATCH:
  ------------------
  |  Branch (489:9): [True: 600, False: 38.8k]
  ------------------
  490|    600|            error = parse_oxms(&payload, loose, &tf->match, &tf->mask);
  491|    600|            break;
  492|  3.20k|        case OFPTFPT13_WILDCARDS:
  ------------------
  |  Branch (492:9): [True: 3.20k, False: 36.2k]
  ------------------
  493|  3.20k|            error = parse_oxms(&payload, loose, &tf->wildcard, NULL);
  494|  3.20k|            break;
  495|       |
  496|    831|        case OFPTFPT13_WRITE_SETFIELD:
  ------------------
  |  Branch (496:9): [True: 831, False: 38.5k]
  ------------------
  497|    831|            error = parse_oxms(&payload, loose,
  498|    831|                               &tf->nonmiss.write.set_fields, NULL);
  499|    831|            break;
  500|  2.50k|        case OFPTFPT13_WRITE_SETFIELD_MISS:
  ------------------
  |  Branch (500:9): [True: 2.50k, False: 36.9k]
  ------------------
  501|  2.50k|            error = parse_oxms(&payload, loose,
  502|  2.50k|                               &tf->miss.write.set_fields, NULL);
  503|  2.50k|            break;
  504|    422|        case OFPTFPT13_APPLY_SETFIELD:
  ------------------
  |  Branch (504:9): [True: 422, False: 39.0k]
  ------------------
  505|    422|            error = parse_oxms(&payload, loose,
  506|    422|                               &tf->nonmiss.apply.set_fields, NULL);
  507|    422|            break;
  508|  3.70k|        case OFPTFPT13_APPLY_SETFIELD_MISS:
  ------------------
  |  Branch (508:9): [True: 3.70k, False: 35.7k]
  ------------------
  509|  3.70k|            error = parse_oxms(&payload, loose,
  510|  3.70k|                               &tf->miss.apply.set_fields, NULL);
  511|  3.70k|            break;
  512|       |
  513|      0|        case OFPTFPT13_EXPERIMENTER:
  ------------------
  |  Branch (513:9): [True: 0, False: 39.4k]
  ------------------
  514|      0|        case OFPTFPT13_EXPERIMENTER_MISS:
  ------------------
  |  Branch (514:9): [True: 0, False: 39.4k]
  ------------------
  515|  8.03k|        default:
  ------------------
  |  Branch (515:9): [True: 8.03k, False: 31.3k]
  ------------------
  516|  8.03k|            error = OFPPROP_UNKNOWN(loose, "table features", type);
  ------------------
  |  |  140|  8.03k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  517|  8.03k|            break;
  518|  39.4k|        }
  519|  39.4k|        if (error) {
  ------------------
  |  Branch (519:13): [True: 7.83k, False: 31.5k]
  ------------------
  520|  7.83k|            return error;
  521|  7.83k|        }
  522|  39.4k|    }
  523|       |
  524|       |    /* OpenFlow 1.3 and 1.4 always require all of the required properties.
  525|       |     * OpenFlow 1.5 requires all of them if any property is present. */
  526|  1.25k|    unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  1.25k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  1.25k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  1.25k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  1.25k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  1.25k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  1.25k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  1.25k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  1.25k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
                  unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  1.25k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  1.25k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  1.25k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  1.25k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  1.25k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  1.25k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  1.25k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  1.25k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
  527|  1.25k|    if (missing && (tf->any_properties || oh->version < OFP15_VERSION)) {
  ------------------
  |  Branch (527:9): [True: 1.25k, False: 0]
  |  Branch (527:21): [True: 490, False: 760]
  |  Branch (527:43): [True: 24, False: 736]
  ------------------
  528|    514|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  223|    514|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    514|    do {                                                                \
  |  |  |  |  287|    514|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    514|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 514]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    514|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|    514|                     "table features message missing %u required "
  530|    514|                     "properties, including property %d",
  531|    514|                     count_1bits(missing), rightmost_1bit_idx(missing));
  532|    514|        return OFPERR_OFPTFFC_BAD_FEATURES;
  533|    514|    }
  534|       |
  535|       |    /* Copy nonmiss to miss when appropriate. */
  536|    736|    if (tf->any_properties) {
  ------------------
  |  Branch (536:9): [True: 0, False: 736]
  ------------------
  537|      0|        if (!(seen & (1u << OFPTFPT13_INSTRUCTIONS_MISS))) {
  ------------------
  |  Branch (537:13): [True: 0, False: 0]
  ------------------
  538|      0|            tf->miss.instructions = tf->nonmiss.instructions;
  539|      0|        }
  540|      0|        if (!(seen & (1u << OFPTFPT13_NEXT_TABLES_MISS))) {
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  ------------------
  541|      0|            memcpy(tf->miss.next, tf->nonmiss.next, sizeof tf->miss.next);
  542|      0|        }
  543|      0|        if (!(seen & (1u << OFPTFPT13_WRITE_ACTIONS_MISS))) {
  ------------------
  |  Branch (543:13): [True: 0, False: 0]
  ------------------
  544|      0|            tf->miss.write.ofpacts = tf->nonmiss.write.ofpacts;
  545|      0|        }
  546|      0|        if (!(seen & (1u << OFPTFPT13_APPLY_ACTIONS_MISS))) {
  ------------------
  |  Branch (546:13): [True: 0, False: 0]
  ------------------
  547|      0|            tf->miss.apply.ofpacts = tf->nonmiss.apply.ofpacts;
  548|      0|        }
  549|      0|        if (!(seen & (1u << OFPTFPT13_WRITE_SETFIELD_MISS))) {
  ------------------
  |  Branch (549:13): [True: 0, False: 0]
  ------------------
  550|      0|            tf->miss.write.set_fields = tf->nonmiss.write.set_fields;
  551|      0|        }
  552|      0|        if (!(seen & (1u << OFPTFPT13_APPLY_SETFIELD_MISS))) {
  ------------------
  |  Branch (552:13): [True: 0, False: 0]
  ------------------
  553|      0|            tf->miss.apply.set_fields = tf->nonmiss.apply.set_fields;
  554|      0|        }
  555|      0|    }
  556|       |
  557|       |    /* Fix inconsistencies:
  558|       |     *
  559|       |     *     - Turn on 'match' bits that are set in 'mask', because maskable
  560|       |     *       fields are matchable.
  561|       |     *
  562|       |     *     - Turn on 'wildcard' bits that are set in 'mask', because a field
  563|       |     *       that is arbitrarily maskable can be wildcarded entirely.
  564|       |     *
  565|       |     *     - Turn off 'wildcard' bits that are not in 'match', because a field
  566|       |     *       must be matchable for it to be meaningfully wildcarded. */
  567|    736|    bitmap_or(tf->match.bm, tf->mask.bm, MFF_N_IDS);
  568|    736|    bitmap_or(tf->wildcard.bm, tf->mask.bm, MFF_N_IDS);
  569|    736|    bitmap_and(tf->wildcard.bm, tf->match.bm, MFF_N_IDS);
  570|       |
  571|    736|    return 0;
  572|  1.25k|}
ofputil_decode_table_desc:
  729|  10.0k|{
  730|  10.0k|    memset(td, 0, sizeof *td);
  731|       |
  732|  10.0k|    if (!msg->header) {
  ------------------
  |  Branch (732:9): [True: 3.16k, False: 6.87k]
  ------------------
  733|  3.16k|        ofpraw_pull_assert(msg);
  734|  3.16k|    }
  735|       |
  736|  10.0k|    if (!msg->size) {
  ------------------
  |  Branch (736:9): [True: 845, False: 9.18k]
  ------------------
  737|    845|        return EOF;
  738|    845|    }
  739|       |
  740|  9.18k|    struct ofp14_table_desc *otd = ofpbuf_try_pull(msg, sizeof *otd);
  741|  9.18k|    if (!otd) {
  ------------------
  |  Branch (741:9): [True: 0, False: 9.18k]
  ------------------
  742|      0|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply has %"PRIu32" "
  ------------------
  |  |  223|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|      0|    do {                                                                \
  |  |  |  |  287|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|      0|                     "leftover bytes at end", msg->size);
  744|      0|        return OFPERR_OFPBRC_BAD_LEN;
  745|      0|    }
  746|       |
  747|  9.18k|    td->table_id = otd->table_id;
  748|  9.18k|    size_t length = ntohs(otd->length);
  749|  9.18k|    if (length < sizeof *otd || length - sizeof *otd > msg->size) {
  ------------------
  |  Branch (749:9): [True: 198, False: 8.98k]
  |  Branch (749:33): [True: 2.00k, False: 6.98k]
  ------------------
  750|  2.20k|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply claims invalid "
  ------------------
  |  |  223|  2.20k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  2.20k|    do {                                                                \
  |  |  |  |  287|  2.20k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  2.20k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 2.20k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  2.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  2.20k|                     "length %"PRIuSIZE, length);
  752|  2.20k|        return OFPERR_OFPBRC_BAD_LEN;
  753|  2.20k|    }
  754|  6.98k|    length -= sizeof *otd;
  755|       |
  756|  6.98k|    td->eviction = ofputil_decode_table_eviction(otd->config, version);
  757|  6.98k|    td->vacancy = ofputil_decode_table_vacancy(otd->config, version);
  758|  6.98k|    td->eviction_flags = UINT32_MAX;
  759|       |
  760|  6.98k|    struct ofpbuf properties = ofpbuf_const_initializer(
  761|  6.98k|        ofpbuf_pull(msg, length), length);
  762|  9.32k|    while (properties.size > 0) {
  ------------------
  |  Branch (762:12): [True: 3.17k, False: 6.14k]
  ------------------
  763|  3.17k|        struct ofpbuf payload;
  764|  3.17k|        enum ofperr error;
  765|  3.17k|        uint64_t type;
  766|       |
  767|  3.17k|        error = ofpprop_pull(&properties, &payload, &type);
  768|  3.17k|        if (error) {
  ------------------
  |  Branch (768:13): [True: 798, False: 2.37k]
  ------------------
  769|    798|            return error;
  770|    798|        }
  771|       |
  772|  2.37k|        switch (type) {
  773|  1.15k|        case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (773:9): [True: 1.15k, False: 1.21k]
  ------------------
  774|  1.15k|            error = ofpprop_parse_u32(&payload, &td->eviction_flags);
  775|  1.15k|            break;
  776|       |
  777|     37|        case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (777:9): [True: 37, False: 2.33k]
  ------------------
  778|     37|            error = parse_table_desc_vacancy_property(&payload, td);
  779|     37|            break;
  780|       |
  781|  1.18k|        default:
  ------------------
  |  Branch (781:9): [True: 1.18k, False: 1.19k]
  ------------------
  782|  1.18k|            error = OFPPROP_UNKNOWN(true, "table_desc", type);
  ------------------
  |  |  140|  1.18k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  783|  1.18k|            break;
  784|  2.37k|        }
  785|       |
  786|  2.37k|        if (error) {
  ------------------
  |  Branch (786:13): [True: 36, False: 2.33k]
  ------------------
  787|     36|            return error;
  788|     36|        }
  789|  2.37k|    }
  790|       |
  791|  6.14k|    return 0;
  792|  6.98k|}
ofputil_table_desc_format:
  875|  6.14k|{
  876|  6.14k|    ds_put_format(s, "\n  table ");
  877|  6.14k|    ofputil_format_table(td->table_id, table_map, s);
  878|  6.14k|    ds_put_cstr(s, ":\n");
  879|  6.14k|    ds_put_format(s, "   eviction=%s eviction_flags=",
  880|  6.14k|                  ofputil_table_eviction_to_string(td->eviction));
  881|  6.14k|    ofputil_put_eviction_flags(s, td->eviction_flags);
  882|  6.14k|    ds_put_char(s, '\n');
  883|  6.14k|    ds_put_format(s, "   vacancy=%s",
  884|  6.14k|                  ofputil_table_vacancy_to_string(td->vacancy));
  885|  6.14k|    if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (885:9): [True: 2.11k, False: 4.03k]
  ------------------
  886|  2.11k|        ds_put_format(s, " vacancy_down=%"PRIu8"%%",
  887|  2.11k|                      td->table_vacancy.vacancy_down);
  888|  2.11k|        ds_put_format(s, " vacancy_up=%"PRIu8"%%",
  889|  2.11k|                      td->table_vacancy.vacancy_up);
  890|  2.11k|        ds_put_format(s, " vacancy=%"PRIu8"%%",
  891|  2.11k|                      td->table_vacancy.vacancy);
  892|  2.11k|    }
  893|  6.14k|    ds_put_char(s, '\n');
  894|  6.14k|}
ofputil_decode_table_mod:
 1055|  16.1k|{
 1056|  16.1k|    memset(pm, 0, sizeof *pm);
 1057|  16.1k|    pm->miss = OFPUTIL_TABLE_MISS_DEFAULT;
 1058|  16.1k|    pm->eviction = OFPUTIL_TABLE_EVICTION_DEFAULT;
 1059|  16.1k|    pm->eviction_flags = UINT32_MAX;
 1060|  16.1k|    pm->vacancy = OFPUTIL_TABLE_VACANCY_DEFAULT;
 1061|       |
 1062|  16.1k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1063|  16.1k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1064|  16.1k|    if (raw == OFPRAW_OFPT11_TABLE_MOD) {
  ------------------
  |  Branch (1064:9): [True: 6.58k, False: 9.51k]
  ------------------
 1065|  6.58k|        const struct ofp11_table_mod *otm = b.data;
 1066|       |
 1067|  6.58k|        pm->table_id = otm->table_id;
 1068|  6.58k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1069|  9.51k|    } else if (raw == OFPRAW_OFPT14_TABLE_MOD) {
  ------------------
  |  Branch (1069:16): [True: 9.51k, False: 0]
  ------------------
 1070|  9.51k|        const struct ofp14_table_mod *otm = ofpbuf_pull(&b, sizeof *otm);
 1071|       |
 1072|  9.51k|        pm->table_id = otm->table_id;
 1073|  9.51k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1074|  9.51k|        pm->eviction = ofputil_decode_table_eviction(otm->config, oh->version);
 1075|  9.51k|        pm->vacancy = ofputil_decode_table_vacancy(otm->config, oh->version);
 1076|  12.3k|        while (b.size > 0) {
  ------------------
  |  Branch (1076:16): [True: 8.34k, False: 4.00k]
  ------------------
 1077|  8.34k|            struct ofpbuf property;
 1078|  8.34k|            enum ofperr error;
 1079|  8.34k|            uint64_t type;
 1080|       |
 1081|  8.34k|            error = ofpprop_pull(&b, &property, &type);
 1082|  8.34k|            if (error) {
  ------------------
  |  Branch (1082:17): [True: 1.91k, False: 6.43k]
  ------------------
 1083|  1.91k|                return error;
 1084|  1.91k|            }
 1085|       |
 1086|  6.43k|            switch (type) {
 1087|    215|            case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (1087:13): [True: 215, False: 6.21k]
  ------------------
 1088|    215|                error = ofpprop_parse_u32(&property, &pm->eviction);
 1089|    215|                break;
 1090|       |
 1091|  5.11k|            case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (1091:13): [True: 5.11k, False: 1.32k]
  ------------------
 1092|  5.11k|                error = parse_table_mod_vacancy_property(&property, pm);
 1093|  5.11k|                break;
 1094|       |
 1095|  1.10k|            default:
  ------------------
  |  Branch (1095:13): [True: 1.10k, False: 5.32k]
  ------------------
 1096|  1.10k|                error = OFPERR_OFPBRC_BAD_TYPE;
 1097|  1.10k|                break;
 1098|  6.43k|            }
 1099|       |
 1100|  6.43k|            if (error) {
  ------------------
  |  Branch (1100:17): [True: 3.59k, False: 2.83k]
  ------------------
 1101|  3.59k|                return error;
 1102|  3.59k|            }
 1103|  6.43k|        }
 1104|  9.51k|    } else {
 1105|      0|        return OFPERR_OFPBRC_BAD_TYPE;
 1106|      0|    }
 1107|       |
 1108|  10.5k|    return 0;
 1109|  16.1k|}
ofputil_table_mod_format:
 1171|  10.5k|{
 1172|  10.5k|    if (tm->table_id == 0xff) {
  ------------------
  |  Branch (1172:9): [True: 3.13k, False: 7.46k]
  ------------------
 1173|  3.13k|        ds_put_cstr(s, " table_id: ALL_TABLES");
 1174|  7.46k|    } else {
 1175|  7.46k|        ds_put_format(s, " table_id=");
 1176|  7.46k|        ofputil_format_table(tm->table_id, table_map, s);
 1177|  7.46k|    }
 1178|       |
 1179|  10.5k|    if (tm->miss != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1179:9): [True: 6.03k, False: 4.55k]
  ------------------
 1180|  6.03k|        ds_put_format(s, ", flow_miss_config=%s",
 1181|  6.03k|                      ofputil_table_miss_to_string(tm->miss));
 1182|  6.03k|    }
 1183|  10.5k|    if (tm->eviction != OFPUTIL_TABLE_EVICTION_DEFAULT) {
  ------------------
  |  Branch (1183:9): [True: 3.98k, False: 6.60k]
  ------------------
 1184|  3.98k|        ds_put_format(s, ", eviction=%s",
 1185|  3.98k|                      ofputil_table_eviction_to_string(tm->eviction));
 1186|  3.98k|    }
 1187|  10.5k|    if (tm->eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (1187:9): [True: 0, False: 10.5k]
  ------------------
 1188|      0|        ds_put_cstr(s, "eviction_flags=");
 1189|      0|        ofputil_put_eviction_flags(s, tm->eviction_flags);
 1190|      0|    }
 1191|  10.5k|    if (tm->vacancy != OFPUTIL_TABLE_VACANCY_DEFAULT) {
  ------------------
  |  Branch (1191:9): [True: 4.00k, False: 6.58k]
  ------------------
 1192|  4.00k|        ds_put_format(s, ", vacancy=%s",
 1193|  4.00k|                      ofputil_table_vacancy_to_string(tm->vacancy));
 1194|  4.00k|        if (tm->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (1194:13): [True: 2.67k, False: 1.33k]
  ------------------
 1195|  2.67k|            ds_put_format(s, " vacancy:%"PRIu8""
 1196|  2.67k|                          ",%"PRIu8"", tm->table_vacancy.vacancy_down,
 1197|  2.67k|                          tm->table_vacancy.vacancy_up);
 1198|  2.67k|        }
 1199|  4.00k|    }
 1200|  10.5k|}
ofputil_table_features_format:
 1707|  41.0k|{
 1708|  41.0k|    if (!prev_features && features->command != OFPTFC15_REPLACE) {
  ------------------
  |  Branch (1708:9): [True: 4.02k, False: 37.0k]
  |  Branch (1708:27): [True: 304, False: 3.72k]
  ------------------
 1709|    304|        ds_put_format(s, "\n  command: %s",
 1710|    304|                      ofp15_table_features_command_to_string(
 1711|    304|                          features->command));
 1712|    304|    }
 1713|       |
 1714|  41.0k|    int table = features->table_id;
 1715|  41.0k|    int prev_table = prev_features ? prev_features->table_id : 0;
  ------------------
  |  Branch (1715:22): [True: 37.0k, False: 4.02k]
  ------------------
 1716|       |
 1717|  41.0k|    bool same_stats = !stats || (prev_stats
  ------------------
  |  Branch (1717:23): [True: 736, False: 40.3k]
  |  Branch (1717:34): [True: 36.8k, False: 3.48k]
  ------------------
 1718|  40.3k|                                 && table_stats_equal(stats, prev_stats));
  ------------------
  |  Branch (1718:37): [True: 5.70k, False: 31.1k]
  ------------------
 1719|  41.0k|    bool same_features = prev_features && table_features_equal(features,
  ------------------
  |  Branch (1719:26): [True: 37.0k, False: 4.02k]
  |  Branch (1719:43): [True: 11.0k, False: 25.9k]
  ------------------
 1720|  37.0k|                                                               prev_features);
 1721|  41.0k|    if (same_stats && same_features && !features->name[0]) {
  ------------------
  |  Branch (1721:9): [True: 6.43k, False: 34.6k]
  |  Branch (1721:23): [True: 4.14k, False: 2.29k]
  |  Branch (1721:40): [True: 3.20k, False: 935]
  ------------------
 1722|  3.20k|        if (*first_ditto < 0) {
  ------------------
  |  Branch (1722:13): [True: 862, False: 2.34k]
  ------------------
 1723|    862|            *first_ditto = table;
 1724|    862|        }
 1725|  3.20k|        *last_ditto = table;
 1726|  3.20k|        return;
 1727|  3.20k|    }
 1728|  37.8k|    ofputil_table_features_format_finish(s, *first_ditto, *last_ditto);
 1729|  37.8k|    *first_ditto = -1;
 1730|       |
 1731|  37.8k|    ds_put_format(s, "\n  table %d", table);
 1732|  37.8k|    if (features->name[0]) {
  ------------------
  |  Branch (1732:9): [True: 21.3k, False: 16.5k]
  ------------------
 1733|  21.3k|        ds_put_format(s, " (\"%s\")", features->name);
 1734|  21.3k|    }
 1735|  37.8k|    ds_put_char(s, ':');
 1736|       |
 1737|  37.8k|    if (same_stats && same_features) {
  ------------------
  |  Branch (1737:9): [True: 3.23k, False: 34.6k]
  |  Branch (1737:23): [True: 935, False: 2.29k]
  ------------------
 1738|    935|        ds_put_cstr(s, " ditto");
 1739|    935|        return;
 1740|    935|    }
 1741|  36.9k|    ds_put_char(s, '\n');
 1742|  36.9k|    if (stats) {
  ------------------
  |  Branch (1742:9): [True: 36.1k, False: 736]
  ------------------
 1743|  36.1k|        ds_put_format(s, "    active=%"PRIu32", ", stats->active_count);
 1744|  36.1k|        ds_put_format(s, "lookup=%"PRIu64", ", stats->lookup_count);
 1745|  36.1k|        ds_put_format(s, "matched=%"PRIu64"\n", stats->matched_count);
 1746|  36.1k|    }
 1747|  36.9k|    if (same_features) {
  ------------------
  |  Branch (1747:9): [True: 6.88k, False: 30.0k]
  ------------------
 1748|  6.88k|        if (!table_features_empty(features)) {
  ------------------
  |  Branch (1748:13): [True: 1.25k, False: 5.63k]
  ------------------
 1749|  1.25k|            ds_put_cstr(s, "    (same features)\n");
 1750|  1.25k|        }
 1751|  6.88k|        return;
 1752|  6.88k|    }
 1753|  30.0k|    if (features->metadata_match || features->metadata_write) {
  ------------------
  |  Branch (1753:9): [True: 15.7k, False: 14.2k]
  |  Branch (1753:37): [True: 1.48k, False: 12.7k]
  ------------------
 1754|  17.2k|        ds_put_format(s, "    metadata: match=%#"PRIx64" write=%#"PRIx64"\n",
 1755|  17.2k|                      ntohll(features->metadata_match),
 1756|  17.2k|                      ntohll(features->metadata_write));
 1757|  17.2k|    }
 1758|       |
 1759|  30.0k|    if (features->miss_config != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1759:9): [True: 25.8k, False: 4.13k]
  ------------------
 1760|  25.8k|        ds_put_format(s, "    config=%s\n",
 1761|  25.8k|                      ofputil_table_miss_to_string(features->miss_config));
 1762|  25.8k|    }
 1763|       |
 1764|  30.0k|    if (features->supports_eviction >= 0) {
  ------------------
  |  Branch (1764:9): [True: 736, False: 29.2k]
  ------------------
 1765|    736|        ds_put_format(s, "    eviction: %ssupported\n",
 1766|    736|                      features->supports_eviction ? "" : "not ");
  ------------------
  |  Branch (1766:23): [True: 191, False: 545]
  ------------------
 1767|       |
 1768|    736|    }
 1769|  30.0k|    if (features->supports_vacancy_events >= 0) {
  ------------------
  |  Branch (1769:9): [True: 736, False: 29.2k]
  ------------------
 1770|    736|        ds_put_format(s, "    vacancy events: %ssupported\n",
 1771|    736|                      features->supports_vacancy_events ? "" : "not ");
  ------------------
  |  Branch (1771:23): [True: 343, False: 393]
  ------------------
 1772|       |
 1773|    736|    }
 1774|       |
 1775|  30.0k|    if (features->max_entries) {
  ------------------
  |  Branch (1775:9): [True: 26.5k, False: 3.42k]
  ------------------
 1776|  26.5k|        ds_put_format(s, "    max_entries=%"PRIu32"\n", features->max_entries);
 1777|  26.5k|    }
 1778|       |
 1779|  30.0k|    const struct ofputil_table_instruction_features *prev_nonmiss
 1780|  30.0k|        = prev_features ? &prev_features->nonmiss : NULL;
  ------------------
  |  Branch (1780:11): [True: 25.9k, False: 4.02k]
  ------------------
 1781|  30.0k|    const struct ofputil_table_instruction_features *prev_miss
 1782|  30.0k|        = prev_features ? &prev_features->miss : NULL;
  ------------------
  |  Branch (1782:11): [True: 25.9k, False: 4.02k]
  ------------------
 1783|  30.0k|    if (prev_features
  ------------------
  |  Branch (1783:9): [True: 25.9k, False: 4.02k]
  ------------------
 1784|  30.0k|        && table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1784:12): [True: 4.68k, False: 21.3k]
  ------------------
 1785|  25.9k|                                            prev_nonmiss, prev_table)
 1786|  30.0k|        && table_instruction_features_equal(&features->miss, table,
  ------------------
  |  Branch (1786:12): [True: 4.68k, False: 0]
  ------------------
 1787|  4.68k|                                            prev_miss, prev_table)) {
 1788|  4.68k|        if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1788:13): [True: 1.46k, False: 3.22k]
  ------------------
 1789|  1.46k|            ds_put_cstr(s, "    (same instructions)\n");
 1790|  1.46k|        }
 1791|  25.3k|    } else if (!table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1791:16): [True: 0, False: 25.3k]
  ------------------
 1792|  25.3k|                                                 &features->miss, table)) {
 1793|      0|        ds_put_cstr(s, "    instructions (other than table miss):\n");
 1794|      0|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1795|      0|        ds_put_cstr(s, "    instructions (table miss):\n");
 1796|      0|        print_table_instruction_features(s, &features->miss, prev_miss);
 1797|  25.3k|    } else if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1797:16): [True: 24.0k, False: 1.26k]
  ------------------
 1798|  24.0k|        ds_put_cstr(s, "    instructions (table miss and others):\n");
 1799|  24.0k|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1800|  24.0k|    }
 1801|       |
 1802|  30.0k|    if (!bitmap_is_all_zeros(features->match.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1802:9): [True: 26.6k, False: 3.36k]
  ------------------
 1803|  26.6k|        if (prev_features
  ------------------
  |  Branch (1803:13): [True: 23.4k, False: 3.15k]
  ------------------
 1804|  26.6k|            && bitmap_equal(features->match.bm, prev_features->match.bm,
  ------------------
  |  Branch (1804:16): [True: 3.75k, False: 19.7k]
  ------------------
 1805|  23.4k|                            MFF_N_IDS)) {
 1806|  3.75k|            ds_put_cstr(s, "    (same matching)\n");
 1807|  22.8k|        } else {
 1808|  22.8k|            ds_put_cstr(s, "    matching:\n");
 1809|       |
 1810|  22.8k|            print_matches(s, features, true, true, "arbitrary mask");
 1811|  22.8k|            print_matches(s, features, false, true, "exact match or wildcard");
 1812|  22.8k|            print_matches(s, features, false, false, "must exact match");
 1813|  22.8k|        }
 1814|  26.6k|    }
 1815|  30.0k|}
ofputil_table_features_format_finish:
 1820|  64.5k|{
 1821|  64.5k|    if (first_ditto < 0) {
  ------------------
  |  Branch (1821:9): [True: 63.6k, False: 862]
  ------------------
 1822|  63.6k|        return;
 1823|  63.6k|    }
 1824|       |
 1825|    862|    ds_put_char(s, '\n');
 1826|    862|    if (first_ditto == last_ditto) {
  ------------------
  |  Branch (1826:9): [True: 822, False: 40]
  ------------------
 1827|    822|        ds_put_format(s, "  table %d: ditto\n", first_ditto);
 1828|    822|    } else {
 1829|     40|        ds_put_format(s, "  tables %d...%d: ditto\n", first_ditto, last_ditto);
 1830|     40|    }
 1831|    862|}
ofputil_decode_table_stats_reply:
 2256|  48.4k|{
 2257|  48.4k|    const struct ofp_header *oh;
 2258|       |
 2259|  48.4k|    if (!msg->header) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 48.4k]
  ------------------
 2260|      0|        ofpraw_pull_assert(msg);
 2261|      0|    }
 2262|  48.4k|    oh = msg->header;
 2263|       |
 2264|  48.4k|    if (!msg->size) {
  ------------------
  |  Branch (2264:9): [True: 8.17k, False: 40.3k]
  ------------------
 2265|  8.17k|        return EOF;
 2266|  8.17k|    }
 2267|       |
 2268|  40.3k|    memset(stats, 0, sizeof *stats);
 2269|  40.3k|    memset(features, 0, sizeof *features);
 2270|  40.3k|    features->supports_eviction = -1;
 2271|  40.3k|    features->supports_vacancy_events = -1;
 2272|       |
 2273|  40.3k|    switch ((enum ofp_version) oh->version) {
 2274|  4.24k|    case OFP10_VERSION:
  ------------------
  |  Branch (2274:5): [True: 4.24k, False: 36.0k]
  ------------------
 2275|  4.24k|        return ofputil_decode_ofp10_table_stats(msg, stats, features);
 2276|       |
 2277|  8.19k|    case OFP11_VERSION:
  ------------------
  |  Branch (2277:5): [True: 8.19k, False: 32.1k]
  ------------------
 2278|  8.19k|        return ofputil_decode_ofp11_table_stats(msg, stats, features);
 2279|       |
 2280|  18.8k|    case OFP12_VERSION:
  ------------------
  |  Branch (2280:5): [True: 18.8k, False: 21.4k]
  ------------------
 2281|  18.8k|        return ofputil_decode_ofp12_table_stats(msg, stats, features);
 2282|       |
 2283|    308|    case OFP13_VERSION:
  ------------------
  |  Branch (2283:5): [True: 308, False: 39.9k]
  ------------------
 2284|    698|    case OFP14_VERSION:
  ------------------
  |  Branch (2284:5): [True: 390, False: 39.9k]
  ------------------
 2285|  8.99k|    case OFP15_VERSION:
  ------------------
  |  Branch (2285:5): [True: 8.29k, False: 32.0k]
  ------------------
 2286|  8.99k|        return ofputil_decode_ofp13_table_stats(msg, stats, features);
 2287|       |
 2288|      0|    default:
  ------------------
  |  Branch (2288:5): [True: 0, False: 40.3k]
  ------------------
 2289|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2290|  40.3k|    }
 2291|  40.3k|}
ofp_table_reason_to_string:
 2299|  1.22k|{
 2300|  1.22k|    switch (reason) {
 2301|    614|    case OFPTR_VACANCY_DOWN:
  ------------------
  |  Branch (2301:5): [True: 614, False: 615]
  ------------------
 2302|    614|        return "vacancy_down";
 2303|       |
 2304|    615|    case OFPTR_VACANCY_UP:
  ------------------
  |  Branch (2304:5): [True: 615, False: 614]
  ------------------
 2305|    615|        return "vacancy_up";
 2306|       |
 2307|      0|    default:
  ------------------
  |  Branch (2307:5): [True: 0, False: 1.22k]
  ------------------
 2308|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
 2309|      0|        return reasonbuf;
 2310|  1.22k|    }
 2311|  1.22k|}
ofputil_decode_table_status:
 2373|  3.94k|{
 2374|  3.94k|    const struct ofp14_table_status *ots;
 2375|  3.94k|    struct ofpbuf b;
 2376|  3.94k|    enum ofperr error;
 2377|  3.94k|    enum ofpraw raw;
 2378|       |
 2379|  3.94k|    ofpbuf_use_const(&b, oh, ntohs(oh->length));
 2380|  3.94k|    raw = ofpraw_pull_assert(&b);
 2381|  3.94k|    ots = ofpbuf_pull(&b, sizeof *ots);
 2382|       |
 2383|  3.94k|    if (raw == OFPRAW_OFPT14_TABLE_STATUS) {
  ------------------
  |  Branch (2383:9): [True: 3.94k, False: 0]
  ------------------
 2384|  3.94k|        if (ots->reason != OFPTR_VACANCY_DOWN
  ------------------
  |  Branch (2384:13): [True: 2.90k, False: 1.03k]
  ------------------
 2385|  3.94k|            && ots->reason != OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2385:16): [True: 965, False: 1.94k]
  ------------------
 2386|    965|            return OFPERR_OFPBPC_BAD_VALUE;
 2387|    965|        }
 2388|  2.97k|        ts->reason = ots->reason;
 2389|       |
 2390|  2.97k|        error = ofputil_decode_table_desc(&b, &ts->desc, oh->version);
 2391|  2.97k|        return error;
 2392|  3.94k|    } else {
 2393|      0|        return OFPERR_OFPBRC_BAD_VERSION;
 2394|      0|    }
 2395|       |
 2396|      0|    return 0;
 2397|  3.94k|}
ofputil_format_table_status:
 2403|  2.25k|{
 2404|  2.25k|    if (ts->reason == OFPTR_VACANCY_DOWN) {
  ------------------
  |  Branch (2404:9): [True: 944, False: 1.31k]
  ------------------
 2405|    944|        ds_put_format(string, " reason=VACANCY_DOWN");
 2406|  1.31k|    } else if (ts->reason == OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2406:16): [True: 1.31k, False: 0]
  ------------------
 2407|  1.31k|        ds_put_format(string, " reason=VACANCY_UP");
 2408|  1.31k|    }
 2409|       |
 2410|  2.25k|    ds_put_format(string, "\ntable_desc:-");
 2411|  2.25k|    ofputil_table_desc_format(string, &ts->desc, table_map);
 2412|  2.25k|}
ofp-table.c:ofp15_table_features_command_is_valid:
   80|  11.9k|{
   81|  11.9k|    switch (cmd) {
   82|  6.52k|    case OFPTFC15_REPLACE:
  ------------------
  |  Branch (82:5): [True: 6.52k, False: 5.40k]
  ------------------
   83|  6.63k|    case OFPTFC15_MODIFY:
  ------------------
  |  Branch (83:5): [True: 114, False: 11.8k]
  ------------------
   84|  11.6k|    case OFPTFC15_ENABLE:
  ------------------
  |  Branch (84:5): [True: 5.05k, False: 6.86k]
  ------------------
   85|  11.8k|    case OFPTFC15_DISABLE:
  ------------------
  |  Branch (85:5): [True: 108, False: 11.8k]
  ------------------
   86|  11.8k|        return true;
   87|       |
   88|    122|    default:
  ------------------
  |  Branch (88:5): [True: 122, False: 11.8k]
  ------------------
   89|    122|        return false;
   90|  11.9k|    }
   91|  11.9k|}
ofp-table.c:pull_table_feature_property:
  235|  44.5k|{
  236|  44.5k|    enum ofperr error;
  237|       |
  238|  44.5k|    error = ofpprop_pull(msg, payload, typep);
  239|  44.5k|    if (payload && !error) {
  ------------------
  |  Branch (239:9): [True: 44.5k, False: 0]
  |  Branch (239:20): [True: 40.2k, False: 4.30k]
  ------------------
  240|  40.2k|        ofpbuf_pull(payload, (char *)payload->msg - (char *)payload->header);
  241|  40.2k|    }
  242|  44.5k|    return error;
  243|  44.5k|}
ofp-table.c:parse_instruction_ids:
  270|  5.94k|{
  271|  5.94k|    *insts = 0;
  272|  6.90k|    while (payload->size > 0) {
  ------------------
  |  Branch (272:12): [True: 5.56k, False: 1.33k]
  ------------------
  273|  5.56k|        enum ovs_instruction_type inst;
  274|  5.56k|        enum ofperr error;
  275|  5.56k|        uint64_t ofpit;
  276|       |
  277|       |        /* OF1.3 and OF1.4 aren't clear about padding in the instruction IDs.
  278|       |         * It seems clear that they aren't padded to 8 bytes, though, because
  279|       |         * both standards say that "non-experimenter instructions are 4 bytes"
  280|       |         * and do not mention any padding before the first instruction ID.
  281|       |         * (There wouldn't be any point in padding to 8 bytes if the IDs were
  282|       |         * aligned on an odd 4-byte boundary.)
  283|       |         *
  284|       |         * Anyway, we just assume they're all glommed together on byte
  285|       |         * boundaries. */
  286|  5.56k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &ofpit);
  287|  5.56k|        if (error) {
  ------------------
  |  Branch (287:13): [True: 4.61k, False: 954]
  ------------------
  288|  4.61k|            return error;
  289|  4.61k|        }
  290|       |
  291|    954|        error = ovs_instruction_type_from_inst_type(&inst, ofpit);
  292|    954|        if (!error) {
  ------------------
  |  Branch (292:13): [True: 380, False: 574]
  ------------------
  293|    380|            *insts |= 1u << inst;
  294|    574|        } else if (!loose) {
  ------------------
  |  Branch (294:20): [True: 0, False: 574]
  ------------------
  295|      0|            return error;
  296|      0|        }
  297|    954|    }
  298|  1.33k|    return 0;
  299|  5.94k|}
ofp-table.c:parse_table_features_next_table:
  304|  8.29k|{
  305|  8.29k|    size_t i;
  306|       |
  307|  8.29k|    memset(next_tables, 0, bitmap_n_bytes(255));
  308|  41.4k|    for (i = 0; i < payload->size; i++) {
  ------------------
  |  Branch (308:17): [True: 33.3k, False: 8.09k]
  ------------------
  309|  33.3k|        uint8_t id = ((const uint8_t *) payload->data)[i];
  310|  33.3k|        if (id >= 255) {
  ------------------
  |  Branch (310:13): [True: 199, False: 33.1k]
  ------------------
  311|    199|            return OFPERR_OFPBPC_BAD_VALUE;
  312|    199|        }
  313|  33.1k|        bitmap_set1(next_tables, id);
  314|  33.1k|    }
  315|  8.09k|    return 0;
  316|  8.29k|}
ofp-table.c:parse_action_bitmap:
  248|  5.89k|{
  249|  5.89k|    uint32_t types = 0;
  250|       |
  251|  11.5k|    while (payload->size > 0) {
  ------------------
  |  Branch (251:12): [True: 6.85k, False: 4.70k]
  ------------------
  252|  6.85k|        enum ofperr error;
  253|  6.85k|        uint64_t type;
  254|       |
  255|  6.85k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &type);
  256|  6.85k|        if (error) {
  ------------------
  |  Branch (256:13): [True: 1.19k, False: 5.66k]
  ------------------
  257|  1.19k|            return error;
  258|  1.19k|        }
  259|  5.66k|        if (type < CHAR_BIT * sizeof types) {
  ------------------
  |  Branch (259:13): [True: 4.59k, False: 1.06k]
  ------------------
  260|  4.59k|            types |= 1u << type;
  261|  4.59k|        }
  262|  5.66k|    }
  263|       |
  264|  4.70k|    *ofpacts = ofpact_bitmap_from_openflow(htonl(types), ofp_version);
  265|  4.70k|    return 0;
  266|  5.89k|}
ofp-table.c:parse_oxms:
  321|  11.2k|{
  322|  11.2k|    struct mf_bitmap exact = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 1970|  11.2k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  323|  11.2k|    struct mf_bitmap masked = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 1970|  11.2k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  324|       |
  325|  98.7k|    while (payload->size > 0) {
  ------------------
  |  Branch (325:12): [True: 88.2k, False: 10.5k]
  ------------------
  326|  88.2k|        const struct mf_field *field;
  327|  88.2k|        enum ofperr error;
  328|  88.2k|        bool hasmask;
  329|       |
  330|  88.2k|        error = nx_pull_header(payload, NULL, &field, &hasmask);
  331|  88.2k|        if (!error) {
  ------------------
  |  Branch (331:13): [True: 1.67k, False: 86.5k]
  ------------------
  332|  1.67k|            bitmap_set1(hasmask ? masked.bm : exact.bm, field->id);
  ------------------
  |  Branch (332:25): [True: 1.38k, False: 293]
  ------------------
  333|  86.5k|        } else if (error != OFPERR_OFPBMC_BAD_FIELD || !loose) {
  ------------------
  |  Branch (333:20): [True: 708, False: 85.8k]
  |  Branch (333:56): [True: 0, False: 85.8k]
  ------------------
  334|    708|            return error;
  335|    708|        }
  336|  88.2k|    }
  337|  10.5k|    if (exactp) {
  ------------------
  |  Branch (337:9): [True: 10.5k, False: 0]
  ------------------
  338|  10.5k|        *exactp = exact;
  339|  10.5k|    } else if (!bitmap_is_all_zeros(exact.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (339:16): [True: 0, False: 0]
  ------------------
  340|      0|        return OFPERR_OFPBMC_BAD_MASK;
  341|      0|    }
  342|  10.5k|    if (maskedp) {
  ------------------
  |  Branch (342:9): [True: 445, False: 10.1k]
  ------------------
  343|    445|        *maskedp = masked;
  344|  10.1k|    } else if (!bitmap_is_all_zeros(masked.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (344:16): [True: 1.12k, False: 8.98k]
  ------------------
  345|  1.12k|        return OFPERR_OFPBMC_BAD_MASK;
  346|  1.12k|    }
  347|  9.42k|    return 0;
  348|  10.5k|}
ofp-table.c:parse_table_desc_vacancy_property:
  708|     37|{
  709|     37|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  710|       |
  711|     37|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (711:9): [True: 18, False: 19]
  ------------------
  712|     18|        return OFPERR_OFPBPC_BAD_LEN;
  713|     18|    }
  714|       |
  715|     19|    td->table_vacancy.vacancy_down = otv->vacancy_down;
  716|     19|    td->table_vacancy.vacancy_up = otv->vacancy_up;
  717|     19|    td->table_vacancy.vacancy = otv->vacancy;
  718|     19|    return 0;
  719|     37|}
ofp-table.c:ofputil_put_eviction_flags:
  863|  6.14k|{
  864|  6.14k|    if (eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (864:9): [True: 1.13k, False: 5.01k]
  ------------------
  865|  1.13k|        ofp_print_bit_names(string, eviction_flags,
  866|  1.13k|                            ofputil_eviction_flag_to_string, '|');
  867|  5.01k|    } else {
  868|  5.01k|        ds_put_cstr(string, "(default)");
  869|  5.01k|    }
  870|  6.14k|}
ofp-table.c:ofputil_eviction_flag_to_string:
  847|  14.5k|{
  848|  14.5k|    enum ofp14_table_mod_prop_eviction_flag eviction_flag = bit;
  849|       |
  850|  14.5k|    switch (eviction_flag) {
  ------------------
  |  Branch (850:13): [True: 13.5k, False: 992]
  ------------------
  851|    327|    case OFPTMPEF14_OTHER:      return "OTHER";
  ------------------
  |  Branch (851:5): [True: 327, False: 14.2k]
  ------------------
  852|    338|    case OFPTMPEF14_IMPORTANCE: return "IMPORTANCE";
  ------------------
  |  Branch (852:5): [True: 338, False: 14.2k]
  ------------------
  853|    327|    case OFPTMPEF14_LIFETIME:   return "LIFETIME";
  ------------------
  |  Branch (853:5): [True: 327, False: 14.2k]
  ------------------
  854|  14.5k|    }
  855|       |
  856|  13.5k|    return NULL;
  857|  14.5k|}
ofp-table.c:ofputil_decode_table_vacancy:
  941|  16.5k|{
  942|  16.5k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_VACANCY_DEFAULT
  ------------------
  |  Branch (942:13): [True: 0, False: 16.5k]
  ------------------
  943|  16.5k|            : config & htonl(OFPTC14_VACANCY_EVENTS) ? OFPUTIL_TABLE_VACANCY_ON
  ------------------
  |  Branch (943:15): [True: 9.25k, False: 7.24k]
  ------------------
  944|  16.5k|            : OFPUTIL_TABLE_VACANCY_OFF);
  945|  16.5k|}
ofp-table.c:ofputil_decode_table_eviction:
  956|  16.5k|{
  957|  16.5k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_EVICTION_DEFAULT
  ------------------
  |  Branch (957:13): [True: 0, False: 16.5k]
  ------------------
  958|  16.5k|            : config & htonl(OFPTC14_EVICTION) ? OFPUTIL_TABLE_EVICTION_ON
  ------------------
  |  Branch (958:15): [True: 5.61k, False: 10.8k]
  ------------------
  959|  16.5k|            : OFPUTIL_TABLE_EVICTION_OFF);
  960|  16.5k|}
ofp-table.c:ofputil_decode_table_miss:
 1027|  43.1k|{
 1028|  43.1k|    uint32_t config = ntohl(config_);
 1029|       |
 1030|  43.1k|    if (version == OFP11_VERSION || version == OFP12_VERSION) {
  ------------------
  |  Branch (1030:9): [True: 13.7k, False: 29.4k]
  |  Branch (1030:37): [True: 19.3k, False: 10.0k]
  ------------------
 1031|  33.1k|        switch (config & OFPTC11_TABLE_MISS_MASK) {
 1032|  14.2k|        case OFPTC11_TABLE_MISS_CONTROLLER:
  ------------------
  |  Branch (1032:9): [True: 14.2k, False: 18.9k]
  ------------------
 1033|  14.2k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1034|       |
 1035|  3.84k|        case OFPTC11_TABLE_MISS_CONTINUE:
  ------------------
  |  Branch (1035:9): [True: 3.84k, False: 29.2k]
  ------------------
 1036|  3.84k|            return OFPUTIL_TABLE_MISS_CONTINUE;
 1037|       |
 1038|  4.70k|        case OFPTC11_TABLE_MISS_DROP:
  ------------------
  |  Branch (1038:9): [True: 4.70k, False: 28.4k]
  ------------------
 1039|  4.70k|            return OFPUTIL_TABLE_MISS_DROP;
 1040|       |
 1041|  10.3k|        default:
  ------------------
  |  Branch (1041:9): [True: 10.3k, False: 22.7k]
  ------------------
 1042|  10.3k|            VLOG_WARN_RL(&rl, "bad table miss config %d", config);
  ------------------
  |  |  223|  10.3k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  10.3k|    do {                                                                \
  |  |  |  |  287|  10.3k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  10.3k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 10.3k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  10.3k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  10.3k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1044|  33.1k|        }
 1045|  33.1k|    } else {
 1046|  10.0k|        return OFPUTIL_TABLE_MISS_DEFAULT;
 1047|  10.0k|    }
 1048|  43.1k|}
ofp-table.c:parse_table_mod_vacancy_property:
  904|  5.11k|{
  905|  5.11k|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  906|       |
  907|  5.11k|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (907:9): [True: 48, False: 5.06k]
  ------------------
  908|     48|        return OFPERR_OFPBPC_BAD_LEN;
  909|     48|    }
  910|  5.06k|    tm->table_vacancy.vacancy_down = otv->vacancy_down;
  911|  5.06k|    tm->table_vacancy.vacancy_up = otv->vacancy_up;
  912|  5.06k|    if (tm->table_vacancy.vacancy_down > tm->table_vacancy.vacancy_up) {
  ------------------
  |  Branch (912:9): [True: 327, False: 4.73k]
  ------------------
  913|    327|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  135|    327|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    327|    do {                                                                \
  |  |  |  |  287|    654|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|    327|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 327]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    327|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|    327|                    "Value of vacancy_down is greater than vacancy_up");
  915|    327|        return OFPERR_OFPBPC_BAD_VALUE;
  916|    327|    }
  917|  4.73k|    if (tm->table_vacancy.vacancy_down > 100 ||
  ------------------
  |  Branch (917:9): [True: 539, False: 4.19k]
  ------------------
  918|  4.73k|        tm->table_vacancy.vacancy_up > 100) {
  ------------------
  |  Branch (918:9): [True: 945, False: 3.25k]
  ------------------
  919|  1.48k|        OFPPROP_LOG(&rl, false, "Vacancy threshold percentage "
  ------------------
  |  |  135|  1.48k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.48k|    do {                                                                \
  |  |  |  |  287|  2.96k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|  1.48k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.48k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.48k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|  1.48k|                    "should not be greater than 100");
  921|  1.48k|        return OFPERR_OFPBPC_BAD_VALUE;
  922|  1.48k|    }
  923|  3.25k|    tm->table_vacancy.vacancy = otv->vacancy;
  924|  3.25k|    if (tm->table_vacancy.vacancy) {
  ------------------
  |  Branch (924:9): [True: 620, False: 2.63k]
  ------------------
  925|    620|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  135|    620|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    620|    do {                                                                \
  |  |  |  |  287|  1.24k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (287:35): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  |  |  288|    620|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 620]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    620|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|    620|                    "Vacancy value should be zero for table-mod messages");
  927|    620|        return OFPERR_OFPBPC_BAD_VALUE;
  928|    620|    }
  929|  2.63k|    return 0;
  930|  3.25k|}
ofp-table.c:ofp15_table_features_command_to_string:
   95|    304|{
   96|    304|    switch (cmd) {
   97|      0|    case OFPTFC15_REPLACE: return "replace";
  ------------------
  |  Branch (97:5): [True: 0, False: 304]
  ------------------
   98|     65|    case OFPTFC15_MODIFY: return "modify";
  ------------------
  |  Branch (98:5): [True: 65, False: 239]
  ------------------
   99|    190|    case OFPTFC15_ENABLE: return "enable";
  ------------------
  |  Branch (99:5): [True: 190, False: 114]
  ------------------
  100|     49|    case OFPTFC15_DISABLE: return "disable";
  ------------------
  |  Branch (100:5): [True: 49, False: 255]
  ------------------
  101|      0|    default: return "***bad command***";
  ------------------
  |  Branch (101:5): [True: 0, False: 304]
  ------------------
  102|    304|    }
  103|    304|}
ofp-table.c:table_stats_equal:
 1693|  36.8k|{
 1694|  36.8k|    return (a->active_count == b->active_count
  ------------------
  |  Branch (1694:13): [True: 11.5k, False: 25.2k]
  ------------------
 1695|  36.8k|            && a->lookup_count == b->lookup_count
  ------------------
  |  Branch (1695:16): [True: 7.78k, False: 3.74k]
  ------------------
 1696|  36.8k|            && a->matched_count == b->matched_count);
  ------------------
  |  Branch (1696:16): [True: 5.70k, False: 2.08k]
  ------------------
 1697|  36.8k|}
ofp-table.c:table_features_equal:
 1662|  37.0k|{
 1663|  37.0k|    return (a->metadata_match == b->metadata_match
  ------------------
  |  Branch (1663:13): [True: 24.2k, False: 12.7k]
  ------------------
 1664|  37.0k|            && a->metadata_write == b->metadata_write
  ------------------
  |  Branch (1664:16): [True: 22.7k, False: 1.55k]
  ------------------
 1665|  37.0k|            && a->miss_config == b->miss_config
  ------------------
  |  Branch (1665:16): [True: 19.7k, False: 2.94k]
  ------------------
 1666|  37.0k|            && a->supports_eviction == b->supports_eviction
  ------------------
  |  Branch (1666:16): [True: 19.7k, False: 3]
  ------------------
 1667|  37.0k|            && a->supports_vacancy_events == b->supports_vacancy_events
  ------------------
  |  Branch (1667:16): [True: 19.7k, False: 4]
  ------------------
 1668|  37.0k|            && a->max_entries == b->max_entries
  ------------------
  |  Branch (1668:16): [True: 12.7k, False: 6.99k]
  ------------------
 1669|  37.0k|            && table_instruction_features_equal(&a->nonmiss, a->table_id,
  ------------------
  |  Branch (1669:16): [True: 11.4k, False: 1.35k]
  ------------------
 1670|  12.7k|                                                &b->nonmiss, b->table_id)
 1671|  37.0k|            && table_instruction_features_equal(&a->miss, a->table_id,
  ------------------
  |  Branch (1671:16): [True: 11.4k, False: 0]
  ------------------
 1672|  11.4k|                                                &b->miss, b->table_id)
 1673|  37.0k|            && bitmap_equal(a->match.bm, b->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1673:16): [True: 11.0k, False: 391]
  ------------------
 1674|  37.0k|}
ofp-table.c:table_features_empty:
 1678|  6.88k|{
 1679|  6.88k|    return (!tf->metadata_match
  ------------------
  |  Branch (1679:13): [True: 6.58k, False: 297]
  ------------------
 1680|  6.88k|            && !tf->metadata_write
  ------------------
  |  Branch (1680:16): [True: 6.46k, False: 123]
  ------------------
 1681|  6.88k|            && tf->miss_config == OFPUTIL_TABLE_MISS_DEFAULT
  ------------------
  |  Branch (1681:16): [True: 6.08k, False: 376]
  ------------------
 1682|  6.88k|            && tf->supports_eviction < 0
  ------------------
  |  Branch (1682:16): [True: 6.08k, False: 0]
  ------------------
 1683|  6.88k|            && tf->supports_vacancy_events < 0
  ------------------
  |  Branch (1683:16): [True: 6.08k, False: 0]
  ------------------
 1684|  6.88k|            && !tf->max_entries
  ------------------
  |  Branch (1684:16): [True: 5.70k, False: 388]
  ------------------
 1685|  6.88k|            && table_instruction_features_empty(&tf->nonmiss)
  ------------------
  |  Branch (1685:16): [True: 5.70k, False: 0]
  ------------------
 1686|  6.88k|            && table_instruction_features_empty(&tf->miss)
  ------------------
  |  Branch (1686:16): [True: 5.70k, False: 0]
  ------------------
 1687|  6.88k|            && bitmap_is_all_zeros(tf->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1687:16): [True: 5.63k, False: 67]
  ------------------
 1688|  6.88k|}
ofp-table.c:table_instruction_features_equal:
 1641|  80.2k|{
 1642|  80.2k|    return (table_instruction_features_next_equal(a->next, a_table_id,
  ------------------
  |  Branch (1642:13): [True: 80.2k, False: 0]
  ------------------
 1643|  80.2k|                                                  b->next, b_table_id)
 1644|  80.2k|            && a->instructions == b->instructions
  ------------------
  |  Branch (1644:16): [True: 66.6k, False: 13.5k]
  ------------------
 1645|  80.2k|            && table_action_features_equal(&a->write, &b->write)
  ------------------
  |  Branch (1645:16): [True: 58.9k, False: 7.62k]
  ------------------
 1646|  80.2k|            && table_action_features_equal(&a->apply, &b->apply));
  ------------------
  |  Branch (1646:16): [True: 57.5k, False: 1.45k]
  ------------------
 1647|  80.2k|}
ofp-table.c:table_instruction_features_next_equal:
 1615|  81.4k|{
 1616|  81.4k|    if (b_table_id == a_table_id + 1
  ------------------
  |  Branch (1616:9): [True: 2.31k, False: 79.1k]
  ------------------
 1617|  81.4k|        && bitmap_is_set(a, b_table_id)
  ------------------
  |  Branch (1617:12): [True: 0, False: 2.31k]
  ------------------
 1618|  81.4k|        && !bitmap_is_set(b, b_table_id)) {
  ------------------
  |  Branch (1618:12): [True: 0, False: 0]
  ------------------
 1619|      0|        for (size_t i = 0; i < BITMAP_N_LONGS(255); i++) {
  ------------------
  |  |  420|      0|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  296|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1619:28): [True: 0, False: 0]
  ------------------
 1620|      0|            unsigned long diff = a[i] ^ b[i];
 1621|      0|            if (i == b_table_id / BITMAP_ULONG_BITS) {
  ------------------
  |  |  419|      0|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (1621:17): [True: 0, False: 0]
  ------------------
 1622|      0|                diff &= ~bitmap_bit__(b_table_id);
 1623|      0|            }
 1624|      0|            if (diff) {
  ------------------
  |  Branch (1624:17): [True: 0, False: 0]
  ------------------
 1625|      0|                return false;
 1626|      0|            }
 1627|      0|        }
 1628|      0|        return true;
 1629|  81.4k|    } else if (a_table_id == b_table_id + 1) {
  ------------------
  |  Branch (1629:16): [True: 1.22k, False: 80.2k]
  ------------------
 1630|  1.22k|        return table_instruction_features_next_equal(b, b_table_id,
 1631|  1.22k|                                                     a, a_table_id);
 1632|  80.2k|    } else {
 1633|  80.2k|        return bitmap_equal(a, b, 255);
 1634|  80.2k|    }
 1635|  81.4k|}
ofp-table.c:table_action_features_equal:
 1511|   172k|{
 1512|   172k|    return (a->ofpacts == b->ofpacts
  ------------------
  |  Branch (1512:13): [True: 135k, False: 37.0k]
  ------------------
 1513|   172k|            && bitmap_equal(a->set_fields.bm, b->set_fields.bm, MFF_N_IDS));
  ------------------
  |  Branch (1513:16): [True: 126k, False: 8.43k]
  ------------------
 1514|   172k|}
ofp-table.c:table_instruction_features_empty:
 1652|  41.4k|{
 1653|  41.4k|    return (bitmap_is_all_zeros(tif->next, 255)
  ------------------
  |  Branch (1653:13): [True: 41.4k, False: 0]
  ------------------
 1654|  41.4k|            && !tif->instructions
  ------------------
  |  Branch (1654:16): [True: 27.1k, False: 14.2k]
  ------------------
 1655|  41.4k|            && table_action_features_empty(&tif->write)
  ------------------
  |  Branch (1655:16): [True: 16.4k, False: 10.7k]
  ------------------
 1656|  41.4k|            && table_action_features_empty(&tif->apply));
  ------------------
  |  Branch (1656:16): [True: 15.8k, False: 526]
  ------------------
 1657|  41.4k|}
ofp-table.c:table_action_features_empty:
 1518|  43.5k|{
 1519|  43.5k|    return !taf->ofpacts && bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS);
  ------------------
  |  Branch (1519:12): [True: 35.9k, False: 7.62k]
  |  Branch (1519:29): [True: 32.3k, False: 3.63k]
  ------------------
 1520|  43.5k|}
ofp-table.c:print_table_instruction_features:
 1527|  24.0k|{
 1528|  24.0k|    int start, end;
 1529|       |
 1530|  24.0k|    if (!bitmap_is_all_zeros(tif->next, 255)) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 24.0k]
  ------------------
 1531|      0|        ds_put_cstr(s, "      next tables: ");
 1532|      0|        for (start = bitmap_scan(tif->next, 1, 0, 255); start < 255;
  ------------------
  |  Branch (1532:57): [True: 0, False: 0]
  ------------------
 1533|      0|             start = bitmap_scan(tif->next, 1, end, 255)) {
 1534|      0|            end = bitmap_scan(tif->next, 0, start + 1, 255);
 1535|      0|            if (end == start + 1) {
  ------------------
  |  Branch (1535:17): [True: 0, False: 0]
  ------------------
 1536|      0|                ds_put_format(s, "%d,", start);
 1537|      0|            } else {
 1538|      0|                ds_put_format(s, "%d-%d,", start, end - 1);
 1539|      0|            }
 1540|      0|        }
 1541|      0|        ds_chomp(s, ',');
 1542|      0|        if (ds_last(s) == ' ') {
  ------------------
  |  Branch (1542:13): [True: 0, False: 0]
  ------------------
 1543|      0|            ds_put_cstr(s, "none");
 1544|      0|        }
 1545|      0|        ds_put_char(s, '\n');
 1546|      0|    }
 1547|       |
 1548|  24.0k|    if (tif->instructions) {
  ------------------
  |  Branch (1548:9): [True: 13.3k, False: 10.6k]
  ------------------
 1549|  13.3k|        if (prev_tif && tif->instructions == prev_tif->instructions) {
  ------------------
  |  Branch (1549:13): [True: 12.4k, False: 922]
  |  Branch (1549:25): [True: 2.54k, False: 9.91k]
  ------------------
 1550|  2.54k|            ds_put_cstr(s, "      (same instructions)\n");
 1551|  10.8k|        } else {
 1552|  10.8k|            ds_put_cstr(s, "      instructions: ");
 1553|  10.8k|            int i;
 1554|       |
 1555|   357k|            for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (1555:25): [True: 346k, False: 10.8k]
  ------------------
 1556|   346k|                if (tif->instructions & (1u << i)) {
  ------------------
  |  Branch (1556:21): [True: 26.3k, False: 320k]
  ------------------
 1557|  26.3k|                    const char *name = ovs_instruction_name_from_type(i);
 1558|  26.3k|                    if (name) {
  ------------------
  |  Branch (1558:25): [True: 26.3k, False: 0]
  ------------------
 1559|  26.3k|                        ds_put_cstr(s, name);
 1560|  26.3k|                    } else {
 1561|      0|                        ds_put_format(s, "%d", i);
 1562|      0|                    }
 1563|  26.3k|                    ds_put_char(s, ' ');
 1564|  26.3k|                }
 1565|   346k|            }
 1566|  10.8k|            ds_chomp(s, ' ');
 1567|  10.8k|            ds_put_char(s, '\n');
 1568|  10.8k|        }
 1569|  13.3k|    }
 1570|       |
 1571|  24.0k|    if (prev_tif
  ------------------
  |  Branch (1571:9): [True: 21.0k, False: 2.99k]
  ------------------
 1572|  24.0k|        && table_action_features_equal(&tif->write, &prev_tif->write)
  ------------------
  |  Branch (1572:12): [True: 2.12k, False: 18.9k]
  ------------------
 1573|  24.0k|        && table_action_features_equal(&tif->apply, &prev_tif->apply)
  ------------------
  |  Branch (1573:12): [True: 655, False: 1.47k]
  ------------------
 1574|  24.0k|        && !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1574:12): [True: 405, False: 250]
  ------------------
 1575|    405|        ds_put_cstr(s, "      (same actions)\n");
 1576|  23.6k|    } else if (!table_action_features_equal(&tif->write, &tif->apply)) {
  ------------------
  |  Branch (1576:16): [True: 15.9k, False: 7.68k]
  ------------------
 1577|  15.9k|        ds_put_cstr(s, "      Write-Actions features:\n");
 1578|  15.9k|        print_table_action_features(s, &tif->write);
 1579|  15.9k|        ds_put_cstr(s, "      Apply-Actions features:\n");
 1580|  15.9k|        print_table_action_features(s, &tif->apply);
 1581|  15.9k|    } else if (tif->write.ofpacts
  ------------------
  |  Branch (1581:16): [True: 7.29k, False: 386]
  ------------------
 1582|  7.68k|               || !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1582:19): [True: 50, False: 336]
  ------------------
 1583|  7.34k|        ds_put_cstr(s, "      Write-Actions and Apply-Actions features:\n");
 1584|  7.34k|        print_table_action_features(s, &tif->write);
 1585|  7.34k|    }
 1586|  24.0k|}
ofp-table.c:print_table_action_features:
 1494|  39.3k|{
 1495|  39.3k|    if (taf->ofpacts) {
  ------------------
  |  Branch (1495:9): [True: 31.3k, False: 7.96k]
  ------------------
 1496|  31.3k|        ds_put_cstr(s, "        actions: ");
 1497|  31.3k|        ofpact_bitmap_format(taf->ofpacts, s);
 1498|  31.3k|        ds_put_char(s, '\n');
 1499|  31.3k|    }
 1500|       |
 1501|  39.3k|    if (!bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1501:9): [True: 28.8k, False: 10.4k]
  ------------------
 1502|  28.8k|        ds_put_cstr(s, "        supported on Set-Field:");
 1503|  28.8k|        print_mf_bitmap(s, &taf->set_fields);
 1504|  28.8k|        ds_put_char(s, '\n');
 1505|  28.8k|    }
 1506|  39.3k|}
ofp-table.c:print_mf_bitmap:
 1476|  65.9k|{
 1477|  65.9k|    const char *ids[MFF_N_IDS];
 1478|  65.9k|    size_t n = 0;
 1479|       |
 1480|  65.9k|    int i;
 1481|   657k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, mfb->bm) {
  ------------------
  |  |  281|  65.9k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|   722k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 657k, False: 65.9k]
  |  |  |  |  ------------------
  |  |  |  |  279|   657k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1482|   657k|        ids[n++] = mf_from_id(i)->name;
 1483|   657k|    }
 1484|       |
 1485|  65.9k|    if (n > 0) {
  ------------------
  |  Branch (1485:9): [True: 65.9k, False: 0]
  ------------------
 1486|  65.9k|        ds_put_char(s, ' ');
 1487|  65.9k|        print_names(s, ids, n, 0);
 1488|  65.9k|    }
 1489|  65.9k|}
ofp-table.c:print_names:
 1439|   241k|{
 1440|   241k|    int group = 0;
 1441|  1.07M|    while (n > 0) {
  ------------------
  |  Branch (1441:12): [True: 832k, False: 241k]
  ------------------
 1442|   832k|        if (group++) {
  ------------------
  |  Branch (1442:13): [True: 591k, False: 241k]
  ------------------
 1443|   591k|            ds_put_char(s, prefix_len ? ',' : ' ');
  ------------------
  |  Branch (1443:28): [True: 230k, False: 360k]
  ------------------
 1444|   591k|        }
 1445|       |
 1446|       |        /* Count the prefix and suffix runs at the beginning of 'ids'.  As of
 1447|       |         * this writing we don't have any sequentially numbered fields whose
 1448|       |         * names contain "_", so we should only have one or the other at a
 1449|       |         * time.  However, if we end up with something like "a_0 a_1 a_2"
 1450|       |         * someday, we want to render it as a_0...a_2, not as a_{0...2}, so
 1451|       |         * given equal suffix and prefix runs, prefer the suffix. */
 1452|   832k|        size_t extra_prefix_len;
 1453|   832k|        size_t prefix_run = count_common_prefix_run(ids, n, prefix_len,
 1454|   832k|                                                    &extra_prefix_len);
 1455|   832k|        size_t suffix_run = count_sequential_suffix_run(ids, n);
 1456|   832k|        size_t run = MAX(prefix_run, suffix_run);
  ------------------
  |  |  100|   832k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 175k, False: 657k]
  |  |  ------------------
  ------------------
 1457|   832k|        if (suffix_run >= prefix_run) {
  ------------------
  |  Branch (1457:13): [True: 657k, False: 175k]
  ------------------
 1458|   657k|            ds_put_format(s, "%s", ids[0] + prefix_len);
 1459|   657k|            if (run > 1) {
  ------------------
  |  Branch (1459:17): [True: 0, False: 657k]
  ------------------
 1460|      0|                ds_put_format(s, "...%s", ids[run - 1] + prefix_len);
 1461|      0|            }
 1462|   657k|        } else {
 1463|   175k|            ds_put_format(s, "%.*s{", (int) extra_prefix_len,
 1464|   175k|                          ids[0] + prefix_len);
 1465|   175k|            print_names(s, ids, run, prefix_len + extra_prefix_len);
 1466|   175k|            ds_put_char(s, '}');
 1467|   175k|        }
 1468|       |
 1469|   832k|        ids += run;
 1470|   832k|        n -= run;
 1471|   832k|    }
 1472|   241k|}
ofp-table.c:count_common_prefix_run:
 1400|   832k|{
 1401|   832k|    *extra_prefix_lenp = 0;
 1402|   832k|    if (n < 2) {
  ------------------
  |  Branch (1402:9): [True: 220k, False: 612k]
  ------------------
 1403|   220k|        return n;
 1404|   220k|    }
 1405|       |
 1406|   612k|    size_t extra_prefix_len = count_common_prefix(ids[0] + prefix_len,
 1407|   612k|                                                  ids[1] + prefix_len);
 1408|   612k|    if (!extra_prefix_len) {
  ------------------
  |  Branch (1408:9): [True: 436k, False: 175k]
  ------------------
 1409|   436k|        return 1;
 1410|   436k|    }
 1411|       |
 1412|   175k|    size_t i = 2;
 1413|   230k|    while (i < n) {
  ------------------
  |  Branch (1413:12): [True: 209k, False: 20.9k]
  ------------------
 1414|   209k|        size_t next = count_common_prefix(ids[0] + prefix_len,
 1415|   209k|                                          ids[i] + prefix_len);
 1416|   209k|        if (!next) {
  ------------------
  |  Branch (1416:13): [True: 154k, False: 54.9k]
  ------------------
 1417|   154k|            break;
 1418|   154k|        } else if (next < extra_prefix_len) {
  ------------------
  |  Branch (1418:20): [True: 0, False: 54.9k]
  ------------------
 1419|      0|            next = extra_prefix_len;
 1420|      0|        }
 1421|  54.9k|        i++;
 1422|  54.9k|    }
 1423|   175k|    *extra_prefix_lenp = extra_prefix_len;
 1424|   175k|    return i;
 1425|   612k|}
ofp-table.c:count_common_prefix:
 1378|   821k|{
 1379|   821k|    size_t retval = 0;
 1380|  1.92M|    for (size_t i = 0; ; i++) {
 1381|  1.92M|        if (a[i] != b[i] || !a[i]) {
  ------------------
  |  Branch (1381:13): [True: 821k, False: 1.10M]
  |  Branch (1381:29): [True: 0, False: 1.10M]
  ------------------
 1382|   821k|            return retval;
 1383|  1.10M|        } else if (a[i] == '_') {
  ------------------
  |  Branch (1383:20): [True: 230k, False: 872k]
  ------------------
 1384|   230k|            retval = i + 1;
 1385|   230k|        }
 1386|  1.92M|    }
 1387|   821k|}
ofp-table.c:count_sequential_suffix_run:
 1365|   832k|{
 1366|   832k|    for (size_t i = 1; ; i++) {
 1367|   832k|        if (i >= n || !are_names_sequential(ids[i - 1], ids[i])) {
  ------------------
  |  Branch (1367:13): [True: 220k, False: 612k]
  |  Branch (1367:23): [True: 612k, False: 0]
  ------------------
 1368|       |            /* "x0...x1" is worse than "x0 x1", so suppress it. */
 1369|   832k|            return i == 2 ? 1 : i;
  ------------------
  |  Branch (1369:20): [True: 0, False: 832k]
  ------------------
 1370|   832k|        }
 1371|   832k|    }
 1372|   832k|}
ofp-table.c:are_names_sequential:
 1345|   612k|{
 1346|       |    /* Skip common prefix. */
 1347|  2.40M|    for (; *a == *b; a++, b++) {
  ------------------
  |  Branch (1347:12): [True: 1.79M, False: 612k]
  ------------------
 1348|  1.79M|        if (!*a) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 1.79M]
  ------------------
 1349|       |            /* 'a' and 'b' are the same.  Weird, but not sequential. */
 1350|      0|            return false;
 1351|      0|        }
 1352|  1.79M|    }
 1353|       |
 1354|   612k|    return (is_all_digits(a)
  ------------------
  |  Branch (1354:13): [True: 0, False: 612k]
  ------------------
 1355|   612k|            && is_all_digits(b)
  ------------------
  |  Branch (1355:16): [True: 0, False: 0]
  ------------------
 1356|   612k|            && strlen(a) < 10
  ------------------
  |  Branch (1356:16): [True: 0, False: 0]
  ------------------
 1357|   612k|            && strlen(b) < 10
  ------------------
  |  Branch (1357:16): [True: 0, False: 0]
  ------------------
 1358|   612k|            && atoi(a) + 1 == atoi(b));
  ------------------
  |  Branch (1358:16): [True: 0, False: 0]
  ------------------
 1359|   612k|}
ofp-table.c:is_all_digits:
 1337|   612k|{
 1338|   612k|    return s[0] && s[strspn(s, "0123456789")] == '\0';
  ------------------
  |  Branch (1338:12): [True: 612k, False: 0]
  |  Branch (1338:20): [True: 0, False: 612k]
  ------------------
 1339|   612k|}
ofp-table.c:print_matches:
 1591|  68.6k|{
 1592|  68.6k|    const struct mf_bitmap m = mask ? f->mask : mf_bitmap_not(f->mask);
  ------------------
  |  Branch (1592:32): [True: 22.8k, False: 45.7k]
  ------------------
 1593|  68.6k|    const struct mf_bitmap w = wc ? f->wildcard : mf_bitmap_not(f->wildcard);
  ------------------
  |  Branch (1593:32): [True: 45.7k, False: 22.8k]
  ------------------
 1594|  68.6k|    const struct mf_bitmap bm = mf_bitmap_and(f->match, mf_bitmap_and(m, w));
 1595|       |
 1596|  68.6k|    if (!bitmap_is_all_zeros(bm.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1596:9): [True: 37.0k, False: 31.5k]
  ------------------
 1597|  37.0k|        ds_put_format(s, "      %s:", title);
 1598|  37.0k|        print_mf_bitmap(s, &bm);
 1599|  37.0k|        ds_put_char(s, '\n');
 1600|  37.0k|    }
 1601|  68.6k|}
ofp-table.c:ofputil_decode_ofp10_table_stats:
 2128|  4.24k|{
 2129|  4.24k|    struct ofp10_table_stats *ots;
 2130|       |
 2131|  4.24k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2132|  4.24k|    if (!ots) {
  ------------------
  |  Branch (2132:9): [True: 0, False: 4.24k]
  ------------------
 2133|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2134|      0|    }
 2135|       |
 2136|  4.24k|    features->table_id = ots->table_id;
 2137|  4.24k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  225|  4.24k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  4.24k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|  4.24k|    features->max_entries = ntohl(ots->max_entries);
 2139|  4.24k|    features->match = features->wildcard = mf_bitmap_from_of10(ots->wildcards);
 2140|       |
 2141|  4.24k|    stats->table_id = ots->table_id;
 2142|  4.24k|    stats->active_count = ntohl(ots->active_count);
 2143|  4.24k|    stats->lookup_count = ntohll(get_32aligned_be64(&ots->lookup_count));
 2144|  4.24k|    stats->matched_count = ntohll(get_32aligned_be64(&ots->matched_count));
 2145|       |
 2146|  4.24k|    return 0;
 2147|  4.24k|}
ofp-table.c:mf_bitmap_from_of10:
 1927|  4.24k|{
 1928|  4.24k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 1970|  4.24k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 1929|  4.24k|    const struct ofp10_wc_map *p;
 1930|  4.24k|    uint32_t wc10 = ntohl(wc10_);
 1931|       |
 1932|  55.1k|    for (p = ofp10_wc_map; p < &ofp10_wc_map[ARRAY_SIZE(ofp10_wc_map)]; p++) {
  ------------------
  |  |  293|  55.1k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|  55.1k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|  55.1k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|  55.1k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|  55.1k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  55.1k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1932:28): [True: 50.9k, False: 4.24k]
  ------------------
 1933|  50.9k|        if (wc10 & p->wc10) {
  ------------------
  |  Branch (1933:13): [True: 23.9k, False: 27.0k]
  ------------------
 1934|  23.9k|            bitmap_set1(fields.bm, p->mf);
 1935|  23.9k|        }
 1936|  50.9k|    }
 1937|  4.24k|    return fields;
 1938|  4.24k|}
ofp-table.c:ofputil_decode_ofp11_table_stats:
 2153|  8.19k|{
 2154|  8.19k|    struct ofp11_table_stats *ots;
 2155|       |
 2156|  8.19k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2157|  8.19k|    if (!ots) {
  ------------------
  |  Branch (2157:9): [True: 0, False: 8.19k]
  ------------------
 2158|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2159|      0|    }
 2160|       |
 2161|  8.19k|    features->table_id = ots->table_id;
 2162|  8.19k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  225|  8.19k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  8.19k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  8.19k|    features->max_entries = ntohl(ots->max_entries);
 2164|  8.19k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2165|  8.19k|        ots->instructions, OFP11_VERSION);
 2166|  8.19k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2167|  8.19k|        ots->write_actions, OFP11_VERSION);
 2168|  8.19k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2169|  8.19k|        ots->write_actions, OFP11_VERSION);
 2170|  8.19k|    features->miss = features->nonmiss;
 2171|  8.19k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2172|  8.19k|                                                      OFP11_VERSION);
 2173|  8.19k|    features->match = mf_bitmap_from_of11(ots->match);
 2174|  8.19k|    features->wildcard = mf_bitmap_from_of11(ots->wildcards);
 2175|  8.19k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2176|       |
 2177|  8.19k|    stats->table_id = ots->table_id;
 2178|  8.19k|    stats->active_count = ntohl(ots->active_count);
 2179|  8.19k|    stats->lookup_count = ntohll(ots->lookup_count);
 2180|  8.19k|    stats->matched_count = ntohll(ots->matched_count);
 2181|       |
 2182|  8.19k|    return 0;
 2183|  8.19k|}
ofp-table.c:mf_bitmap_from_of11:
 1998|  16.3k|{
 1999|  16.3k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 1970|  16.3k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2000|  16.3k|    const struct ofp11_wc_map *p;
 2001|  16.3k|    uint32_t wc11 = ntohl(wc11_);
 2002|       |
 2003|   262k|    for (p = ofp11_wc_map; p < &ofp11_wc_map[ARRAY_SIZE(ofp11_wc_map)]; p++) {
  ------------------
  |  |  293|   262k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|   262k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   262k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|   262k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   262k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|   262k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2003:28): [True: 245k, False: 16.3k]
  ------------------
 2004|   245k|        if (wc11 & p->wc11) {
  ------------------
  |  Branch (2004:13): [True: 95.9k, False: 150k]
  ------------------
 2005|  95.9k|            bitmap_set1(fields.bm, p->mf);
 2006|  95.9k|        }
 2007|   245k|    }
 2008|  16.3k|    return fields;
 2009|  16.3k|}
ofp-table.c:ofputil_decode_ofp12_table_stats:
 2189|  18.8k|{
 2190|  18.8k|    struct ofp12_table_stats *ots;
 2191|       |
 2192|  18.8k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2193|  18.8k|    if (!ots) {
  ------------------
  |  Branch (2193:9): [True: 0, False: 18.8k]
  ------------------
 2194|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2195|      0|    }
 2196|       |
 2197|  18.8k|    features->table_id = ots->table_id;
 2198|  18.8k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  225|  18.8k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   96|  18.8k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (96:20): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  18.8k|    features->metadata_match = ots->metadata_match;
 2200|  18.8k|    features->metadata_write = ots->metadata_write;
 2201|  18.8k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2202|  18.8k|                                                      OFP12_VERSION);
 2203|  18.8k|    features->max_entries = ntohl(ots->max_entries);
 2204|       |
 2205|  18.8k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2206|  18.8k|        ots->instructions, OFP12_VERSION);
 2207|  18.8k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2208|  18.8k|        ots->write_actions, OFP12_VERSION);
 2209|  18.8k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2210|  18.8k|        ots->apply_actions, OFP12_VERSION);
 2211|  18.8k|    features->nonmiss.write.set_fields = oxm_bitmap_to_mf_bitmap(
 2212|  18.8k|        ots->write_setfields, OFP12_VERSION);
 2213|  18.8k|    features->nonmiss.apply.set_fields = oxm_bitmap_to_mf_bitmap(
 2214|  18.8k|        ots->apply_setfields, OFP12_VERSION);
 2215|  18.8k|    features->miss = features->nonmiss;
 2216|       |
 2217|  18.8k|    features->match = oxm_bitmap_to_mf_bitmap(ots->match, OFP12_VERSION);
 2218|  18.8k|    features->wildcard = oxm_bitmap_to_mf_bitmap(ots->wildcards,
 2219|  18.8k|                                                 OFP12_VERSION);
 2220|  18.8k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2221|       |
 2222|  18.8k|    stats->table_id = ots->table_id;
 2223|  18.8k|    stats->active_count = ntohl(ots->active_count);
 2224|  18.8k|    stats->lookup_count = ntohll(ots->lookup_count);
 2225|  18.8k|    stats->matched_count = ntohll(ots->matched_count);
 2226|       |
 2227|  18.8k|    return 0;
 2228|  18.8k|}
ofp-table.c:ofputil_decode_ofp13_table_stats:
 2234|  8.99k|{
 2235|  8.99k|    struct ofp13_table_stats *ots;
 2236|       |
 2237|  8.99k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2238|  8.99k|    if (!ots) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 8.99k]
  ------------------
 2239|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2240|      0|    }
 2241|       |
 2242|  8.99k|    features->table_id = ots->table_id;
 2243|       |
 2244|  8.99k|    stats->table_id = ots->table_id;
 2245|  8.99k|    stats->active_count = ntohl(ots->active_count);
 2246|  8.99k|    stats->lookup_count = ntohll(ots->lookup_count);
 2247|  8.99k|    stats->matched_count = ntohll(ots->matched_count);
 2248|       |
 2249|  8.99k|    return 0;
 2250|  8.99k|}

ofputil_decode_hello:
  112|   150k|{
  113|   150k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  114|   150k|    ofpbuf_pull(&msg, sizeof *oh);
  115|       |
  116|   150k|    *allowed_versions = version_bitmap_from_version(oh->version);
  117|       |
  118|   150k|    bool ok = true;
  119|   177k|    while (msg.size) {
  ------------------
  |  Branch (119:12): [True: 127k, False: 50.4k]
  ------------------
  120|   127k|        const struct ofp_hello_elem_header *oheh;
  121|   127k|        unsigned int len;
  122|       |
  123|   127k|        if (msg.size < sizeof *oheh) {
  ------------------
  |  Branch (123:13): [True: 3.47k, False: 123k]
  ------------------
  124|  3.47k|            return false;
  125|  3.47k|        }
  126|       |
  127|   123k|        oheh = msg.data;
  128|   123k|        len = ntohs(oheh->length);
  129|   123k|        if (len < sizeof *oheh || !ofpbuf_try_pull(&msg, ROUND_UP(len, 8))) {
  ------------------
  |  |  299|   111k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|   111k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (129:13): [True: 12.3k, False: 111k]
  |  Branch (129:35): [True: 84.4k, False: 27.2k]
  ------------------
  130|  96.7k|            return false;
  131|  96.7k|        }
  132|       |
  133|  27.2k|        if (oheh->type != htons(OFPHET_VERSIONBITMAP)
  ------------------
  |  Branch (133:13): [True: 24.5k, False: 2.71k]
  ------------------
  134|  27.2k|            || !ofputil_decode_hello_bitmap(oheh, allowed_versions)) {
  ------------------
  |  Branch (134:16): [True: 866, False: 1.85k]
  ------------------
  135|  25.3k|            ok = false;
  136|  25.3k|        }
  137|  27.2k|    }
  138|       |
  139|  50.4k|    return ok;
  140|   150k|}
ofputil_hello_format:
  179|   150k|{
  180|   150k|    uint32_t allowed_versions;
  181|   150k|    bool ok;
  182|       |
  183|   150k|    ok = ofputil_decode_hello(oh, &allowed_versions);
  184|       |
  185|   150k|    ds_put_cstr(string, "\n version bitmap: ");
  186|   150k|    ofputil_format_version_bitmap(string, allowed_versions);
  187|       |
  188|   150k|    if (!ok) {
  ------------------
  |  Branch (188:9): [True: 100k, False: 50.3k]
  ------------------
  189|   100k|        ds_put_cstr(string, "\n unknown data in hello:\n");
  190|   100k|        ds_put_hex_dump(string, oh, ntohs(oh->length), 0, true);
  191|   100k|    }
  192|   150k|}
ofp-util.c:version_bitmap_from_version:
   99|   150k|{
  100|   150k|    return ((ofp_version < 32 ? 1u << ofp_version : 0) - 1) << 1;
  ------------------
  |  Branch (100:14): [True: 89.6k, False: 61.0k]
  ------------------
  101|   150k|}
ofp-util.c:ofputil_decode_hello_bitmap:
   64|  2.71k|{
   65|  2.71k|    uint16_t bitmap_len = ntohs(oheh->length) - sizeof *oheh;
   66|  2.71k|    const ovs_be32 *bitmap = ALIGNED_CAST(const ovs_be32 *, oheh + 1);
  ------------------
  |  |  430|  2.71k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   67|  2.71k|    uint32_t allowed_versions;
   68|       |
   69|  2.71k|    if (!bitmap_len || bitmap_len % sizeof *bitmap) {
  ------------------
  |  Branch (69:9): [True: 635, False: 2.08k]
  |  Branch (69:24): [True: 155, False: 1.92k]
  ------------------
   70|    790|        return false;
   71|    790|    }
   72|       |
   73|       |    /* Only use the first 32-bit element of the bitmap as that is all the
   74|       |     * current implementation supports.  Subsequent elements are ignored which
   75|       |     * should have no effect on session negotiation until Open vSwitch supports
   76|       |     * wire-protocol versions greater than 31.
   77|       |     */
   78|  1.92k|    allowed_versions = ntohl(bitmap[0]);
   79|       |
   80|  1.92k|    if (allowed_versions & 1) {
  ------------------
  |  Branch (80:9): [True: 351, False: 1.57k]
  ------------------
   81|       |        /* There's no OpenFlow version 0. */
   82|    351|        VLOG_WARN_RL(&bad_ofmsg_rl, "peer claims to support invalid OpenFlow "
  ------------------
  |  |  223|    351|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|    351|    do {                                                                \
  |  |  |  |  287|    351|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|    351|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 351]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|    351|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|    351|                     "version 0x00");
   84|    351|        allowed_versions &= ~1u;
   85|    351|    }
   86|       |
   87|  1.92k|    if (!allowed_versions) {
  ------------------
  |  Branch (87:9): [True: 76, False: 1.85k]
  ------------------
   88|     76|        VLOG_WARN_RL(&bad_ofmsg_rl, "peer does not support any OpenFlow "
  ------------------
  |  |  223|     76|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     76|    do {                                                                \
  |  |  |  |  287|     76|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     76|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 76]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     76|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|     76|                     "version (between 0x01 and 0x1f)");
   90|     76|        return false;
   91|     76|    }
   92|       |
   93|  1.85k|    *allowed_versionsp = allowed_versions;
   94|  1.85k|    return true;
   95|  1.92k|}

ofpbuf_use_const:
  114|   652k|{
  115|   652k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STACK);
  ------------------
  |  |   81|   652k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   652k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   652k|     (TYPE) (POINTER))
  ------------------
  116|   652k|}
ofpbuf_use_data:
  132|   136k|{
  133|   136k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STUB);
  ------------------
  |  |   81|   136k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|   136k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|   136k|     (TYPE) (POINTER))
  ------------------
  134|   136k|}
ofpbuf_init:
  140|  2.46M|{
  141|  2.46M|    ofpbuf_use(b, size ? xmalloc(size) : NULL, size);
  ------------------
  |  Branch (141:19): [True: 1.08M, False: 1.37M]
  ------------------
  142|  2.46M|}
ofpbuf_uninit:
  147|  2.30M|{
  148|  2.30M|    if (b) {
  ------------------
  |  Branch (148:9): [True: 2.30M, False: 0]
  ------------------
  149|  2.30M|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (149:13): [True: 2.09M, False: 209k]
  ------------------
  150|  2.09M|            free(b->base);
  151|  2.09M|        }
  152|  2.30M|    }
  153|  2.30M|}
ofpbuf_prealloc_tailroom:
  306|  1.17M|{
  307|  1.17M|    if (size > ofpbuf_tailroom(b)) {
  ------------------
  |  Branch (307:9): [True: 163k, False: 1.00M]
  ------------------
  308|   163k|        ofpbuf_resize__(b, ofpbuf_headroom(b), MAX(size, 64));
  ------------------
  |  |  100|   163k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 16.6k, False: 146k]
  |  |  ------------------
  ------------------
  309|   163k|    }
  310|  1.17M|}
ofpbuf_prealloc_headroom:
  317|   236k|{
  318|   236k|    if (size > ofpbuf_headroom(b)) {
  ------------------
  |  Branch (318:9): [True: 195k, False: 41.5k]
  ------------------
  319|   195k|        ofpbuf_resize__(b, MAX(size, 64), ofpbuf_tailroom(b));
  ------------------
  |  |  100|   195k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 5.13k, False: 190k]
  |  |  ------------------
  ------------------
  320|   195k|    }
  321|   236k|}
ofpbuf_trim:
  336|  1.13M|{
  337|  1.13M|    if (b->source == OFPBUF_MALLOC
  ------------------
  |  Branch (337:9): [True: 1.13M, False: 0]
  ------------------
  338|  1.13M|        && (ofpbuf_headroom(b) || ofpbuf_tailroom(b))) {
  ------------------
  |  Branch (338:13): [True: 188k, False: 945k]
  |  Branch (338:35): [True: 5.14k, False: 940k]
  ------------------
  339|   193k|        ofpbuf_resize__(b, 0, 0);
  340|   193k|    }
  341|  1.13M|}
ofpbuf_padto:
  368|   141k|{
  369|   141k|    if (b->size < length) {
  ------------------
  |  Branch (369:9): [True: 32.8k, False: 108k]
  ------------------
  370|  32.8k|        ofpbuf_put_zeros(b, length - b->size);
  371|  32.8k|    }
  372|   141k|}
ofpbuf_put_uninit:
  401|  1.17M|{
  402|  1.17M|    void *p;
  403|  1.17M|    ofpbuf_prealloc_tailroom(b, size);
  404|  1.17M|    p = ofpbuf_tail(b);
  405|  1.17M|    b->size += size;
  406|  1.17M|    return p;
  407|  1.17M|}
ofpbuf_put_zeros:
  414|   181k|{
  415|   181k|    void *dst = ofpbuf_put_uninit(b, size);
  416|   181k|    nullable_memset(dst, 0, size);
  417|   181k|    return dst;
  418|   181k|}
ofpbuf_put:
  425|   399k|{
  426|   399k|    if (!size) {
  ------------------
  |  Branch (426:9): [True: 53.3k, False: 346k]
  ------------------
  427|  53.3k|        return ofpbuf_tail(b);
  428|  53.3k|    }
  429|       |
  430|   346k|    void *dst = ofpbuf_put_uninit(b, size);
  431|   346k|    memcpy(dst, p, size);
  432|   346k|    return dst;
  433|   399k|}
ofpbuf_push_uninit:
  481|  1.20M|{
  482|  1.20M|    if (!size) {
  ------------------
  |  Branch (482:9): [True: 965k, False: 236k]
  ------------------
  483|   965k|        return b->data;
  484|   965k|    }
  485|       |
  486|   236k|    ofpbuf_prealloc_headroom(b, size);
  487|   236k|    b->data = (char*)b->data - size;
  488|   236k|    b->size += size;
  489|   236k|    return b->data;
  490|  1.20M|}
ofpbuf_push:
  508|  1.13M|{
  509|  1.13M|    void *dst = ofpbuf_push_uninit(b, size);
  510|  1.13M|    memcpy(dst, p, size);
  511|  1.13M|    return dst;
  512|  1.13M|}
ofpbuf_steal_data:
  537|   364k|{
  538|   364k|    void *p;
  539|       |
  540|   364k|    if (b->source == OFPBUF_MALLOC && b->data == b->base) {
  ------------------
  |  Branch (540:9): [True: 364k, False: 0]
  |  Branch (540:39): [True: 362k, False: 1.81k]
  ------------------
  541|   362k|        p = b->data;
  542|   362k|    } else {
  543|  1.81k|        p = xmemdup(b->data, b->size);
  544|  1.81k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (544:13): [True: 1.81k, False: 0]
  ------------------
  545|  1.81k|            free(b->base);
  546|  1.81k|        }
  547|  1.81k|    }
  548|   364k|    b->base = NULL;
  549|   364k|    b->data = NULL;
  550|   364k|    b->header = NULL;
  551|   364k|    b->msg = NULL;
  552|   364k|    return p;
  553|   364k|}
ofpbuf.c:ofpbuf_use__:
   37|  3.25M|{
   38|  3.25M|    b->base = base;
   39|  3.25M|    b->data = base;
   40|  3.25M|    b->size = size;
   41|       |
   42|  3.25M|    ofpbuf_init__(b, allocated, source);
   43|  3.25M|}
ofpbuf.c:ofpbuf_init__:
   26|  3.25M|{
   27|  3.25M|    b->allocated = allocated;
   28|  3.25M|    b->source = source;
   29|  3.25M|    b->header = NULL;
   30|  3.25M|    b->msg = NULL;
   31|  3.25M|    ovs_list_poison(&b->list_node);
   32|  3.25M|}
ofpbuf.c:ofpbuf_use:
   51|  2.46M|{
   52|  2.46M|    ofpbuf_use__(b, base, allocated, 0, OFPBUF_MALLOC);
   53|  2.46M|}
ofpbuf.c:ofpbuf_resize__:
  252|   551k|{
  253|   551k|    void *new_base, *new_data;
  254|   551k|    size_t new_allocated;
  255|       |
  256|   551k|    new_allocated = new_headroom + b->size + new_tailroom;
  257|       |
  258|   551k|    switch (b->source) {
  259|   551k|    case OFPBUF_MALLOC:
  ------------------
  |  Branch (259:5): [True: 551k, False: 0]
  ------------------
  260|   551k|        if (new_headroom == ofpbuf_headroom(b)) {
  ------------------
  |  Branch (260:13): [True: 168k, False: 383k]
  ------------------
  261|   168k|            new_base = xrealloc(b->base, new_allocated);
  262|   383k|        } else {
  263|   383k|            new_base = xmalloc(new_allocated);
  264|   383k|            ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  265|   383k|            free(b->base);
  266|   383k|        }
  267|   551k|        break;
  268|       |
  269|      0|    case OFPBUF_STACK:
  ------------------
  |  Branch (269:5): [True: 0, False: 551k]
  ------------------
  270|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  271|       |
  272|      0|    case OFPBUF_STUB:
  ------------------
  |  Branch (272:5): [True: 0, False: 551k]
  ------------------
  273|      0|        b->source = OFPBUF_MALLOC;
  274|      0|        new_base = xmalloc(new_allocated);
  275|      0|        ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  276|      0|        break;
  277|       |
  278|      0|    default:
  ------------------
  |  Branch (278:5): [True: 0, False: 551k]
  ------------------
  279|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  112|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  280|   551k|    }
  281|       |
  282|   551k|    b->allocated = new_allocated;
  283|   551k|    b->base = new_base;
  284|       |
  285|   551k|    new_data = (char *) new_base + new_headroom;
  286|   551k|    if (b->data != new_data) {
  ------------------
  |  Branch (286:9): [True: 535k, False: 16.0k]
  ------------------
  287|   535k|        if (b->header) {
  ------------------
  |  Branch (287:13): [True: 135k, False: 400k]
  ------------------
  288|   135k|            ptrdiff_t header_offset = (char *) b->header - (char *) b->data;
  289|       |
  290|   135k|            b->header = (char *) new_data + header_offset;
  291|   135k|        }
  292|   535k|        if (b->msg) {
  ------------------
  |  Branch (292:13): [True: 0, False: 535k]
  ------------------
  293|      0|            ptrdiff_t msg_offset = (char *) b->msg - (char *) b->data;
  294|       |
  295|      0|            b->msg = (char *) new_data + msg_offset;
  296|      0|        }
  297|   535k|        b->data = new_data;
  298|   535k|    }
  299|   551k|}
ofpbuf.c:ofpbuf_copy__:
  236|   383k|{
  237|   383k|    const uint8_t *old_base = b->base;
  238|   383k|    size_t old_headroom = ofpbuf_headroom(b);
  239|   383k|    size_t old_tailroom = ofpbuf_tailroom(b);
  240|   383k|    size_t copy_headroom = MIN(old_headroom, new_headroom);
  ------------------
  |  |   96|   383k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 195k, False: 188k]
  |  |  ------------------
  ------------------
  241|   383k|    size_t copy_tailroom = MIN(old_tailroom, new_tailroom);
  ------------------
  |  |   96|   383k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 0, False: 383k]
  |  |  ------------------
  ------------------
  242|       |
  243|   383k|    memcpy(&new_base[new_headroom - copy_headroom],
  244|   383k|           &old_base[old_headroom - copy_headroom],
  245|   383k|           copy_headroom + b->size + copy_tailroom);
  246|   383k|}

ovs_mutex_lock_at:
   60|    176|    { \
   61|    176|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   81|    176|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|    176|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|    176|     (TYPE) (POINTER))
  ------------------
   62|    176|        int error; \
   63|    176| \
   64|    176|        /* Verify that 'l' was initialized. */ \
   65|    176|        if (OVS_UNLIKELY(!l->where)) { \
  ------------------
  |  |   46|    176|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 176]
  |  |  ------------------
  ------------------
   66|      0|            ovs_abort(0, "%s: %s() passed uninitialized ovs_"#TYPE, \
   67|      0|                      where, __func__); \
   68|      0|        } \
   69|    176| \
   70|    176|        error = pthread_##TYPE##_##FUN(&l->lock); \
   71|    176|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   46|    176|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 176]
  |  |  ------------------
  ------------------
   72|      0|            ovs_abort(error, "%s: pthread_%s_%s failed", where, #TYPE, #FUN); \
   73|      0|        } \
   74|    176|        l->where = where; \
   75|    176| }
ovs_mutex_unlock:
  118|    176|    { \
  119|    176|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   81|    176|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   76|    176|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   82|    176|     (TYPE) (POINTER))
  ------------------
  120|    176|        int error; \
  121|    176| \
  122|    176|        /* Verify that 'l' was initialized. */ \
  123|    176|        ovs_assert(l->where); \
  ------------------
  |  |   58|    176|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  124|    176| \
  125|    176|        l->where = WHERE; \
  126|    176|        error = pthread_##TYPE##_##FUN(&l->lock); \
  127|    176|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   46|    176|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (46:33): [True: 0, False: 176]
  |  |  ------------------
  ------------------
  128|      0|            ovs_abort(error, "pthread_%s_%s failed", #TYPE, #FUN); \
  129|      0|        } \
  130|    176|    }
ovsthread_once_start__:
  497|      3|{
  498|      3|    ovs_mutex_lock(&once->mutex);
  ------------------
  |  |   71|      3|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|      3|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      3|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      3|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  499|       |    /* Mutex synchronizes memory, so we get the current value of 'done'. */
  500|      3|    if (!once->done) {
  ------------------
  |  Branch (500:9): [True: 3, False: 0]
  ------------------
  501|      3|        return true;
  502|      3|    }
  503|      0|    ovs_mutex_unlock(&once->mutex);
  504|      0|    return false;
  505|      3|}
ovsthread_once_done:
  509|      3|{
  510|       |    /* We need release semantics here, so that the following store may not
  511|       |     * be moved ahead of any of the preceding initialization operations.
  512|       |     * A release atomic_thread_fence provides that prior memory accesses
  513|       |     * will not be reordered to take place after the following store. */
  514|      3|    atomic_thread_fence(memory_order_release);
  ------------------
  |  |   39|      3|#define atomic_thread_fence(ORDER) __c11_atomic_thread_fence(ORDER)
  ------------------
  515|      3|    once->done = true;
  516|      3|    ovs_mutex_unlock(&once->mutex);
  517|      3|}

util.c:counter_util_xalloc_get:
  248|  25.3M|    {                                                                   \
  249|  25.3M|        return NAME##_get_unsafe();                                     \
  250|  25.3M|    }
util.c:counter_util_xalloc_get_unsafe:
  241|  25.3M|    {                                                                   \
  242|  25.3M|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|  25.3M|        return &var;                                                    \
  244|  25.3M|    }                                                                   \
flow.c:counter_flow_extract_get:
  248|   114k|    {                                                                   \
  249|   114k|        return NAME##_get_unsafe();                                     \
  250|   114k|    }
flow.c:counter_flow_extract_get_unsafe:
  241|   114k|    {                                                                   \
  242|   114k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|   114k|        return &var;                                                    \
  244|   114k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  248|  1.64k|    {                                                                   \
  249|  1.64k|        return NAME##_get_unsafe();                                     \
  250|  1.64k|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  241|  1.64k|    {                                                                   \
  242|  1.64k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|  1.64k|        return &var;                                                    \
  244|  1.64k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get:
  248|    231|    {                                                                   \
  249|    231|        return NAME##_get_unsafe();                                     \
  250|    231|    }
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get_unsafe:
  241|    231|    {                                                                   \
  242|    231|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|    231|        return &var;                                                    \
  244|    231|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get:
  248|  1.68k|    {                                                                   \
  249|  1.68k|        return NAME##_get_unsafe();                                     \
  250|  1.68k|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  241|  1.68k|    {                                                                   \
  242|  1.68k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|  1.68k|        return &var;                                                    \
  244|  1.68k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get:
  248|    281|    {                                                                   \
  249|    281|        return NAME##_get_unsafe();                                     \
  250|    281|    }
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get_unsafe:
  241|    281|    {                                                                   \
  242|    281|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|    281|        return &var;                                                    \
  244|    281|    }                                                                   \
flow.c:counter_miniflow_malloc_get:
  248|  78.1k|    {                                                                   \
  249|  78.1k|        return NAME##_get_unsafe();                                     \
  250|  78.1k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  241|  78.1k|    {                                                                   \
  242|  78.1k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|  78.1k|        return &var;                                                    \
  244|  78.1k|    }                                                                   \
hmap.c:counter_hmap_pathological_get:
  248|      6|    {                                                                   \
  249|      6|        return NAME##_get_unsafe();                                     \
  250|      6|    }
hmap.c:counter_hmap_pathological_get_unsafe:
  241|      6|    {                                                                   \
  242|      6|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|      6|        return &var;                                                    \
  244|      6|    }                                                                   \
hmap.c:counter_hmap_expand_get:
  248|     28|    {                                                                   \
  249|     28|        return NAME##_get_unsafe();                                     \
  250|     28|    }
hmap.c:counter_hmap_expand_get_unsafe:
  241|     28|    {                                                                   \
  242|     28|        static thread_local NAME##_type var = __VA_ARGS__;              \
  243|     28|        return &var;                                                    \
  244|     28|    }                                                                   \

oxs_pull_stat:
  258|  41.1k|{
  259|  41.1k|    memset(stats, 0xff, sizeof *stats);
  260|       |
  261|  41.1k|    struct ofp_oxs_stat *oxs = b->data;
  262|  41.1k|    if (b->size < sizeof *oxs) {
  ------------------
  |  Branch (262:9): [True: 1.89k, False: 39.2k]
  ------------------
  263|  1.89k|        return OFPERR_OFPBMC_BAD_LEN;
  264|  1.89k|    }
  265|       |
  266|  39.2k|    uint16_t stat_len = ntohs(oxs->length);
  267|  39.2k|    if (stat_len < sizeof *oxs) {
  ------------------
  |  Branch (267:9): [True: 5.67k, False: 33.5k]
  ------------------
  268|  5.67k|        return OFPERR_OFPBMC_BAD_LEN;
  269|  5.67k|    }
  270|       |
  271|  33.5k|    uint8_t *p = ofpbuf_try_pull(b, ROUND_UP(stat_len, 8));
  ------------------
  |  |  299|  33.5k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  33.5k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  272|  33.5k|    if (!p) {
  ------------------
  |  Branch (272:9): [True: 5.89k, False: 27.6k]
  ------------------
  273|  5.89k|        VLOG_DBG_RL(&rl, "oxs length %u, rounded up to a "
  ------------------
  |  |  225|  5.89k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  5.89k|    do {                                                                \
  |  |  |  |  287|  5.89k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  5.89k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 5.89k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  5.89k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  274|  5.89k|                    "multiple of 8, is longer than space in message (max "
  275|  5.89k|                    "length %" PRIu32 ")", stat_len, b->size);
  276|  5.89k|        return OFPERR_OFPBMC_BAD_LEN;
  277|  5.89k|    }
  278|  27.6k|    *statlen = ROUND_UP(stat_len, 8);
  ------------------
  |  |  299|  27.6k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  296|  27.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  279|  27.6k|    return oxs_pull_raw(p + sizeof *oxs, stat_len - sizeof *oxs, stats,
  280|  27.6k|                        oxs_field_set);
  281|  33.5k|}
ox-stat.c:oxs_pull_raw:
  236|  27.6k|{
  237|  27.6k|    struct ofpbuf b = ofpbuf_const_initializer(p, stat_len);
  238|  44.2k|    while (b.size) {
  ------------------
  |  Branch (238:12): [True: 21.9k, False: 22.2k]
  ------------------
  239|  21.9k|        const uint8_t *pos = b.data;
  240|  21.9k|        enum ofperr error = oxs_pull_entry__(&b, stats, oxs_field_set);
  241|  21.9k|        if (error && error != OFPERR_OFPBMC_BAD_FIELD) {
  ------------------
  |  Branch (241:13): [True: 5.44k, False: 16.5k]
  |  Branch (241:22): [True: 5.44k, False: 0]
  ------------------
  242|  5.44k|            VLOG_DBG_RL(&rl, "error parsing OXS at offset %"PRIdPTR" "
  ------------------
  |  |  225|  5.44k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  5.44k|    do {                                                                \
  |  |  |  |  287|  5.44k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  5.44k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 5.44k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  5.44k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  243|  5.44k|                        "within match (%s)",
  244|  5.44k|                        pos - p, ofperr_to_string(error));
  245|  5.44k|            return error;
  246|  5.44k|        }
  247|  21.9k|    }
  248|  22.2k|    return 0;
  249|  27.6k|}
ox-stat.c:oxs_pull_entry__:
  188|  21.9k|{
  189|  21.9k|    uint64_t header;
  190|  21.9k|    enum ofperr error = oxs_pull_header__(b, &header);
  191|  21.9k|    if (error) {
  ------------------
  |  Branch (191:9): [True: 1.62k, False: 20.3k]
  ------------------
  192|  1.62k|        return error;
  193|  1.62k|    }
  194|       |
  195|  20.3k|    unsigned int payload_len = oxs_payload_len(header);
  196|  20.3k|    const void *payload = ofpbuf_try_pull(b, payload_len);
  197|  20.3k|    if (!payload) {
  ------------------
  |  Branch (197:9): [True: 3.81k, False: 16.5k]
  ------------------
  198|  3.81k|        return OFPERR_OFPBMC_BAD_LEN;
  199|  3.81k|    }
  200|       |
  201|  16.5k|    switch (header) {
  202|     14|    case OXS_OF_DURATION: {
  ------------------
  |  |  135|     14|#define OXS_OF_DURATION     OXS_HEADER (0, 0x8002, OFPXST_OFB_DURATION, 8)
  |  |  ------------------
  |  |  |  |  124|     14|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|     14|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|     14|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|     14|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (202:5): [True: 14, False: 16.5k]
  ------------------
  203|     14|        uint64_t duration = ntohll(get_unaligned_be64(payload));
  204|     14|        stats->duration_sec = duration >> 32;
  205|     14|        stats->duration_nsec = duration;
  206|     14|    }
  207|     14|        break;
  208|    198|    case OXS_OF_IDLE_TIME:
  ------------------
  |  |  136|    198|#define OXS_OF_IDLE_TIME    OXS_HEADER (0, 0x8002, OFPXST_OFB_IDLE_TIME, 8)
  |  |  ------------------
  |  |  |  |  124|    198|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|    198|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|    198|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|    198|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (208:5): [True: 198, False: 16.3k]
  ------------------
  209|    198|        stats->idle_age = ntohll(get_unaligned_be64(payload)) >> 32;
  210|    198|        break;
  211|    273|    case OXS_OF_PACKET_COUNT:
  ------------------
  |  |  138|    273|#define OXS_OF_PACKET_COUNT OXS_HEADER (0, 0x8002, OFPXST_OFB_PACKET_COUNT, 8)
  |  |  ------------------
  |  |  |  |  124|    273|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|    273|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|    273|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|    273|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (211:5): [True: 273, False: 16.2k]
  ------------------
  212|    273|        stats->packet_count = ntohll(get_unaligned_be64(payload));
  213|    273|        break;
  214|     18|    case OXS_OF_BYTE_COUNT:
  ------------------
  |  |  139|     18|#define OXS_OF_BYTE_COUNT   OXS_HEADER (0, 0x8002, OFPXST_OFB_BYTE_COUNT, 8)
  |  |  ------------------
  |  |  |  |  124|     18|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|     18|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|     18|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|     18|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (214:5): [True: 18, False: 16.5k]
  ------------------
  215|     18|        stats->byte_count = ntohll(get_unaligned_be64(payload));
  216|     18|        break;
  217|     10|    case OXS_OF_FLOW_COUNT:
  ------------------
  |  |  137|     10|#define OXS_OF_FLOW_COUNT   OXS_HEADER (0, 0x8002, OFPXST_OFB_FLOW_COUNT, 4)
  |  |  ------------------
  |  |  |  |  124|     10|    (((uint64_t) (CLASS) << 48) | \
  |  |  |  |  125|     10|     ((uint64_t) (FIELD) << 41) | \
  |  |  |  |  126|     10|     ((uint64_t) (LENGTH) << 32) | \
  |  |  |  |  127|     10|     (EXPERIMENTER))
  |  |  ------------------
  ------------------
  |  Branch (217:5): [True: 10, False: 16.5k]
  ------------------
  218|     10|        stats->flow_count = ntohl(get_unaligned_be32(payload));
  219|     10|        break;
  220|       |
  221|  16.0k|    default:
  ------------------
  |  Branch (221:5): [True: 16.0k, False: 513]
  ------------------
  222|       |        /* Unknown header. */
  223|  16.0k|        return 0;
  224|  16.5k|    }
  225|    513|    if (oxs_field_set
  ------------------
  |  Branch (225:9): [True: 513, False: 0]
  ------------------
  226|    513|        && oxs_class(header) == OFPXSC_OPENFLOW_BASIC
  ------------------
  |  Branch (226:12): [True: 513, False: 0]
  ------------------
  227|    513|        && oxs_field(header) < CHAR_BIT * sizeof *oxs_field_set) {
  ------------------
  |  Branch (227:12): [True: 513, False: 0]
  ------------------
  228|    513|        *oxs_field_set |= 1 << oxs_field(header);
  229|    513|    }
  230|    513|    return error;
  231|  16.5k|}
ox-stat.c:oxs_pull_header__:
  154|  21.9k|{
  155|  21.9k|    if (b->size < 4) {
  ------------------
  |  Branch (155:9): [True: 966, False: 21.0k]
  ------------------
  156|    966|        goto bad_len;
  157|    966|    }
  158|       |
  159|  21.0k|    *header = ((uint64_t) ntohl(get_unaligned_be32(b->data))) << 32;
  160|  21.0k|    if (is_experimenter_oxs(*header)) {
  ------------------
  |  Branch (160:9): [True: 759, False: 20.2k]
  ------------------
  161|    759|        if (b->size < 8) {
  ------------------
  |  Branch (161:13): [True: 638, False: 121]
  ------------------
  162|    638|            goto bad_len;
  163|    638|        }
  164|    121|        *header = ntohll(get_unaligned_be64(b->data));
  165|    121|    }
  166|  20.3k|    if (oxs_length(*header) < oxs_experimenter_len(*header)) {
  ------------------
  |  Branch (166:9): [True: 20, False: 20.3k]
  ------------------
  167|     20|        VLOG_WARN_RL(&rl, "OXS header "OXS_HEADER_FMT" has invalid length %d "
  ------------------
  |  |  223|     20|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|     20|    do {                                                                \
  |  |  |  |  287|     20|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|     20|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 20]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|     20|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  168|     20|                     "(minimum is %d)",
  169|     20|                     OXS_HEADER_ARGS(*header), oxs_length(*header),
  170|     20|                     oxs_header_len(*header));
  171|     20|        goto error;
  172|     20|    }
  173|  20.3k|    ofpbuf_pull(b, oxs_header_len(*header));
  174|       |
  175|  20.3k|    return 0;
  176|       |
  177|  1.60k|bad_len:
  178|  1.60k|    VLOG_DBG_RL(&rl, "encountered partial (%"PRIu32"-byte) OXS entry",
  ------------------
  |  |  225|  1.60k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  286|  1.60k|    do {                                                                \
  |  |  |  |  287|  1.60k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  288|  1.60k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:13): [True: 0, False: 1.60k]
  |  |  |  |  ------------------
  |  |  |  |  289|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  290|      0|        }                                                               \
  |  |  |  |  291|  1.60k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (291:14): [Folded - Ignored]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  179|  1.60k|                b->size);
  180|  1.62k|error:
  181|  1.62k|    *header = 0;
  182|  1.62k|    return OFPERR_OFPBMC_BAD_LEN;
  183|  1.60k|}
ox-stat.c:is_experimenter_oxs:
   83|  82.1k|{
   84|  82.1k|    return oxs_class(header) == OFPXSC_EXPERIMENTER;
   85|  82.1k|}
ox-stat.c:oxs_length:
   79|  40.7k|static int oxs_length(uint64_t header) { return (header >> 32) & 0xff; }
ox-stat.c:oxs_experimenter_len:
  102|  61.1k|{
  103|  61.1k|    return is_experimenter_oxs(header) ? 4 : 0;
  ------------------
  |  Branch (103:12): [True: 323, False: 60.8k]
  ------------------
  104|  61.1k|}
ox-stat.c:oxs_header_len:
  118|  20.3k|{
  119|  20.3k|    return 4 + oxs_experimenter_len(header);
  120|  20.3k|}
ox-stat.c:oxs_payload_len:
  110|  20.3k|{
  111|  20.3k|    return oxs_length(header) - oxs_experimenter_len(header);
  112|  20.3k|}
ox-stat.c:oxs_class:
   77|  82.6k|static int oxs_class(uint64_t header) { return header >> 48; }
ox-stat.c:oxs_field:
   78|  1.02k|static int oxs_field(uint64_t header) { return (header >> 41) & 0x7f; }

set_mpls_lse_ttl:
  336|  1.84k|{
  337|  1.84k|    *lse &= ~htonl(MPLS_TTL_MASK);
  338|  1.84k|    *lse |= htonl((ttl << MPLS_TTL_SHIFT) & MPLS_TTL_MASK);
  339|  1.84k|}
set_mpls_lse_tc:
  344|    791|{
  345|    791|    *lse &= ~htonl(MPLS_TC_MASK);
  346|    791|    *lse |= htonl((tc << MPLS_TC_SHIFT) & MPLS_TC_MASK);
  347|    791|}
set_mpls_lse_label:
  352|    290|{
  353|    290|    *lse &= ~htonl(MPLS_LABEL_MASK);
  354|    290|    *lse |= htonl((ntohl(label) << MPLS_LABEL_SHIFT) & MPLS_LABEL_MASK);
  355|    290|}
set_mpls_lse_bos:
  360|    568|{
  361|    568|    *lse &= ~htonl(MPLS_BOS_MASK);
  362|    568|    *lse |= htonl((bos << MPLS_BOS_SHIFT) & MPLS_BOS_MASK);
  363|    568|}
eth_format_masked:
  589|   321k|{
  590|   321k|    ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  370|   321k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                  ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  371|   321k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|   321k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  591|   321k|    if (mask && !eth_mask_is_exact(*mask)) {
  ------------------
  |  Branch (591:9): [True: 321k, False: 11]
  |  Branch (591:17): [True: 8.87k, False: 313k]
  ------------------
  592|  8.87k|        ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  370|  8.87k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                      ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  371|  8.87k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  8.87k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  593|  8.87k|    }
  594|   321k|}
ip_count_cidr_bits:
  676|  11.9k|{
  677|  11.9k|    return 32 - ctz32(ntohl(netmask));
  678|  11.9k|}
ip_format_masked:
  682|  57.1k|{
  683|  57.1k|    ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  628|  57.1k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                  ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  630|  57.1k|    ntohl(ip) >> 24,                            \
  |  |  631|  57.1k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  57.1k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  57.1k|    ntohl(ip) & 0xff
  ------------------
  684|  57.1k|    if (mask != OVS_BE32_MAX) {
  ------------------
  |  |   43|  57.1k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (684:9): [True: 17.2k, False: 39.8k]
  ------------------
  685|  17.2k|        if (ip_is_cidr(mask)) {
  ------------------
  |  Branch (685:13): [True: 11.9k, False: 5.35k]
  ------------------
  686|  11.9k|            ds_put_format(s, "/%d", ip_count_cidr_bits(mask));
  687|  11.9k|        } else {
  688|  5.35k|            ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  628|  5.35k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                          ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  630|  5.35k|    ntohl(ip) >> 24,                            \
  |  |  631|  5.35k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  5.35k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  5.35k|    ntohl(ip) & 0xff
  ------------------
  689|  5.35k|        }
  690|  17.2k|    }
  691|  57.1k|}
ipv6_format_addr:
  902|  97.5k|{
  903|  97.5k|    char *dst;
  904|       |
  905|  97.5k|    ds_reserve(s, s->length + INET6_ADDRSTRLEN);
  906|       |
  907|  97.5k|    dst = s->string + s->length;
  908|  97.5k|    inet_ntop(AF_INET6, addr, dst, INET6_ADDRSTRLEN);
  909|  97.5k|    s->length += strlen(dst);
  910|  97.5k|}
ipv6_format_mapped:
  929|  18.5k|{
  930|  18.5k|    if (IN6_IS_ADDR_V4MAPPED(addr)) {
  931|  1.11k|        ds_put_format(s, IP_FMT, addr->s6_addr[12], addr->s6_addr[13],
  ------------------
  |  |  628|  1.11k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
  932|  1.11k|                                 addr->s6_addr[14], addr->s6_addr[15]);
  933|  17.3k|    } else {
  934|  17.3k|        ipv6_format_addr(addr, s);
  935|  17.3k|    }
  936|  18.5k|}
ipv6_format_masked:
  941|  79.4k|{
  942|  79.4k|    ipv6_format_addr(addr, s);
  943|  79.4k|    if (mask && !ipv6_mask_is_exact(mask)) {
  ------------------
  |  Branch (943:9): [True: 79.4k, False: 10]
  |  Branch (943:17): [True: 887, False: 78.5k]
  ------------------
  944|    887|        if (ipv6_is_cidr(mask)) {
  ------------------
  |  Branch (944:13): [True: 140, False: 747]
  ------------------
  945|    140|            int cidr_bits = ipv6_count_cidr_bits(mask);
  946|    140|            ds_put_format(s, "/%d", cidr_bits);
  947|    747|        } else {
  948|    747|            ds_put_char(s, '/');
  949|    747|            ipv6_format_addr(mask, s);
  950|    747|        }
  951|    887|    }
  952|  79.4k|}
ipv6_addr_bitand:
  979|  5.83k|{
  980|  5.83k|   struct in6_addr dst;
  981|  23.3k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  971|  29.1k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (971:46): [True: 23.3k, False: 5.83k]
  |  |  ------------------
  ------------------
  982|  23.3k|       dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  970|  23.3k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  970|  23.3k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  970|  23.3k|#define s6_addrX s6_addr32
  ------------------
  983|  23.3k|   }
  984|  5.83k|   return dst;
  985|  5.83k|}
ipv6_is_zero:
  999|  8.72k|{
 1000|  19.8k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  971|  20.9k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (971:46): [True: 19.8k, False: 1.09k]
  |  |  ------------------
  ------------------
 1001|  19.8k|       if (a->s6_addrX[i]) {
  ------------------
  |  |  970|  19.8k|#define s6_addrX s6_addr32
  ------------------
  |  Branch (1001:12): [True: 7.63k, False: 12.2k]
  ------------------
 1002|  7.63k|           return false;
 1003|  7.63k|       }
 1004|  19.8k|   }
 1005|  1.09k|   return true;
 1006|  8.72k|}
ipv6_count_cidr_bits:
 1038|    140|{
 1039|    140|    int i;
 1040|    140|    int count = 0;
 1041|    140|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1042|       |
 1043|  1.51k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1043:15): [True: 1.51k, False: 0]
  ------------------
 1044|  1.51k|        if (netmaskp[i] == 0xff) {
  ------------------
  |  Branch (1044:13): [True: 1.37k, False: 140]
  ------------------
 1045|  1.37k|            count += 8;
 1046|  1.37k|        } else {
 1047|    140|            uint8_t nm;
 1048|       |
 1049|    193|            for(nm = netmaskp[i]; nm; nm <<= 1) {
  ------------------
  |  Branch (1049:35): [True: 53, False: 140]
  ------------------
 1050|     53|                count++;
 1051|     53|            }
 1052|    140|            break;
 1053|    140|        }
 1054|       |
 1055|  1.51k|    }
 1056|       |
 1057|    140|    return count;
 1058|    140|}
ipv6_is_cidr:
 1064|    887|{
 1065|    887|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1066|    887|    int i;
 1067|       |
 1068|  3.36k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1068:15): [True: 3.22k, False: 140]
  ------------------
 1069|  3.22k|        if (netmaskp[i] != 0xff) {
  ------------------
  |  Branch (1069:13): [True: 887, False: 2.33k]
  ------------------
 1070|    887|            uint8_t x = ~netmaskp[i];
 1071|    887|            if (x & (x + 1)) {
  ------------------
  |  Branch (1071:17): [True: 125, False: 762]
  ------------------
 1072|    125|                return false;
 1073|    125|            }
 1074|  4.37k|            while (++i < 16) {
  ------------------
  |  Branch (1074:20): [True: 4.23k, False: 140]
  ------------------
 1075|  4.23k|                if (netmaskp[i]) {
  ------------------
  |  Branch (1075:21): [True: 622, False: 3.61k]
  ------------------
 1076|    622|                    return false;
 1077|    622|                }
 1078|  4.23k|            }
 1079|    762|        }
 1080|  3.22k|    }
 1081|       |
 1082|    140|    return true;
 1083|    887|}
packet_tcp_flag_to_string:
 1572|   133k|{
 1573|   133k|    switch (flag) {
 1574|  8.19k|    case TCP_FIN:
  ------------------
  |  |  876|  8.19k|#define TCP_FIN 0x001
  ------------------
  |  Branch (1574:5): [True: 8.19k, False: 125k]
  ------------------
 1575|  8.19k|        return "fin";
 1576|  7.31k|    case TCP_SYN:
  ------------------
  |  |  877|  7.31k|#define TCP_SYN 0x002
  ------------------
  |  Branch (1576:5): [True: 7.31k, False: 126k]
  ------------------
 1577|  7.31k|        return "syn";
 1578|  12.0k|    case TCP_RST:
  ------------------
  |  |  878|  12.0k|#define TCP_RST 0x004
  ------------------
  |  Branch (1578:5): [True: 12.0k, False: 121k]
  ------------------
 1579|  12.0k|        return "rst";
 1580|  6.96k|    case TCP_PSH:
  ------------------
  |  |  879|  6.96k|#define TCP_PSH 0x008
  ------------------
  |  Branch (1580:5): [True: 6.96k, False: 126k]
  ------------------
 1581|  6.96k|        return "psh";
 1582|  6.76k|    case TCP_ACK:
  ------------------
  |  |  880|  6.76k|#define TCP_ACK 0x010
  ------------------
  |  Branch (1582:5): [True: 6.76k, False: 127k]
  ------------------
 1583|  6.76k|        return "ack";
 1584|  13.1k|    case TCP_URG:
  ------------------
  |  |  881|  13.1k|#define TCP_URG 0x020
  ------------------
  |  Branch (1584:5): [True: 13.1k, False: 120k]
  ------------------
 1585|  13.1k|        return "urg";
 1586|  5.73k|    case TCP_ECE:
  ------------------
  |  |  882|  5.73k|#define TCP_ECE 0x040
  ------------------
  |  Branch (1586:5): [True: 5.73k, False: 128k]
  ------------------
 1587|  5.73k|        return "ece";
 1588|  4.51k|    case TCP_CWR:
  ------------------
  |  |  883|  4.51k|#define TCP_CWR 0x080
  ------------------
  |  Branch (1588:5): [True: 4.51k, False: 129k]
  ------------------
 1589|  4.51k|        return "cwr";
 1590|  14.6k|    case TCP_NS:
  ------------------
  |  |  884|  14.6k|#define TCP_NS  0x100
  ------------------
  |  Branch (1590:5): [True: 14.6k, False: 119k]
  ------------------
 1591|  14.6k|        return "ns";
 1592|  8.05k|    case 0x200:
  ------------------
  |  Branch (1592:5): [True: 8.05k, False: 125k]
  ------------------
 1593|  8.05k|        return "[200]";
 1594|  11.3k|    case 0x400:
  ------------------
  |  Branch (1594:5): [True: 11.3k, False: 122k]
  ------------------
 1595|  11.3k|        return "[400]";
 1596|  14.5k|    case 0x800:
  ------------------
  |  Branch (1596:5): [True: 14.5k, False: 119k]
  ------------------
 1597|  14.5k|        return "[800]";
 1598|  20.5k|    default:
  ------------------
  |  Branch (1598:5): [True: 20.5k, False: 113k]
  ------------------
 1599|  20.5k|        return NULL;
 1600|   133k|    }
 1601|   133k|}

dp-packet.c:pkt_metadata_init:
  165|   114k|{
  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|   114k|    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|   114k|    md->tunnel.ip_dst = 0;
  179|   114k|    md->tunnel.ipv6_dst = in6addr_any;
  180|   114k|    md->in_port.odp_port = port;
  181|   114k|    md->orig_in_port = port;
  182|   114k|    md->conn = NULL;
  183|   114k|}
flow.c:flow_tnl_dst_is_set:
   51|   229k|{
   52|   229k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 229k]
  |  Branch (52:27): [True: 0, False: 229k]
  ------------------
   53|   229k|}
flow.c:eth_type_vlan:
  429|  62.1k|{
  430|  62.1k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 128, False: 62.0k]
  ------------------
  431|  62.1k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 845, False: 61.2k]
  ------------------
  432|  62.1k|}
flow.c:pt_ns_type_be:
 1533|  48.9k|{
 1534|  48.9k|    return be32_to_be16(packet_type);
 1535|  48.9k|}
flow.c:eth_type_mpls:
  423|   134k|{
  424|   134k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 1.19k, False: 133k]
  ------------------
  425|   134k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 324, False: 133k]
  ------------------
  426|   134k|}
flow.c:eth_addr_is_zero:
  246|  3.89k|{
  247|  3.89k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  3.89k|}
flow.c:ipv6_addr_is_set:
 1172|   229k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1173|   229k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1174|   229k|}
flow.c:ipv6_addr_equals:
 1151|   229k|{
 1152|   229k|#ifdef IN6_ARE_ADDR_EQUAL
 1153|   229k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|   229k|}
flow.c:pt_ns:
 1526|  32.7k|{
 1527|  32.7k|    return ntohl(packet_type) >> 16;
 1528|  32.7k|}
flow.c:pt_ns_type:
 1540|  32.6k|{
 1541|  32.6k|    return ntohs(pt_ns_type_be(packet_type));
 1542|  32.6k|}
match.c:ipv6_mask_is_any:
 1160|  1.74M|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1161|  1.74M|    return ipv6_addr_equals(mask, &in6addr_any);
 1162|  1.74M|}
match.c:ipv6_addr_equals:
 1151|  1.74M|{
 1152|  1.74M|#ifdef IN6_ARE_ADDR_EQUAL
 1153|  1.74M|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|  1.74M|}
match.c:pt_ns:
 1526|  32.5k|{
 1527|  32.5k|    return ntohl(packet_type) >> 16;
 1528|  32.5k|}
match.c:pt_ns_type_be:
 1533|  23.5k|{
 1534|  23.5k|    return be32_to_be16(packet_type);
 1535|  23.5k|}
match.c:vlan_tci_to_vid:
  507|  41.8k|{
  508|  41.8k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  41.8k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  41.8k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  41.8k|}
match.c:vlan_tci_to_pcp:
  515|  39.3k|{
  516|  39.3k|    return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  497|  39.3k|#define VLAN_PCP_MASK 0xe000
  ------------------
                  return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  498|  39.3k|#define VLAN_PCP_SHIFT 13
  ------------------
  517|  39.3k|}
match.c:eth_addr_is_zero:
  246|   843k|{
  247|   843k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|   843k|}
match.c:mpls_lse_to_label:
  568|    762|{
  569|    762|    return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  554|    762|#define MPLS_LABEL_MASK     0xfffff000
  ------------------
                  return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  555|    762|#define MPLS_LABEL_SHIFT    12
  ------------------
  570|    762|}
match.c:mpls_lse_to_tc:
  576|    762|{
  577|    762|    return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  551|    762|#define MPLS_TC_MASK        0x00000e00
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  552|    762|#define MPLS_TC_SHIFT       9
  ------------------
  578|    762|}
match.c:mpls_lse_to_ttl:
  584|    764|{
  585|    764|    return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  545|    764|#define MPLS_TTL_MASK       0x000000ff
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  546|    764|#define MPLS_TTL_SHIFT      0
  ------------------
  586|    764|}
match.c:mpls_lse_to_bos:
  624|    761|{
  625|    761|    return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
  626|    761|}
match.c:dl_type_is_ip_any:
 1223|   413k|{
 1224|   413k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1224:12): [True: 32.0k, False: 381k]
  ------------------
 1225|   413k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1225:12): [True: 42.5k, False: 338k]
  ------------------
 1226|   413k|}
meta-flow.c:ipv6_mask_is_any:
 1160|  9.59k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1161|  9.59k|    return ipv6_addr_equals(mask, &in6addr_any);
 1162|  9.59k|}
meta-flow.c:ipv6_addr_equals:
 1151|  9.59k|{
 1152|  9.59k|#ifdef IN6_ARE_ADDR_EQUAL
 1153|  9.59k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|  9.59k|}
meta-flow.c:eth_addr_is_zero:
  246|  15.5k|{
  247|  15.5k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  15.5k|}
meta-flow.c:pt_ns:
 1526|    882|{
 1527|    882|    return ntohl(packet_type) >> 16;
 1528|    882|}
meta-flow.c:pt_ns_type_be:
 1533|    420|{
 1534|    420|    return be32_to_be16(packet_type);
 1535|    420|}
meta-flow.c:eth_type_mpls:
  423|    660|{
  424|    660|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 10, False: 650]
  ------------------
  425|    660|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 0, False: 650]
  ------------------
  426|    660|}
meta-flow.c:dl_type_is_ip_any:
 1223|  5.02k|{
 1224|  5.02k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1224:12): [True: 2.66k, False: 2.35k]
  ------------------
 1225|  5.02k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1225:12): [True: 0, False: 2.35k]
  ------------------
 1226|  5.02k|}
meta-flow.c:ip_is_cidr:
  664|  2.63k|{
  665|  2.63k|    uint32_t x = ~ntohl(netmask);
  666|  2.63k|    return !(x & (x + 1));
  667|  2.63k|}
ofp-actions.c:eth_type_vlan:
  429|  5.05k|{
  430|  5.05k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 1.85k, False: 3.19k]
  ------------------
  431|  5.05k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 2.57k, False: 614]
  ------------------
  432|  5.05k|}
ofp-actions.c:eth_type_mpls:
  423|  48.7k|{
  424|  48.7k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 12.3k, False: 36.3k]
  ------------------
  425|  48.7k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 2.05k, False: 34.2k]
  ------------------
  426|  48.7k|}
ofp-actions.c:ipv6_mask_is_any:
 1160|  6.94k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1161|  6.94k|    return ipv6_addr_equals(mask, &in6addr_any);
 1162|  6.94k|}
ofp-actions.c:ipv6_addr_equals:
 1151|  6.94k|{
 1152|  6.94k|#ifdef IN6_ARE_ADDR_EQUAL
 1153|  6.94k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|  6.94k|}
ofp-actions.c:pt_ns:
 1526|  28.3k|{
 1527|  28.3k|    return ntohl(packet_type) >> 16;
 1528|  28.3k|}
ofp-actions.c:pt_ns_type_be:
 1533|  26.2k|{
 1534|  26.2k|    return be32_to_be16(packet_type);
 1535|  26.2k|}
ofp-actions.c:dl_type_is_ip_any:
 1223|  87.7k|{
 1224|  87.7k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1224:12): [True: 63.3k, False: 24.4k]
  ------------------
 1225|  87.7k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1225:12): [True: 505, False: 23.9k]
  ------------------
 1226|  87.7k|}
ofp-actions.c:pt_ns_type:
 1540|  1.90k|{
 1541|  1.90k|    return ntohs(pt_ns_type_be(packet_type));
 1542|  1.90k|}
ofp-flow.c:ipv6_addr_is_set:
 1172|   410k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1173|   410k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1174|   410k|}
ofp-flow.c:ipv6_addr_equals:
 1151|   410k|{
 1152|   410k|#ifdef IN6_ARE_ADDR_EQUAL
 1153|   410k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|   410k|}
ofp-match.c:eth_addr_is_zero:
  246|  21.0k|{
  247|  21.0k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  21.0k|}
ofp-match.c:eth_addr_invert:
  301|  36.3k|{
  302|  36.3k|    struct eth_addr dst;
  303|       |
  304|   145k|    for (int i = 0; i < ARRAY_SIZE(src.be16); i++) {
  ------------------
  |  |  293|   145k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|   145k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|   145k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|   145k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|   145k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|   145k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:21): [True: 109k, False: 36.3k]
  ------------------
  305|   109k|        dst.be16[i] = ~src.be16[i];
  306|   109k|    }
  307|       |
  308|  36.3k|    return dst;
  309|  36.3k|}
ofp-match.c:eth_type_mpls:
  423|   113k|{
  424|   113k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 1.58k, False: 111k]
  ------------------
  425|   113k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 67, False: 111k]
  ------------------
  426|   113k|}
packets.c:eth_mask_is_exact:
  255|   321k|{
  256|   321k|    return (a.be16[0] & a.be16[1] & a.be16[2]) == htons(0xffff);
  257|   321k|}
packets.c:ip_is_cidr:
  664|  17.2k|{
  665|  17.2k|    uint32_t x = ~ntohl(netmask);
  666|  17.2k|    return !(x & (x + 1));
  667|  17.2k|}
packets.c:ipv6_mask_is_exact:
 1164|  79.4k|static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
 1165|  79.4k|    return ipv6_addr_equals(mask, &in6addr_exact);
 1166|  79.4k|}
packets.c:ipv6_addr_equals:
 1151|  79.4k|{
 1152|  79.4k|#ifdef IN6_ARE_ADDR_EQUAL
 1153|  79.4k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1154|       |#else
 1155|       |    return !memcmp(a, b, sizeof(*a));
 1156|       |#endif
 1157|  79.4k|}

tun_metadata_read:
  223|  44.9k|{
  224|  44.9k|    const struct tun_table *map = tnl->metadata.tab;
  225|  44.9k|    unsigned int idx = mf->id - MFF_TUN_METADATA0;
  226|  44.9k|    const struct tun_metadata_loc *loc;
  227|       |
  228|  44.9k|    if (!map) {
  ------------------
  |  Branch (228:9): [True: 44.9k, False: 0]
  ------------------
  229|  44.9k|        memset(value->tun_metadata, 0, mf->n_bytes);
  230|  44.9k|        return;
  231|  44.9k|    }
  232|       |
  233|      0|    loc = &map->entries[idx].loc;
  234|       |
  235|      0|    memset(value->tun_metadata, 0, mf->n_bytes - loc->len);
  236|      0|    memcpy_from_metadata(value->tun_metadata + mf->n_bytes - loc->len,
  237|      0|                         &tnl->metadata, loc);
  238|      0|}
tun_metadata_set_match:
  354|   228k|{
  355|   228k|    const struct tun_table *map = match->flow.tunnel.metadata.tab;
  356|   228k|    const struct tun_metadata_loc *loc;
  357|   228k|    unsigned int idx = mf->id - MFF_TUN_METADATA0;
  358|   228k|    unsigned int field_len;
  359|   228k|    bool is_masked;
  360|   228k|    unsigned int data_offset;
  361|   228k|    union mf_value data;
  362|       |
  363|   228k|    field_len = mf_field_len(mf, value, mask, &is_masked);
  364|   228k|    loc = metadata_loc_from_match(map, match, mf->name, idx, field_len,
  365|   228k|                                  is_masked, err_str);
  366|   228k|    if (!loc) {
  ------------------
  |  Branch (366:9): [True: 496, False: 228k]
  ------------------
  367|    496|        return;
  368|    496|    }
  369|       |
  370|   228k|    data_offset = mf->n_bytes - loc->len;
  371|       |
  372|   228k|    if (!value) {
  ------------------
  |  Branch (372:9): [True: 0, False: 228k]
  ------------------
  373|      0|        memset(data.tun_metadata, 0, loc->len);
  374|   228k|    } else if (!mask) {
  ------------------
  |  Branch (374:16): [True: 96.5k, False: 131k]
  ------------------
  375|  96.5k|        memcpy(data.tun_metadata, value->tun_metadata + data_offset, loc->len);
  376|   131k|    } else {
  377|   131k|        int i;
  378|   434k|        for (i = 0; i < loc->len; i++) {
  ------------------
  |  Branch (378:21): [True: 302k, False: 131k]
  ------------------
  379|   302k|            data.tun_metadata[i] = value->tun_metadata[data_offset + i] &
  380|   302k|                                   mask->tun_metadata[data_offset + i];
  381|   302k|        }
  382|   131k|    }
  383|   228k|    memcpy_to_metadata(&match->flow.tunnel.metadata, data.tun_metadata,
  384|   228k|                       loc, idx);
  385|       |
  386|   228k|    if (!value) {
  ------------------
  |  Branch (386:9): [True: 0, False: 228k]
  ------------------
  387|      0|        memset(data.tun_metadata, 0, loc->len);
  388|   228k|    } else if (!mask) {
  ------------------
  |  Branch (388:16): [True: 96.5k, False: 131k]
  ------------------
  389|  96.5k|        memset(data.tun_metadata, 0xff, loc->len);
  390|   131k|    } else {
  391|   131k|        memcpy(data.tun_metadata, mask->tun_metadata + data_offset, loc->len);
  392|   131k|    }
  393|   228k|    memcpy_to_metadata(&match->wc.masks.tunnel.metadata, data.tun_metadata,
  394|   228k|                       loc, idx);
  395|   228k|}
tun_metadata_match_format:
  904|   413k|{
  905|   413k|    int i;
  906|       |
  907|   413k|    if (match->flow.tunnel.flags & FLOW_TNL_F_UDPIF ||
  ------------------
  |  |   45|   826k|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (907:9): [True: 0, False: 413k]
  ------------------
  908|   413k|        (!match->flow.tunnel.metadata.tab && !match->tun_md.valid)) {
  ------------------
  |  Branch (908:10): [True: 413k, False: 0]
  |  Branch (908:46): [True: 384k, False: 28.9k]
  ------------------
  909|   384k|        return;
  910|   384k|    }
  911|       |
  912|  42.1k|    ULLONG_FOR_EACH_1 (i, match->wc.masks.tunnel.metadata.present.map) {
  ------------------
  |  |  285|  28.9k|    for (uint64_t map__ = (MAP);                    \
  |  |  286|  71.1k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  ------------------
  |  |  |  Branch (286:10): [True: 42.1k, False: 28.9k]
  |  |  |  Branch (286:19): [True: 42.1k, False: 0]
  |  |  ------------------
  |  |  287|  42.1k|         map__ = zero_rightmost_1bit(map__))
  ------------------
  913|  42.1k|        const struct tun_metadata_loc *loc;
  914|  42.1k|        bool is_masked;
  915|  42.1k|        union mf_value opts, mask_opts;
  916|       |
  917|  42.1k|        loc = metadata_loc_from_match_read(match->flow.tunnel.metadata.tab,
  918|  42.1k|                                           match, i, &match->wc.masks.tunnel,
  919|  42.1k|                                           &is_masked);
  920|       |
  921|  42.1k|        ds_put_format(s, "tun_metadata%u", i);
  922|  42.1k|        memcpy_from_metadata(mask_opts.tun_metadata,
  923|  42.1k|                             &match->wc.masks.tunnel.metadata, loc);
  924|       |
  925|  42.1k|        if (!ULLONG_GET(match->flow.tunnel.metadata.present.map, i)) {
  ------------------
  |  |  293|  42.1k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  |  Branch (925:13): [True: 0, False: 42.1k]
  ------------------
  926|       |            /* Indicate that we are matching on the field being not present. */
  927|      0|            ds_put_cstr(s, "=NP");
  928|  42.1k|        } else if (!(is_masked &&
  ------------------
  |  Branch (928:22): [True: 27.4k, False: 14.7k]
  ------------------
  929|  42.1k|                     is_all_zeros(mask_opts.tun_metadata, loc->len))) {
  ------------------
  |  Branch (929:22): [True: 17.8k, False: 9.58k]
  ------------------
  930|  24.3k|            ds_put_char(s, '=');
  931|       |
  932|  24.3k|            memcpy_from_metadata(opts.tun_metadata,
  933|  24.3k|                                 &match->flow.tunnel.metadata, loc);
  934|  24.3k|            ds_put_hex(s, opts.tun_metadata, loc->len);
  935|       |
  936|  24.3k|            if (!is_all_ones(mask_opts.tun_metadata, loc->len)) {
  ------------------
  |  Branch (936:17): [True: 9.56k, False: 14.7k]
  ------------------
  937|  9.56k|                ds_put_char(s, '/');
  938|  9.56k|                ds_put_hex(s, mask_opts.tun_metadata, loc->len);
  939|  9.56k|            }
  940|  24.3k|        }
  941|  42.1k|        ds_put_char(s, ',');
  942|  42.1k|    }
  943|  28.9k|}
tun_metadata_allocation_clone:
  947|  78.1k|{
  948|  78.1k|    return src && src->valid ? xmemdup(src, sizeof *src) : NULL;
  ------------------
  |  Branch (948:12): [True: 78.1k, False: 0]
  |  Branch (948:19): [True: 2.50k, False: 75.6k]
  ------------------
  949|  78.1k|}
tun_metadata_allocation_copy:
  954|  78.1k|{
  955|  78.1k|    if (src && src->valid) {
  ------------------
  |  Branch (955:9): [True: 2.50k, False: 75.6k]
  |  Branch (955:16): [True: 2.50k, False: 0]
  ------------------
  956|  2.50k|        *dst = *src;
  957|  75.6k|    } else {
  958|  75.6k|        memset(dst, 0, sizeof *dst);
  959|  75.6k|    }
  960|  78.1k|}
tun-metadata.c:metadata_loc_from_match:
  285|   228k|{
  286|   228k|    ovs_assert(idx < TUN_METADATA_NUM_OPTS);
  ------------------
  |  |   58|   228k|#define ovs_assert(CONDITION) ((void) (CONDITION))
  ------------------
  287|       |
  288|   228k|    if (err_str) {
  ------------------
  |  Branch (288:9): [True: 206k, False: 22.4k]
  ------------------
  289|   206k|        *err_str = NULL;
  290|   206k|    }
  291|       |
  292|   228k|    if (map) {
  ------------------
  |  Branch (292:9): [True: 0, False: 228k]
  ------------------
  293|      0|        if (map->entries[idx].valid) {
  ------------------
  |  Branch (293:13): [True: 0, False: 0]
  ------------------
  294|      0|            return &map->entries[idx].loc;
  295|      0|        } else {
  296|      0|            return NULL;
  297|      0|        }
  298|      0|    }
  299|       |
  300|   228k|    if (match->tun_md.alloc_offset + field_len > TUN_METADATA_TOT_OPT_SIZE) {
  ------------------
  |  |   27|   228k|#define TUN_METADATA_TOT_OPT_SIZE 256
  ------------------
  |  Branch (300:9): [True: 0, False: 228k]
  ------------------
  301|      0|        if (err_str) {
  ------------------
  |  Branch (301:13): [True: 0, False: 0]
  ------------------
  302|      0|            *err_str = xasprintf("field %s exceeds maximum size for tunnel "
  303|      0|                                 "metadata (used %d, max %d)", name,
  304|      0|                                 match->tun_md.alloc_offset + field_len,
  305|      0|                                 TUN_METADATA_TOT_OPT_SIZE);
  ------------------
  |  |   27|      0|#define TUN_METADATA_TOT_OPT_SIZE 256
  ------------------
  306|      0|        }
  307|       |
  308|      0|        return NULL;
  309|      0|    }
  310|       |
  311|   228k|    if (ULLONG_GET(match->wc.masks.tunnel.metadata.present.map, idx)) {
  ------------------
  |  |  293|   228k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  |  |  ------------------
  |  |  |  Branch (293:33): [True: 496, False: 228k]
  |  |  ------------------
  ------------------
  312|    496|        if (err_str) {
  ------------------
  |  Branch (312:13): [True: 0, False: 496]
  ------------------
  313|      0|            *err_str = xasprintf("field %s set multiple times", name);
  314|      0|        }
  315|       |
  316|    496|        return NULL;
  317|    496|    }
  318|       |
  319|   228k|    match->tun_md.entry[idx].loc.len = field_len;
  320|   228k|    match->tun_md.entry[idx].loc.c.offset = match->tun_md.alloc_offset;
  321|   228k|    match->tun_md.entry[idx].loc.c.len = field_len;
  322|   228k|    match->tun_md.entry[idx].loc.c.next = NULL;
  323|   228k|    match->tun_md.entry[idx].masked = masked;
  324|   228k|    match->tun_md.alloc_offset += field_len;
  325|   228k|    match->tun_md.valid = true;
  326|       |
  327|   228k|    return &match->tun_md.entry[idx].loc;
  328|   228k|}
tun-metadata.c:memcpy_to_metadata:
  445|   456k|{
  446|   456k|    const struct tun_metadata_loc_chain *chain = &loc->c;
  447|   456k|    int addr = 0;
  448|       |
  449|   913k|    while (chain) {
  ------------------
  |  Branch (449:12): [True: 456k, False: 456k]
  ------------------
  450|   456k|        memcpy(dst->opts.u8 + chain->offset, (uint8_t *)src + addr,
  451|   456k|               chain->len);
  452|   456k|        addr += chain->len;
  453|   456k|        chain = chain->next;
  454|   456k|    }
  455|       |
  456|   456k|    ULLONG_SET1(dst->present.map, idx);
  ------------------
  |  |  290|   456k|#define ULLONG_SET1(MAP, OFFSET) ((MAP) |= 1ULL << (OFFSET))
  ------------------
  457|   456k|}
tun-metadata.c:memcpy_from_metadata:
  462|  66.4k|{
  463|  66.4k|    const struct tun_metadata_loc_chain *chain = &loc->c;
  464|  66.4k|    int addr = 0;
  465|       |
  466|   132k|    while (chain) {
  ------------------
  |  Branch (466:12): [True: 66.4k, False: 66.4k]
  ------------------
  467|  66.4k|        memcpy((uint8_t *)dst + addr, src->opts.u8 + chain->offset,
  468|  66.4k|               chain->len);
  469|  66.4k|        addr += chain->len;
  470|  66.4k|        chain = chain->next;
  471|  66.4k|    }
  472|  66.4k|}
tun-metadata.c:metadata_loc_from_match_read:
  857|  42.1k|{
  858|  42.1k|    union mf_value mask_opts;
  859|       |
  860|  42.1k|    if (match->tun_md.valid) {
  ------------------
  |  Branch (860:9): [True: 42.1k, False: 0]
  ------------------
  861|  42.1k|        *is_masked = match->tun_md.entry[idx].masked;
  862|  42.1k|        return &match->tun_md.entry[idx].loc;
  863|  42.1k|    }
  864|       |
  865|      0|    memcpy_from_metadata(mask_opts.tun_metadata, &mask->metadata,
  866|      0|                         &map->entries[idx].loc);
  867|       |
  868|      0|    *is_masked = map->entries[idx].loc.len == 0 ||
  ------------------
  |  Branch (868:18): [True: 0, False: 0]
  ------------------
  869|      0|                 !is_all_ones(mask_opts.tun_metadata,
  ------------------
  |  Branch (869:18): [True: 0, False: 0]
  ------------------
  870|      0|                              map->entries[idx].loc.len);
  871|      0|    return &map->entries[idx].loc;
  872|  42.1k|}

ofp-print.c:get_16aligned_be32:
  246|    821|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    821|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    821|#endif
  252|    821|}
ofp-queue.c:get_32aligned_be64:
  270|  26.7k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  26.7k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  26.7k|#endif
  276|  26.7k|}
ofp-table.c:get_32aligned_be64:
  270|  8.48k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  8.48k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  8.48k|#endif
  276|  8.48k|}
flow.c:get_16aligned_be32:
  246|  42.1k|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|  42.1k|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|  42.1k|#endif
  252|  42.1k|}
hash.c:get_unaligned_u32:
   74|    805|get_unaligned_##ABBREV(const TYPE *p)           \
   75|    805|{                                               \
   76|    805|    return unaligned_##ABBREV(p)->x;            \
   77|    805|}                                               \
hash.c:unaligned_u32:
   68|    805|unaligned_##ABBREV(const TYPE *p)               \
   69|    805|{                                               \
   70|    805|    return (struct unaligned_##ABBREV *) p;     \
   71|    805|}                                               \
nx-match.c:get_unaligned_be32:
   74|   933k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|   933k|{                                               \
   76|   933k|    return unaligned_##ABBREV(p)->x;            \
   77|   933k|}                                               \
nx-match.c:unaligned_be32:
   68|   933k|unaligned_##ABBREV(const TYPE *p)               \
   69|   933k|{                                               \
   70|   933k|    return (struct unaligned_##ABBREV *) p;     \
   71|   933k|}                                               \
nx-match.c:get_unaligned_be64:
   74|  30.1k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  30.1k|{                                               \
   76|  30.1k|    return unaligned_##ABBREV(p)->x;            \
   77|  30.1k|}                                               \
nx-match.c:unaligned_be64:
   68|  30.1k|unaligned_##ABBREV(const TYPE *p)               \
   69|  30.1k|{                                               \
   70|  30.1k|    return (struct unaligned_##ABBREV *) p;     \
   71|  30.1k|}                                               \
ofp-actions.c:get_unaligned_be32:
   74|  71.2k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  71.2k|{                                               \
   76|  71.2k|    return unaligned_##ABBREV(p)->x;            \
   77|  71.2k|}                                               \
ofp-actions.c:unaligned_be32:
   68|  71.2k|unaligned_##ABBREV(const TYPE *p)               \
   69|  71.2k|{                                               \
   70|  71.2k|    return (struct unaligned_##ABBREV *) p;     \
   71|  71.2k|}                                               \
ofp-flow.c:get_32aligned_be64:
  270|  1.75k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  1.75k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  1.75k|#endif
  276|  1.75k|}
ofp-port.c:get_unaligned_be64:
   74|  48.6k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  48.6k|{                                               \
   76|  48.6k|    return unaligned_##ABBREV(p)->x;            \
   77|  48.6k|}                                               \
ofp-port.c:unaligned_be64:
   68|  48.6k|unaligned_##ABBREV(const TYPE *p)               \
   69|  48.6k|{                                               \
   70|  48.6k|    return (struct unaligned_##ABBREV *) p;     \
   71|  48.6k|}                                               \
ofp-port.c:get_32aligned_be64:
  270|   154k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|   154k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|   154k|#endif
  276|   154k|}
ox-stat.c:get_unaligned_be64:
   74|    624|get_unaligned_##ABBREV(const TYPE *p)           \
   75|    624|{                                               \
   76|    624|    return unaligned_##ABBREV(p)->x;            \
   77|    624|}                                               \
ox-stat.c:unaligned_be64:
   68|    624|unaligned_##ABBREV(const TYPE *p)               \
   69|    624|{                                               \
   70|    624|    return (struct unaligned_##ABBREV *) p;     \
   71|    624|}                                               \
ox-stat.c:get_unaligned_be32:
   74|  21.0k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  21.0k|{                                               \
   76|  21.0k|    return unaligned_##ABBREV(p)->x;            \
   77|  21.0k|}                                               \
ox-stat.c:unaligned_be32:
   68|  21.0k|unaligned_##ABBREV(const TYPE *p)               \
   69|  21.0k|{                                               \
   70|  21.0k|    return (struct unaligned_##ABBREV *) p;     \
   71|  21.0k|}                                               \

xcalloc__:
  123|  20.1k|{
  124|  20.1k|    void *p = count && size ? calloc(count, size) : malloc(1);
  ------------------
  |  Branch (124:15): [True: 19.3k, False: 754]
  |  Branch (124:24): [True: 19.3k, False: 0]
  ------------------
  125|  20.1k|    if (p == NULL) {
  ------------------
  |  Branch (125:9): [True: 0, False: 20.1k]
  ------------------
  126|      0|        out_of_memory();
  127|      0|    }
  128|  20.1k|    return p;
  129|  20.1k|}
xzalloc__:
  133|  13.9k|{
  134|  13.9k|    return xcalloc__(1, size);
  135|  13.9k|}
xmalloc__:
  139|  1.58M|{
  140|  1.58M|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (140:22): [True: 1.57M, False: 1.90k]
  ------------------
  141|  1.58M|    if (p == NULL) {
  ------------------
  |  Branch (141:9): [True: 0, False: 1.58M]
  ------------------
  142|      0|        out_of_memory();
  143|      0|    }
  144|  1.58M|    return p;
  145|  1.58M|}
xrealloc__:
  149|  23.7M|{
  150|  23.7M|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (150:20): [True: 23.7M, False: 0]
  ------------------
  151|  23.7M|    if (p == NULL) {
  ------------------
  |  Branch (151:9): [True: 0, False: 23.7M]
  ------------------
  152|      0|        out_of_memory();
  153|      0|    }
  154|  23.7M|    return p;
  155|  23.7M|}
xcalloc:
  159|  6.21k|{
  160|  6.21k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  6.21k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  6.21k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  161|  6.21k|    return xcalloc__(count, size);
  162|  6.21k|}
xzalloc:
  166|  13.9k|{
  167|  13.9k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  13.9k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  13.9k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  168|  13.9k|    return xzalloc__(size);
  169|  13.9k|}
xmalloc:
  173|  1.58M|{
  174|  1.58M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  1.58M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  1.58M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  175|  1.58M|    return xmalloc__(size);
  176|  1.58M|}
xrealloc:
  180|  23.7M|{
  181|  23.7M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  23.7M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  23.7M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  182|  23.7M|    return xrealloc__(p, size);
  183|  23.7M|}
xmemdup:
  187|  4.31k|{
  188|  4.31k|    void *p = xmalloc(size);
  189|  4.31k|    nullable_memcpy(p, p_, size);
  190|  4.31k|    return p;
  191|  4.31k|}
xmemdup0:
  195|      1|{
  196|      1|    char *p = xmalloc(length + 1);
  197|      1|    memcpy(p, p_, length);
  198|      1|    p[length] = '\0';
  199|      1|    return p;
  200|      1|}
xstrdup:
  204|      1|{
  205|      1|    return xmemdup0(s, strlen(s));
  206|      1|}
xvasprintf:
  222|  8.14k|{
  223|  8.14k|    va_list args2;
  224|  8.14k|    size_t needed;
  225|  8.14k|    char *s;
  226|       |
  227|  8.14k|    va_copy(args2, args);
  228|  8.14k|    needed = vsnprintf(NULL, 0, format, args);
  229|       |
  230|  8.14k|    s = xmalloc(needed + 1);
  231|       |
  232|  8.14k|    vsnprintf(s, needed + 1, format, args2);
  233|  8.14k|    va_end(args2);
  234|       |
  235|  8.14k|    return s;
  236|  8.14k|}
x2nrealloc:
  240|  37.7k|{
  241|  37.7k|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 22.5k, False: 15.1k]
  ------------------
  242|  37.7k|    return xrealloc(p, *n * s);
  243|  37.7k|}
ovs_strlcpy:
  381|  84.4k|{
  382|  84.4k|    if (size > 0) {
  ------------------
  |  Branch (382:9): [True: 84.4k, False: 0]
  ------------------
  383|  84.4k|        size_t len = strnlen(src, size - 1);
  384|  84.4k|        memcpy(dst, src, len);
  385|  84.4k|        dst[len] = '\0';
  386|  84.4k|    }
  387|  84.4k|}
is_all_byte:
 1400|  1.12M|{
 1401|  1.12M|    const uint8_t *p = p_;
 1402|  1.12M|    size_t i;
 1403|       |
 1404|  30.9M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1404:17): [True: 30.4M, False: 494k]
  ------------------
 1405|  30.4M|        if (p[i] != byte) {
  ------------------
  |  Branch (1405:13): [True: 632k, False: 29.7M]
  ------------------
 1406|   632k|            return false;
 1407|   632k|        }
 1408|  30.4M|    }
 1409|   494k|    return true;
 1410|  1.12M|}
is_all_zeros:
 1415|   463k|{
 1416|   463k|    return is_all_byte(p, n, 0);
 1417|   463k|}
is_all_ones:
 1422|   663k|{
 1423|   663k|    return is_all_byte(p, n, 0xff);
 1424|   663k|}
bitwise_copy:
 1458|  73.5k|{
 1459|  73.5k|    const uint8_t *src = src_;
 1460|  73.5k|    uint8_t *dst = dst_;
 1461|       |
 1462|  73.5k|    src += src_len - (src_ofs / 8 + 1);
 1463|  73.5k|    src_ofs %= 8;
 1464|       |
 1465|  73.5k|    dst += dst_len - (dst_ofs / 8 + 1);
 1466|  73.5k|    dst_ofs %= 8;
 1467|       |
 1468|  73.5k|    if (src_ofs == 0 && dst_ofs == 0) {
  ------------------
  |  Branch (1468:9): [True: 71.2k, False: 2.29k]
  |  Branch (1468:25): [True: 40.7k, False: 30.5k]
  ------------------
 1469|  40.7k|        unsigned int n_bytes = n_bits / 8;
 1470|  40.7k|        if (n_bytes) {
  ------------------
  |  Branch (1470:13): [True: 32.0k, False: 8.65k]
  ------------------
 1471|  32.0k|            dst -= n_bytes - 1;
 1472|  32.0k|            src -= n_bytes - 1;
 1473|  32.0k|            memcpy(dst, src, n_bytes);
 1474|       |
 1475|  32.0k|            n_bits %= 8;
 1476|  32.0k|            src--;
 1477|  32.0k|            dst--;
 1478|  32.0k|        }
 1479|  40.7k|        if (n_bits) {
  ------------------
  |  Branch (1479:13): [True: 18.1k, False: 22.6k]
  ------------------
 1480|  18.1k|            uint8_t mask = (1 << n_bits) - 1;
 1481|  18.1k|            *dst = (*dst & ~mask) | (*src & mask);
 1482|  18.1k|        }
 1483|  40.7k|    } else {
 1484|   235k|        while (n_bits > 0) {
  ------------------
  |  Branch (1484:16): [True: 203k, False: 32.8k]
  ------------------
 1485|   203k|            unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
  ------------------
  |  |  100|   203k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (100:20): [True: 91.5k, False: 111k]
  |  |  ------------------
  ------------------
 1486|   203k|            unsigned int chunk = MIN(n_bits, max_copy);
  ------------------
  |  |   96|   203k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 19.2k, False: 183k]
  |  |  ------------------
  ------------------
 1487|   203k|            uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
 1488|       |
 1489|   203k|            *dst &= ~mask;
 1490|   203k|            *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
 1491|       |
 1492|   203k|            src_ofs += chunk;
 1493|   203k|            if (src_ofs == 8) {
  ------------------
  |  Branch (1493:17): [True: 84.3k, False: 118k]
  ------------------
 1494|  84.3k|                src--;
 1495|  84.3k|                src_ofs = 0;
 1496|  84.3k|            }
 1497|   203k|            dst_ofs += chunk;
 1498|   203k|            if (dst_ofs == 8) {
  ------------------
  |  Branch (1498:17): [True: 99.4k, False: 103k]
  ------------------
 1499|  99.4k|                dst--;
 1500|  99.4k|                dst_ofs = 0;
 1501|  99.4k|            }
 1502|   203k|            n_bits -= chunk;
 1503|   203k|        }
 1504|  32.8k|    }
 1505|  73.5k|}
bitwise_one:
 1570|  50.0k|{
 1571|  50.0k|    uint8_t *dst = dst_;
 1572|       |
 1573|  50.0k|    if (!n_bits) {
  ------------------
  |  Branch (1573:9): [True: 0, False: 50.0k]
  ------------------
 1574|      0|        return;
 1575|      0|    }
 1576|       |
 1577|  50.0k|    dst += dst_len - (dst_ofs / 8 + 1);
 1578|  50.0k|    dst_ofs %= 8;
 1579|       |
 1580|  50.0k|    if (dst_ofs) {
  ------------------
  |  Branch (1580:9): [True: 25.5k, False: 24.4k]
  ------------------
 1581|  25.5k|        unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
  ------------------
  |  |   96|  25.5k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (96:20): [True: 7.06k, False: 18.4k]
  |  |  ------------------
  ------------------
 1582|       |
 1583|  25.5k|        *dst |= ((1 << chunk) - 1) << dst_ofs;
 1584|       |
 1585|  25.5k|        n_bits -= chunk;
 1586|  25.5k|        if (!n_bits) {
  ------------------
  |  Branch (1586:13): [True: 8.45k, False: 17.1k]
  ------------------
 1587|  8.45k|            return;
 1588|  8.45k|        }
 1589|       |
 1590|  17.1k|        dst--;
 1591|  17.1k|    }
 1592|       |
 1593|   107k|    while (n_bits >= 8) {
  ------------------
  |  Branch (1593:12): [True: 65.7k, False: 41.5k]
  ------------------
 1594|  65.7k|        *dst-- = 0xff;
 1595|  65.7k|        n_bits -= 8;
 1596|  65.7k|    }
 1597|       |
 1598|  41.5k|    if (n_bits) {
  ------------------
  |  Branch (1598:9): [True: 22.5k, False: 19.0k]
  ------------------
 1599|  22.5k|        *dst |= (1 << n_bits) - 1;
 1600|  22.5k|    }
 1601|  41.5k|}
bitwise_scan:
 1674|  19.3k|{
 1675|  19.3k|    unsigned int ofs;
 1676|       |
 1677|  4.61M|    for (ofs = start; ofs < end; ofs++) {
  ------------------
  |  Branch (1677:23): [True: 4.60M, False: 7.94k]
  ------------------
 1678|  4.60M|        if (bitwise_get_bit(p, len, ofs) == target) {
  ------------------
  |  Branch (1678:13): [True: 11.4k, False: 4.59M]
  ------------------
 1679|  11.4k|            break;
 1680|  11.4k|        }
 1681|  4.60M|    }
 1682|  19.3k|    return ofs;
 1683|  19.3k|}
bitwise_put:
 1763|  16.4k|{
 1764|  16.4k|    ovs_be64 n_value = htonll(value);
 1765|  16.4k|    bitwise_copy(&n_value, sizeof n_value, 0,
 1766|  16.4k|                 dst, dst_len, dst_ofs,
 1767|  16.4k|                 n_bits);
 1768|  16.4k|}
bitwise_get:
 1786|  7.11k|{
 1787|  7.11k|    ovs_be64 value = htonll(0);
 1788|       |
 1789|  7.11k|    bitwise_copy(src, src_len, src_ofs,
 1790|  7.11k|                 &value, sizeof value, 0,
 1791|  7.11k|                 n_bits);
 1792|  7.11k|    return ntohll(value);
 1793|  7.11k|}
bitwise_get_bit:
 1809|  4.60M|{
 1810|  4.60M|    const uint8_t *src = src_;
 1811|       |
 1812|  4.60M|    return (src[len - (ofs / 8 + 1)] & (1u << (ofs % 8))) != 0;
 1813|  4.60M|}

ofp-protocol.c:rightmost_1bit:
  438|   227k|{
  439|   227k|    return x & -x;
  440|   227k|}
ofp-protocol.c:zero_rightmost_1bit:
  446|  2.70M|{
  447|  2.70M|    return x & (x - 1);
  448|  2.70M|}
ofp-protocol.c:raw_ctz:
  281|  2.70M|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  2.70M|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 2.70M, False: 0]
  |  Branch (285:54): [True: 2.70M, False: 0]
  ------------------
  286|  2.70M|            ? __builtin_ctz(n)
  287|  2.70M|            : __builtin_ctzll(n));
  288|  2.70M|}
ofp-table.c:raw_ctz:
  281|   754k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|   754k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 754k]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|   754k|            ? __builtin_ctz(n)
  287|   754k|            : __builtin_ctzll(n));
  288|   754k|}
ofpbuf.c:nullable_memset:
  214|   181k|{
  215|   181k|    if (n) {
  ------------------
  |  Branch (215:9): [True: 180k, False: 1.01k]
  ------------------
  216|   180k|        memset(dst, c, n);
  217|   180k|    }
  218|   181k|}
util.c:nullable_memcpy:
  204|  4.31k|{
  205|  4.31k|    if (n) {
  ------------------
  |  Branch (205:9): [True: 4.31k, False: 0]
  ------------------
  206|  4.31k|        memcpy(dst, src, n);
  207|  4.31k|    }
  208|  4.31k|}
flow.c:ovs_u128_is_zero:
  544|   114k|{
  545|   114k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (545:14): [True: 0, False: 114k]
  |  Branch (545:28): [True: 0, False: 114k]
  ------------------
  546|   114k|}
flow.c:rightmost_1bit:
  438|   206k|{
  439|   206k|    return x & -x;
  440|   206k|}
flow.c:count_1bits:
  388|   156k|{
  389|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  390|       |    return __builtin_popcountll(x);
  391|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  392|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  393|       |#else
  394|       |    /* This portable implementation is the fastest one we know of for 64
  395|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  396|   156k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  397|   156k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  398|   156k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  399|   156k|    const uint64_t h01 = UINT64_C(0x0101010101010101);
  400|   156k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  401|   156k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  402|   156k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  403|   156k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  404|   156k|#endif
  405|   156k|}
flow.c:raw_ctz:
  281|  1.92M|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  1.92M|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 1.92M]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|  1.92M|            ? __builtin_ctz(n)
  287|  1.92M|            : __builtin_ctzll(n));
  288|  1.92M|}
flow.c:zero_rightmost_1bit:
  446|  1.92M|{
  447|  1.92M|    return x & (x - 1);
  448|  1.92M|}
match.c:ovs_u128_and:
  571|  4.64k|{
  572|  4.64k|    ovs_u128 dst;
  573|       |
  574|  4.64k|    dst.u64.hi = a.u64.hi & b.u64.hi;
  575|  4.64k|    dst.u64.lo = a.u64.lo & b.u64.lo;
  576|       |
  577|  4.64k|    return dst;
  578|  4.64k|}
match.c:ovs_u128_is_zero:
  544|   413k|{
  545|   413k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (545:14): [True: 448, False: 413k]
  |  Branch (545:28): [True: 196, False: 412k]
  ------------------
  546|   413k|}
meta-flow.c:ovs_u128_is_zero:
  544|  4.75k|{
  545|  4.75k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (545:14): [True: 177, False: 4.57k]
  |  Branch (545:28): [True: 4, False: 4.57k]
  ------------------
  546|  4.75k|}
meta-flow.c:raw_ctz:
  281|  22.9k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  22.9k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 22.9k]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|  22.9k|            ? __builtin_ctz(n)
  287|  22.9k|            : __builtin_ctzll(n));
  288|  22.9k|}
nx-match.c:raw_ctz:
  281|  38.5k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  38.5k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 38.5k]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|  38.5k|            ? __builtin_ctz(n)
  287|  38.5k|            : __builtin_ctzll(n));
  288|  38.5k|}
ofp-actions.c:log_2_ceil:
  378|  6.18k|{
  379|  6.18k|    return log_2_floor(n) + !is_pow2(n);
  380|  6.18k|}
ofp-actions.c:log_2_floor:
  370|  6.18k|{
  371|  6.18k|    return 63 - raw_clz64(n);
  372|  6.18k|}
ofp-actions.c:raw_clz64:
  292|  6.18k|{
  293|  6.18k|    return __builtin_clzll(n);
  294|  6.18k|}
ofp-actions.c:rightmost_1bit_idx:
  454|   164k|{
  455|   164k|    return ctz64(x);
  456|   164k|}
ofp-actions.c:ctz64:
  347|   164k|{
  348|   164k|    return n ? raw_ctz(n) : 64;
  ------------------
  |  Branch (348:12): [True: 164k, False: 0]
  ------------------
  349|   164k|}
ofp-actions.c:raw_ctz:
  281|   164k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|   164k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 164k]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|   164k|            ? __builtin_ctz(n)
  287|   164k|            : __builtin_ctzll(n));
  288|   164k|}
ofp-actions.c:zero_rightmost_1bit:
  446|   164k|{
  447|   164k|    return x & (x - 1);
  448|   164k|}
ofp-group.c:count_1bits:
  388|  46.2k|{
  389|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  390|       |    return __builtin_popcountll(x);
  391|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  392|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  393|       |#else
  394|       |    /* This portable implementation is the fastest one we know of for 64
  395|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  396|  46.2k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  397|  46.2k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  398|  46.2k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  399|  46.2k|    const uint64_t h01 = UINT64_C(0x0101010101010101);
  400|  46.2k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  401|  46.2k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  402|  46.2k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  403|  46.2k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  404|  46.2k|#endif
  405|  46.2k|}
packets.c:ctz32:
  340|  11.9k|{
  341|  11.9k|    return n ? raw_ctz(n) : 32;
  ------------------
  |  Branch (341:12): [True: 11.9k, False: 0]
  ------------------
  342|  11.9k|}
packets.c:raw_ctz:
  281|  11.9k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  11.9k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 11.9k, False: 0]
  |  Branch (285:54): [True: 11.9k, False: 0]
  ------------------
  286|  11.9k|            ? __builtin_ctz(n)
  287|  11.9k|            : __builtin_ctzll(n));
  288|  11.9k|}
tun-metadata.c:raw_ctz:
  281|  42.1k|{
  282|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  283|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  284|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  285|  42.1k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (285:13): [True: 0, False: 42.1k]
  |  Branch (285:54): [True: 0, False: 0]
  ------------------
  286|  42.1k|            ? __builtin_ctz(n)
  287|  42.1k|            : __builtin_ctzll(n));
  288|  42.1k|}
tun-metadata.c:zero_rightmost_1bit:
  446|  42.1k|{
  447|  42.1k|    return x & (x - 1);
  448|  42.1k|}

uuid_is_zero:
  204|   113k|{
  205|   113k|    return (!uuid->parts[0] && !uuid->parts[1]
  ------------------
  |  Branch (205:13): [True: 113k, False: 45]
  |  Branch (205:32): [True: 113k, False: 40]
  ------------------
  206|   113k|            && !uuid->parts[2] && !uuid->parts[3]);
  ------------------
  |  Branch (206:16): [True: 113k, False: 33]
  |  Branch (206:35): [True: 113k, False: 38]
  ------------------
  207|   113k|}

vlog_get_level_val:
  188|      2|{
  189|      2|    return search_name_array(name, level_names, ARRAY_SIZE(level_names));
  ------------------
  |  |  293|      2|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   47|      2|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|      2|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   48|      2|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      2|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|      2|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  190|      2|}
vlog_get_destination_val:
  204|      1|{
  205|      1|    size_t i;
  206|       |
  207|      4|    for (i = 0; i < VLF_N_DESTINATIONS; i++) {
  ------------------
  |  Branch (207:17): [True: 3, False: 1]
  ------------------
  208|      3|        if (!strcasecmp(destinations[i].name, name)) {
  ------------------
  |  Branch (208:13): [True: 0, False: 3]
  ------------------
  209|      0|            break;
  210|      0|        }
  211|      3|    }
  212|      1|    return i;
  213|      1|}
vlog_insert_module:
  217|    170|{
  218|    170|    ovs_mutex_lock(&log_file_mutex);
  ------------------
  |  |   71|    170|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    170|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    170|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    170|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  219|    170|    ovs_list_insert(&vlog_modules, vlog);
  220|    170|    ovs_mutex_unlock(&log_file_mutex);
  221|    170|}
vlog_set_levels:
  302|      1|{
  303|      1|    assert(destination < VLF_N_DESTINATIONS ||
  304|      1|           destination == VLF_ANY_DESTINATION);
  305|      1|    if (destination == VLF_ANY_DESTINATION) {
  ------------------
  |  Branch (305:9): [True: 1, False: 0]
  ------------------
  306|      4|        for (destination = 0; destination < VLF_N_DESTINATIONS;
  ------------------
  |  Branch (306:31): [True: 3, False: 1]
  ------------------
  307|      3|             destination++) {
  308|      3|            set_destination_level(destination, module, level);
  309|      3|        }
  310|      1|    } else {
  311|      0|        set_destination_level(destination, module, level);
  312|      0|    }
  313|      1|}
vlog_set_levels_from_string:
  512|      1|{
  513|      1|    char *s = xstrdup(s_);
  514|      1|    char *save_ptr = NULL;
  515|      1|    char *msg = NULL;
  516|      1|    char *word;
  517|       |
  518|      1|    word = strtok_r(s, " ,:\t", &save_ptr);
  519|      1|    if (word && !strcasecmp(word, "PATTERN")) {
  ------------------
  |  Branch (519:9): [True: 1, False: 0]
  |  Branch (519:17): [True: 0, False: 1]
  ------------------
  520|      0|        enum vlog_destination destination;
  521|       |
  522|      0|        word = strtok_r(NULL, " ,:\t", &save_ptr);
  523|      0|        if (!word) {
  ------------------
  |  Branch (523:13): [True: 0, False: 0]
  ------------------
  524|      0|            msg = xstrdup("missing destination");
  525|      0|            goto exit;
  526|      0|        }
  527|       |
  528|      0|        destination = (!strcasecmp(word, "ANY")
  ------------------
  |  Branch (528:24): [True: 0, False: 0]
  ------------------
  529|      0|                       ? VLF_ANY_DESTINATION
  530|      0|                       : vlog_get_destination_val(word));
  531|      0|        if (destination == VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (531:13): [True: 0, False: 0]
  ------------------
  532|      0|            msg = xasprintf("unknown destination \"%s\"", word);
  533|      0|            goto exit;
  534|      0|        }
  535|      0|        vlog_set_pattern(destination, save_ptr);
  536|      1|    } else if (word && !strcasecmp(word, "FACILITY")) {
  ------------------
  |  Branch (536:16): [True: 1, False: 0]
  |  Branch (536:24): [True: 0, False: 1]
  ------------------
  537|      0|        int value;
  538|       |
  539|      0|        if (!vlog_facility_exists(save_ptr, &value)) {
  ------------------
  |  Branch (539:13): [True: 0, False: 0]
  ------------------
  540|      0|            msg = xstrdup("invalid facility");
  541|      0|            goto exit;
  542|      0|        }
  543|      0|        atomic_store_explicit(&log_facility, value, memory_order_relaxed);
  ------------------
  |  |   45|      0|    __c11_atomic_store(DST, SRC, ORDER)
  ------------------
  544|      1|    } else {
  545|      1|        struct vlog_module *module = NULL;
  546|      1|        enum vlog_level level = VLL_N_LEVELS;
  547|      1|        enum vlog_destination destination = VLF_N_DESTINATIONS;
  548|       |
  549|      2|        for (; word != NULL; word = strtok_r(NULL, " ,:\t", &save_ptr)) {
  ------------------
  |  Branch (549:16): [True: 1, False: 1]
  ------------------
  550|      1|            if (!strcasecmp(word, "ANY")) {
  ------------------
  |  Branch (550:17): [True: 0, False: 1]
  ------------------
  551|      0|                continue;
  552|      1|            } else if (vlog_get_destination_val(word) != VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (552:24): [True: 0, False: 1]
  ------------------
  553|      0|                if (destination != VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (553:21): [True: 0, False: 0]
  ------------------
  554|      0|                    msg = xstrdup("cannot specify multiple destinations");
  555|      0|                    goto exit;
  556|      0|                }
  557|      0|                destination = vlog_get_destination_val(word);
  558|      1|            } else if (vlog_get_level_val(word) != VLL_N_LEVELS) {
  ------------------
  |  Branch (558:24): [True: 1, False: 0]
  ------------------
  559|      1|                if (level != VLL_N_LEVELS) {
  ------------------
  |  Branch (559:21): [True: 0, False: 1]
  ------------------
  560|      0|                    msg = xstrdup("cannot specify multiple levels");
  561|      0|                    goto exit;
  562|      0|                }
  563|      1|                level = vlog_get_level_val(word);
  564|      1|            } else if (vlog_module_from_name(word)) {
  ------------------
  |  Branch (564:24): [True: 0, False: 0]
  ------------------
  565|      0|                if (module) {
  ------------------
  |  Branch (565:21): [True: 0, False: 0]
  ------------------
  566|      0|                    msg = xstrdup("cannot specify multiple modules");
  567|      0|                    goto exit;
  568|      0|                }
  569|      0|                module = vlog_module_from_name(word);
  570|      0|            } else {
  571|      0|                msg = xasprintf("no destination, level, or module \"%s\"",
  572|      0|                                word);
  573|      0|                goto exit;
  574|      0|            }
  575|      1|        }
  576|       |
  577|      1|        if (destination == VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (577:13): [True: 1, False: 0]
  ------------------
  578|      1|            destination = VLF_ANY_DESTINATION;
  579|      1|        }
  580|      1|        if (level == VLL_N_LEVELS) {
  ------------------
  |  Branch (580:13): [True: 0, False: 1]
  ------------------
  581|      0|            level = VLL_DBG;
  582|      0|        }
  583|      1|        vlog_set_levels(module, destination, level);
  584|      1|    }
  585|       |
  586|      1|exit:
  587|      1|    free(s);
  588|      1|    return msg;
  589|      1|}
vlog_set_verbosity:
  605|      1|{
  606|      1|    if (arg) {
  ------------------
  |  Branch (606:9): [True: 1, False: 0]
  ------------------
  607|      1|        char *msg = vlog_set_levels_from_string(arg);
  608|      1|        if (msg) {
  ------------------
  |  Branch (608:13): [True: 0, False: 1]
  ------------------
  609|      0|            ovs_fatal(0, "processing \"%s\": %s", arg, msg);
  610|      0|        }
  611|      1|    } else {
  612|      0|        vlog_set_levels(NULL, VLF_ANY_DESTINATION, VLL_DBG);
  613|      0|    }
  614|      1|}
vlog_is_enabled:
  982|  1.69M|{
  983|  1.69M|    return module->min_level >= level;
  984|  1.69M|}
vlog_should_drop:
 1307|  1.68M|{
 1308|  1.68M|    if (!module->honor_rate_limits) {
  ------------------
  |  Branch (1308:9): [True: 0, False: 1.68M]
  ------------------
 1309|      0|        return false;
 1310|      0|    }
 1311|       |
 1312|  1.68M|    if (!vlog_is_enabled(module, level)) {
  ------------------
  |  Branch (1312:9): [True: 1.68M, False: 0]
  ------------------
 1313|  1.68M|        return true;
 1314|  1.68M|    }
 1315|       |
 1316|      0|    ovs_mutex_lock(&rl->mutex);
  ------------------
  |  |   71|      0|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|      0|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      0|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      0|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1317|      0|    if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) {
  ------------------
  |  |  105|      0|#define VLOG_MSG_TOKENS (60 * 1000)
  ------------------
  |  Branch (1317:9): [True: 0, False: 0]
  ------------------
 1318|      0|        time_t now = time_now();
 1319|      0|        if (!rl->n_dropped) {
  ------------------
  |  Branch (1319:13): [True: 0, False: 0]
  ------------------
 1320|      0|            rl->first_dropped = now;
 1321|      0|        }
 1322|      0|        rl->last_dropped = now;
 1323|      0|        rl->n_dropped++;
 1324|      0|        ovs_mutex_unlock(&rl->mutex);
 1325|      0|        return true;
 1326|      0|    }
 1327|       |
 1328|      0|    if (!rl->n_dropped) {
  ------------------
  |  Branch (1328:9): [True: 0, False: 0]
  ------------------
 1329|      0|        ovs_mutex_unlock(&rl->mutex);
 1330|      0|    } else {
 1331|      0|        time_t now = time_now();
 1332|      0|        unsigned int n_dropped = rl->n_dropped;
 1333|      0|        unsigned int first_dropped_elapsed = now - rl->first_dropped;
 1334|      0|        unsigned int last_dropped_elapsed = now - rl->last_dropped;
 1335|      0|        rl->n_dropped = 0;
 1336|      0|        ovs_mutex_unlock(&rl->mutex);
 1337|       |
 1338|      0|        vlog(module, level,
 1339|      0|             "Dropped %u log messages in last %u seconds (most recently, "
 1340|      0|             "%u seconds ago) due to excessive rate",
 1341|      0|             n_dropped, first_dropped_elapsed, last_dropped_elapsed);
 1342|      0|    }
 1343|       |
 1344|      0|    return false;
 1345|      0|}
vlog_rate_limit:
 1350|  43.2k|{
 1351|  43.2k|    if (!vlog_should_drop(module, level, rl)) {
  ------------------
  |  Branch (1351:9): [True: 0, False: 43.2k]
  ------------------
 1352|      0|        va_list args;
 1353|       |
 1354|      0|        va_start(args, message);
 1355|      0|        vlog_valist(module, level, message, args);
 1356|      0|        va_end(args);
 1357|      0|    }
 1358|  43.2k|}
vlog.c:search_name_array:
  164|      2|{
  165|      2|    size_t i;
  166|       |
  167|      2|    for (i = 0; i < n_names; i++) {
  ------------------
  |  Branch (167:17): [True: 2, False: 0]
  ------------------
  168|      2|        assert(names[i]);
  169|      2|        if (!strcasecmp(names[i], target)) {
  ------------------
  |  Branch (169:13): [True: 2, False: 0]
  ------------------
  170|      2|            break;
  171|      2|        }
  172|      2|    }
  173|      2|    return i;
  174|      2|}
vlog.c:set_destination_level:
  278|      3|{
  279|      3|    assert(destination >= 0 && destination < VLF_N_DESTINATIONS);
  280|      3|    assert(level < VLL_N_LEVELS);
  281|       |
  282|      3|    ovs_mutex_lock(&log_file_mutex);
  ------------------
  |  |   71|      3|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|      3|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|      3|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|      3|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  283|      3|    if (!module) {
  ------------------
  |  Branch (283:9): [True: 3, False: 0]
  ------------------
  284|      3|        struct vlog_module *mp;
  285|    255|        LIST_FOR_EACH (mp, list, &vlog_modules) {
  ------------------
  |  |   76|      3|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  167|      3|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  170|      3|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|    258|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  181|    258|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (181:5): [True: 255, False: 3]
  |  |  |  |  |  Branch (181:6): [True: 255, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  182|    258|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  130|    255|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  131|    255|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  104|    255|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  183|    258|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|    255|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  189|    255|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  158|    255|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  286|    255|            mp->levels[destination] = level;
  287|    255|            update_min_level(mp);
  288|    255|        }
  289|      3|    } else {
  290|      0|        module->levels[destination] = level;
  291|      0|        update_min_level(module);
  292|      0|    }
  293|      3|    ovs_mutex_unlock(&log_file_mutex);
  294|      3|}
vlog.c:update_min_level:
  261|    255|{
  262|    255|    enum vlog_destination destination;
  263|       |
  264|    255|    module->min_level = VLL_OFF;
  265|  1.02k|    for (destination = 0; destination < VLF_N_DESTINATIONS; destination++) {
  ------------------
  |  Branch (265:27): [True: 765, False: 255]
  ------------------
  266|    765|        if (log_fd >= 0 || destination != VLF_FILE) {
  ------------------
  |  Branch (266:13): [True: 0, False: 765]
  |  Branch (266:28): [True: 510, False: 255]
  ------------------
  267|    510|            enum vlog_level level = module->levels[destination];
  268|    510|            if (level > module->min_level) {
  ------------------
  |  Branch (268:17): [True: 85, False: 425]
  ------------------
  269|     85|                module->min_level = level;
  270|     85|            }
  271|    510|        }
  272|    765|    }
  273|    255|}

LLVMFuzzerTestOneInput:
   10|  38.7k|{
   11|  38.7k|    if (size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (11:9): [True: 4, False: 38.7k]
  ------------------
   12|      4|        return 0;
   13|      4|    }
   14|       |
   15|  38.7k|    static bool isInit = false;
   16|  38.7k|    if (!isInit) {
  ------------------
  |  Branch (16:9): [True: 1, False: 38.7k]
  ------------------
   17|      1|        vlog_set_verbosity("off");
   18|      1|        isInit = true;
   19|      1|    }
   20|       |
   21|  38.7k|    struct ofpbuf b;
   22|  38.7k|    ofpbuf_use_const(&b, data, size);
   23|  5.07M|    for (;;) {
   24|       |        /* Check if ofpbuf contains ofp header. */
   25|  5.07M|        struct ofp_header *oh = ofpbuf_at(&b, 0, sizeof *oh);
   26|  5.07M|        if (!oh) {
  ------------------
  |  Branch (26:13): [True: 32.0k, False: 5.04M]
  ------------------
   27|  32.0k|            break;
   28|  32.0k|        }
   29|       |
   30|       |        /* Check if length is geq than lower bound. */
   31|  5.04M|        size_t length = ntohs(oh->length);
   32|  5.04M|        if (length < sizeof *oh) {
  ------------------
  |  Branch (32:13): [True: 1.52k, False: 5.04M]
  ------------------
   33|  1.52k|            break;
   34|  1.52k|        }
   35|       |
   36|       |        /* Check if ofpbuf contains payload. */
   37|  5.04M|        size_t tail_len = length - sizeof *oh;
   38|  5.04M|        void *tail = ofpbuf_at(&b, sizeof *oh, tail_len);
   39|  5.04M|        if (!tail) {
  ------------------
  |  Branch (39:13): [True: 5.16k, False: 5.03M]
  ------------------
   40|  5.16k|            break;
   41|  5.16k|        }
   42|       |
   43|  5.03M|        ofp_print(stdout, ofpbuf_pull(&b, length), length, NULL, NULL, 2);
   44|  5.03M|    }
   45|  38.7k|    ofpbuf_uninit(&b);
   46|  38.7k|    return 0;
   47|  38.7k|}

