ofp-print.c:ds_put_char:
   94|  1.14M|{
   95|  1.14M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.12M, False: 15.3k]
  ------------------
   96|  1.12M|        ds->string[ds->length++] = c;
   97|  1.12M|        ds->string[ds->length] = '\0';
   98|  1.12M|    } else {
   99|  15.3k|        ds_put_char__(ds, c);
  100|  15.3k|    }
  101|  1.14M|}
ofp-queue.c:ds_put_char:
   94|  44.4k|{
   95|  44.4k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 42.6k, False: 1.72k]
  ------------------
   96|  42.6k|        ds->string[ds->length++] = c;
   97|  42.6k|        ds->string[ds->length] = '\0';
   98|  42.6k|    } else {
   99|  1.72k|        ds_put_char__(ds, c);
  100|  1.72k|    }
  101|  44.4k|}
ofp-switch.c:ds_put_char:
   94|  10.5k|{
   95|  10.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 10.3k, False: 256]
  ------------------
   96|  10.3k|        ds->string[ds->length++] = c;
   97|  10.3k|        ds->string[ds->length] = '\0';
   98|  10.3k|    } else {
   99|    256|        ds_put_char__(ds, c);
  100|    256|    }
  101|  10.5k|}
ofp-table.c:ds_put_char:
   94|   649k|{
   95|   649k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 642k, False: 7.17k]
  ------------------
   96|   642k|        ds->string[ds->length++] = c;
   97|   642k|        ds->string[ds->length] = '\0';
   98|   642k|    } else {
   99|  7.17k|        ds_put_char__(ds, c);
  100|  7.17k|    }
  101|   649k|}
dynamic-string.c:ds_put_char:
   94|  65.3M|{
   95|  65.3M|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 64.9M, False: 397k]
  ------------------
   96|  64.9M|        ds->string[ds->length++] = c;
   97|  64.9M|        ds->string[ds->length] = '\0';
   98|  64.9M|    } else {
   99|   397k|        ds_put_char__(ds, c);
  100|   397k|    }
  101|  65.3M|}
flow.c:ds_put_char:
   94|  34.2k|{
   95|  34.2k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 33.3k, False: 963]
  ------------------
   96|  33.3k|        ds->string[ds->length++] = c;
   97|  33.3k|        ds->string[ds->length] = '\0';
   98|  33.3k|    } else {
   99|    963|        ds_put_char__(ds, c);
  100|    963|    }
  101|  34.2k|}
match.c:ds_put_char:
   94|   330k|{
   95|   330k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 323k, False: 7.24k]
  ------------------
   96|   323k|        ds->string[ds->length++] = c;
   97|   323k|        ds->string[ds->length] = '\0';
   98|   323k|    } else {
   99|  7.24k|        ds_put_char__(ds, c);
  100|  7.24k|    }
  101|   330k|}
meta-flow.c:ds_put_char:
   94|  1.22k|{
   95|  1.22k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.20k, False: 11]
  ------------------
   96|  1.20k|        ds->string[ds->length++] = c;
   97|  1.20k|        ds->string[ds->length] = '\0';
   98|  1.20k|    } else {
   99|     11|        ds_put_char__(ds, c);
  100|     11|    }
  101|  1.22k|}
netdev.c:ds_put_char:
   94|  53.9k|{
   95|  53.9k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 53.8k, False: 75]
  ------------------
   96|  53.8k|        ds->string[ds->length++] = c;
   97|  53.8k|        ds->string[ds->length] = '\0';
   98|  53.8k|    } else {
   99|     75|        ds_put_char__(ds, c);
  100|     75|    }
  101|  53.9k|}
nx-match.c:ds_put_char:
   94|  16.5k|{
   95|  16.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 15.7k, False: 712]
  ------------------
   96|  15.7k|        ds->string[ds->length++] = c;
   97|  15.7k|        ds->string[ds->length] = '\0';
   98|  15.7k|    } else {
   99|    712|        ds_put_char__(ds, c);
  100|    712|    }
  101|  16.5k|}
ofp-actions.c:ds_put_char:
   94|  98.5k|{
   95|  98.5k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 93.1k, False: 5.38k]
  ------------------
   96|  93.1k|        ds->string[ds->length++] = c;
   97|  93.1k|        ds->string[ds->length] = '\0';
   98|  93.1k|    } else {
   99|  5.38k|        ds_put_char__(ds, c);
  100|  5.38k|    }
  101|  98.5k|}
ofp-bundle.c:ds_put_char:
   94|  8.74k|{
   95|  8.74k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 8.74k, False: 0]
  ------------------
   96|  8.74k|        ds->string[ds->length++] = c;
   97|  8.74k|        ds->string[ds->length] = '\0';
   98|  8.74k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  8.74k|}
ofp-connection.c:ds_put_char:
   94|   265k|{
   95|   265k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 264k, False: 1.62k]
  ------------------
   96|   264k|        ds->string[ds->length++] = c;
   97|   264k|        ds->string[ds->length] = '\0';
   98|   264k|    } else {
   99|  1.62k|        ds_put_char__(ds, c);
  100|  1.62k|    }
  101|   265k|}
ofp-ct.c:ds_put_char:
   94|  3.47k|{
   95|  3.47k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 3.02k, False: 449]
  ------------------
   96|  3.02k|        ds->string[ds->length++] = c;
   97|  3.02k|        ds->string[ds->length] = '\0';
   98|  3.02k|    } else {
   99|    449|        ds_put_char__(ds, c);
  100|    449|    }
  101|  3.47k|}
ofp-flow.c:ds_put_char:
   94|   169k|{
   95|   169k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 162k, False: 7.43k]
  ------------------
   96|   162k|        ds->string[ds->length++] = c;
   97|   162k|        ds->string[ds->length] = '\0';
   98|   162k|    } else {
   99|  7.43k|        ds_put_char__(ds, c);
  100|  7.43k|    }
  101|   169k|}
ofp-group.c:ds_put_char:
   94|  60.0k|{
   95|  60.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 55.0k, False: 4.96k]
  ------------------
   96|  55.0k|        ds->string[ds->length++] = c;
   97|  55.0k|        ds->string[ds->length] = '\0';
   98|  55.0k|    } else {
   99|  4.96k|        ds_put_char__(ds, c);
  100|  4.96k|    }
  101|  60.0k|}
ofp-ipfix.c:ds_put_char:
   94|  32.2k|{
   95|  32.2k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 30.8k, False: 1.39k]
  ------------------
   96|  30.8k|        ds->string[ds->length++] = c;
   97|  30.8k|        ds->string[ds->length] = '\0';
   98|  30.8k|    } else {
   99|  1.39k|        ds_put_char__(ds, c);
  100|  1.39k|    }
  101|  32.2k|}
ofp-match.c:ds_put_char:
   94|  1.38k|{
   95|  1.38k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 1.38k, False: 0]
  ------------------
   96|  1.38k|        ds->string[ds->length++] = c;
   97|  1.38k|        ds->string[ds->length] = '\0';
   98|  1.38k|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|  1.38k|}
ofp-meter.c:ds_put_char:
   94|  10.0k|{
   95|  10.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 8.17k, False: 1.92k]
  ------------------
   96|  8.17k|        ds->string[ds->length++] = c;
   97|  8.17k|        ds->string[ds->length] = '\0';
   98|  8.17k|    } else {
   99|  1.92k|        ds_put_char__(ds, c);
  100|  1.92k|    }
  101|  10.0k|}
ofp-monitor.c:ds_put_char:
   94|  12.0k|{
   95|  12.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 10.1k, False: 1.94k]
  ------------------
   96|  10.1k|        ds->string[ds->length++] = c;
   97|  10.1k|        ds->string[ds->length] = '\0';
   98|  10.1k|    } else {
   99|  1.94k|        ds_put_char__(ds, c);
  100|  1.94k|    }
  101|  12.0k|}
ofp-packet.c:ds_put_char:
   94|  85.0k|{
   95|  85.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 82.0k, False: 3.01k]
  ------------------
   96|  82.0k|        ds->string[ds->length++] = c;
   97|  82.0k|        ds->string[ds->length] = '\0';
   98|  82.0k|    } else {
   99|  3.01k|        ds_put_char__(ds, c);
  100|  3.01k|    }
  101|  85.0k|}
ofp-port.c:ds_put_char:
   94|  99.0k|{
   95|  99.0k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 95.0k, False: 3.97k]
  ------------------
   96|  95.0k|        ds->string[ds->length++] = c;
   97|  95.0k|        ds->string[ds->length] = '\0';
   98|  95.0k|    } else {
   99|  3.97k|        ds_put_char__(ds, c);
  100|  3.97k|    }
  101|  99.0k|}
packets.c:ds_put_char:
   94|    463|{
   95|    463|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 463, False: 0]
  ------------------
   96|    463|        ds->string[ds->length++] = c;
   97|    463|        ds->string[ds->length] = '\0';
   98|    463|    } else {
   99|      0|        ds_put_char__(ds, c);
  100|      0|    }
  101|    463|}
tun-metadata.c:ds_put_char:
   94|  12.1k|{
   95|  12.1k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 11.3k, False: 839]
  ------------------
   96|  11.3k|        ds->string[ds->length++] = c;
   97|  11.3k|        ds->string[ds->length] = '\0';
   98|  11.3k|    } else {
   99|    839|        ds_put_char__(ds, c);
  100|    839|    }
  101|  12.1k|}
bundle.c:ds_put_char:
   94|  5.85k|{
   95|  5.85k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 5.25k, False: 596]
  ------------------
   96|  5.25k|        ds->string[ds->length++] = c;
   97|  5.25k|        ds->string[ds->length] = '\0';
   98|  5.25k|    } else {
   99|    596|        ds_put_char__(ds, c);
  100|    596|    }
  101|  5.85k|}
learn.c:ds_put_char:
   94|  28.7k|{
   95|  28.7k|    if (ds->length < ds->allocated) {
  ------------------
  |  Branch (95:9): [True: 28.3k, False: 361]
  ------------------
   96|  28.3k|        ds->string[ds->length++] = c;
   97|  28.3k|        ds->string[ds->length] = '\0';
   98|  28.3k|    } else {
   99|    361|        ds_put_char__(ds, c);
  100|    361|    }
  101|  28.7k|}

nx-match.c:hmap_insert_at:
  306|    474|{
  307|    474|    hmap_insert_fast(hmap, node, hash);
  308|    474|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 12, False: 462]
  ------------------
  309|     12|        hmap_expand_at(hmap, where);
  310|     12|    }
  311|    474|}
nx-match.c:hmap_insert_fast:
  289|    474|{
  290|    474|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|    474|    node->hash = hash;
  292|    474|    node->next = *bucket;
  293|    474|    *bucket = node;
  294|    474|    hmap->n++;
  295|    474|}
nx-match.c:hmap_first_in_bucket:
  367|  11.3M|{
  368|  11.3M|    return hmap->buckets[hash & hmap->mask];
  369|  11.3M|}
nx-match.c:hmap_next_in_bucket:
  381|  10.4M|{
  382|  10.4M|    return node->next;
  383|  10.4M|}
ofp-actions.c:hmap_first_with_hash:
  359|   303k|{
  360|   303k|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|   303k|}
ofp-actions.c:hmap_next_with_hash__:
  348|   303k|{
  349|   551k|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 538k, False: 12.5k]
  |  Branch (349:28): [True: 247k, False: 291k]
  ------------------
  350|   247k|        node = node->next;
  351|   247k|    }
  352|   303k|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|   303k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   303k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   303k|     (TYPE) (POINTER))
  ------------------
  353|   303k|}
ofp-actions.c:hmap_insert_at:
  306|    384|{
  307|    384|    hmap_insert_fast(hmap, node, hash);
  308|    384|    if (hmap->n / 2 > hmap->mask) {
  ------------------
  |  Branch (308:9): [True: 7, False: 377]
  ------------------
  309|      7|        hmap_expand_at(hmap, where);
  310|      7|    }
  311|    384|}
ofp-actions.c:hmap_insert_fast:
  289|    384|{
  290|    384|    struct hmap_node **bucket = &hmap->buckets[hash & hmap->mask];
  291|    384|    node->hash = hash;
  292|    384|    node->next = *bucket;
  293|    384|    *bucket = node;
  294|    384|    hmap->n++;
  295|    384|}
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|  3.34M|{
  360|  3.34M|    return hmap_next_with_hash__(hmap->buckets[hash & hmap->mask], hash);
  361|  3.34M|}
ofp-msgs.c:hmap_next_with_hash__:
  348|  3.34M|{
  349|  5.04M|    while (node != NULL && node->hash != hash) {
  ------------------
  |  Branch (349:12): [True: 4.60M, False: 437k]
  |  Branch (349:28): [True: 1.70M, False: 2.90M]
  ------------------
  350|  1.70M|        node = node->next;
  351|  1.70M|    }
  352|  3.34M|    return CONST_CAST(struct hmap_node *, node);
  ------------------
  |  |   85|  3.34M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  3.34M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  3.34M|     (TYPE) (POINTER))
  ------------------
  353|  3.34M|}
ofp-msgs.c:hmap_next_with_hash:
  395|    329|{
  396|    329|    return hmap_next_with_hash__(node->next, node->hash);
  397|    329|}
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|  1.45M|{
  158|  1.45M|    *list = OVS_LIST_POISON;
  159|  1.45M|}
vlog.c:ovs_list_insert:
  164|    182|{
  165|    182|    elem->prev = before->prev;
  166|    182|    elem->next = before;
  167|    182|    before->prev->next = elem;
  168|    182|    before->prev = elem;
  169|    182|}
nx-match.c:ovs_list_init:
  149|    211|{
  150|    211|    list->next = list->prev = list;
  151|    211|}
nx-match.c:ovs_list_push_back:
  204|    237|{
  205|    237|    ovs_list_insert(list, elem);
  206|    237|}
nx-match.c:ovs_list_insert:
  164|    237|{
  165|    237|    elem->prev = before->prev;
  166|    237|    elem->next = before;
  167|    237|    before->prev->next = elem;
  168|    237|    before->prev = elem;
  169|    237|}
ofp-group.c:ovs_list_is_empty:
  320|  49.8k|{
  321|  49.8k|    return list->next == list;
  322|  49.8k|}
ofp-group.c:ovs_list_pop_front:
  261|  9.32k|{
  262|  9.32k|    struct ovs_list *front = list->next;
  263|       |
  264|  9.32k|    ovs_list_remove(front);
  265|  9.32k|    return front;
  266|  9.32k|}
ofp-group.c:ovs_list_remove:
  251|  9.32k|{
  252|  9.32k|    elem->prev->next = elem->next;
  253|  9.32k|    elem->next->prev = elem->prev;
  254|  9.32k|    return elem->next;
  255|  9.32k|}
ofp-group.c:ovs_list_push_back:
  204|  9.32k|{
  205|  9.32k|    ovs_list_insert(list, elem);
  206|  9.32k|}
ofp-group.c:ovs_list_insert:
  164|  9.32k|{
  165|  9.32k|    elem->prev = before->prev;
  166|  9.32k|    elem->next = before;
  167|  9.32k|    before->prev->next = elem;
  168|  9.32k|    before->prev = elem;
  169|  9.32k|}
ofp-group.c:ovs_list_init:
  149|  37.6k|{
  150|  37.6k|    list->next = list->prev = list;
  151|  37.6k|}
ofp-group.c:ovs_list_is_short:
  334|  1.73k|{
  335|  1.73k|    return list->next == list->prev;
  336|  1.73k|}
ofp-group.c:ovs_list_is_singleton:
  327|  1.73k|{
  328|  1.73k|    return ovs_list_is_short(list) && !ovs_list_is_empty(list);
  ------------------
  |  Branch (328:12): [True: 1.73k, False: 6]
  |  Branch (328:39): [True: 1.41k, False: 315]
  ------------------
  329|  1.73k|}
ofp-match.c:ovs_list_init:
  149|  2.53k|{
  150|  2.53k|    list->next = list->prev = list;
  151|  2.53k|}
ofp-match.c:ovs_list_push_back:
  204|  4.98k|{
  205|  4.98k|    ovs_list_insert(list, elem);
  206|  4.98k|}
ofp-match.c:ovs_list_insert:
  164|  4.98k|{
  165|  4.98k|    elem->prev = before->prev;
  166|  4.98k|    elem->next = before;
  167|  4.98k|    before->prev->next = elem;
  168|  4.98k|    before->prev = elem;
  169|  4.98k|}
ofp-match.c:ovs_list_is_empty:
  320|  7.51k|{
  321|  7.51k|    return list->next == list;
  322|  7.51k|}
ofp-match.c:ovs_list_pop_front:
  261|  4.98k|{
  262|  4.98k|    struct ovs_list *front = list->next;
  263|       |
  264|  4.98k|    ovs_list_remove(front);
  265|  4.98k|    return front;
  266|  4.98k|}
ofp-match.c:ovs_list_remove:
  251|  4.98k|{
  252|  4.98k|    elem->prev->next = elem->next;
  253|  4.98k|    elem->next->prev = elem->prev;
  254|  4.98k|    return elem->next;
  255|  4.98k|}

ofp-table.c:mf_from_id:
 2363|   374k|{
 2364|   374k|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2365|   374k|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   62|   374k|#define ovs_assert ovs_ignore
  ------------------
 2366|   374k|    return &mf_fields[id];
 2367|   374k|}
meta-flow.c:mf_from_id:
 2363|  15.4k|{
 2364|  15.4k|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2365|  15.4k|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   62|  15.4k|#define ovs_assert ovs_ignore
  ------------------
 2366|  15.4k|    return &mf_fields[id];
 2367|  15.4k|}
nx-match.c:mf_from_id:
 2363|   447k|{
 2364|   447k|    extern const struct mf_field mf_fields[MFF_N_IDS];
 2365|   447k|    ovs_assert((unsigned int) id < MFF_N_IDS);
  ------------------
  |  |   62|   447k|#define ovs_assert ovs_ignore
  ------------------
 2366|   447k|    return &mf_fields[id];
 2367|   447k|}

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

ofp-actions.c:ofpact_next:
  212|   466k|{
  213|   466k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|   466k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|   466k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|   466k|}
ofp-actions.c:ofpact_get_CLONE:
 1289|    854|    {                                                                   \
 1290|    854|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    854|#define ovs_assert ovs_ignore
  ------------------
 1291|    854|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    854|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    854|    }                                                                   \
ofp-actions.c:ofpact_get_CT:
 1289|  1.73k|    {                                                                   \
 1290|  1.73k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.73k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.73k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.73k|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_ACTIONS:
 1289|  11.3k|    {                                                                   \
 1290|  11.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  11.3k|#define ovs_assert ovs_ignore
  ------------------
 1291|  11.3k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  11.3k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  11.3k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_FIELD:
 1303|  14.3k|    {                                                                   \
 1304|  14.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  14.3k|                                            sizeof(struct STRUCT));     \
 1306|  14.3k|    }                                                                   \
ofp-actions.c:ofpact_finish_SET_FIELD:
 1317|  14.3k|    {                                                                   \
 1318|  14.3k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  14.3k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  14.3k|#define ovs_assert ovs_ignore
  ------------------
 1320|  14.3k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  14.3k|    }
ofp-actions.c:ofpact_end:
  221|   799k|{
  222|   799k|    return ofpacts
  ------------------
  |  Branch (222:12): [True: 786k, False: 12.4k]
  ------------------
  223|   799k|           ? ALIGNED_CAST(struct ofpact *, (uint8_t *) ofpacts + ofpacts_len)
  ------------------
  |  |  434|   786k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  224|       |           : NULL;
  225|   799k|}
ofp-actions.c:ofpact_put_METER:
 1303|  1.64k|    {                                                                   \
 1304|  1.64k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.64k|                                            sizeof(struct STRUCT));     \
 1306|  1.64k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT:
 1303|  20.3k|    {                                                                   \
 1304|  20.3k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  20.3k|                                            sizeof(struct STRUCT));     \
 1306|  20.3k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_VID:
 1303|  10.7k|    {                                                                   \
 1304|  10.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.7k|                                            sizeof(struct STRUCT));     \
 1306|  10.7k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_VLAN_PCP:
 1303|  4.79k|    {                                                                   \
 1304|  4.79k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.79k|                                            sizeof(struct STRUCT));     \
 1306|  4.79k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_VLAN:
 1303|  2.76k|    {                                                                   \
 1304|  2.76k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.76k|                                            sizeof(struct STRUCT));     \
 1306|  2.76k|    }                                                                   \
ofp-actions.c:ofpact_put_STRIP_VLAN:
 1303|  8.51k|    {                                                                   \
 1304|  8.51k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.51k|                                            sizeof(struct STRUCT));     \
 1306|  8.51k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_SRC:
 1303|    241|    {                                                                   \
 1304|    241|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    241|                                            sizeof(struct STRUCT));     \
 1306|    241|    }                                                                   \
ofp-actions.c:ofpact_put_SET_ETH_DST:
 1303|    181|    {                                                                   \
 1304|    181|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    181|                                            sizeof(struct STRUCT));     \
 1306|    181|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_SRC:
 1303|  4.28k|    {                                                                   \
 1304|  4.28k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.28k|                                            sizeof(struct STRUCT));     \
 1306|  4.28k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IPV4_DST:
 1303|  6.46k|    {                                                                   \
 1304|  6.46k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.46k|                                            sizeof(struct STRUCT));     \
 1306|  6.46k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_DSCP:
 1303|  8.96k|    {                                                                   \
 1304|  8.96k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.96k|                                            sizeof(struct STRUCT));     \
 1306|  8.96k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_ECN:
 1303|  2.22k|    {                                                                   \
 1304|  2.22k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.22k|                                            sizeof(struct STRUCT));     \
 1306|  2.22k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_SRC_PORT:
 1303|  9.30k|    {                                                                   \
 1304|  9.30k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  9.30k|                                            sizeof(struct STRUCT));     \
 1306|  9.30k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_L4_DST_PORT:
 1303|  10.2k|    {                                                                   \
 1304|  10.2k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.2k|                                            sizeof(struct STRUCT));     \
 1306|  10.2k|    }                                                                   \
ofp-actions.c:ofpact_put_ENQUEUE:
 1303|    187|    {                                                                   \
 1304|    187|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    187|                                            sizeof(struct STRUCT));     \
 1306|    187|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_LABEL:
 1303|  1.44k|    {                                                                   \
 1304|  1.44k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.44k|                                            sizeof(struct STRUCT));     \
 1306|  1.44k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TC:
 1303|    693|    {                                                                   \
 1304|    693|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    693|                                            sizeof(struct STRUCT));     \
 1306|    693|    }                                                                   \
ofp-actions.c:ofpact_put_SET_MPLS_TTL:
 1303|  2.00k|    {                                                                   \
 1304|  2.00k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.00k|                                            sizeof(struct STRUCT));     \
 1306|  2.00k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_MPLS_TTL:
 1303|  5.23k|    {                                                                   \
 1304|  5.23k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.23k|                                            sizeof(struct STRUCT));     \
 1306|  5.23k|    }                                                                   \
ofp-actions.c:ofpact_put_PUSH_MPLS:
 1303|  5.66k|    {                                                                   \
 1304|  5.66k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.66k|                                            sizeof(struct STRUCT));     \
 1306|  5.66k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_MPLS:
 1303|  4.79k|    {                                                                   \
 1304|  4.79k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.79k|                                            sizeof(struct STRUCT));     \
 1306|  4.79k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_QUEUE:
 1303|    256|    {                                                                   \
 1304|    256|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    256|                                            sizeof(struct STRUCT));     \
 1306|    256|    }                                                                   \
ofp-actions.c:ofpact_put_GROUP:
 1303|  1.06k|    {                                                                   \
 1304|  1.06k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.06k|                                            sizeof(struct STRUCT));     \
 1306|  1.06k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_IP_TTL:
 1303|  1.43k|    {                                                                   \
 1304|  1.43k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.43k|                                            sizeof(struct STRUCT));     \
 1306|  1.43k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_TTL:
 1303|  3.79k|    {                                                                   \
 1304|  3.79k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.79k|                                            sizeof(struct STRUCT));     \
 1306|  3.79k|    }                                                                   \
ofp-actions.c:ofpact_finish_DEC_TTL:
 1317|  3.33k|    {                                                                   \
 1318|  3.33k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  3.33k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.33k|#define ovs_assert ovs_ignore
  ------------------
 1320|  3.33k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  3.33k|    }
ofp-actions.c:ofpact_put_REG_MOVE:
 1303|  9.72k|    {                                                                   \
 1304|  9.72k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  9.72k|                                            sizeof(struct STRUCT));     \
 1306|  9.72k|    }                                                                   \
ofp-actions.c:ofpact_put_RESUBMIT:
 1303|  3.27k|    {                                                                   \
 1304|  3.27k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.27k|                                            sizeof(struct STRUCT));     \
 1306|  3.27k|    }                                                                   \
ofp-actions.c:ofpact_put_SET_TUNNEL:
 1303|  1.21k|    {                                                                   \
 1304|  1.21k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.21k|                                            sizeof(struct STRUCT));     \
 1306|  1.21k|    }                                                                   \
ofp-actions.c:ofpact_put_POP_QUEUE:
 1303|  1.68k|    {                                                                   \
 1304|  1.68k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.68k|                                            sizeof(struct STRUCT));     \
 1306|  1.68k|    }                                                                   \
ofp-actions.c:ofpact_put_NOTE:
 1303|  11.0k|    {                                                                   \
 1304|  11.0k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  11.0k|                                            sizeof(struct STRUCT));     \
 1306|  11.0k|    }                                                                   \
ofp-actions.c:ofpact_finish_NOTE:
 1317|  11.0k|    {                                                                   \
 1318|  11.0k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  11.0k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  11.0k|#define ovs_assert ovs_ignore
  ------------------
 1320|  11.0k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  11.0k|    }
ofp-actions.c:ofpact_put_MULTIPATH:
 1303|  5.37k|    {                                                                   \
 1304|  5.37k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.37k|                                            sizeof(struct STRUCT));     \
 1306|  5.37k|    }                                                                   \
ofp-actions.c:ofpact_put_BUNDLE:
 1303|  3.46k|    {                                                                   \
 1304|  3.46k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.46k|                                            sizeof(struct STRUCT));     \
 1306|  3.46k|    }                                                                   \
ofp-actions.c:ofpact_finish_BUNDLE:
 1317|  3.26k|    {                                                                   \
 1318|  3.26k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  3.26k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.26k|#define ovs_assert ovs_ignore
  ------------------
 1320|  3.26k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  3.26k|    }
ofp-actions.c:ofpact_put_OUTPUT_REG:
 1303|    478|    {                                                                   \
 1304|    478|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    478|                                            sizeof(struct STRUCT));     \
 1306|    478|    }                                                                   \
ofp-actions.c:ofpact_put_LEARN:
 1303|  21.7k|    {                                                                   \
 1304|  21.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  21.7k|                                            sizeof(struct STRUCT));     \
 1306|  21.7k|    }                                                                   \
ofp-actions.c:ofpact_finish_LEARN:
 1317|  16.1k|    {                                                                   \
 1318|  16.1k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  16.1k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  16.1k|#define ovs_assert ovs_ignore
  ------------------
 1320|  16.1k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  16.1k|    }
ofp-actions.c:ofpact_put_EXIT:
 1303|  2.72k|    {                                                                   \
 1304|  2.72k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.72k|                                            sizeof(struct STRUCT));     \
 1306|  2.72k|    }                                                                   \
ofp-actions.c:ofpact_put_FIN_TIMEOUT:
 1303|    679|    {                                                                   \
 1304|    679|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    679|                                            sizeof(struct STRUCT));     \
 1306|    679|    }                                                                   \
ofp-actions.c:ofpact_put_CONTROLLER:
 1303|  4.65k|    {                                                                   \
 1304|  4.65k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  4.65k|                                            sizeof(struct STRUCT));     \
 1306|  4.65k|    }                                                                   \
ofp-actions.c:ofpact_finish_CONTROLLER:
 1317|  4.21k|    {                                                                   \
 1318|  4.21k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  4.21k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.21k|#define ovs_assert ovs_ignore
  ------------------
 1320|  4.21k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  4.21k|    }
ofp-actions.c:ofpact_put_STACK_PUSH:
 1303|    873|    {                                                                   \
 1304|    873|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    873|                                            sizeof(struct STRUCT));     \
 1306|    873|    }                                                                   \
ofp-actions.c:ofpact_put_STACK_POP:
 1303|  1.38k|    {                                                                   \
 1304|  1.38k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.38k|                                            sizeof(struct STRUCT));     \
 1306|  1.38k|    }                                                                   \
ofp-actions.c:ofpact_put_SAMPLE:
 1303|  3.17k|    {                                                                   \
 1304|  3.17k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.17k|                                            sizeof(struct STRUCT));     \
 1306|  3.17k|    }                                                                   \
ofp-actions.c:ofpact_put_CONJUNCTION:
 1303|  3.48k|    {                                                                   \
 1304|  3.48k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  3.48k|                                            sizeof(struct STRUCT));     \
 1306|  3.48k|    }                                                                   \
ofp-actions.c:ofpact_put_CT:
 1303|  8.34k|    {                                                                   \
 1304|  8.34k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  8.34k|                                            sizeof(struct STRUCT));     \
 1306|  8.34k|    }                                                                   \
ofp-actions.c:ofpact_finish_CT:
 1317|  5.38k|    {                                                                   \
 1318|  5.38k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  5.38k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.38k|#define ovs_assert ovs_ignore
  ------------------
 1320|  5.38k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  5.38k|    }
ofp-actions.c:ofpact_get_NAT:
 1289|  3.94k|    {                                                                   \
 1290|  3.94k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.94k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.94k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.94k|    }                                                                   \
ofp-actions.c:ofpact_put_NAT:
 1303|  29.5k|    {                                                                   \
 1304|  29.5k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  29.5k|                                            sizeof(struct STRUCT));     \
 1306|  29.5k|    }                                                                   \
ofp-actions.c:ofpact_put_OUTPUT_TRUNC:
 1303|  1.25k|    {                                                                   \
 1304|  1.25k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.25k|                                            sizeof(struct STRUCT));     \
 1306|  1.25k|    }                                                                   \
ofp-actions.c:ofpact_put_CLONE:
 1303|  1.82k|    {                                                                   \
 1304|  1.82k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.82k|                                            sizeof(struct STRUCT));     \
 1306|  1.82k|    }                                                                   \
ofp-actions.c:ofpact_finish_CLONE:
 1317|  1.78k|    {                                                                   \
 1318|  1.78k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  1.78k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.78k|#define ovs_assert ovs_ignore
  ------------------
 1320|  1.78k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  1.78k|    }
ofp-actions.c:ofpact_put_CT_CLEAR:
 1303|    254|    {                                                                   \
 1304|    254|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    254|                                            sizeof(struct STRUCT));     \
 1306|    254|    }                                                                   \
ofp-actions.c:ofpact_put_ENCAP:
 1303|  5.30k|    {                                                                   \
 1304|  5.30k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  5.30k|                                            sizeof(struct STRUCT));     \
 1306|  5.30k|    }                                                                   \
ofp-actions.c:ofpact_finish_ENCAP:
 1317|  3.41k|    {                                                                   \
 1318|  3.41k|        struct ofpact *ofpact = &(*ofpactp)->ofpact;                    \
 1319|  3.41k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.41k|#define ovs_assert ovs_ignore
  ------------------
 1320|  3.41k|        *ofpactp = (struct STRUCT *) ofpact_finish(ofpbuf, ofpact);     \
 1321|  3.41k|    }
ofp-actions.c:ofpact_put_DECAP:
 1303|  10.7k|    {                                                                   \
 1304|  10.7k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  10.7k|                                            sizeof(struct STRUCT));     \
 1306|  10.7k|    }                                                                   \
ofp-actions.c:ofpact_put_DEC_NSH_TTL:
 1303|  1.47k|    {                                                                   \
 1304|  1.47k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.47k|                                            sizeof(struct STRUCT));     \
 1306|  1.47k|    }                                                                   \
ofp-actions.c:ofpact_put_CHECK_PKT_LARGER:
 1303|  2.37k|    {                                                                   \
 1304|  2.37k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  2.37k|                                            sizeof(struct STRUCT));     \
 1306|  2.37k|    }                                                                   \
ofp-actions.c:ofpact_put_DELETE_FIELD:
 1303|    661|    {                                                                   \
 1304|    661|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    661|                                            sizeof(struct STRUCT));     \
 1306|    661|    }                                                                   \
ofp-actions.c:ofpact_put_CLEAR_ACTIONS:
 1303|    176|    {                                                                   \
 1304|    176|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    176|                                            sizeof(struct STRUCT));     \
 1306|    176|    }                                                                   \
ofp-actions.c:ofpact_put_WRITE_METADATA:
 1303|  1.58k|    {                                                                   \
 1304|  1.58k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  1.58k|                                            sizeof(struct STRUCT));     \
 1306|  1.58k|    }                                                                   \
ofp-actions.c:ofpact_put_GOTO_TABLE:
 1303|    351|    {                                                                   \
 1304|    351|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|    351|                                            sizeof(struct STRUCT));     \
 1306|    351|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT:
 1289|  7.28k|    {                                                                   \
 1290|  7.28k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  7.28k|#define ovs_assert ovs_ignore
  ------------------
 1291|  7.28k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  7.28k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  7.28k|    }                                                                   \
ofp-actions.c:ofpact_get_CONTROLLER:
 1289|     74|    {                                                                   \
 1290|     74|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     74|#define ovs_assert ovs_ignore
  ------------------
 1291|     74|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     74|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     74|    }                                                                   \
ofp-actions.c:ofpact_get_ENQUEUE:
 1289|    115|    {                                                                   \
 1290|    115|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    115|#define ovs_assert ovs_ignore
  ------------------
 1291|    115|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    115|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    115|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_REG:
 1289|     83|    {                                                                   \
 1290|     83|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     83|#define ovs_assert ovs_ignore
  ------------------
 1291|     83|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     83|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     83|    }                                                                   \
ofp-actions.c:ofpact_get_BUNDLE:
 1289|    737|    {                                                                   \
 1290|    737|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    737|#define ovs_assert ovs_ignore
  ------------------
 1291|    737|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    737|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    737|    }                                                                   \
ofp-actions.c:ofpact_get_SET_FIELD:
 1289|  2.49k|    {                                                                   \
 1290|  2.49k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.49k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.49k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.49k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_VID:
 1289|  5.35k|    {                                                                   \
 1290|  5.35k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.35k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.35k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.35k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.35k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_VLAN_PCP:
 1289|  3.53k|    {                                                                   \
 1290|  3.53k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.53k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.53k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.53k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.53k|    }                                                                   \
ofp-actions.c:ofpact_get_STRIP_VLAN:
 1289|  5.56k|    {                                                                   \
 1290|  5.56k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.56k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.56k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.56k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.56k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_VLAN:
 1289|  2.36k|    {                                                                   \
 1290|  2.36k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.36k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.36k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.36k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.36k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_SRC:
 1289|    212|    {                                                                   \
 1290|    212|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    212|#define ovs_assert ovs_ignore
  ------------------
 1291|    212|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    212|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    212|    }                                                                   \
ofp-actions.c:ofpact_get_SET_ETH_DST:
 1289|    111|    {                                                                   \
 1290|    111|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    111|#define ovs_assert ovs_ignore
  ------------------
 1291|    111|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    111|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    111|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_SRC:
 1289|  2.98k|    {                                                                   \
 1290|  2.98k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.98k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.98k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.98k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.98k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IPV4_DST:
 1289|  4.73k|    {                                                                   \
 1290|  4.73k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.73k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.73k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.73k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.73k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_DSCP:
 1289|  6.14k|    {                                                                   \
 1290|  6.14k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  6.14k|#define ovs_assert ovs_ignore
  ------------------
 1291|  6.14k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  6.14k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  6.14k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_ECN:
 1289|  1.69k|    {                                                                   \
 1290|  1.69k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.69k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.69k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.69k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.69k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_IP_TTL:
 1289|  1.40k|    {                                                                   \
 1290|  1.40k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.40k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.40k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.40k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.40k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_SRC_PORT:
 1289|  4.00k|    {                                                                   \
 1290|  4.00k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.00k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.00k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.00k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.00k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_L4_DST_PORT:
 1289|  7.29k|    {                                                                   \
 1290|  7.29k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  7.29k|#define ovs_assert ovs_ignore
  ------------------
 1291|  7.29k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  7.29k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  7.29k|    }                                                                   \
ofp-actions.c:ofpact_get_REG_MOVE:
 1289|    318|    {                                                                   \
 1290|    318|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    318|#define ovs_assert ovs_ignore
  ------------------
 1291|    318|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    318|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    318|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_PUSH:
 1289|    101|    {                                                                   \
 1290|    101|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    101|#define ovs_assert ovs_ignore
  ------------------
 1291|    101|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    101|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    101|    }                                                                   \
ofp-actions.c:ofpact_get_STACK_POP:
 1289|    644|    {                                                                   \
 1290|    644|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    644|#define ovs_assert ovs_ignore
  ------------------
 1291|    644|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    644|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    644|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_TTL:
 1289|  1.15k|    {                                                                   \
 1290|  1.15k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.15k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.15k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.15k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.15k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_LABEL:
 1289|  1.41k|    {                                                                   \
 1290|  1.41k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.41k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.41k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.41k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.41k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TC:
 1289|    666|    {                                                                   \
 1290|    666|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    666|#define ovs_assert ovs_ignore
  ------------------
 1291|    666|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    666|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    666|    }                                                                   \
ofp-actions.c:ofpact_get_SET_MPLS_TTL:
 1289|  1.33k|    {                                                                   \
 1290|  1.33k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.33k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.33k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.33k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.33k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_MPLS_TTL:
 1289|  4.80k|    {                                                                   \
 1290|  4.80k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  4.80k|#define ovs_assert ovs_ignore
  ------------------
 1291|  4.80k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  4.80k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  4.80k|    }                                                                   \
ofp-actions.c:ofpact_get_PUSH_MPLS:
 1289|  5.49k|    {                                                                   \
 1290|  5.49k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  5.49k|#define ovs_assert ovs_ignore
  ------------------
 1291|  5.49k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  5.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  5.49k|    }                                                                   \
ofp-actions.c:ofpact_get_POP_MPLS:
 1289|  3.87k|    {                                                                   \
 1290|  3.87k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  3.87k|#define ovs_assert ovs_ignore
  ------------------
 1291|  3.87k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  3.87k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  3.87k|    }                                                                   \
ofp-actions.c:ofpact_get_DEC_NSH_TTL:
 1289|  1.46k|    {                                                                   \
 1290|  1.46k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.46k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.46k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.46k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.46k|    }                                                                   \
ofp-actions.c:ofpact_get_DELETE_FIELD:
 1289|     49|    {                                                                   \
 1290|     49|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     49|#define ovs_assert ovs_ignore
  ------------------
 1291|     49|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     49|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     49|    }                                                                   \
ofp-actions.c:ofpact_get_ENCAP:
 1289|  2.22k|    {                                                                   \
 1290|  2.22k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  2.22k|#define ovs_assert ovs_ignore
  ------------------
 1291|  2.22k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  2.22k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  2.22k|    }                                                                   \
ofp-actions.c:ofpact_get_DECAP:
 1289|  9.45k|    {                                                                   \
 1290|  9.45k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  9.45k|#define ovs_assert ovs_ignore
  ------------------
 1291|  9.45k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  9.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  9.45k|    }                                                                   \
ofp-actions.c:ofpact_get_SET_TUNNEL:
 1289|     15|    {                                                                   \
 1290|     15|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     15|#define ovs_assert ovs_ignore
  ------------------
 1291|     15|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     15|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     15|    }                                                                   \
ofp-actions.c:ofpact_get_SET_QUEUE:
 1289|    143|    {                                                                   \
 1290|    143|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    143|#define ovs_assert ovs_ignore
  ------------------
 1291|    143|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    143|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    143|    }                                                                   \
ofp-actions.c:ofpact_get_POP_QUEUE:
 1289|    118|    {                                                                   \
 1290|    118|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    118|#define ovs_assert ovs_ignore
  ------------------
 1291|    118|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    118|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    118|    }                                                                   \
ofp-actions.c:ofpact_get_FIN_TIMEOUT:
 1289|    105|    {                                                                   \
 1290|    105|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    105|#define ovs_assert ovs_ignore
  ------------------
 1291|    105|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    105|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    105|    }                                                                   \
ofp-actions.c:ofpact_get_RESUBMIT:
 1289|    105|    {                                                                   \
 1290|    105|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    105|#define ovs_assert ovs_ignore
  ------------------
 1291|    105|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    105|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    105|    }                                                                   \
ofp-actions.c:ofpact_get_LEARN:
 1289|  15.2k|    {                                                                   \
 1290|  15.2k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  15.2k|#define ovs_assert ovs_ignore
  ------------------
 1291|  15.2k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  15.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  15.2k|    }                                                                   \
ofp-actions.c:ofpact_get_CONJUNCTION:
 1289|     78|    {                                                                   \
 1290|     78|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     78|#define ovs_assert ovs_ignore
  ------------------
 1291|     78|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     78|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     78|    }                                                                   \
ofp-actions.c:ofpact_get_MULTIPATH:
 1289|    348|    {                                                                   \
 1290|    348|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    348|#define ovs_assert ovs_ignore
  ------------------
 1291|    348|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    348|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    348|    }                                                                   \
ofp-actions.c:ofpact_get_NOTE:
 1289|    109|    {                                                                   \
 1290|    109|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    109|#define ovs_assert ovs_ignore
  ------------------
 1291|    109|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    109|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    109|    }                                                                   \
ofp-actions.c:ofpact_get_EXIT:
 1289|    309|    {                                                                   \
 1290|    309|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    309|#define ovs_assert ovs_ignore
  ------------------
 1291|    309|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    309|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    309|    }                                                                   \
ofp-actions.c:ofpact_get_SAMPLE:
 1289|     40|    {                                                                   \
 1290|     40|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     40|#define ovs_assert ovs_ignore
  ------------------
 1291|     40|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     40|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     40|    }                                                                   \
ofp-actions.c:ofpact_ct_get_action_len:
  723|  5.84k|{
  724|       |    return oc->ofpact.len - offsetof(struct ofpact_conntrack, actions);
  725|  5.84k|}
ofp-actions.c:ofpact_get_CT_CLEAR:
 1289|     60|    {                                                                   \
 1290|     60|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     60|#define ovs_assert ovs_ignore
  ------------------
 1291|     60|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     60|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     60|    }                                                                   \
ofp-actions.c:ofpact_get_OUTPUT_TRUNC:
 1289|  1.13k|    {                                                                   \
 1290|  1.13k|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|  1.13k|#define ovs_assert ovs_ignore
  ------------------
 1291|  1.13k|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|  1.13k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|  1.13k|    }                                                                   \
ofp-actions.c:ofpact_nest_get_action_len:
  673|  23.6k|{
  674|       |    return on->ofpact.len - offsetof(struct ofpact_nest, actions);
  675|  23.6k|}
ofp-actions.c:ofpact_get_CHECK_PKT_LARGER:
 1289|     10|    {                                                                   \
 1290|     10|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     10|#define ovs_assert ovs_ignore
  ------------------
 1291|     10|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     10|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     10|    }                                                                   \
ofp-actions.c:ofpact_get_CLEAR_ACTIONS:
 1289|    173|    {                                                                   \
 1290|    173|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    173|#define ovs_assert ovs_ignore
  ------------------
 1291|    173|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    173|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    173|    }                                                                   \
ofp-actions.c:ofpact_get_WRITE_METADATA:
 1289|     66|    {                                                                   \
 1290|     66|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|     66|#define ovs_assert ovs_ignore
  ------------------
 1291|     66|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|     66|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|     66|    }                                                                   \
ofp-actions.c:ofpact_get_GOTO_TABLE:
 1289|    234|    {                                                                   \
 1290|    234|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    234|#define ovs_assert ovs_ignore
  ------------------
 1291|    234|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    234|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    234|    }                                                                   \
ofp-actions.c:ofpact_get_GROUP:
 1289|    919|    {                                                                   \
 1290|    919|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    919|#define ovs_assert ovs_ignore
  ------------------
 1291|    919|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    919|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    919|    }                                                                   \
ofp-actions.c:ofpact_get_METER:
 1289|    204|    {                                                                   \
 1290|    204|        ovs_assert(ofpact->type == OFPACT_##ENUM);                      \
  ------------------
  |  |   62|    204|#define ovs_assert ovs_ignore
  ------------------
 1291|    204|        return ALIGNED_CAST(struct STRUCT *, ofpact);                   \
  ------------------
  |  |  434|    204|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 1292|    204|    }                                                                   \
ofp-packet.c:ofpact_put_UNROLL_XLATE:
 1303|  6.41k|    {                                                                   \
 1304|  6.41k|        return (struct STRUCT *) ofpact_put(ofpacts, OFPACT_##ENUM,     \
 1305|  6.41k|                                            sizeof(struct STRUCT));     \
 1306|  6.41k|    }                                                                   \
learn.c:ofpact_learn_spec_end:
  894|  87.9k|{
  895|  87.9k|    return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  87.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  896|  87.9k|                        ofpact_next(&learn->ofpact));
  897|  87.9k|}
learn.c:ofpact_next:
  212|  87.9k|{
  213|  87.9k|    return ALIGNED_CAST(struct ofpact *,
  ------------------
  |  |  434|  87.9k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  214|  87.9k|                        (uint8_t *) ofpact + OFPACT_ALIGN(ofpact->len));
  215|  87.9k|}
learn.c:ofpact_learn_spec_imm:
  850|  55.8k|{
  851|  55.8k|    return spec + 1;
  852|  55.8k|}
learn.c:ofpact_learn_spec_next:
  856|  57.8k|{
  857|  57.8k|    if (spec->src_type == NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  57.8k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (857:9): [True: 57.1k, False: 764]
  ------------------
  858|  57.1k|        unsigned int n_bytes = OFPACT_ALIGN(DIV_ROUND_UP(spec->n_bits, 8));
  ------------------
  |  |  205|  57.1k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  57.1k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  57.1k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  859|  57.1k|        return ALIGNED_CAST(const struct ofpact_learn_spec *,
  ------------------
  |  |  434|  57.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  860|  57.1k|                            (const uint8_t *)(spec + 1) + n_bytes);
  861|  57.1k|    }
  862|    764|    return spec + 1;
  863|  57.8k|}

ofp-group.c:ofputil_bucket_has_liveness:
   80|  2.96k|{
   81|  2.96k|    return (bucket->watch_port != OFPP_ANY ||
  ------------------
  |  |   80|  2.96k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  2.96k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  5.93k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (81:13): [True: 732, False: 2.23k]
  ------------------
   82|  2.23k|            bucket->watch_group != OFPG_ANY);
  ------------------
  |  Branch (82:13): [True: 161, False: 2.07k]
  ------------------
   83|  2.96k|}

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

ofp_print_target.c:ofpbuf_at:
  183|  3.87M|{
  184|  3.87M|    if (offset + size <= b->size) {
  ------------------
  |  Branch (184:9): [True: 3.84M, False: 32.4k]
  ------------------
  185|  3.84M|        ovs_assert(b->data);
  ------------------
  |  |   62|  3.84M|#define ovs_assert ovs_ignore
  ------------------
  186|  3.84M|        return (char *) b->data + offset;
  187|  3.84M|    }
  188|  32.4k|    return NULL;
  189|  3.87M|}
ofp_print_target.c:ofpbuf_pull:
  258|  1.91M|{
  259|  1.91M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.91M|#define ovs_assert ovs_ignore
  ------------------
  260|  1.91M|    void *data = b->data;
  261|       |
  262|  1.91M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.91M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.91M|    b->data = (char*)b->data + size;
  267|  1.91M|    b->size = b->size - size;
  268|  1.91M|    return data;
  269|  1.91M|}
ofp-print.c:ofpbuf_const_initializer:
   97|  74.3k|{
   98|  74.3k|    return (struct ofpbuf) {
   99|  74.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  74.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  74.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  74.3k|     (TYPE) (POINTER))
  ------------------
  100|  74.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  74.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  74.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  74.3k|     (TYPE) (POINTER))
  ------------------
  101|  74.3k|        .size = size,
  102|  74.3k|        .allocated = size,
  103|  74.3k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  74.3k|        .list_node = OVS_LIST_POISON,
  106|  74.3k|        .source = OFPBUF_STACK,
  107|  74.3k|    };
  108|  74.3k|}
ofp-protocol.c:ofpbuf_const_initializer:
   97|  1.16k|{
   98|  1.16k|    return (struct ofpbuf) {
   99|  1.16k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.16k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.16k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.16k|     (TYPE) (POINTER))
  ------------------
  100|  1.16k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  1.16k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.16k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.16k|     (TYPE) (POINTER))
  ------------------
  101|  1.16k|        .size = size,
  102|  1.16k|        .allocated = size,
  103|  1.16k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  1.16k|        .list_node = OVS_LIST_POISON,
  106|  1.16k|        .source = OFPBUF_STACK,
  107|  1.16k|    };
  108|  1.16k|}
ofp-protocol.c:ofpbuf_pull:
  258|  1.16k|{
  259|  1.16k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  1.16k|#define ovs_assert ovs_ignore
  ------------------
  260|  1.16k|    void *data = b->data;
  261|       |
  262|  1.16k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 1.16k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  1.16k|    b->data = (char*)b->data + size;
  267|  1.16k|    b->size = b->size - size;
  268|  1.16k|    return data;
  269|  1.16k|}
ofp-queue.c:ofpbuf_const_initializer:
   97|  39.9k|{
   98|  39.9k|    return (struct ofpbuf) {
   99|  39.9k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  39.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  39.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  39.9k|     (TYPE) (POINTER))
  ------------------
  100|  39.9k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  39.9k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  39.9k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  39.9k|     (TYPE) (POINTER))
  ------------------
  101|  39.9k|        .size = size,
  102|  39.9k|        .allocated = size,
  103|  39.9k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  39.9k|        .list_node = OVS_LIST_POISON,
  106|  39.9k|        .source = OFPBUF_STACK,
  107|  39.9k|    };
  108|  39.9k|}
ofp-queue.c:ofpbuf_pull:
  258|  76.9k|{
  259|  76.9k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  76.9k|#define ovs_assert ovs_ignore
  ------------------
  260|  76.9k|    void *data = b->data;
  261|       |
  262|  76.9k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 14.8k, False: 62.0k]
  ------------------
  263|  14.8k|        return data;
  264|  14.8k|    }
  265|       |
  266|  62.0k|    b->data = (char*)b->data + size;
  267|  62.0k|    b->size = b->size - size;
  268|  62.0k|    return data;
  269|  76.9k|}
ofp-queue.c:ofpbuf_at_assert:
  195|  3.49k|{
  196|  3.49k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  3.49k|#define ovs_assert ovs_ignore
  ------------------
  197|  3.49k|    ovs_assert(b->data);
  ------------------
  |  |   62|  3.49k|#define ovs_assert ovs_ignore
  ------------------
  198|  3.49k|    return (char *) b->data + offset;
  199|  3.49k|}
ofp-queue.c:ofpbuf_try_pull:
  275|  53.5k|{
  276|  53.5k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 51.5k, False: 2.08k]
  ------------------
  277|  53.5k|}
ofp-switch.c:ofpbuf_pull:
  258|  11.1k|{
  259|  11.1k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  11.1k|#define ovs_assert ovs_ignore
  ------------------
  260|  11.1k|    void *data = b->data;
  261|       |
  262|  11.1k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 11.1k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  11.1k|    b->data = (char*)b->data + size;
  267|  11.1k|    b->size = b->size - size;
  268|  11.1k|    return data;
  269|  11.1k|}
ofp-switch.c:ofpbuf_const_initializer:
   97|  6.81k|{
   98|  6.81k|    return (struct ofpbuf) {
   99|  6.81k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  6.81k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  6.81k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  6.81k|     (TYPE) (POINTER))
  ------------------
  100|  6.81k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  6.81k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  6.81k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  6.81k|     (TYPE) (POINTER))
  ------------------
  101|  6.81k|        .size = size,
  102|  6.81k|        .allocated = size,
  103|  6.81k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  6.81k|        .list_node = OVS_LIST_POISON,
  106|  6.81k|        .source = OFPBUF_STACK,
  107|  6.81k|    };
  108|  6.81k|}
ofp-table.c:ofpbuf_const_initializer:
   97|  18.1k|{
   98|  18.1k|    return (struct ofpbuf) {
   99|  18.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  18.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  18.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  18.1k|     (TYPE) (POINTER))
  ------------------
  100|  18.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  18.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  18.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  18.1k|     (TYPE) (POINTER))
  ------------------
  101|  18.1k|        .size = size,
  102|  18.1k|        .allocated = size,
  103|  18.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  18.1k|        .list_node = OVS_LIST_POISON,
  106|  18.1k|        .source = OFPBUF_STACK,
  107|  18.1k|    };
  108|  18.1k|}
ofp-table.c:ofpbuf_pull:
  258|  79.2k|{
  259|  79.2k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  79.2k|#define ovs_assert ovs_ignore
  ------------------
  260|  79.2k|    void *data = b->data;
  261|       |
  262|  79.2k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.21k, False: 77.0k]
  ------------------
  263|  2.21k|        return data;
  264|  2.21k|    }
  265|       |
  266|  77.0k|    b->data = (char*)b->data + size;
  267|  77.0k|    b->size = b->size - size;
  268|  77.0k|    return data;
  269|  79.2k|}
ofp-table.c:ofpbuf_try_pull:
  275|  35.5k|{
  276|  35.5k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 35.5k, False: 0]
  ------------------
  277|  35.5k|}
ofp-util.c:ofpbuf_const_initializer:
   97|  45.8k|{
   98|  45.8k|    return (struct ofpbuf) {
   99|  45.8k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  45.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  45.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  45.8k|     (TYPE) (POINTER))
  ------------------
  100|  45.8k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  45.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  45.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  45.8k|     (TYPE) (POINTER))
  ------------------
  101|  45.8k|        .size = size,
  102|  45.8k|        .allocated = size,
  103|  45.8k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  45.8k|        .list_node = OVS_LIST_POISON,
  106|  45.8k|        .source = OFPBUF_STACK,
  107|  45.8k|    };
  108|  45.8k|}
ofp-util.c:ofpbuf_pull:
  258|  55.5k|{
  259|  55.5k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  55.5k|#define ovs_assert ovs_ignore
  ------------------
  260|  55.5k|    void *data = b->data;
  261|       |
  262|  55.5k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 55.5k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  55.5k|    b->data = (char*)b->data + size;
  267|  55.5k|    b->size = b->size - size;
  268|  55.5k|    return data;
  269|  55.5k|}
ofp-util.c:ofpbuf_try_pull:
  275|  32.7k|{
  276|  32.7k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 9.77k, False: 22.9k]
  ------------------
  277|  32.7k|}
ofpbuf.c:ofpbuf_tailroom:
  228|  1.10M|{
  229|  1.10M|    return (char*)ofpbuf_end(b) - (char*)ofpbuf_tail(b);
  230|  1.10M|}
ofpbuf.c:ofpbuf_end:
  211|  1.10M|{
  212|  1.10M|    ovs_assert(b->base || !b->allocated);
  ------------------
  |  |   62|  1.10M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (212:16): [True: 729k, False: 377k]
  |  Branch (212:27): [True: 377k, False: 0]
  ------------------
  213|  1.10M|    return b->base ? (char *) b->base + b->allocated : NULL;
  ------------------
  |  Branch (213:12): [True: 729k, False: 377k]
  ------------------
  214|  1.10M|}
ofpbuf.c:ofpbuf_headroom:
  221|   973k|{
  222|   973k|    return (char*)b->data - (char*)b->base;
  223|   973k|}
ofpbuf.c:ofpbuf_tail:
  203|  1.64M|{
  204|  1.64M|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  1.64M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 1.25M, False: 396k]
  |  Branch (204:27): [True: 396k, False: 0]
  ------------------
  205|  1.64M|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 1.25M, False: 396k]
  ------------------
  206|  1.64M|}
nx-match.c:ofpbuf_try_pull:
  275|   472k|{
  276|   472k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 443k, False: 29.1k]
  ------------------
  277|   472k|}
nx-match.c:ofpbuf_pull:
  258|   814k|{
  259|   814k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   814k|#define ovs_assert ovs_ignore
  ------------------
  260|   814k|    void *data = b->data;
  261|       |
  262|   814k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 142k, False: 672k]
  ------------------
  263|   142k|        return data;
  264|   142k|    }
  265|       |
  266|   672k|    b->data = (char*)b->data + size;
  267|   672k|    b->size = b->size - size;
  268|   672k|    return data;
  269|   814k|}
nx-match.c:ofpbuf_const_initializer:
   97|   168k|{
   98|   168k|    return (struct ofpbuf) {
   99|   168k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   168k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   168k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   168k|     (TYPE) (POINTER))
  ------------------
  100|   168k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   168k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   168k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   168k|     (TYPE) (POINTER))
  ------------------
  101|   168k|        .size = size,
  102|   168k|        .allocated = size,
  103|   168k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   168k|        .list_node = OVS_LIST_POISON,
  106|   168k|        .source = OFPBUF_STACK,
  107|   168k|    };
  108|   168k|}
nx-match.c:ofpbuf_tail:
  203|  4.35k|{
  204|  4.35k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  4.35k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 4.35k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  4.35k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 4.35k, False: 0]
  ------------------
  206|  4.35k|}
ofp-actions.c:ofpbuf_clear:
  250|   190k|{
  251|   190k|    b->data = b->base;
  252|   190k|    b->size = 0;
  253|   190k|}
ofp-actions.c:ofpbuf_try_pull:
  275|   221k|{
  276|   221k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 219k, False: 2.35k]
  ------------------
  277|   221k|}
ofp-actions.c:ofpbuf_pull:
  258|   554k|{
  259|   554k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   554k|#define ovs_assert ovs_ignore
  ------------------
  260|   554k|    void *data = b->data;
  261|       |
  262|   554k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 46.5k, False: 507k]
  ------------------
  263|  46.5k|        return data;
  264|  46.5k|    }
  265|       |
  266|   507k|    b->data = (char*)b->data + size;
  267|   507k|    b->size = b->size - size;
  268|   507k|    return data;
  269|   554k|}
ofp-actions.c:ofpbuf_const_initializer:
   97|  42.3k|{
   98|  42.3k|    return (struct ofpbuf) {
   99|  42.3k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  42.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  42.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  42.3k|     (TYPE) (POINTER))
  ------------------
  100|  42.3k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  42.3k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  42.3k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  42.3k|     (TYPE) (POINTER))
  ------------------
  101|  42.3k|        .size = size,
  102|  42.3k|        .allocated = size,
  103|  42.3k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  42.3k|        .list_node = OVS_LIST_POISON,
  106|  42.3k|        .source = OFPBUF_STACK,
  107|  42.3k|    };
  108|  42.3k|}
ofp-actions.c:ofpbuf_msgsize:
  244|    102|{
  245|    102|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|    102|}
ofp-actions.c:ofpbuf_at_assert:
  195|  98.3k|{
  196|  98.3k|    ovs_assert(offset + size <= b->size);
  ------------------
  |  |   62|  98.3k|#define ovs_assert ovs_ignore
  ------------------
  197|  98.3k|    ovs_assert(b->data);
  ------------------
  |  |   62|  98.3k|#define ovs_assert ovs_ignore
  ------------------
  198|  98.3k|    return (char *) b->data + offset;
  199|  98.3k|}
ofp-actions.c:ofpbuf_tail:
  203|  63.0k|{
  204|  63.0k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  63.0k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 63.0k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  63.0k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 63.0k, False: 0]
  ------------------
  206|  63.0k|}
ofp-bundle.c:ofpbuf_const_initializer:
   97|  8.84k|{
   98|  8.84k|    return (struct ofpbuf) {
   99|  8.84k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.84k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.84k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.84k|     (TYPE) (POINTER))
  ------------------
  100|  8.84k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.84k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.84k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.84k|     (TYPE) (POINTER))
  ------------------
  101|  8.84k|        .size = size,
  102|  8.84k|        .allocated = size,
  103|  8.84k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  8.84k|        .list_node = OVS_LIST_POISON,
  106|  8.84k|        .source = OFPBUF_STACK,
  107|  8.84k|    };
  108|  8.84k|}
ofp-bundle.c:ofpbuf_pull:
  258|  3.88k|{
  259|  3.88k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  3.88k|#define ovs_assert ovs_ignore
  ------------------
  260|  3.88k|    void *data = b->data;
  261|       |
  262|  3.88k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 3.88k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  3.88k|    b->data = (char*)b->data + size;
  267|  3.88k|    b->size = b->size - size;
  268|  3.88k|    return data;
  269|  3.88k|}
ofp-connection.c:ofpbuf_const_initializer:
   97|  42.1k|{
   98|  42.1k|    return (struct ofpbuf) {
   99|  42.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  42.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  42.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  42.1k|     (TYPE) (POINTER))
  ------------------
  100|  42.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  42.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  42.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  42.1k|     (TYPE) (POINTER))
  ------------------
  101|  42.1k|        .size = size,
  102|  42.1k|        .allocated = size,
  103|  42.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  42.1k|        .list_node = OVS_LIST_POISON,
  106|  42.1k|        .source = OFPBUF_STACK,
  107|  42.1k|    };
  108|  42.1k|}
ofp-ct.c:ofpbuf_const_initializer:
   97|  16.1k|{
   98|  16.1k|    return (struct ofpbuf) {
   99|  16.1k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  16.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  16.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  16.1k|     (TYPE) (POINTER))
  ------------------
  100|  16.1k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  16.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  16.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  16.1k|     (TYPE) (POINTER))
  ------------------
  101|  16.1k|        .size = size,
  102|  16.1k|        .allocated = size,
  103|  16.1k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  16.1k|        .list_node = OVS_LIST_POISON,
  106|  16.1k|        .source = OFPBUF_STACK,
  107|  16.1k|    };
  108|  16.1k|}
ofp-ct.c:ofpbuf_pull:
  258|  16.1k|{
  259|  16.1k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  16.1k|#define ovs_assert ovs_ignore
  ------------------
  260|  16.1k|    void *data = b->data;
  261|       |
  262|  16.1k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 16.1k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  16.1k|    b->data = (char*)b->data + size;
  267|  16.1k|    b->size = b->size - size;
  268|  16.1k|    return data;
  269|  16.1k|}
ofp-ct.c:ofpbuf_msgsize:
  244|  14.7k|{
  245|  14.7k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  14.7k|}
ofp-ct.c:ofpbuf_tail:
  203|  14.7k|{
  204|  14.7k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  14.7k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 14.7k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  14.7k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 14.7k, False: 0]
  ------------------
  206|  14.7k|}
ofp-errors.c:ofpbuf_const_initializer:
   97|   670k|{
   98|   670k|    return (struct ofpbuf) {
   99|   670k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   670k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   670k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   670k|     (TYPE) (POINTER))
  ------------------
  100|   670k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   670k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   670k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   670k|     (TYPE) (POINTER))
  ------------------
  101|   670k|        .size = size,
  102|   670k|        .allocated = size,
  103|   670k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   670k|        .list_node = OVS_LIST_POISON,
  106|   670k|        .source = OFPBUF_STACK,
  107|   670k|    };
  108|   670k|}
ofp-errors.c:ofpbuf_pull:
  258|   799k|{
  259|   799k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   799k|#define ovs_assert ovs_ignore
  ------------------
  260|   799k|    void *data = b->data;
  261|       |
  262|   799k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 799k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   799k|    b->data = (char*)b->data + size;
  267|   799k|    b->size = b->size - size;
  268|   799k|    return data;
  269|   799k|}
ofp-errors.c:ofpbuf_try_pull:
  275|   136k|{
  276|   136k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 128k, False: 7.79k]
  ------------------
  277|   136k|}
ofp-flow.c:ofpbuf_const_initializer:
   97|  88.8k|{
   98|  88.8k|    return (struct ofpbuf) {
   99|  88.8k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  88.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  88.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  88.8k|     (TYPE) (POINTER))
  ------------------
  100|  88.8k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  88.8k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  88.8k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  88.8k|     (TYPE) (POINTER))
  ------------------
  101|  88.8k|        .size = size,
  102|  88.8k|        .allocated = size,
  103|  88.8k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  88.8k|        .list_node = OVS_LIST_POISON,
  106|  88.8k|        .source = OFPBUF_STACK,
  107|  88.8k|    };
  108|  88.8k|}
ofp-flow.c:ofpbuf_pull:
  258|   105k|{
  259|   105k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   105k|#define ovs_assert ovs_ignore
  ------------------
  260|   105k|    void *data = b->data;
  261|       |
  262|   105k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 105k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   105k|    b->data = (char*)b->data + size;
  267|   105k|    b->size = b->size - size;
  268|   105k|    return data;
  269|   105k|}
ofp-flow.c:ofpbuf_try_pull:
  275|  24.7k|{
  276|  24.7k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 20.6k, False: 4.14k]
  ------------------
  277|  24.7k|}
ofp-group.c:ofpbuf_const_initializer:
   97|  67.4k|{
   98|  67.4k|    return (struct ofpbuf) {
   99|  67.4k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  67.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  67.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  67.4k|     (TYPE) (POINTER))
  ------------------
  100|  67.4k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  67.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  67.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  67.4k|     (TYPE) (POINTER))
  ------------------
  101|  67.4k|        .size = size,
  102|  67.4k|        .allocated = size,
  103|  67.4k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  67.4k|        .list_node = OVS_LIST_POISON,
  106|  67.4k|        .source = OFPBUF_STACK,
  107|  67.4k|    };
  108|  67.4k|}
ofp-group.c:ofpbuf_pull:
  258|   102k|{
  259|   102k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   102k|#define ovs_assert ovs_ignore
  ------------------
  260|   102k|    void *data = b->data;
  261|       |
  262|   102k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 8.71k, False: 94.0k]
  ------------------
  263|  8.71k|        return data;
  264|  8.71k|    }
  265|       |
  266|  94.0k|    b->data = (char*)b->data + size;
  267|  94.0k|    b->size = b->size - size;
  268|  94.0k|    return data;
  269|   102k|}
ofp-group.c:ofpbuf_try_pull:
  275|  41.1k|{
  276|  41.1k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 39.1k, False: 1.97k]
  ------------------
  277|  41.1k|}
ofp-ipfix.c:ofpbuf_try_pull:
  275|  10.4k|{
  276|  10.4k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 10.4k, False: 0]
  ------------------
  277|  10.4k|}
ofp-ipfix.c:ofpbuf_pull:
  258|  10.4k|{
  259|  10.4k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  10.4k|#define ovs_assert ovs_ignore
  ------------------
  260|  10.4k|    void *data = b->data;
  261|       |
  262|  10.4k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 10.4k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  10.4k|    b->data = (char*)b->data + size;
  267|  10.4k|    b->size = b->size - size;
  268|  10.4k|    return data;
  269|  10.4k|}
ofp-ipfix.c:ofpbuf_const_initializer:
   97|  4.26k|{
   98|  4.26k|    return (struct ofpbuf) {
   99|  4.26k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.26k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.26k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.26k|     (TYPE) (POINTER))
  ------------------
  100|  4.26k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.26k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.26k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.26k|     (TYPE) (POINTER))
  ------------------
  101|  4.26k|        .size = size,
  102|  4.26k|        .allocated = size,
  103|  4.26k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  4.26k|        .list_node = OVS_LIST_POISON,
  106|  4.26k|        .source = OFPBUF_STACK,
  107|  4.26k|    };
  108|  4.26k|}
ofp-match.c:ofpbuf_pull:
  258|  13.5k|{
  259|  13.5k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  13.5k|#define ovs_assert ovs_ignore
  ------------------
  260|  13.5k|    void *data = b->data;
  261|       |
  262|  13.5k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 13.5k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  13.5k|    b->data = (char*)b->data + size;
  267|  13.5k|    b->size = b->size - size;
  268|  13.5k|    return data;
  269|  13.5k|}
ofp-match.c:ofpbuf_const_initializer:
   97|  2.95k|{
   98|  2.95k|    return (struct ofpbuf) {
   99|  2.95k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.95k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.95k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.95k|     (TYPE) (POINTER))
  ------------------
  100|  2.95k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.95k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.95k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.95k|     (TYPE) (POINTER))
  ------------------
  101|  2.95k|        .size = size,
  102|  2.95k|        .allocated = size,
  103|  2.95k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  2.95k|        .list_node = OVS_LIST_POISON,
  106|  2.95k|        .source = OFPBUF_STACK,
  107|  2.95k|    };
  108|  2.95k|}
ofp-meter.c:ofpbuf_const_initializer:
   97|  4.07k|{
   98|  4.07k|    return (struct ofpbuf) {
   99|  4.07k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.07k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.07k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.07k|     (TYPE) (POINTER))
  ------------------
  100|  4.07k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  4.07k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  4.07k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  4.07k|     (TYPE) (POINTER))
  ------------------
  101|  4.07k|        .size = size,
  102|  4.07k|        .allocated = size,
  103|  4.07k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  4.07k|        .list_node = OVS_LIST_POISON,
  106|  4.07k|        .source = OFPBUF_STACK,
  107|  4.07k|    };
  108|  4.07k|}
ofp-meter.c:ofpbuf_pull:
  258|  13.8k|{
  259|  13.8k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  13.8k|#define ovs_assert ovs_ignore
  ------------------
  260|  13.8k|    void *data = b->data;
  261|       |
  262|  13.8k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 2.53k, False: 11.3k]
  ------------------
  263|  2.53k|        return data;
  264|  2.53k|    }
  265|       |
  266|  11.3k|    b->data = (char*)b->data + size;
  267|  11.3k|    b->size = b->size - size;
  268|  11.3k|    return data;
  269|  13.8k|}
ofp-meter.c:ofpbuf_try_pull:
  275|  11.8k|{
  276|  11.8k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 9.76k, False: 2.05k]
  ------------------
  277|  11.8k|}
ofp-meter.c:ofpbuf_clear:
  250|  4.42k|{
  251|  4.42k|    b->data = b->base;
  252|  4.42k|    b->size = 0;
  253|  4.42k|}
ofp-monitor.c:ofpbuf_const_initializer:
   97|  9.89k|{
   98|  9.89k|    return (struct ofpbuf) {
   99|  9.89k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.89k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.89k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.89k|     (TYPE) (POINTER))
  ------------------
  100|  9.89k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  9.89k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  9.89k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  9.89k|     (TYPE) (POINTER))
  ------------------
  101|  9.89k|        .size = size,
  102|  9.89k|        .allocated = size,
  103|  9.89k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  9.89k|        .list_node = OVS_LIST_POISON,
  106|  9.89k|        .source = OFPBUF_STACK,
  107|  9.89k|    };
  108|  9.89k|}
ofp-monitor.c:ofpbuf_pull:
  258|  22.9k|{
  259|  22.9k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  22.9k|#define ovs_assert ovs_ignore
  ------------------
  260|  22.9k|    void *data = b->data;
  261|       |
  262|  22.9k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 22.9k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  22.9k|    b->data = (char*)b->data + size;
  267|  22.9k|    b->size = b->size - size;
  268|  22.9k|    return data;
  269|  22.9k|}
ofp-monitor.c:ofpbuf_try_pull:
  275|  7.99k|{
  276|  7.99k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 7.25k, False: 737]
  ------------------
  277|  7.99k|}
ofp-monitor.c:ofpbuf_clear:
  250|  13.2k|{
  251|  13.2k|    b->data = b->base;
  252|  13.2k|    b->size = 0;
  253|  13.2k|}
ofp-msgs.c:ofpbuf_const_initializer:
   97|  2.05M|{
   98|  2.05M|    return (struct ofpbuf) {
   99|  2.05M|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.05M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.05M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.05M|     (TYPE) (POINTER))
  ------------------
  100|  2.05M|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  2.05M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  2.05M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  2.05M|     (TYPE) (POINTER))
  ------------------
  101|  2.05M|        .size = size,
  102|  2.05M|        .allocated = size,
  103|  2.05M|        .header = NULL,
  104|       |        .msg = NULL,
  105|  2.05M|        .list_node = OVS_LIST_POISON,
  106|  2.05M|        .source = OFPBUF_STACK,
  107|  2.05M|    };
  108|  2.05M|}
ofp-msgs.c:ofpbuf_pull:
  258|  2.81M|{
  259|  2.81M|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  2.81M|#define ovs_assert ovs_ignore
  ------------------
  260|  2.81M|    void *data = b->data;
  261|       |
  262|  2.81M|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 2.81M]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|  2.81M|    b->data = (char*)b->data + size;
  267|  2.81M|    b->size = b->size - size;
  268|  2.81M|    return data;
  269|  2.81M|}
ofp-packet.c:ofpbuf_const_initializer:
   97|   277k|{
   98|   277k|    return (struct ofpbuf) {
   99|   277k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|   277k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   277k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   277k|     (TYPE) (POINTER))
  ------------------
  100|   277k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|   277k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   277k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   277k|     (TYPE) (POINTER))
  ------------------
  101|   277k|        .size = size,
  102|   277k|        .allocated = size,
  103|   277k|        .header = NULL,
  104|       |        .msg = NULL,
  105|   277k|        .list_node = OVS_LIST_POISON,
  106|   277k|        .source = OFPBUF_STACK,
  107|   277k|    };
  108|   277k|}
ofp-packet.c:ofpbuf_pull:
  258|   299k|{
  259|   299k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   299k|#define ovs_assert ovs_ignore
  ------------------
  260|   299k|    void *data = b->data;
  261|       |
  262|   299k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 299k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   299k|    b->data = (char*)b->data + size;
  267|   299k|    b->size = b->size - size;
  268|   299k|    return data;
  269|   299k|}
ofp-packet.c:ofpbuf_try_pull:
  275|  38.5k|{
  276|  38.5k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 36.0k, False: 2.50k]
  ------------------
  277|  38.5k|}
ofp-packet.c:ofpbuf_msgsize:
  244|  20.3k|{
  245|  20.3k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  20.3k|}
ofp-packet.c:ofpbuf_tail:
  203|  20.3k|{
  204|  20.3k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  20.3k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 20.3k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  20.3k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 20.3k, False: 0]
  ------------------
  206|  20.3k|}
ofp-packet.c:ofpbuf_headersize:
  236|  10.9k|{
  237|  10.9k|    return (char *)b->msg - (char *)b->header;
  238|  10.9k|}
ofp-packet.c:ofpbuf_clear:
  250|   185k|{
  251|   185k|    b->data = b->base;
  252|   185k|    b->size = 0;
  253|   185k|}
ofp-port.c:ofpbuf_const_initializer:
   97|  22.6k|{
   98|  22.6k|    return (struct ofpbuf) {
   99|  22.6k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  22.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  22.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  22.6k|     (TYPE) (POINTER))
  ------------------
  100|  22.6k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  22.6k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  22.6k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  22.6k|     (TYPE) (POINTER))
  ------------------
  101|  22.6k|        .size = size,
  102|  22.6k|        .allocated = size,
  103|  22.6k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  22.6k|        .list_node = OVS_LIST_POISON,
  106|  22.6k|        .source = OFPBUF_STACK,
  107|  22.6k|    };
  108|  22.6k|}
ofp-port.c:ofpbuf_pull:
  258|   146k|{
  259|   146k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   146k|#define ovs_assert ovs_ignore
  ------------------
  260|   146k|    void *data = b->data;
  261|       |
  262|   146k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 11.5k, False: 134k]
  ------------------
  263|  11.5k|        return data;
  264|  11.5k|    }
  265|       |
  266|   134k|    b->data = (char*)b->data + size;
  267|   134k|    b->size = b->size - size;
  268|   134k|    return data;
  269|   146k|}
ofp-port.c:ofpbuf_try_pull:
  275|   138k|{
  276|   138k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 132k, False: 5.88k]
  ------------------
  277|   138k|}
ofp-prop.c:ofpbuf_pull:
  258|   197k|{
  259|   197k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|   197k|#define ovs_assert ovs_ignore
  ------------------
  260|   197k|    void *data = b->data;
  261|       |
  262|   197k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 0, False: 197k]
  ------------------
  263|      0|        return data;
  264|      0|    }
  265|       |
  266|   197k|    b->data = (char*)b->data + size;
  267|   197k|    b->size = b->size - size;
  268|   197k|    return data;
  269|   197k|}
ofp-prop.c:ofpbuf_msgsize:
  244|  43.3k|{
  245|  43.3k|    return (char *)ofpbuf_tail(b) - (char *)b->msg;
  246|  43.3k|}
ofp-prop.c:ofpbuf_tail:
  203|  43.3k|{
  204|  43.3k|    ovs_assert(b->data || !b->size);
  ------------------
  |  |   62|  43.3k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (204:16): [True: 43.3k, False: 0]
  |  Branch (204:27): [True: 0, False: 0]
  ------------------
  205|  43.3k|    return b->data ? (char *) b->data + b->size : NULL;
  ------------------
  |  Branch (205:12): [True: 43.3k, False: 0]
  ------------------
  206|  43.3k|}
ofp-prop.c:ofpbuf_headersize:
  236|  23.0k|{
  237|  23.0k|    return (char *)b->msg - (char *)b->header;
  238|  23.0k|}
ox-stat.c:ofpbuf_try_pull:
  275|  12.3k|{
  276|  12.3k|    return b->size >= size ? ofpbuf_pull(b, size) : NULL;
  ------------------
  |  Branch (276:12): [True: 10.3k, False: 1.98k]
  ------------------
  277|  12.3k|}
ox-stat.c:ofpbuf_pull:
  258|  13.6k|{
  259|  13.6k|    ovs_assert(b->size >= size);
  ------------------
  |  |   62|  13.6k|#define ovs_assert ovs_ignore
  ------------------
  260|  13.6k|    void *data = b->data;
  261|       |
  262|  13.6k|    if (!size) {
  ------------------
  |  Branch (262:9): [True: 1.15k, False: 12.4k]
  ------------------
  263|  1.15k|        return data;
  264|  1.15k|    }
  265|       |
  266|  12.4k|    b->data = (char*)b->data + size;
  267|  12.4k|    b->size = b->size - size;
  268|  12.4k|    return data;
  269|  13.6k|}
ox-stat.c:ofpbuf_const_initializer:
   97|  8.35k|{
   98|  8.35k|    return (struct ofpbuf) {
   99|  8.35k|        .base = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.35k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.35k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.35k|     (TYPE) (POINTER))
  ------------------
  100|  8.35k|        .data = CONST_CAST(void *, data),
  ------------------
  |  |   85|  8.35k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  8.35k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  8.35k|     (TYPE) (POINTER))
  ------------------
  101|  8.35k|        .size = size,
  102|  8.35k|        .allocated = size,
  103|  8.35k|        .header = NULL,
  104|       |        .msg = NULL,
  105|  8.35k|        .list_node = OVS_LIST_POISON,
  106|  8.35k|        .source = OFPBUF_STACK,
  107|  8.35k|    };
  108|  8.35k|}

nx-match.c:ovsthread_once_start:
  156|  22.5M|{
  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.5M|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   66|  22.5M|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:53): [True: 1, False: 22.5M]
  |  |  |  Branch (66:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|  22.5M|}
ofp-actions.c:ovsthread_once_start:
  156|   303k|{
  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|   303k|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   66|   303k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:53): [True: 1, False: 303k]
  |  |  |  Branch (66:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|   303k|}
ofp-msgs.c:ovsthread_once_start:
  156|  8.95M|{
  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|  8.95M|    return OVS_UNLIKELY(!once->done && ovsthread_once_start__(once));
  ------------------
  |  |   66|  8.95M|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:53): [True: 1, False: 8.95M]
  |  |  |  Branch (66:53): [True: 1, False: 0]
  |  |  ------------------
  ------------------
  162|  8.95M|}

ofp-actions.c:is_pow2:
  399|  5.37k|{
  400|  5.37k|    return IS_POW2(x);
  ------------------
  |  |  312|  5.37k|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (312:21): [True: 5.37k, False: 0]
  |  |  |  Branch (312:28): [True: 4.18k, False: 1.19k]
  |  |  ------------------
  ------------------
  401|  5.37k|}
hmap.c:is_pow2:
  399|     28|{
  400|     28|    return IS_POW2(x);
  ------------------
  |  |  312|     28|#define IS_POW2(X) ((X) && !((X) & ((X) - 1)))
  |  |  ------------------
  |  |  |  Branch (312:21): [True: 28, False: 0]
  |  |  |  Branch (312:28): [True: 28, False: 0]
  |  |  ------------------
  ------------------
  401|     28|}

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

ofp-table.c:bitmap_n_bytes:
   44|  3.04k|{
   45|  3.04k|    return bitmap_n_longs(n_bits) * sizeof(unsigned long int);
   46|  3.04k|}
ofp-table.c:bitmap_n_longs:
   38|  3.04k|{
   39|  3.04k|    return BITMAP_N_LONGS(n_bits);
  ------------------
  |  |  424|  3.04k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  3.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   40|  3.04k|}
ofp-table.c:bitmap_set1:
   96|   157k|{
   97|   157k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   157k|    return bitmap;
   99|   157k|}
ofp-table.c:bitmap_bit__:
   32|   159k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   159k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   159k|}
ofp-table.c:bitmap_unit__:
   26|  1.14M|{
   27|  1.14M|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  1.14M|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  1.14M|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  1.14M|     (TYPE) (POINTER))
  ------------------
   28|  1.14M|}
ofp-table.c:bitmap_or:
  179|  25.0k|{
  180|  25.0k|    size_t i;
  181|       |
  182|   125k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   125k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   125k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (182:17): [True: 100k, False: 25.0k]
  ------------------
  183|   100k|        dst[i] |= arg[i];
  184|   100k|    }
  185|  25.0k|    return dst;
  186|  25.0k|}
ofp-table.c:bitmap_and:
  167|  2.05k|{
  168|  2.05k|    size_t i;
  169|       |
  170|  10.2k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  10.2k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  10.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 8.21k, False: 2.05k]
  ------------------
  171|  8.21k|        dst[i] &= arg[i];
  172|  8.21k|    }
  173|  2.05k|    return dst;
  174|  2.05k|}
ofp-table.c:bitmap_scan:
  227|   626k|{
  228|   626k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   626k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 626k, False: 0]
  |  |  ------------------
  ------------------
  229|   626k|        unsigned long *p, unit;
  230|       |
  231|   626k|        p = bitmap_unit__(bitmap, start);
  232|   626k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   626k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 626k, False: 0]
  ------------------
  233|   626k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 328k, False: 297k]
  ------------------
  234|   328k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|   328k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|   328k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|   328k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|   817k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   488k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 639k, False: 178k]
  ------------------
  238|   639k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 639k, False: 0]
  ------------------
  239|   639k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 150k, False: 488k]
  ------------------
  240|   150k|                    goto found;
  241|   150k|                }
  242|   639k|            }
  243|   178k|            return end;
  244|   328k|        }
  245|   448k|found:
  246|   448k|        start += raw_ctz(unit);  /* unit != 0 */
  247|   448k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|   448k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 448k, False: 0]
  |  |  ------------------
  ------------------
  248|   448k|            return start;
  249|   448k|        }
  250|   448k|    }
  251|      0|    return end;
  252|   626k|}
ofp-table.c:bitmap_is_set:
   90|  1.28k|{
   91|  1.28k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  1.28k|}
ofp-table.c:bitmap_is_all_zeros:
  273|   206k|{
  274|       |    return bitmap_scan(bitmap, true, 0, n) == n;
  275|   206k|}
ofp-table.c:bitmap_equal:
  207|   203k|{
  208|   203k|    if (memcmp(a, b, n / BITMAP_ULONG_BITS * sizeof(unsigned long))) {
  ------------------
  |  |  423|   203k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (208:9): [True: 23.1k, False: 180k]
  ------------------
  209|  23.1k|        return false;
  210|  23.1k|    }
  211|   180k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|   180k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (211:9): [True: 180k, False: 0]
  ------------------
  212|   180k|        unsigned long mask = (1UL << n % BITMAP_ULONG_BITS) - 1;
  ------------------
  |  |  423|   180k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  213|   180k|        unsigned long diff = *bitmap_unit__(a, n) ^ *bitmap_unit__(b, n);
  214|       |
  215|   180k|        return !(diff & mask);
  216|   180k|    }
  217|      0|    return true;
  218|   180k|}
meta-flow.c:bitmap_scan:
  227|  15.4k|{
  228|  15.4k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  15.4k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 14.6k, False: 804]
  |  |  ------------------
  ------------------
  229|  14.6k|        unsigned long *p, unit;
  230|       |
  231|  14.6k|        p = bitmap_unit__(bitmap, start);
  232|  14.6k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  14.6k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 14.6k, False: 0]
  ------------------
  233|  14.6k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 11.0k, False: 3.58k]
  ------------------
  234|  11.0k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  11.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  11.0k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  11.0k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  16.5k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  5.50k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 9.30k, False: 7.22k]
  ------------------
  238|  9.30k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 9.30k, False: 0]
  ------------------
  239|  9.30k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 3.79k, False: 5.50k]
  ------------------
  240|  3.79k|                    goto found;
  241|  3.79k|                }
  242|  9.30k|            }
  243|  7.22k|            return end;
  244|  11.0k|        }
  245|  7.38k|found:
  246|  7.38k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  7.38k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  7.38k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 6.21k, False: 1.17k]
  |  |  ------------------
  ------------------
  248|  6.21k|            return start;
  249|  6.21k|        }
  250|  7.38k|    }
  251|  1.97k|    return end;
  252|  15.4k|}
meta-flow.c:bitmap_unit__:
   26|  33.0k|{
   27|  33.0k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|  33.0k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  33.0k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  33.0k|     (TYPE) (POINTER))
  ------------------
   28|  33.0k|}
meta-flow.c:bitmap_is_set:
   90|  9.20k|{
   91|  9.20k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  9.20k|}
meta-flow.c:bitmap_bit__:
   32|  18.4k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  18.4k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|  18.4k|}
meta-flow.c:bitmap_set1:
   96|  9.20k|{
   97|  9.20k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|  9.20k|    return bitmap;
   99|  9.20k|}
meta-flow.c:bitmap_and:
  167|   125k|{
  168|   125k|    size_t i;
  169|       |
  170|   628k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|   628k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|   628k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (170:17): [True: 503k, False: 125k]
  ------------------
  171|   503k|        dst[i] &= arg[i];
  172|   503k|    }
  173|   125k|    return dst;
  174|   125k|}
meta-flow.c:bitmap_not:
  191|  62.8k|{
  192|  62.8k|    size_t i;
  193|       |
  194|   251k|    for (i = 0; i < n / BITMAP_ULONG_BITS; i++) {
  ------------------
  |  |  423|   251k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (194:17): [True: 188k, False: 62.8k]
  ------------------
  195|   188k|        dst[i] = ~dst[i];
  196|   188k|    }
  197|  62.8k|    if (n % BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  62.8k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (197:9): [True: 62.8k, False: 0]
  ------------------
  198|       |        dst[i] ^= (1UL << (n % BITMAP_ULONG_BITS)) - 1;
  ------------------
  |  |  423|  62.8k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  199|  62.8k|    }
  200|  62.8k|    return dst;
  201|  62.8k|}
nx-match.c:bitmap_is_set:
   90|  9.32k|{
   91|  9.32k|    return (*bitmap_unit__(bitmap, offset) & bitmap_bit__(offset)) != 0;
   92|  9.32k|}
nx-match.c:bitmap_unit__:
   26|   413k|{
   27|   413k|    return CONST_CAST(unsigned long *, &bitmap[offset / BITMAP_ULONG_BITS]);
  ------------------
  |  |   85|   413k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   413k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   413k|     (TYPE) (POINTER))
  ------------------
   28|   413k|}
nx-match.c:bitmap_bit__:
   32|   402k|{
   33|       |    return 1UL << (offset % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|   402k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
   34|   402k|}
nx-match.c:bitmap_scan:
  227|  11.2k|{
  228|  11.2k|    if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  11.2k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 11.1k, False: 59]
  |  |  ------------------
  ------------------
  229|  11.1k|        unsigned long *p, unit;
  230|       |
  231|  11.1k|        p = bitmap_unit__(bitmap, start);
  232|  11.1k|        unit = (target ? *p : ~*p) >> (start % BITMAP_ULONG_BITS);
  ------------------
  |  |  423|  11.1k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (232:17): [True: 11.1k, False: 0]
  ------------------
  233|  11.1k|        if (!unit) {
  ------------------
  |  Branch (233:13): [True: 7.56k, False: 3.59k]
  ------------------
  234|  7.56k|            start -= start % BITMAP_ULONG_BITS; /* Round down. */
  ------------------
  |  |  423|  7.56k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  235|  7.56k|            start += BITMAP_ULONG_BITS; /* Start of the next unit. */
  ------------------
  |  |  423|  7.56k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  236|       |
  237|  11.5k|            for (; start < end; start += BITMAP_ULONG_BITS) {
  ------------------
  |  |  423|  3.98k|#define BITMAP_ULONG_BITS (sizeof(unsigned long) * CHAR_BIT)
  ------------------
  |  Branch (237:20): [True: 8.70k, False: 2.84k]
  ------------------
  238|  8.70k|                unit = target ? *++p : ~*++p;
  ------------------
  |  Branch (238:24): [True: 8.70k, False: 0]
  ------------------
  239|  8.70k|                if (unit) {
  ------------------
  |  Branch (239:21): [True: 4.72k, False: 3.98k]
  ------------------
  240|  4.72k|                    goto found;
  241|  4.72k|                }
  242|  8.70k|            }
  243|  2.84k|            return end;
  244|  7.56k|        }
  245|  8.31k|found:
  246|  8.31k|        start += raw_ctz(unit);  /* unit != 0 */
  247|  8.31k|        if (OVS_LIKELY(start < end)) {
  ------------------
  |  |   65|  8.31k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.31k, False: 0]
  |  |  ------------------
  ------------------
  248|  8.31k|            return start;
  249|  8.31k|        }
  250|  8.31k|    }
  251|     59|    return end;
  252|  11.2k|}
nx-match.c:bitmap_set1:
   96|   393k|{
   97|   393k|    *bitmap_unit__(bitmap, offset) |= bitmap_bit__(offset);
   98|   393k|    return bitmap;
   99|   393k|}
ofp-group.c:bitmap_count1:
  153|  3.04k|{
  154|  3.04k|    size_t i;
  155|  3.04k|    size_t count = 0;
  156|       |
  157|  3.04k|    BUILD_ASSERT(ULONG_MAX <= UINT64_MAX);
  ------------------
  |  |  271|  3.04k|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
  158|  15.2k|    for (i = 0; i < BITMAP_N_LONGS(n); i++) {
  ------------------
  |  |  424|  15.2k|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|  15.2k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (158:17): [True: 12.1k, False: 3.04k]
  ------------------
  159|  12.1k|        count += count_1bits(bitmap[i]);
  160|  12.1k|    }
  161|  3.04k|    return count;
  162|  3.04k|}

bundle_check:
  111|  2.71k|{
  112|  2.71k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  2.71k|        {                                                                 \
  |  |  111|  2.71k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  10.8k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 2.71k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  2.71k|            0,                              /* first_dropped */           \
  |  |  113|  2.71k|            0,                              /* last_dropped */            \
  |  |  114|  2.71k|            0,                              /* n_dropped */               \
  |  |  115|  2.71k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  2.71k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  2.71k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  2.71k|        }
  ------------------
  113|  2.71k|    size_t i;
  114|       |
  115|  2.71k|    if (bundle->dst.field) {
  ------------------
  |  Branch (115:9): [True: 1.91k, False: 802]
  ------------------
  116|  1.91k|        enum ofperr error = mf_check_dst(&bundle->dst, match);
  117|  1.91k|        if (error) {
  ------------------
  |  Branch (117:13): [True: 11, False: 1.90k]
  ------------------
  118|     11|            return error;
  119|     11|        }
  120|  1.91k|    }
  121|       |
  122|  15.2k|    for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (122:17): [True: 13.4k, False: 1.81k]
  ------------------
  123|  13.4k|        ofp_port_t ofp_port = bundle->members[i];
  124|       |
  125|  13.4k|        if (ofp_port != OFPP_NONE) {
  ------------------
  |  |   47|  13.4k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  13.4k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (125:13): [True: 10.5k, False: 2.83k]
  ------------------
  126|  10.5k|            enum ofperr error = ofpact_check_output_port(ofp_port, max_ports);
  127|  10.5k|            if (error) {
  ------------------
  |  Branch (127:17): [True: 421, False: 10.1k]
  ------------------
  128|    421|                VLOG_WARN_RL(&rl, "invalid member %"PRIu32, ofp_port);
  ------------------
  |  |  224|    421|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    421|    do {                                                                \
  |  |  |  |  288|    421|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    421|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 421]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    421|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 421]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  129|    421|                return error;
  130|    421|            }
  131|  10.5k|        }
  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|  12.9k|        if (ofp_port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  12.9k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  12.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (135:13): [True: 472, False: 12.5k]
  ------------------
  136|    472|            VLOG_WARN_RL(&rl, "unsupported controller member");
  ------------------
  |  |  224|    472|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    472|    do {                                                                \
  |  |  |  |  288|    472|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    472|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 472]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    472|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 472]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  137|    472|            return OFPERR_OFPBAC_BAD_OUT_PORT;
  138|    472|        }
  139|  12.9k|    }
  140|       |
  141|  1.81k|    return 0;
  142|  2.70k|}
bundle_format:
  305|  1.06k|{
  306|  1.06k|    const char *action, *fields, *algorithm;
  307|  1.06k|    size_t i;
  308|       |
  309|  1.06k|    fields = flow_hash_fields_to_str(bundle->fields);
  310|       |
  311|  1.06k|    switch (bundle->algorithm) {
  312|    155|    case NX_BD_ALG_HRW:
  ------------------
  |  Branch (312:5): [True: 155, False: 914]
  ------------------
  313|    155|        algorithm = "hrw";
  314|    155|        break;
  315|    864|    case NX_BD_ALG_ACTIVE_BACKUP:
  ------------------
  |  Branch (315:5): [True: 864, False: 205]
  ------------------
  316|    864|        algorithm = "active_backup";
  317|    864|        break;
  318|     50|    default:
  ------------------
  |  Branch (318:5): [True: 50, False: 1.01k]
  ------------------
  319|     50|        algorithm = "<unknown>";
  320|  1.06k|    }
  321|       |
  322|  1.06k|    action = bundle->dst.field ? "bundle_load" : "bundle";
  ------------------
  |  Branch (322:14): [True: 592, False: 477]
  ------------------
  323|       |
  324|  1.06k|    ds_put_format(s, "%s%s(%s%s,%"PRIu16",%s,%s,", colors.paren, action,
  325|  1.06k|                  colors.end, fields, bundle->basis, algorithm, "ofport");
  326|       |
  327|  1.06k|    if (bundle->dst.field) {
  ------------------
  |  Branch (327:9): [True: 592, False: 477]
  ------------------
  328|    592|        mf_format_subfield(&bundle->dst, s);
  329|    592|        ds_put_char(s, ',');
  330|    592|    }
  331|       |
  332|  1.06k|    ds_put_format(s, "%smembers:%s", colors.param, colors.end);
  333|  7.23k|    for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (333:17): [True: 6.16k, False: 1.06k]
  ------------------
  334|  6.16k|        if (i) {
  ------------------
  |  Branch (334:13): [True: 5.26k, False: 905]
  ------------------
  335|  5.26k|            ds_put_char(s, ',');
  336|  5.26k|        }
  337|       |
  338|  6.16k|        ofputil_format_port(bundle->members[i], port_map, s);
  339|  6.16k|    }
  340|       |
  341|  1.06k|    ds_put_format(s, "%s)%s", colors.paren, colors.end);
  342|  1.06k|}

ofp-queue.c:ntohll:
   35|  47.2k|{
   36|  47.2k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 47.2k]
  ------------------
   37|  47.2k|}
ofp-switch.c:ntohll:
   35|  4.36k|{
   36|  4.36k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.36k]
  ------------------
   37|  4.36k|}
ofp-table.c:ntohll:
   35|  91.3k|{
   36|  91.3k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 91.3k]
  ------------------
   37|  91.3k|}
util.c:htonll:
   29|  7.41k|{
   30|  7.41k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 7.41k]
  ------------------
   31|  7.41k|}
util.c:ntohll:
   35|  2.10k|{
   36|  2.10k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 2.10k]
  ------------------
   37|  2.10k|}
flow.c:be32_to_be16:
  135|  49.3k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
flow.c:bytes_to_be32:
  110|  9.63k|{
  111|       |#if WORDS_BIGENDIAN
  112|       |    uint32_t x = ((uint32_t) b0 << 24) | (b1 << 16) | (b2 << 8) | b3;
  113|       |#else
  114|  9.63k|    uint32_t x = ((uint32_t) b3 << 24) | (b2 << 16) | (b1 << 8) | b0;
  115|  9.63k|#endif
  116|  9.63k|    return (OVS_FORCE ovs_be32) x;
  117|  9.63k|}
match.c:hton128:
   48|    911|{
   49|    911|    ovs_be128 dst;
   50|       |
   51|    911|    dst.be64.hi = htonll(src.u64.hi);
   52|    911|    dst.be64.lo = htonll(src.u64.lo);
   53|    911|    return dst;
   54|    911|}
match.c:htonll:
   29|   364k|{
   30|   364k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 364k]
  ------------------
   31|   364k|}
match.c:be32_to_be16:
  135|  24.0k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
match.c:ntohll:
   35|  6.21k|{
   36|  6.21k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 6.21k]
  ------------------
   37|  6.21k|}
meta-flow.c:be32_to_be16:
  135|  11.8k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
meta-flow.c:hton128:
   48|    428|{
   49|    428|    ovs_be128 dst;
   50|       |
   51|    428|    dst.be64.hi = htonll(src.u64.hi);
   52|    428|    dst.be64.lo = htonll(src.u64.lo);
   53|    428|    return dst;
   54|    428|}
meta-flow.c:htonll:
   29|  4.57k|{
   30|  4.57k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 4.57k]
  ------------------
   31|  4.57k|}
meta-flow.c:ntoh128:
   58|  3.73k|{
   59|  3.73k|    ovs_u128 dst;
   60|       |
   61|  3.73k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  3.73k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  3.73k|    return dst;
   64|  3.73k|}
meta-flow.c:ntohll:
   35|  15.8k|{
   36|  15.8k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 15.8k]
  ------------------
   37|  15.8k|}
nx-match.c:ntohll:
   35|  19.1k|{
   36|  19.1k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 19.1k]
  ------------------
   37|  19.1k|}
nx-match.c:htonll:
   29|  1.85M|{
   30|  1.85M|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 1.85M]
  ------------------
   31|  1.85M|}
ofp-actions.c:ntohll:
   35|  11.5k|{
   36|  11.5k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 11.5k]
  ------------------
   37|  11.5k|}
ofp-actions.c:be32_to_be16:
  135|  15.5k|static inline ovs_be16 be32_to_be16(ovs_be32 x) { return x >> 16; }
ofp-connection.c:ntohll:
   35|  4.81k|{
   36|  4.81k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 4.81k]
  ------------------
   37|  4.81k|}
ofp-ct.c:hton128:
   48|  3.02k|{
   49|  3.02k|    ovs_be128 dst;
   50|       |
   51|  3.02k|    dst.be64.hi = htonll(src.u64.hi);
   52|  3.02k|    dst.be64.lo = htonll(src.u64.lo);
   53|  3.02k|    return dst;
   54|  3.02k|}
ofp-ct.c:htonll:
   29|  6.04k|{
   30|  6.04k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 6.04k]
  ------------------
   31|  6.04k|}
ofp-flow.c:htonll:
   29|   196k|{
   30|   196k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 196k]
  ------------------
   31|   196k|}
ofp-flow.c:ntohll:
   35|  58.6k|{
   36|  58.6k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 58.6k]
  ------------------
   37|  58.6k|}
ofp-group.c:ntohll:
   35|  59.7k|{
   36|  59.7k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 59.7k]
  ------------------
   37|  59.7k|}
ofp-ipfix.c:ntohll:
   35|   104k|{
   36|   104k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 104k]
  ------------------
   37|   104k|}
ofp-meter.c:ntohll:
   35|  7.27k|{
   36|  7.27k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 7.27k]
  ------------------
   37|  7.27k|}
ofp-monitor.c:ntohll:
   35|  12.5k|{
   36|  12.5k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 12.5k]
  ------------------
   37|  12.5k|}
ofp-monitor.c:htonll:
   29|  3.71k|{
   30|  3.71k|    return htonl(1) == 1 ? n : ((uint64_t) htonl(n) << 32) | htonl(n >> 32);
  ------------------
  |  Branch (30:12): [True: 0, False: 3.71k]
  ------------------
   31|  3.71k|}
ofp-packet.c:ntohll:
   35|  1.54k|{
   36|  1.54k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.54k]
  ------------------
   37|  1.54k|}
ofp-port.c:ntohll:
   35|   224k|{
   36|   224k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 224k]
  ------------------
   37|   224k|}
ofp-prop.c:ntohll:
   35|  3.04k|{
   36|  3.04k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 3.04k]
  ------------------
   37|  3.04k|}
ofp-prop.c:ntoh128:
   58|  1.52k|{
   59|  1.52k|    ovs_u128 dst;
   60|       |
   61|  1.52k|    dst.u64.hi = ntohll(src.be64.hi);
   62|  1.52k|    dst.u64.lo = ntohll(src.be64.lo);
   63|  1.52k|    return dst;
   64|  1.52k|}
ox-stat.c:ntohll:
   35|  1.00k|{
   36|  1.00k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 1.00k]
  ------------------
   37|  1.00k|}
learn.c:ntohll:
   35|  14.3k|{
   36|  14.3k|    return htonl(1) == 1 ? n : ((uint64_t) ntohl(n) << 32) | ntohl(n >> 32);
  ------------------
  |  Branch (36:12): [True: 0, False: 14.3k]
  ------------------
   37|  14.3k|}

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

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

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

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

ds_init:
   30|  2.35M|{
   31|       |    ds->string = NULL;
   32|  2.35M|    ds->length = 0;
   33|  2.35M|    ds->allocated = 0;
   34|  2.35M|}
ds_reserve:
   60|  11.8M|{
   61|  11.8M|    if (min_length > ds->allocated || !ds->string) {
  ------------------
  |  Branch (61:9): [True: 9.08M, False: 2.73M]
  |  Branch (61:39): [True: 0, False: 2.73M]
  ------------------
   62|  9.08M|        ds->allocated += MAX(min_length, ds->allocated);
  ------------------
  |  |   95|  9.08M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 9.08M, False: 0]
  |  |  ------------------
  ------------------
   63|  9.08M|        ds->allocated = MAX(8, ds->allocated);
  ------------------
  |  |   95|  9.08M|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 13.4k, False: 9.06M]
  |  |  ------------------
  ------------------
   64|  9.08M|        ds->string = xrealloc(ds->string, ds->allocated + 1);
   65|  9.08M|    }
   66|  11.8M|}
ds_put_uninit:
   73|  6.46M|{
   74|  6.46M|    ds_reserve(ds, ds->length + n);
   75|  6.46M|    ds->length += n;
   76|  6.46M|    ds->string[ds->length] = '\0';
   77|  6.46M|    return &ds->string[ds->length - n];
   78|  6.46M|}
ds_put_char__:
   82|   464k|{
   83|   464k|    *ds_put_uninit(ds, 1) = c;
   84|   464k|}
ds_put_char_multiple:
  113|  10.4k|{
  114|  10.4k|    memset(ds_put_uninit(ds, n), c, n);
  115|  10.4k|}
ds_put_cstr:
  125|  5.98M|{
  126|  5.98M|    size_t s_len = strlen(s);
  127|  5.98M|    memcpy(ds_put_uninit(ds, s_len), s, s_len);
  128|  5.98M|}
ds_put_and_free_cstr:
  132|  1.89k|{
  133|  1.89k|    ds_put_cstr(ds, s);
  134|  1.89k|    free(s);
  135|  1.89k|}
ds_put_format:
  139|   105M|{
  140|   105M|    va_list args;
  141|       |
  142|   105M|    va_start(args, format);
  143|   105M|    ds_put_format_valist(ds, format, args);
  144|       |    va_end(args);
  145|   105M|}
ds_put_format_valist:
  149|   105M|{
  150|   105M|    va_list args;
  151|   105M|    size_t available;
  152|   105M|    int needed;
  153|       |
  154|   105M|    va_copy(args, args_);
  155|   105M|    available = ds->string ? ds->allocated - ds->length + 1 : 0;
  ------------------
  |  Branch (155:17): [True: 105M, False: 675k]
  ------------------
  156|   105M|    needed = vsnprintf(ds->string
  ------------------
  |  Branch (156:24): [True: 105M, False: 675k]
  ------------------
  157|   105M|                       ? &ds->string[ds->length]
  158|   105M|                       : NULL,
  159|   105M|                       available, format, args);
  160|   105M|    va_end(args);
  161|       |
  162|   105M|    if (needed < available) {
  ------------------
  |  Branch (162:9): [True: 100M, False: 5.29M]
  ------------------
  163|   100M|        ds->length += needed;
  164|   100M|    } else {
  165|  5.29M|        ds_reserve(ds, ds->length + needed);
  166|       |
  167|  5.29M|        va_copy(args, args_);
  168|  5.29M|        available = ds->allocated - ds->length + 1;
  169|  5.29M|        needed = vsnprintf(&ds->string[ds->length],
  170|  5.29M|                           available, format, args);
  171|  5.29M|        va_end(args);
  172|       |
  173|  5.29M|        ovs_assert(needed < available);
  ------------------
  |  |   62|  5.29M|#define ovs_assert ovs_ignore
  ------------------
  174|  5.29M|        ds->length += needed;
  175|  5.29M|    }
  176|   105M|}
ds_put_printable:
  180|  15.8k|{
  181|  15.8k|    ds_reserve(ds, ds->length + n);
  182|   766k|    while (n-- > 0) {
  ------------------
  |  Branch (182:12): [True: 751k, False: 15.8k]
  ------------------
  183|   751k|        unsigned char c = *s++;
  184|   751k|        if (c < 0x20 || c > 0x7e || c == '\\' || c == '"') {
  ------------------
  |  Branch (184:13): [True: 476k, False: 274k]
  |  Branch (184:25): [True: 136k, False: 137k]
  |  Branch (184:37): [True: 233, False: 137k]
  |  Branch (184:50): [True: 657, False: 136k]
  ------------------
  185|   614k|            ds_put_format(ds, "\\%03o", (int) c);
  186|   614k|        } else {
  187|   136k|            ds_put_char(ds, c);
  188|   136k|        }
  189|   751k|    }
  190|  15.8k|}
ds_cstr:
  343|  2.38M|{
  344|  2.38M|    if (!ds->string) {
  ------------------
  |  Branch (344:9): [True: 0, False: 2.38M]
  ------------------
  345|      0|        ds_reserve(ds, 0);
  346|      0|    }
  347|  2.38M|    ds->string[ds->length] = '\0';
  348|  2.38M|    return ds->string;
  349|  2.38M|}
ds_steal_cstr:
  362|  2.33M|{
  363|  2.33M|    char *s = ds_cstr(ds);
  364|  2.33M|    ds_init(ds);
  365|  2.33M|    return s;
  366|  2.33M|}
ds_destroy:
  370|    654|{
  371|    654|    free(ds->string);
  372|    654|}
ds_put_hex:
  385|  44.1k|{
  386|  44.1k|    const uint8_t *buf = buf_;
  387|  44.1k|    bool printed = false;
  388|  44.1k|    int i;
  389|       |
  390|  1.30M|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (390:17): [True: 1.25M, False: 44.1k]
  ------------------
  391|  1.25M|        uint8_t val = buf[i];
  392|  1.25M|        if (val || printed) {
  ------------------
  |  Branch (392:13): [True: 62.2k, False: 1.19M]
  |  Branch (392:20): [True: 17.8k, False: 1.17M]
  ------------------
  393|  80.0k|            if (!printed) {
  ------------------
  |  Branch (393:17): [True: 27.8k, False: 52.2k]
  ------------------
  394|  27.8k|                ds_put_format(ds, "0x%"PRIx8, val);
  395|  52.2k|            } else {
  396|  52.2k|                ds_put_format(ds, "%02"PRIx8, val);
  397|  52.2k|            }
  398|  80.0k|            printed = true;
  399|  80.0k|        }
  400|  1.25M|    }
  401|  44.1k|    if (!printed) {
  ------------------
  |  Branch (401:9): [True: 16.3k, False: 27.8k]
  ------------------
  402|  16.3k|        ds_put_char(ds, '0');
  403|  16.3k|    }
  404|  44.1k|}
ds_put_hex_with_delimiter:
  409|  4.24k|{
  410|  4.24k|    const uint8_t *buf = buf_;
  411|  4.24k|    size_t i;
  412|       |
  413|  30.0k|    for (i = 0; i < size; i++) {
  ------------------
  |  Branch (413:17): [True: 25.8k, False: 4.24k]
  ------------------
  414|  25.8k|        if (i && delimiter) {
  ------------------
  |  Branch (414:13): [True: 21.6k, False: 4.24k]
  |  Branch (414:18): [True: 21.6k, False: 0]
  ------------------
  415|  21.6k|            ds_put_format(ds, "%s", delimiter);
  416|  21.6k|        }
  417|       |        ds_put_format(ds, "%02" PRIx8, buf[i]);
  418|  25.8k|    }
  419|  4.24k|}
ds_put_hex_dump:
  484|  1.66M|{
  485|       |    ds_put_hex_dump__(ds, buf_, size, ofs, ascii, false);
  486|  1.66M|}
ds_last:
  499|  37.5k|{
  500|  37.5k|    return ds->length > 0 ? (unsigned char) ds->string[ds->length - 1] : EOF;
  ------------------
  |  Branch (500:12): [True: 37.5k, False: 0]
  ------------------
  501|  37.5k|}
ds_chomp:
  505|  1.02M|{
  506|  1.02M|    if (ds->length > 0 && ds->string[ds->length - 1] == (char) c) {
  ------------------
  |  Branch (506:9): [True: 1.02M, False: 0]
  |  Branch (506:27): [True: 236k, False: 791k]
  ------------------
  507|   236k|        ds->string[--ds->length] = '\0';
  508|   236k|        return true;
  509|   791k|    } else {
  510|       |        return false;
  511|   791k|    }
  512|  1.02M|}
dynamic-string.c:ds_put_hex_dump__:
  424|  1.66M|{
  425|  1.66M|    const uint8_t *buf = buf_;
  426|  1.66M|    const size_t per_line = 16; /* Maximum bytes per line. */
  427|       |
  428|  6.17M|    while (size > 0) {
  ------------------
  |  Branch (428:12): [True: 4.50M, False: 1.66M]
  ------------------
  429|  4.50M|        size_t start, end, n;
  430|  4.50M|        size_t i;
  431|       |
  432|       |        /* Number of bytes on this line. */
  433|  4.50M|        start = ofs % per_line;
  434|  4.50M|        end = per_line;
  435|  4.50M|        if (end - start > size)
  ------------------
  |  Branch (435:13): [True: 960k, False: 3.54M]
  ------------------
  436|   960k|            end = start + size;
  437|  4.50M|        n = end - start;
  438|       |
  439|  4.50M|        if (skip_zero_lines && is_all_zeros(&buf[start], n)) {
  ------------------
  |  Branch (439:13): [True: 0, False: 4.50M]
  |  Branch (439:32): [True: 0, False: 0]
  ------------------
  440|      0|            goto next;
  441|      0|        }
  442|       |
  443|       |        /* Print line. */
  444|  4.50M|        ds_put_format(ds, "%08"PRIxMAX"  ",
  445|  4.50M|                      (uintmax_t) ROUND_DOWN(ofs, per_line));
  ------------------
  |  |  309|  4.50M|#define ROUND_DOWN(X, Y) ((X) / (Y) * (Y))
  ------------------
  446|  4.50M|        for (i = 0; i < start; i++) {
  ------------------
  |  Branch (446:21): [True: 0, False: 4.50M]
  ------------------
  447|      0|            ds_put_format(ds, "   ");
  448|      0|        }
  449|  69.6M|        for (; i < end; i++) {
  ------------------
  |  Branch (449:16): [True: 65.1M, False: 4.50M]
  ------------------
  450|  65.1M|            ds_put_format(ds, "%02x%c",
  451|  65.1M|                          buf[i - start], i == per_line / 2 - 1? '-' : ' ');
  ------------------
  |  Branch (451:43): [True: 4.35M, False: 60.8M]
  ------------------
  452|  65.1M|        }
  453|  4.50M|        if (ascii) {
  ------------------
  |  Branch (453:13): [True: 4.50M, False: 0]
  ------------------
  454|  11.4M|            for (; i < per_line; i++)
  ------------------
  |  Branch (454:20): [True: 6.92M, False: 4.50M]
  ------------------
  455|  6.92M|                ds_put_format(ds, "   ");
  456|  4.50M|            ds_put_format(ds, "|");
  457|  4.50M|            for (i = 0; i < start; i++)
  ------------------
  |  Branch (457:25): [True: 0, False: 4.50M]
  ------------------
  458|      0|                ds_put_format(ds, " ");
  459|  69.6M|            for (; i < end; i++) {
  ------------------
  |  Branch (459:20): [True: 65.1M, False: 4.50M]
  ------------------
  460|  65.1M|                int c = buf[i - start];
  461|  65.1M|                ds_put_char(ds, c >= 32 && c < 127 ? c : '.');
  ------------------
  |  Branch (461:33): [True: 22.0M, False: 43.1M]
  |  Branch (461:44): [True: 11.0M, False: 10.9M]
  ------------------
  462|  65.1M|            }
  463|  11.4M|            for (; i < per_line; i++)
  ------------------
  |  Branch (463:20): [True: 6.92M, False: 4.50M]
  ------------------
  464|  6.92M|                ds_put_format(ds, " ");
  465|  4.50M|            ds_put_format(ds, "|");
  466|  4.50M|        } else {
  467|      0|            ds_chomp(ds, ' ');
  468|      0|        }
  469|  4.50M|        ds_put_format(ds, "\n");
  470|  4.50M|next:
  471|  4.50M|        ofs += n;
  472|  4.50M|        buf += n;
  473|  4.50M|        size -= n;
  474|  4.50M|    }
  475|  1.66M|}

parse_ipv6_ext_hdrs:
  605|  9.37k|{
  606|  9.37k|    return parse_ipv6_ext_hdrs__(datap, sizep, nw_proto, nw_frag,
  607|  9.37k|                                 frag_hdr, rt_hdr);
  608|  9.37k|}
parse_nsh:
  612|  7.18k|{
  613|  7.18k|    const struct nsh_hdr *nsh = (const struct nsh_hdr *) *datap;
  614|  7.18k|    uint8_t version, length, flags, ttl;
  615|       |
  616|       |    /* Check if it is long enough for NSH header, doesn't support
  617|       |     * MD type 2 yet
  618|       |     */
  619|  7.18k|    if (OVS_UNLIKELY(*sizep < NSH_BASE_HDR_LEN)) {
  ------------------
  |  |   66|  7.18k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 410, False: 6.77k]
  |  |  ------------------
  ------------------
  620|    410|        return false;
  621|    410|    }
  622|       |
  623|  6.77k|    version = nsh_get_ver(nsh);
  624|  6.77k|    flags = nsh_get_flags(nsh);
  625|  6.77k|    length = nsh_hdr_len(nsh);
  626|  6.77k|    ttl = nsh_get_ttl(nsh);
  627|       |
  628|  6.77k|    if (OVS_UNLIKELY(length > *sizep || version != 0)) {
  ------------------
  |  |   66|  11.2k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 2.30k, False: 4.46k]
  |  |  |  Branch (66:53): [True: 2.30k, False: 4.47k]
  |  |  |  Branch (66:53): [True: 5, False: 4.46k]
  |  |  ------------------
  ------------------
  629|  2.30k|        return false;
  630|  2.30k|    }
  631|       |
  632|  4.46k|    key->flags = flags;
  633|  4.46k|    key->ttl = ttl;
  634|  4.46k|    key->mdtype = nsh->md_type;
  635|  4.46k|    key->np = nsh->next_proto;
  636|  4.46k|    key->path_hdr = nsh_get_path_hdr(nsh);
  637|       |
  638|  4.46k|    switch (key->mdtype) {
  639|    683|        case NSH_M_TYPE1:
  ------------------
  |  |  251|    683|#define NSH_M_TYPE1     0x01
  ------------------
  |  Branch (639:9): [True: 683, False: 3.78k]
  ------------------
  640|    683|            if (length != NSH_M_TYPE1_LEN) {
  ------------------
  |  |  263|    683|#define NSH_M_TYPE1_LEN   24
  ------------------
  |  Branch (640:17): [True: 538, False: 145]
  ------------------
  641|    538|                return false;
  642|    538|            }
  643|    725|            for (size_t i = 0; i < 4; i++) {
  ------------------
  |  Branch (643:32): [True: 580, False: 145]
  ------------------
  644|    580|                key->context[i] = get_16aligned_be32(&nsh->md1.context[i]);
  645|    580|            }
  646|    145|            break;
  647|    329|        case NSH_M_TYPE2:
  ------------------
  |  |  252|    329|#define NSH_M_TYPE2     0x02
  ------------------
  |  Branch (647:9): [True: 329, False: 4.13k]
  ------------------
  648|       |            /* Don't support MD type 2 metedata parsing yet */
  649|    329|            if (length < NSH_BASE_HDR_LEN) {
  ------------------
  |  |  260|    329|#define NSH_BASE_HDR_LEN  8
  ------------------
  |  Branch (649:17): [True: 35, False: 294]
  ------------------
  650|     35|                return false;
  651|     35|            }
  652|       |
  653|    294|            memset(key->context, 0, sizeof(key->context));
  654|    294|            break;
  655|  3.45k|        default:
  ------------------
  |  Branch (655:9): [True: 3.45k, False: 1.01k]
  ------------------
  656|       |            /* We don't parse other context headers yet. */
  657|  3.45k|            memset(key->context, 0, sizeof(key->context));
  658|  3.45k|            break;
  659|  4.46k|    }
  660|       |
  661|  3.89k|    data_pull(datap, sizep, length);
  662|       |
  663|       |    return true;
  664|  4.46k|}
flow_extract:
  670|  49.6k|{
  671|  49.6k|    struct {
  672|  49.6k|        struct miniflow mf;
  673|  49.6k|        uint64_t buf[FLOW_U64S];
  674|  49.6k|    } m;
  675|       |
  676|  49.6k|    COVERAGE_INC(flow_extract);
  ------------------
  |  |   83|  49.6k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  49.6k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  677|       |
  678|  49.6k|    miniflow_extract(packet, &m.mf);
  679|  49.6k|    miniflow_expand(&m.mf, flow);
  680|  49.6k|}
miniflow_extract:
  797|  49.6k|{
  798|       |    /* Add code to this function (or its callees) to extract new fields. */
  799|  49.6k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  49.6k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  800|       |
  801|  49.6k|    const struct pkt_metadata *md = &packet->md;
  802|  49.6k|    const void *data = dp_packet_data(packet);
  803|  49.6k|    size_t size = dp_packet_size(packet);
  804|  49.6k|    ovs_be32 packet_type = packet->packet_type;
  805|  49.6k|    uint64_t *values = miniflow_values(dst);
  806|  49.6k|    struct mf_ctx mf = { FLOWMAP_EMPTY_INITIALIZER, values,
  ------------------
  |  |  286|  49.6k|#define FLOWMAP_EMPTY_INITIALIZER { { 0 } }
  ------------------
  807|  49.6k|                         values + FLOW_U64S };
  ------------------
  |  |  165|  49.6k|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  808|  49.6k|    const char *frame;
  809|  49.6k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  49.6k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  810|  49.6k|    uint8_t nw_frag, nw_tos, nw_ttl, nw_proto;
  811|  49.6k|    uint8_t *ct_nw_proto_p = NULL;
  812|  49.6k|    ovs_be16 ct_tp_src = 0, ct_tp_dst = 0;
  813|       |
  814|       |    /* Metadata. */
  815|  49.6k|    if (flow_tnl_dst_is_set(&md->tunnel)) {
  ------------------
  |  Branch (815:9): [True: 0, False: 49.6k]
  ------------------
  816|      0|        miniflow_push_words(mf, tunnel, &md->tunnel,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  817|      0|                            offsetof(struct flow_tnl, metadata) /
  818|      0|                            sizeof(uint64_t));
  819|       |
  820|      0|        if (!(md->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (820:13): [True: 0, False: 0]
  ------------------
  821|      0|            if (md->tunnel.metadata.present.map) {
  ------------------
  |  Branch (821:17): [True: 0, False: 0]
  ------------------
  822|      0|                miniflow_push_words(mf, tunnel.metadata, &md->tunnel.metadata,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  823|      0|                                    sizeof md->tunnel.metadata /
  824|      0|                                    sizeof(uint64_t));
  825|      0|            }
  826|      0|        } else {
  827|      0|            if (md->tunnel.metadata.present.len) {
  ------------------
  |  Branch (827:17): [True: 0, False: 0]
  ------------------
  828|      0|                miniflow_push_words(mf, tunnel.metadata.present,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  829|      0|                                    &md->tunnel.metadata.present, 1);
  830|      0|                miniflow_push_words(mf, tunnel.metadata.opts.gnv,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  831|      0|                                    md->tunnel.metadata.opts.gnv,
  832|      0|                                    DIV_ROUND_UP(md->tunnel.metadata.present.len,
  833|      0|                                                 sizeof(uint64_t)));
  834|      0|            }
  835|      0|        }
  836|      0|    }
  837|  49.6k|    if (md->skb_priority || md->pkt_mark) {
  ------------------
  |  Branch (837:9): [True: 0, False: 49.6k]
  |  Branch (837:29): [True: 0, False: 49.6k]
  ------------------
  838|      0|        miniflow_push_uint32(mf, skb_priority, md->skb_priority);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  839|      0|        miniflow_push_uint32(mf, pkt_mark, md->pkt_mark);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  840|      0|    }
  841|  49.6k|    miniflow_push_uint32(mf, dp_hash, md->dp_hash);
  ------------------
  |  |  297|  49.6k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  49.6k|    {                                           \
  |  |  |  |  180|  49.6k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  49.6k|                                                \
  |  |  |  |  182|  49.6k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 49.6k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|  49.6k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  49.6k|    {                                        \
  |  |  |  |  |  |  160|  49.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  49.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  49.6k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  49.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  49.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  99.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  49.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  99.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  99.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 49.6k, False: 49.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  49.6k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  49.6k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  49.6k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  49.6k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  49.6k|}
  |  |  |  |  ------------------
  |  |  |  |  184|  49.6k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  49.6k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|  49.6k|}
  |  |  ------------------
  ------------------
  842|  49.6k|    miniflow_push_uint32(mf, in_port, odp_to_u32(md->in_port.odp_port));
  ------------------
  |  |  297|  49.6k|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|  49.6k|    {                                           \
  |  |  |  |  180|  49.6k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|  49.6k|                                                \
  |  |  |  |  182|  49.6k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [Folded, False: 49.6k]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|  49.6k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [True: 49.6k, Folded]
  |  |  |  |  ------------------
  |  |  |  |  186|  49.6k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  49.6k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  49.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  49.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  49.6k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  49.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  49.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  99.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  49.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  99.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  99.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 49.6k, False: 49.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  49.6k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  49.6k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  49.6k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  49.6k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|  49.6k|        MF.data++;                              \
  |  |  |  |  189|  49.6k|    }                                           \
  |  |  |  |  190|  49.6k|}
  |  |  ------------------
  ------------------
  843|  49.6k|    if (md->ct_state) {
  ------------------
  |  Branch (843:9): [True: 0, False: 49.6k]
  ------------------
  844|      0|        miniflow_push_uint32(mf, recirc_id, md->recirc_id);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  845|      0|        miniflow_push_uint8(mf, ct_state, md->ct_state);
  ------------------
  |  |  309|      0|    miniflow_push_uint8_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  215|      0|#define miniflow_push_uint8_(MF, OFS, VALUE)            \
  |  |  |  |  216|      0|{                                                       \
  |  |  |  |  217|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                  \
  |  |  |  |  218|      0|                                                        \
  |  |  |  |  219|      0|    if ((OFS) % 8 == 0) {                               \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (219:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  220|      0|        miniflow_set_map(MF, OFS / 8);                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  221|      0|        *(uint8_t *)MF.data = VALUE;                    \
  |  |  |  |  222|      0|    } else if ((OFS) % 8 == 7) {                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (222:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  223|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  224|      0|        *((uint8_t *)MF.data + 7) = VALUE;              \
  |  |  |  |  225|      0|        MF.data++;                                      \
  |  |  |  |  226|      0|    } else {                                            \
  |  |  |  |  227|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  228|      0|        *((uint8_t *)MF.data + ((OFS) % 8)) = VALUE;    \
  |  |  |  |  229|      0|    }                                                   \
  |  |  |  |  230|      0|}
  |  |  ------------------
  ------------------
  846|      0|        ct_nw_proto_p = miniflow_pointer(mf, ct_nw_proto);
  ------------------
  |  |  329|      0|    (void *)((uint8_t *)MF.data + ((offsetof(struct flow, FIELD)) % 8))
  ------------------
  847|      0|        miniflow_push_uint8(mf, ct_nw_proto, 0);
  ------------------
  |  |  309|      0|    miniflow_push_uint8_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  215|      0|#define miniflow_push_uint8_(MF, OFS, VALUE)            \
  |  |  |  |  216|      0|{                                                       \
  |  |  |  |  217|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                  \
  |  |  |  |  218|      0|                                                        \
  |  |  |  |  219|      0|    if ((OFS) % 8 == 0) {                               \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (219:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  220|      0|        miniflow_set_map(MF, OFS / 8);                  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  221|      0|        *(uint8_t *)MF.data = VALUE;                    \
  |  |  |  |  222|      0|    } else if ((OFS) % 8 == 7) {                        \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (222:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  223|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  224|      0|        *((uint8_t *)MF.data + 7) = VALUE;              \
  |  |  |  |  225|      0|        MF.data++;                                      \
  |  |  |  |  226|      0|    } else {                                            \
  |  |  |  |  227|      0|        miniflow_assert_in_map(MF, OFS / 8);            \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  228|      0|        *((uint8_t *)MF.data + ((OFS) % 8)) = VALUE;    \
  |  |  |  |  229|      0|    }                                                   \
  |  |  |  |  230|      0|}
  |  |  ------------------
  ------------------
  848|      0|        miniflow_push_uint16(mf, ct_zone, md->ct_zone);
  ------------------
  |  |  303|      0|    miniflow_push_uint16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  196|      0|{                                               \
  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  198|      0|                                                \
  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (208:16): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  213|      0|}
  |  |  ------------------
  ------------------
  849|      0|        miniflow_push_uint32(mf, ct_mark, md->ct_mark);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  850|      0|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|      0|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|      0|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|      0|                                                \
  |  |  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  851|      0|        if (!ovs_u128_is_zero(md->ct_label)) {
  ------------------
  |  Branch (851:13): [True: 0, False: 0]
  ------------------
  852|      0|            miniflow_push_words(mf, ct_label, &md->ct_label,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  853|      0|                                sizeof md->ct_label / sizeof(uint64_t));
  854|      0|        }
  855|  49.6k|    } else {
  856|  49.6k|        if (md->recirc_id) {
  ------------------
  |  Branch (856:13): [True: 0, False: 49.6k]
  ------------------
  857|      0|            miniflow_push_uint32(mf, recirc_id, md->recirc_id);
  ------------------
  |  |  297|      0|    miniflow_push_uint32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  179|      0|    {                                           \
  |  |  |  |  180|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  181|      0|                                                \
  |  |  |  |  182|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (182:9): [True: 0, Folded]
  |  |  |  |  ------------------
  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  185|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  190|      0|}
  |  |  ------------------
  ------------------
  858|      0|            miniflow_pad_to_64(mf, recirc_id);
  ------------------
  |  |  312|      0|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|      0|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|      0|{                                                               \
  |  |  |  |  234|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|      0|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|      0|                                                                \
  |  |  |  |  237|      0|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|      0|    MF.data++;                                                  \
  |  |  |  |  239|      0|}
  |  |  ------------------
  ------------------
  859|      0|        }
  860|  49.6k|        miniflow_pad_from_64(mf, packet_type);
  ------------------
  |  |  315|  49.6k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  49.6k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  49.6k|{                                                               \
  |  |  |  |  243|  49.6k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  49.6k|                                                                \
  |  |  |  |  245|  49.6k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  49.6k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  49.6k|    {                                        \
  |  |  |  |  |  |  160|  49.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  49.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  49.6k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  49.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  49.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  99.3k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  49.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  99.3k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  99.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 49.6k, False: 49.6k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|  49.6k|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|  49.6k|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  49.6k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  49.6k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  49.6k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  49.6k|                                                                \
  |  |  |  |  248|  49.6k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  49.6k|}
  |  |  ------------------
  ------------------
  861|  49.6k|        miniflow_push_be32(mf, packet_type, packet_type);
  ------------------
  |  |  300|  49.6k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  49.6k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  49.6k|    {                                           \
  |  |  |  |  |  |  180|  49.6k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  49.6k|                                                \
  |  |  |  |  |  |  182|  49.6k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 49.6k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  49.6k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 49.6k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  49.6k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  49.6k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  49.6k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  49.6k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  49.6k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  49.6k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  49.6k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  49.6k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  49.6k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  49.6k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  49.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 49.6k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  49.6k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  49.6k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  49.6k|        MF.data++;                              \
  |  |  |  |  |  |  189|  49.6k|    }                                           \
  |  |  |  |  |  |  190|  49.6k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  862|  49.6k|    }
  863|       |
  864|       |    /* Initialize packet's layer pointer and offsets. */
  865|  49.6k|    frame = data;
  866|  49.6k|    if (dp_packet_tunnel(packet)) {
  ------------------
  |  Branch (866:9): [True: 0, False: 49.6k]
  ------------------
  867|       |        /* Preserve inner offsets from previous circulation. */
  868|      0|        dp_packet_reset_outer_offsets(packet);
  869|  49.6k|    } else {
  870|  49.6k|        dp_packet_reset_offsets(packet);
  871|  49.6k|    }
  872|       |
  873|  49.6k|    if (packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (873:9): [True: 41.7k, False: 7.94k]
  ------------------
  874|       |        /* Must have full Ethernet header to proceed. */
  875|  41.7k|        if (OVS_UNLIKELY(size < sizeof(struct eth_header))) {
  ------------------
  |  |   66|  41.7k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 24.6k, False: 17.0k]
  |  |  ------------------
  ------------------
  876|  24.6k|            goto out;
  877|  24.6k|        } else {
  878|       |            /* Link layer. */
  879|  17.0k|            ASSERT_SEQUENTIAL(dl_dst, dl_src);
  ------------------
  |  |   71|  17.0k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  17.0k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  17.0k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  17.0k|                      == offsetof(struct flow, f1))
  ------------------
  880|  17.0k|            miniflow_push_macs(mf, dl_dst, data);
  ------------------
  |  |  324|  17.0k|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|  17.0k|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|  17.0k|{                                                               \
  |  |  |  |  291|  17.0k|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  17.0k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  17.0k|{                                                               \
  |  |  |  |  |  |  259|  17.0k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  17.0k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  17.0k|                                                                \
  |  |  |  |  |  |  262|  17.0k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  17.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  17.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  17.0k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  17.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  17.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  17.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  17.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  17.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  17.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  17.0k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  17.0k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  17.0k|}
  |  |  |  |  ------------------
  |  |  |  |  292|  17.0k|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|  17.0k|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|  17.0k|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|  17.0k|}
  |  |  ------------------
  ------------------
  881|       |
  882|       |            /* VLAN */
  883|  17.0k|            union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
  884|  17.0k|            size_t num_vlans = parse_vlan(&data, &size, vlans);
  885|       |
  886|  17.0k|            dl_type = parse_ethertype(&data, &size);
  887|  17.0k|            miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  17.0k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  17.0k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  17.0k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  17.0k|{                                               \
  |  |  |  |  |  |  197|  17.0k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  17.0k|                                                \
  |  |  |  |  |  |  199|  17.0k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 17.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  17.0k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 17.0k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  17.0k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 17.0k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  17.0k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  17.0k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  17.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  17.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  17.0k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  17.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  17.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  17.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  17.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  17.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  17.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17.0k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  17.0k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  17.0k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  17.0k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  17.0k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  888|  17.0k|            miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  17.0k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  17.0k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  17.0k|{                                                               \
  |  |  |  |  234|  17.0k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  17.0k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  17.0k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  17.0k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  17.0k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  17.0k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  17.0k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  17.0k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  17.0k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  17.0k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  17.0k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  17.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 17.0k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  17.0k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  17.0k|                                                                \
  |  |  |  |  237|  17.0k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  17.0k|    MF.data++;                                                  \
  |  |  |  |  239|  17.0k|}
  |  |  ------------------
  ------------------
  889|  17.0k|            if (num_vlans > 0) {
  ------------------
  |  Branch (889:17): [True: 885, False: 16.1k]
  ------------------
  890|    885|                miniflow_push_words_32(mf, vlans, vlans, num_vlans);
  ------------------
  |  |  321|    885|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    885|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    885|{                                                                       \
  |  |  |  |  279|    885|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    885|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    885|{                                                               \
  |  |  |  |  |  |  259|    885|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    885|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    885|                                                                \
  |  |  |  |  |  |  262|    885|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    885|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    885|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    885|{                                                                       \
  |  |  |  |  |  |  |  |  151|    885|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    885|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    885|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    885|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    885|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    885|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 885]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    885|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    885|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    885|}
  |  |  |  |  ------------------
  |  |  |  |  280|    885|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    885|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    885|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    885|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 329, False: 556]
  |  |  |  |  ------------------
  |  |  |  |  283|    329|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    329|    }                                                                   \
  |  |  |  |  285|    885|}
  |  |  ------------------
  ------------------
  891|    885|            }
  892|       |
  893|  17.0k|        }
  894|  41.7k|    } else {
  895|       |        /* Take dl_type from packet_type. */
  896|  7.94k|        dl_type = pt_ns_type_be(packet_type);
  897|  7.94k|        miniflow_pad_from_64(mf, dl_type);
  ------------------
  |  |  315|  7.94k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  7.94k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  7.94k|{                                                               \
  |  |  |  |  243|  7.94k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  7.94k|                                                                \
  |  |  |  |  245|  7.94k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  7.94k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  7.94k|    {                                        \
  |  |  |  |  |  |  160|  7.94k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  7.94k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  7.94k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  7.94k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  7.94k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  7.94k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  7.94k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  7.94k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  7.94k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 7.94k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  7.94k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  7.94k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  7.94k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  7.94k|                                                                \
  |  |  |  |  248|  7.94k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  7.94k|}
  |  |  ------------------
  ------------------
  898|  7.94k|        miniflow_push_be16(mf, dl_type, dl_type);
  ------------------
  |  |  306|  7.94k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  7.94k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  7.94k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  7.94k|{                                               \
  |  |  |  |  |  |  197|  7.94k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  7.94k|                                                \
  |  |  |  |  |  |  199|  7.94k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 7.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  7.94k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 7.94k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  7.94k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 7.94k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  7.94k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  7.94k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  7.94k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  7.94k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  7.94k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  7.94k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  7.94k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  7.94k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  7.94k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  7.94k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  7.94k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 7.94k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  7.94k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  7.94k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  7.94k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  7.94k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  899|       |        /* Do not push vlan_tci, pad instead */
  900|  7.94k|        miniflow_pad_to_64(mf, dl_type);
  ------------------
  |  |  312|  7.94k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  7.94k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  7.94k|{                                                               \
  |  |  |  |  234|  7.94k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  7.94k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  7.94k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  7.94k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  7.94k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  7.94k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  7.94k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  7.94k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  7.94k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  7.94k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  7.94k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  7.94k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 7.94k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  7.94k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  7.94k|                                                                \
  |  |  |  |  237|  7.94k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  7.94k|    MF.data++;                                                  \
  |  |  |  |  239|  7.94k|}
  |  |  ------------------
  ------------------
  901|  7.94k|    }
  902|       |
  903|       |    /* Parse mpls. */
  904|  25.0k|    if (OVS_UNLIKELY(eth_type_mpls(dl_type))) {
  ------------------
  |  |   66|  25.0k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 563, False: 24.4k]
  |  |  ------------------
  ------------------
  905|    563|        int count;
  906|    563|        const void *mpls = data;
  907|       |
  908|    563|        packet->l2_5_ofs = (char *)data - frame;
  909|    563|        count = parse_mpls(&data, &size);
  910|    563|        miniflow_push_words_32(mf, mpls_lse, mpls, count);
  ------------------
  |  |  321|    563|    miniflow_push_words_32_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  277|    563|#define miniflow_push_words_32_(MF, OFS, VALUEP, N_WORDS)               \
  |  |  |  |  278|    563|{                                                                       \
  |  |  |  |  279|    563|    miniflow_set_maps(MF, (OFS) / 8, DIV_ROUND_UP(N_WORDS, 2));         \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    563|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    563|{                                                               \
  |  |  |  |  |  |  259|    563|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    563|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    563|                                                                \
  |  |  |  |  |  |  262|    563|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    563|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    563|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    563|{                                                                       \
  |  |  |  |  |  |  |  |  151|    563|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    563|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    563|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    563|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    563|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    563|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 563]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    563|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    563|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    563|}
  |  |  |  |  ------------------
  |  |  |  |  280|    563|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof(uint32_t));            \
  |  |  |  |  281|    563|    MF.data += DIV_ROUND_UP(N_WORDS, 2);                                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|    563|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  |  |  282|    563|    if ((N_WORDS) & 1) {                                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:9): [True: 219, False: 344]
  |  |  |  |  ------------------
  |  |  |  |  283|    219|        *((uint32_t *)MF.data - 1) = 0;                                 \
  |  |  |  |  284|    219|    }                                                                   \
  |  |  |  |  285|    563|}
  |  |  ------------------
  ------------------
  911|    563|    }
  912|       |
  913|       |    /* Network layer. */
  914|  25.0k|    packet->l3_ofs = (char *)data - frame;
  915|       |
  916|  25.0k|    nw_frag = 0;
  917|  25.0k|    if (OVS_LIKELY(dl_type == htons(ETH_TYPE_IP))) {
  ------------------
  |  |   65|  25.0k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.50k, False: 23.5k]
  |  |  ------------------
  ------------------
  918|  1.50k|        const struct ip_header *nh = data;
  919|  1.50k|        int ip_len;
  920|  1.50k|        uint16_t tot_len;
  921|       |
  922|  1.50k|        if (OVS_UNLIKELY(!ipv4_sanity_check(nh, size, &ip_len, &tot_len))) {
  ------------------
  |  |   66|  1.50k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 253, False: 1.24k]
  |  |  ------------------
  ------------------
  923|    253|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    253|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 253]
  |  |  ------------------
  ------------------
  924|      0|                dump_invalid_packet(packet, "ipv4_sanity_check");
  925|      0|            }
  926|    253|            goto out;
  927|    253|        }
  928|  1.24k|        dp_packet_set_l2_pad_size(packet, size - tot_len);
  929|  1.24k|        size = tot_len;   /* Never pull padding. */
  930|       |
  931|       |        /* Push both source and destination address at once. */
  932|  1.24k|        miniflow_push_words(mf, nw_src, &nh->ip_src, 1);
  ------------------
  |  |  318|  1.24k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  1.24k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  1.24k|{                                                               \
  |  |  |  |  270|  1.24k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  1.24k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  1.24k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  1.24k|{                                                               \
  |  |  |  |  |  |  259|  1.24k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  1.24k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  1.24k|                                                                \
  |  |  |  |  |  |  262|  1.24k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  1.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.24k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.24k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.24k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  1.24k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  1.24k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  1.24k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  1.24k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  1.24k|}
  |  |  ------------------
  ------------------
  933|  1.24k|        if (ct_nw_proto_p && !md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (933:13): [True: 0, False: 1.24k]
  |  Branch (933:30): [True: 0, False: 0]
  ------------------
  934|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv4.ipv4_proto;
  935|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (935:17): [True: 0, False: 0]
  ------------------
  936|      0|                miniflow_push_words(mf, ct_nw_src,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  937|      0|                                    &md->ct_orig_tuple.ipv4.ipv4_src, 1);
  938|      0|                ct_tp_src = md->ct_orig_tuple.ipv4.src_port;
  939|      0|                ct_tp_dst = md->ct_orig_tuple.ipv4.dst_port;
  940|      0|            }
  941|      0|        }
  942|       |
  943|  1.24k|        miniflow_push_be32(mf, ipv6_label, 0); /* Padding for IPv4. */
  ------------------
  |  |  300|  1.24k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.24k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.24k|    {                                           \
  |  |  |  |  |  |  180|  1.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.24k|                                                \
  |  |  |  |  |  |  182|  1.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 1.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  1.24k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.24k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.24k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.24k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  1.24k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  1.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  1.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  944|       |
  945|  1.24k|        nw_tos = nh->ip_tos;
  946|  1.24k|        nw_ttl = nh->ip_ttl;
  947|  1.24k|        nw_proto = nh->ip_proto;
  948|  1.24k|        nw_frag = ipv4_get_nw_frag(nh);
  949|  1.24k|        data_pull(&data, &size, ip_len);
  950|  23.5k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (950:16): [True: 9.79k, False: 13.7k]
  ------------------
  951|  9.79k|        const struct ovs_16aligned_ip6_hdr *nh = data;
  952|  9.79k|        ovs_be32 tc_flow;
  953|  9.79k|        uint16_t plen;
  954|       |
  955|  9.79k|        if (OVS_UNLIKELY(!ipv6_sanity_check(nh, size))) {
  ------------------
  |  |   66|  9.79k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 419, False: 9.37k]
  |  |  ------------------
  ------------------
  956|    419|            if (OVS_UNLIKELY(VLOG_IS_DBG_ENABLED())) {
  ------------------
  |  |   66|    419|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 419]
  |  |  ------------------
  ------------------
  957|      0|                dump_invalid_packet(packet, "ipv6_sanity_check");
  958|      0|            }
  959|    419|            goto out;
  960|    419|        }
  961|  9.37k|        data_pull(&data, &size, sizeof *nh);
  962|  9.37k|        plen = ntohs(nh->ip6_plen);
  963|  9.37k|        dp_packet_set_l2_pad_size(packet, size - plen);
  964|  9.37k|        size = plen;   /* Never pull padding. */
  965|       |
  966|  9.37k|        miniflow_push_words(mf, ipv6_src, &nh->ip6_src,
  ------------------
  |  |  318|  9.37k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  9.37k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  9.37k|{                                                               \
  |  |  |  |  270|  9.37k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  9.37k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  9.37k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  9.37k|{                                                               \
  |  |  |  |  |  |  259|  9.37k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  9.37k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  9.37k|                                                                \
  |  |  |  |  |  |  262|  9.37k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  9.37k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.37k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.37k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.37k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.37k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.37k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.37k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.37k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.37k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.37k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.37k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  9.37k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  9.37k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  9.37k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  9.37k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  9.37k|}
  |  |  ------------------
  ------------------
  967|  9.37k|                            sizeof nh->ip6_src / 8);
  968|  9.37k|        miniflow_push_words(mf, ipv6_dst, &nh->ip6_dst,
  ------------------
  |  |  318|  9.37k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  9.37k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  9.37k|{                                                               \
  |  |  |  |  270|  9.37k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  9.37k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  9.37k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  9.37k|{                                                               \
  |  |  |  |  |  |  259|  9.37k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  9.37k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  9.37k|                                                                \
  |  |  |  |  |  |  262|  9.37k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  9.37k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  9.37k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  9.37k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  9.37k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  9.37k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  9.37k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  9.37k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  9.37k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.37k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.37k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  9.37k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  9.37k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  9.37k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  9.37k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  9.37k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  9.37k|}
  |  |  ------------------
  ------------------
  969|  9.37k|                            sizeof nh->ip6_dst / 8);
  970|  9.37k|        if (ct_nw_proto_p && md->ct_orig_tuple_ipv6) {
  ------------------
  |  Branch (970:13): [True: 0, False: 9.37k]
  |  Branch (970:30): [True: 0, False: 0]
  ------------------
  971|      0|            *ct_nw_proto_p = md->ct_orig_tuple.ipv6.ipv6_proto;
  972|      0|            if (*ct_nw_proto_p) {
  ------------------
  |  Branch (972:17): [True: 0, False: 0]
  ------------------
  973|      0|                miniflow_push_words(mf, ct_ipv6_src,
  ------------------
  |  |  318|      0|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|      0|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|      0|{                                                               \
  |  |  |  |  270|      0|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|      0|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|      0|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|      0|{                                                               \
  |  |  |  |  |  |  259|      0|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|      0|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|      0|                                                                \
  |  |  |  |  |  |  262|      0|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|      0|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|      0|}
  |  |  |  |  ------------------
  |  |  |  |  272|      0|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|      0|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|      0|}
  |  |  ------------------
  ------------------
  974|      0|                                    &md->ct_orig_tuple.ipv6.ipv6_src,
  975|      0|                                    2 *
  976|      0|                                    sizeof md->ct_orig_tuple.ipv6.ipv6_src / 8);
  977|      0|                ct_tp_src = md->ct_orig_tuple.ipv6.src_port;
  978|      0|                ct_tp_dst = md->ct_orig_tuple.ipv6.dst_port;
  979|      0|            }
  980|      0|        }
  981|       |
  982|  9.37k|        tc_flow = get_16aligned_be32(&nh->ip6_flow);
  983|  9.37k|        nw_tos = ntohl(tc_flow) >> 20;
  984|  9.37k|        nw_ttl = nh->ip6_hlim;
  985|  9.37k|        nw_proto = nh->ip6_nxt;
  986|       |
  987|  9.37k|        if (!parse_ipv6_ext_hdrs(&data, &size, &nw_proto, &nw_frag,
  ------------------
  |  Branch (987:13): [True: 980, False: 8.39k]
  ------------------
  988|  9.37k|                                 NULL, NULL)) {
  989|    980|            goto out;
  990|    980|        }
  991|       |
  992|       |        /* This needs to be after the parse_ipv6_ext_hdrs__() call because it
  993|       |         * leaves the nw_frag word uninitialized. */
  994|  8.39k|        ASSERT_SEQUENTIAL(ipv6_label, nw_frag);
  ------------------
  |  |   71|  8.39k|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|  8.39k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|  8.39k|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|  8.39k|                      == offsetof(struct flow, f1))
  ------------------
  995|  8.39k|        ovs_be32 label = tc_flow & htonl(IPV6_LABEL_MASK);
  996|  8.39k|        miniflow_push_be32(mf, ipv6_label, label);
  ------------------
  |  |  300|  8.39k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  8.39k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  8.39k|    {                                           \
  |  |  |  |  |  |  180|  8.39k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  8.39k|                                                \
  |  |  |  |  |  |  182|  8.39k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 8.39k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  8.39k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  8.39k|    {                                        \
  |  |  |  |  |  |  |  |  160|  8.39k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  8.39k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  8.39k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  8.39k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  8.39k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  8.39k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  8.39k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  8.39k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  8.39k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 8.39k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  8.39k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  8.39k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  8.39k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  8.39k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  8.39k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  8.39k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  997|  13.7k|    } else {
  998|  13.7k|        if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (998:13): [True: 554, False: 13.1k]
  ------------------
  999|  13.1k|            dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (999:13): [True: 622, False: 12.5k]
  ------------------
 1000|  1.17k|            struct eth_addr arp_buf[2];
 1001|  1.17k|            const struct arp_eth_header *arp = (const struct arp_eth_header *)
 1002|  1.17k|                data_try_pull(&data, &size, ARP_ETH_HEADER_LEN);
  ------------------
  |  |  957|  1.17k|#define ARP_ETH_HEADER_LEN 28
  ------------------
 1003|       |
 1004|  1.17k|            if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  2.35k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 620, False: 556]
  |  |  ------------------
  ------------------
                          if (OVS_LIKELY(arp) && OVS_LIKELY(arp->ar_hrd == htons(1))
  ------------------
  |  |   65|  1.79k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 578, False: 42]
  |  |  ------------------
  ------------------
 1005|    578|                && OVS_LIKELY(arp->ar_pro == htons(ETH_TYPE_IP))
  ------------------
  |  |   65|  1.75k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 543, False: 35]
  |  |  ------------------
  ------------------
 1006|    543|                && OVS_LIKELY(arp->ar_hln == ETH_ADDR_LEN)
  ------------------
  |  |   65|  1.71k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 525, False: 18]
  |  |  ------------------
  ------------------
 1007|    525|                && OVS_LIKELY(arp->ar_pln == 4)) {
  ------------------
  |  |   65|    525|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 421, False: 104]
  |  |  ------------------
  ------------------
 1008|    421|                miniflow_push_be32(mf, nw_src,
  ------------------
  |  |  300|    421|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    421|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    421|    {                                           \
  |  |  |  |  |  |  180|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    421|                                                \
  |  |  |  |  |  |  182|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    421|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    421|    {                                        \
  |  |  |  |  |  |  |  |  160|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    421|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    421|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    421|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    421|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1009|    421|                                   get_16aligned_be32(&arp->ar_spa));
 1010|    421|                miniflow_push_be32(mf, nw_dst,
  ------------------
  |  |  300|    421|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    421|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    421|    {                                           \
  |  |  |  |  |  |  180|    421|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    421|                                                \
  |  |  |  |  |  |  182|    421|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 421]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    421|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 421, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|    421|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|    421|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|    421|        MF.data++;                              \
  |  |  |  |  |  |  189|    421|    }                                           \
  |  |  |  |  |  |  190|    421|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1011|    421|                                   get_16aligned_be32(&arp->ar_tpa));
 1012|       |
 1013|       |                /* We only match on the lower 8 bits of the opcode. */
 1014|    421|                if (OVS_LIKELY(ntohs(arp->ar_op) <= 0xff)) {
  ------------------
  |  |   65|    421|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 12, False: 409]
  |  |  ------------------
  ------------------
 1015|     12|                    miniflow_push_be32(mf, ipv6_label, 0); /* Pad with ARP. */
  ------------------
  |  |  300|     12|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     12|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     12|    {                                           \
  |  |  |  |  |  |  180|     12|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     12|                                                \
  |  |  |  |  |  |  182|     12|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 12, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|     12|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|     12|    {                                        \
  |  |  |  |  |  |  |  |  160|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|     12|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|     12|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|     12|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     12|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|     12|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1016|     12|                    miniflow_push_be32(mf, nw_frag, htonl(ntohs(arp->ar_op)));
  ------------------
  |  |  300|     12|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|     12|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|     12|    {                                           \
  |  |  |  |  |  |  180|     12|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|     12|                                                \
  |  |  |  |  |  |  182|     12|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 12]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|     12|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 12, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|     12|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|     12|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|     12|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|     12|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|     12|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|     12|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|     12|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|     12|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|     12|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|     12|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|     12|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 12]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|     12|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|     12|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|     12|        MF.data++;                              \
  |  |  |  |  |  |  189|     12|    }                                           \
  |  |  |  |  |  |  190|     12|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1017|     12|                }
 1018|       |
 1019|       |                /* Must be adjacent. */
 1020|    421|                ASSERT_SEQUENTIAL(arp_sha, arp_tha);
  ------------------
  |  |   71|    421|    BUILD_ASSERT_DECL(offsetof(struct flow, f0)         \
  |  |  ------------------
  |  |  |  |  270|    421|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  |  |  ------------------
  |  |   72|    421|                      + MEMBER_SIZEOF(struct flow, f0)  \
  |  |   73|    421|                      == offsetof(struct flow, f1))
  ------------------
 1021|       |
 1022|    421|                arp_buf[0] = arp->ar_sha;
 1023|    421|                arp_buf[1] = arp->ar_tha;
 1024|    421|                miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    421|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    421|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    421|{                                                               \
  |  |  |  |  291|    421|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    421|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    421|{                                                               \
  |  |  |  |  |  |  259|    421|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    421|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    421|                                                                \
  |  |  |  |  |  |  262|    421|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    421|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    421|}
  |  |  |  |  ------------------
  |  |  |  |  292|    421|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    421|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    421|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    421|}
  |  |  ------------------
  ------------------
 1025|    421|                miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    421|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    421|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    421|{                                                               \
  |  |  |  |  234|    421|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    421|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    421|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    421|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    421|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    421|{                                                                       \
  |  |  |  |  |  |  |  |  151|    421|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    421|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    421|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    421|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    421|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    421|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 421]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    421|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    421|                                                                \
  |  |  |  |  237|    421|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    421|    MF.data++;                                                  \
  |  |  |  |  239|    421|}
  |  |  ------------------
  ------------------
 1026|    421|            }
 1027|  12.5k|        } else if (dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (1027:20): [True: 7.18k, False: 5.35k]
  ------------------
 1028|  7.18k|            struct ovs_key_nsh nsh;
 1029|       |
 1030|  7.18k|            if (OVS_LIKELY(parse_nsh(&data, &size, &nsh))) {
  ------------------
  |  |   65|  7.18k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 3.89k, False: 3.29k]
  |  |  ------------------
  ------------------
 1031|  3.89k|                miniflow_push_words(mf, nsh, &nsh,
  ------------------
  |  |  318|  3.89k|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|  3.89k|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|  3.89k|{                                                               \
  |  |  |  |  270|  3.89k|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|  3.89k|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|  3.89k|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|  3.89k|{                                                               \
  |  |  |  |  |  |  259|  3.89k|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|  3.89k|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|  3.89k|                                                                \
  |  |  |  |  |  |  262|  3.89k|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|  3.89k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  3.89k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  3.89k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  3.89k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  3.89k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  3.89k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  3.89k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  3.89k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  3.89k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 3.89k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  3.89k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|  3.89k|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|  3.89k|}
  |  |  |  |  ------------------
  |  |  |  |  272|  3.89k|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|  3.89k|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|  3.89k|}
  |  |  ------------------
  ------------------
 1032|  3.89k|                                    sizeof(struct ovs_key_nsh) /
 1033|  3.89k|                                    sizeof(uint64_t));
 1034|  3.89k|            }
 1035|  7.18k|        }
 1036|  13.7k|        goto out;
 1037|  13.7k|    }
 1038|       |
 1039|  9.63k|    packet->l4_ofs = (char *)data - frame;
 1040|  9.63k|    miniflow_push_be32(mf, nw_frag,
  ------------------
  |  |  300|  9.63k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  9.63k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  9.63k|    {                                           \
  |  |  |  |  |  |  180|  9.63k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  9.63k|                                                \
  |  |  |  |  |  |  182|  9.63k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 9.63k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  9.63k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 9.63k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  9.63k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  9.63k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  9.63k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  9.63k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  9.63k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  9.63k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  9.63k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  9.63k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  9.63k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  9.63k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  9.63k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 9.63k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  9.63k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  9.63k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  9.63k|        MF.data++;                              \
  |  |  |  |  |  |  189|  9.63k|    }                                           \
  |  |  |  |  |  |  190|  9.63k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1041|  9.63k|                       bytes_to_be32(nw_frag, nw_tos, nw_ttl, nw_proto));
 1042|       |
 1043|  9.63k|    if (OVS_LIKELY(!(nw_frag & FLOW_NW_FRAG_LATER))) {
  ------------------
  |  |   65|  9.63k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 9.48k, False: 155]
  |  |  ------------------
  ------------------
 1044|  9.48k|        if (OVS_LIKELY(nw_proto == IPPROTO_TCP)) {
  ------------------
  |  |   65|  9.48k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.97k, False: 4.51k]
  |  |  ------------------
  ------------------
 1045|  4.97k|            if (OVS_LIKELY(size >= TCP_HEADER_LEN)) {
  ------------------
  |  |   65|  4.97k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.89k, False: 75]
  |  |  ------------------
  ------------------
 1046|  4.89k|                const struct tcp_header *tcp = data;
 1047|  4.89k|                size_t tcp_hdr_len = TCP_OFFSET(tcp->tcp_ctl) * 4;
  ------------------
  |  |  906|  4.89k|#define TCP_OFFSET(tcp_ctl) (ntohs(tcp_ctl) >> 12)
  ------------------
 1048|       |
 1049|  4.89k|                if (OVS_LIKELY(tcp_hdr_len >= TCP_HEADER_LEN)
  ------------------
  |  |   65|  9.79k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.27k, False: 625]
  |  |  ------------------
  ------------------
 1050|  4.27k|                    && OVS_LIKELY(size >= tcp_hdr_len)) {
  ------------------
  |  |   65|  4.27k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 4.24k, False: 27]
  |  |  ------------------
  ------------------
 1051|       |                    /* tcp_flags are not at the beginning of the block. */
 1052|  4.24k|                    miniflow_pad_from_64(mf, tcp_flags);
  ------------------
  |  |  315|  4.24k|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|  4.24k|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|  4.24k|{                                                               \
  |  |  |  |  243|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|  4.24k|                                                                \
  |  |  |  |  245|  4.24k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|  4.24k|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|  4.24k|    {                                        \
  |  |  |  |  |  |  160|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|  4.24k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|  4.24k|}
  |  |  |  |  ------------------
  |  |  |  |  247|  4.24k|                                                                \
  |  |  |  |  248|  4.24k|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|  4.24k|}
  |  |  ------------------
  ------------------
 1053|  4.24k|                    miniflow_push_be32(mf, tcp_flags,
  ------------------
  |  |  300|  4.24k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  4.24k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  4.24k|    {                                           \
  |  |  |  |  |  |  180|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  4.24k|                                                \
  |  |  |  |  |  |  182|  4.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|      0|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  4.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [True: 4.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|  4.24k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.24k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|  4.24k|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|  4.24k|        MF.data++;                              \
  |  |  |  |  |  |  189|  4.24k|    }                                           \
  |  |  |  |  |  |  190|  4.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1054|  4.24k|                                       TCP_FLAGS_BE32(tcp->tcp_ctl));
 1055|  4.24k|                    miniflow_push_be16(mf, tp_src, tcp->tcp_src);
  ------------------
  |  |  306|  4.24k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.24k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.24k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.24k|{                                               \
  |  |  |  |  |  |  197|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.24k|                                                \
  |  |  |  |  |  |  199|  4.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 4.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  4.24k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  4.24k|    {                                        \
  |  |  |  |  |  |  |  |  160|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  4.24k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  4.24k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  4.24k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.24k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  4.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1056|  4.24k|                    miniflow_push_be16(mf, tp_dst, tcp->tcp_dst);
  ------------------
  |  |  306|  4.24k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.24k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.24k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.24k|{                                               \
  |  |  |  |  |  |  197|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.24k|                                                \
  |  |  |  |  |  |  199|  4.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.24k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 4.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  4.24k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.24k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  4.24k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  4.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  4.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|  4.24k|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  4.24k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.24k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.24k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.24k|{                                               \
  |  |  |  |  |  |  197|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.24k|                                                \
  |  |  |  |  |  |  199|  4.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.24k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  4.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 4.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  4.24k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.24k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  4.24k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  4.24k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  4.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1058|  4.24k|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  4.24k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  4.24k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  4.24k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  4.24k|{                                               \
  |  |  |  |  |  |  197|  4.24k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  4.24k|                                                \
  |  |  |  |  |  |  199|  4.24k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  4.24k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  4.24k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 4.24k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  4.24k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 4.24k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  4.24k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  4.24k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  4.24k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  4.24k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  4.24k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  4.24k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  4.24k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  4.24k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  4.24k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  4.24k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  4.24k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 4.24k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  4.24k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  4.24k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  4.24k|        MF.data++;                              \
  |  |  |  |  |  |  212|  4.24k|    }                                           \
  |  |  |  |  |  |  213|  4.24k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1059|  4.24k|                    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1059:25): [True: 660, False: 3.58k]
  ------------------
 1060|    660|                        dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1061|  3.58k|                    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1061:32): [True: 3.58k, False: 0]
  ------------------
 1062|  3.58k|                        dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1063|  3.58k|                    }
 1064|  4.24k|                    dp_packet_l4_proto_set_tcp(packet);
 1065|  4.24k|                }
 1066|  4.89k|            }
 1067|  4.97k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_UDP)) {
  ------------------
  |  |   65|  4.51k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 520, False: 3.99k]
  |  |  ------------------
  ------------------
 1068|    520|            if (OVS_LIKELY(size >= UDP_HEADER_LEN)) {
  ------------------
  |  |   65|    520|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 486, False: 34]
  |  |  ------------------
  ------------------
 1069|    486|                const struct udp_header *udp = data;
 1070|       |
 1071|    486|                miniflow_push_be16(mf, tp_src, udp->udp_src);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    486|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    486|    {                                        \
  |  |  |  |  |  |  |  |  160|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    486|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    486|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    486|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1072|    486|                miniflow_push_be16(mf, tp_dst, udp->udp_dst);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    486|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1073|    486|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    486|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    486|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1074|    486|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    486|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    486|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    486|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    486|{                                               \
  |  |  |  |  |  |  197|    486|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    486|                                                \
  |  |  |  |  |  |  199|    486|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    486|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    486|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 486]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    486|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 486, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    486|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    486|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    486|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    486|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    486|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    486|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    486|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    486|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    486|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    486|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    486|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 486]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    486|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    486|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    486|        MF.data++;                              \
  |  |  |  |  |  |  212|    486|    }                                           \
  |  |  |  |  |  |  213|    486|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1075|    486|                if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1075:21): [True: 232, False: 254]
  ------------------
 1076|    232|                    dp_packet_update_rss_hash_ipv4_tcp_udp(packet);
 1077|    254|                } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1077:28): [True: 254, False: 0]
  ------------------
 1078|    254|                    dp_packet_update_rss_hash_ipv6_tcp_udp(packet);
 1079|    254|                }
 1080|    486|                dp_packet_l4_proto_set_udp(packet);
 1081|    486|            }
 1082|  3.99k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_SCTP)) {
  ------------------
  |  |   65|  3.99k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 339, False: 3.65k]
  |  |  ------------------
  ------------------
 1083|    339|            if (OVS_LIKELY(size >= SCTP_HEADER_LEN)) {
  ------------------
  |  |   65|    339|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 313, False: 26]
  |  |  ------------------
  ------------------
 1084|    313|                const struct sctp_header *sctp = data;
 1085|       |
 1086|    313|                miniflow_push_be16(mf, tp_src, sctp->sctp_src);
  ------------------
  |  |  306|    313|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    313|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    313|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    313|{                                               \
  |  |  |  |  |  |  197|    313|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    313|                                                \
  |  |  |  |  |  |  199|    313|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 313, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    313|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    313|    {                                        \
  |  |  |  |  |  |  |  |  160|    313|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    313|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    313|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    313|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    313|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    313|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    313|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    313|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    313|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 313]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    313|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    313|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    313|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    313|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    313|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    313|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1087|    313|                miniflow_push_be16(mf, tp_dst, sctp->sctp_dst);
  ------------------
  |  |  306|    313|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    313|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    313|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    313|{                                               \
  |  |  |  |  |  |  197|    313|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    313|                                                \
  |  |  |  |  |  |  199|    313|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    313|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 313, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    313|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    313|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    313|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    313|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    313|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    313|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    313|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    313|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    313|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    313|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    313|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 313]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    313|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    313|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    313|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    313|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1088|    313|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    313|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    313|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    313|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    313|{                                               \
  |  |  |  |  |  |  197|    313|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    313|                                                \
  |  |  |  |  |  |  199|    313|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    313|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    313|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 313, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    313|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    313|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    313|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    313|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    313|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    313|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    313|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    313|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    313|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    313|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    313|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 313]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    313|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    313|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    313|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    313|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1089|    313|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    313|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    313|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    313|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    313|{                                               \
  |  |  |  |  |  |  197|    313|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    313|                                                \
  |  |  |  |  |  |  199|    313|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    313|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    313|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 313]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    313|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 313, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    313|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    313|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    313|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    313|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    313|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    313|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    313|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    313|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    313|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    313|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    313|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 313]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    313|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    313|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    313|        MF.data++;                              \
  |  |  |  |  |  |  212|    313|    }                                           \
  |  |  |  |  |  |  213|    313|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1090|    313|                dp_packet_l4_proto_set_sctp(packet);
 1091|    313|            }
 1092|  3.65k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMP)) {
  ------------------
  |  |   65|  3.65k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.51k, False: 2.14k]
  |  |  ------------------
  ------------------
 1093|  1.51k|            if (OVS_LIKELY(size >= ICMP_HEADER_LEN)) {
  ------------------
  |  |   65|  1.51k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.43k, False: 75]
  |  |  ------------------
  ------------------
 1094|  1.43k|                const struct icmp_header *icmp = data;
 1095|       |
 1096|  1.43k|                miniflow_push_be16(mf, tp_src, htons(icmp->icmp_type));
  ------------------
  |  |  306|  1.43k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.43k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.43k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.43k|{                                               \
  |  |  |  |  |  |  197|  1.43k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.43k|                                                \
  |  |  |  |  |  |  199|  1.43k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 1.43k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  1.43k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.43k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.43k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.43k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.43k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.43k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.43k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.43k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.43k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.43k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.43k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.43k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.43k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.43k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.43k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  1.43k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.43k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.43k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1097|  1.43k|                miniflow_push_be16(mf, tp_dst, htons(icmp->icmp_code));
  ------------------
  |  |  306|  1.43k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.43k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.43k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.43k|{                                               \
  |  |  |  |  |  |  197|  1.43k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.43k|                                                \
  |  |  |  |  |  |  199|  1.43k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.43k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 1.43k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.43k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.43k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.43k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.43k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.43k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.43k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.43k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.43k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.43k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.43k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.43k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.43k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.43k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.43k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.43k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.43k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1098|  1.43k|                miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|  1.43k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.43k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.43k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.43k|{                                               \
  |  |  |  |  |  |  197|  1.43k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.43k|                                                \
  |  |  |  |  |  |  199|  1.43k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.43k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.43k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 1.43k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|  1.43k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.43k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.43k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.43k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.43k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.43k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.43k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.43k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.43k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.43k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.43k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.43k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.43k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|  1.43k|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.43k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.43k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1099|  1.43k|                miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|  1.43k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.43k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.43k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.43k|{                                               \
  |  |  |  |  |  |  197|  1.43k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.43k|                                                \
  |  |  |  |  |  |  199|  1.43k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.43k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.43k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 1.43k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|  1.43k|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 1.43k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|  1.43k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.43k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.43k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.43k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.43k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.43k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.43k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.43k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.43k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.43k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.43k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.43k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.43k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|  1.43k|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|  1.43k|        MF.data++;                              \
  |  |  |  |  |  |  212|  1.43k|    }                                           \
  |  |  |  |  |  |  213|  1.43k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1100|  1.43k|            }
 1101|  2.14k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  |   65|  2.14k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.13k, False: 1.01k]
  |  |  ------------------
  ------------------
 1102|  1.13k|            if (OVS_LIKELY(size >= IGMP_HEADER_LEN)) {
  ------------------
  |  |   65|  1.13k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 1.04k, False: 84]
  |  |  ------------------
  ------------------
 1103|  1.04k|                const struct igmp_header *igmp = data;
 1104|       |
 1105|  1.04k|                miniflow_push_be16(mf, tp_src, htons(igmp->igmp_type));
  ------------------
  |  |  306|  1.04k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.04k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.04k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.04k|{                                               \
  |  |  |  |  |  |  197|  1.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.04k|                                                \
  |  |  |  |  |  |  199|  1.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 1.04k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|  1.04k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.04k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.04k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.04k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.04k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|  1.04k|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.04k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.04k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1106|  1.04k|                miniflow_push_be16(mf, tp_dst, htons(igmp->igmp_code));
  ------------------
  |  |  306|  1.04k|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|  1.04k|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|  1.04k|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|  1.04k|{                                               \
  |  |  |  |  |  |  197|  1.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|  1.04k|                                                \
  |  |  |  |  |  |  199|  1.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 1.04k]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|  1.04k|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 1.04k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|  1.04k|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|  1.04k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|  1.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.04k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.04k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|  1.04k|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|  1.04k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|  1.04k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1107|       |                /* ct_tp_src/dst are not extracted for IGMP. */
 1108|  1.04k|                miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|  1.04k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  1.04k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  1.04k|{                                                               \
  |  |  |  |  234|  1.04k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  1.04k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  1.04k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  1.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.04k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  1.04k|                                                                \
  |  |  |  |  237|  1.04k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  1.04k|    MF.data++;                                                  \
  |  |  |  |  239|  1.04k|}
  |  |  ------------------
  ------------------
 1109|  1.04k|                miniflow_push_be32(mf, igmp_group_ip4,
  ------------------
  |  |  300|  1.04k|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|  1.04k|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|  1.04k|    {                                           \
  |  |  |  |  |  |  180|  1.04k|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|  1.04k|                                                \
  |  |  |  |  |  |  182|  1.04k|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 1.04k, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|  1.04k|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|  1.04k|    {                                        \
  |  |  |  |  |  |  |  |  160|  1.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|  1.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|  1.04k|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|  1.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|  1.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|  1.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|  1.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|  1.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|  1.04k|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|  1.04k|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|  1.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|  1.04k|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|  1.04k|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|  1.04k|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1110|  1.04k|                                   get_16aligned_be32(&igmp->group));
 1111|  1.04k|                miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|  1.04k|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|  1.04k|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|  1.04k|{                                                               \
  |  |  |  |  234|  1.04k|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|  1.04k|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|  1.04k|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|  1.04k|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|  1.04k|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|  1.04k|{                                                                       \
  |  |  |  |  |  |  |  |  151|  1.04k|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|  1.04k|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|  1.04k|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|  1.04k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|  1.04k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|  1.04k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 1.04k]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|  1.04k|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|  1.04k|                                                                \
  |  |  |  |  237|  1.04k|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|  1.04k|    MF.data++;                                                  \
  |  |  |  |  239|  1.04k|}
  |  |  ------------------
  ------------------
 1112|  1.04k|            }
 1113|  1.13k|        } else if (OVS_LIKELY(nw_proto == IPPROTO_ICMPV6)) {
  ------------------
  |  |   65|  1.01k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 770, False: 240]
  |  |  ------------------
  ------------------
 1114|    770|            if (OVS_LIKELY(size >= sizeof(struct icmp6_data_header))) {
  ------------------
  |  |   65|    770|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 719, False: 51]
  |  |  ------------------
  ------------------
 1115|    719|                const union ovs_16aligned_in6_addr *nd_target;
 1116|    719|                struct eth_addr arp_buf[2];
 1117|       |                /* This will populate whether we received Option 1
 1118|       |                 * or Option 2. */
 1119|    719|                uint8_t opt_type;
 1120|       |                /* This holds the ND Reserved field. */
 1121|    719|                ovs_be32 rso_flags;
 1122|    719|                const struct icmp6_data_header *icmp6;
 1123|       |
 1124|    719|                icmp6 = data_pull(&data, &size, sizeof *icmp6);
 1125|    719|                if (parse_icmpv6(&data, &size, icmp6,
  ------------------
  |  Branch (1125:21): [True: 516, False: 203]
  ------------------
 1126|    719|                                 &rso_flags, &nd_target, arp_buf, &opt_type)) {
 1127|    516|                    if (nd_target) {
  ------------------
  |  Branch (1127:25): [True: 365, False: 151]
  ------------------
 1128|    365|                        miniflow_push_words(mf, nd_target, nd_target,
  ------------------
  |  |  318|    365|    miniflow_push_words_(MF, offsetof(struct flow, FIELD), VALUEP, N_WORDS)
  |  |  ------------------
  |  |  |  |  268|    365|#define miniflow_push_words_(MF, OFS, VALUEP, N_WORDS)          \
  |  |  |  |  269|    365|{                                                               \
  |  |  |  |  270|    365|    MINIFLOW_ASSERT((OFS) % 8 == 0);                            \
  |  |  |  |  271|    365|    miniflow_set_maps(MF, (OFS) / 8, (N_WORDS));                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    365|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    365|{                                                               \
  |  |  |  |  |  |  259|    365|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    365|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    365|                                                                \
  |  |  |  |  |  |  262|    365|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    365|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    365|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    365|{                                                                       \
  |  |  |  |  |  |  |  |  151|    365|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    365|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    365|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    365|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    365|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    365|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 365]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    365|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    365|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    365|}
  |  |  |  |  ------------------
  |  |  |  |  272|    365|    memcpy(MF.data, (VALUEP), (N_WORDS) * sizeof *MF.data);     \
  |  |  |  |  273|    365|    MF.data += (N_WORDS);                                       \
  |  |  |  |  274|    365|}
  |  |  ------------------
  ------------------
 1129|    365|                                            sizeof *nd_target / sizeof(uint64_t));
 1130|    365|                    }
 1131|    516|                    miniflow_push_macs(mf, arp_sha, arp_buf);
  ------------------
  |  |  324|    516|    miniflow_push_macs_(MF, offsetof(struct flow, FIELD), VALUEP)
  |  |  ------------------
  |  |  |  |  289|    516|#define miniflow_push_macs_(MF, OFS, VALUEP)                    \
  |  |  |  |  290|    516|{                                                               \
  |  |  |  |  291|    516|    miniflow_set_maps(MF, (OFS) / 8, 2);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  257|    516|#define miniflow_set_maps(MF, OFS, N_WORDS)                     \
  |  |  |  |  |  |  258|    516|{                                                               \
  |  |  |  |  |  |  259|    516|    size_t ofs = (OFS);                                         \
  |  |  |  |  |  |  260|    516|    size_t n_words = (N_WORDS);                                 \
  |  |  |  |  |  |  261|    516|                                                                \
  |  |  |  |  |  |  262|    516|    MINIFLOW_ASSERT(n_words && MF.data + n_words <= MF.end);    \
  |  |  |  |  |  |  263|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, ofs);                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  264|    516|    flowmap_set(&MF.map, ofs, n_words);                         \
  |  |  |  |  |  |  265|    516|}
  |  |  |  |  ------------------
  |  |  |  |  292|    516|    memcpy(MF.data, (VALUEP), 2 * ETH_ADDR_LEN);                \
  |  |  |  |  ------------------
  |  |  |  |  |  |  205|    516|#define ETH_ADDR_LEN           6
  |  |  |  |  ------------------
  |  |  |  |  293|    516|    MF.data += 1;                   /* First word only. */      \
  |  |  |  |  294|    516|}
  |  |  ------------------
  ------------------
 1132|       |                    /* Populate options field and set the padding
 1133|       |                     * accordingly. */
 1134|    516|                    if (opt_type != 0) {
  ------------------
  |  Branch (1134:25): [True: 141, False: 375]
  ------------------
 1135|    141|                        miniflow_push_be16(mf, tcp_flags, htons(opt_type));
  ------------------
  |  |  306|    141|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    141|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    141|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    141|{                                               \
  |  |  |  |  |  |  197|    141|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    141|                                                \
  |  |  |  |  |  |  199|    141|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 141]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    141|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 141]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    141|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 141, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    141|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    141|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    141|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    141|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    141|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    141|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    141|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    141|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    141|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    141|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    141|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 141]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    141|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    141|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    141|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    141|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1136|       |                        /* Pad to align with 64 bits.
 1137|       |                         * This will zero out the pad3 field. */
 1138|    141|                        miniflow_pad_to_64(mf, tcp_flags);
  ------------------
  |  |  312|    141|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    141|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    141|{                                                               \
  |  |  |  |  234|    141|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    141|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    141|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    141|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    141|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    141|{                                                                       \
  |  |  |  |  |  |  |  |  151|    141|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    141|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    141|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    141|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    141|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    141|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 141]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    141|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    141|                                                                \
  |  |  |  |  237|    141|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    141|    MF.data++;                                                  \
  |  |  |  |  239|    141|}
  |  |  ------------------
  ------------------
 1139|    375|                    } else {
 1140|       |                        /* Pad to align with 64 bits.
 1141|       |                         * This will zero out the tcp_flags & pad3 field. */
 1142|    375|                        miniflow_pad_to_64(mf, arp_tha);
  ------------------
  |  |  312|    375|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    375|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    375|{                                                               \
  |  |  |  |  234|    375|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    375|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    375|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    375|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    375|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    375|{                                                                       \
  |  |  |  |  |  |  |  |  151|    375|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    375|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    375|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    375|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    375|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    375|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 375]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    375|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    375|                                                                \
  |  |  |  |  237|    375|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    375|    MF.data++;                                                  \
  |  |  |  |  239|    375|}
  |  |  ------------------
  ------------------
 1143|    375|                    }
 1144|    516|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    516|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    516|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    516|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    516|{                                               \
  |  |  |  |  |  |  197|    516|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    516|                                                \
  |  |  |  |  |  |  199|    516|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 516, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    516|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    516|    {                                        \
  |  |  |  |  |  |  |  |  160|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    516|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    516|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    516|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    516|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    516|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1145|    516|                                       htons(icmp6->icmp6_base.icmp6_type));
 1146|    516|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    516|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    516|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    516|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    516|{                                               \
  |  |  |  |  |  |  197|    516|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    516|                                                \
  |  |  |  |  |  |  199|    516|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 516]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    516|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 516, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    516|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    516|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    516|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    516|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    516|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1147|    516|                                       htons(icmp6->icmp6_base.icmp6_code));
 1148|    516|                    miniflow_pad_to_64(mf, tp_dst);
  ------------------
  |  |  312|    516|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    516|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    516|{                                                               \
  |  |  |  |  234|    516|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    516|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    516|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    516|                                                                \
  |  |  |  |  237|    516|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    516|    MF.data++;                                                  \
  |  |  |  |  239|    516|}
  |  |  ------------------
  ------------------
 1149|       |                    /* Fill ND reserved field. */
 1150|    516|                    miniflow_push_be32(mf, igmp_group_ip4, rso_flags);
  ------------------
  |  |  300|    516|    miniflow_push_be32_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  193|    516|    miniflow_push_uint32_(MF, OFS, (OVS_FORCE uint32_t)(VALUE))
  |  |  |  |  ------------------
  |  |  |  |  |  |  179|    516|    {                                           \
  |  |  |  |  |  |  180|    516|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  181|    516|                                                \
  |  |  |  |  |  |  182|    516|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (182:9): [True: 516, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  183|    516|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    516|    {                                        \
  |  |  |  |  |  |  |  |  160|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    516|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    516|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  184|    516|        *(uint32_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  185|    516|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (185:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  186|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  187|      0|        *((uint32_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  188|      0|        MF.data++;                              \
  |  |  |  |  |  |  189|      0|    }                                           \
  |  |  |  |  |  |  190|    516|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1151|    516|                    miniflow_pad_to_64(mf, igmp_group_ip4);
  ------------------
  |  |  312|    516|    miniflow_pad_to_64_(MF, OFFSETOFEND(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  232|    516|#define miniflow_pad_to_64_(MF, OFS)                            \
  |  |  |  |  233|    516|{                                                               \
  |  |  |  |  234|    516|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  235|    516|    miniflow_assert_in_map(MF, OFS / 8);                        \
  |  |  |  |  ------------------
  |  |  |  |  |  |  165|    516|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  166|    516|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|    516|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|    516|{                                                                       \
  |  |  |  |  |  |  |  |  151|    516|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|    516|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|    516|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|    516|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|    516|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|    516|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 516]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|    516|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  236|    516|                                                                \
  |  |  |  |  237|    516|    memset((uint8_t *)MF.data + (OFS) % 8, 0, 8 - (OFS) % 8);   \
  |  |  |  |  238|    516|    MF.data++;                                                  \
  |  |  |  |  239|    516|}
  |  |  ------------------
  ------------------
 1152|    516|                } else {
 1153|       |                    /* ICMPv6 but not ND. */
 1154|    203|                    miniflow_push_be16(mf, tp_src,
  ------------------
  |  |  306|    203|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    203|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    203|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    203|{                                               \
  |  |  |  |  |  |  197|    203|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    203|                                                \
  |  |  |  |  |  |  199|    203|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [True: 203, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|    203|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|    203|    {                                        \
  |  |  |  |  |  |  |  |  160|    203|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    203|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    203|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    203|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    203|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    203|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    203|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    203|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    203|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 203]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    203|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|    203|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|    203|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|    203|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    203|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    203|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1155|    203|                                       htons(icmp6->icmp6_base.icmp6_type));
 1156|    203|                    miniflow_push_be16(mf, tp_dst,
  ------------------
  |  |  306|    203|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    203|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    203|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    203|{                                               \
  |  |  |  |  |  |  197|    203|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    203|                                                \
  |  |  |  |  |  |  199|    203|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    203|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [True: 203, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|    203|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    203|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    203|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    203|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    203|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    203|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    203|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    203|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    203|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    203|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    203|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 203]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    203|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|    203|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    203|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    203|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1157|    203|                                       htons(icmp6->icmp6_base.icmp6_code));
 1158|    203|                    miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|    203|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    203|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    203|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    203|{                                               \
  |  |  |  |  |  |  197|    203|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    203|                                                \
  |  |  |  |  |  |  199|    203|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    203|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    203|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 203, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|    203|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    203|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    203|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    203|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    203|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    203|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    203|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    203|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    203|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    203|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    203|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 203]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    203|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|    203|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    203|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|    203|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1159|    203|                    miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|    203|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|    203|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|    203|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|    203|{                                               \
  |  |  |  |  |  |  197|    203|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|    203|                                                \
  |  |  |  |  |  |  199|    203|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|    203|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|    203|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 203]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|    203|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 203, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|    203|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|    203|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|    203|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|    203|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|    203|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|    203|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|    203|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|    203|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|    203|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|    203|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|    203|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 203]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|    203|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|    203|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|    203|        MF.data++;                              \
  |  |  |  |  |  |  212|    203|    }                                           \
  |  |  |  |  |  |  213|    203|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1160|    203|                }
 1161|    719|            }
 1162|    770|        }
 1163|  9.48k|    } else if (ct_nw_proto_p &&
  ------------------
  |  Branch (1163:16): [True: 0, False: 155]
  ------------------
 1164|      0|               (*ct_nw_proto_p == IPPROTO_TCP ||
  ------------------
  |  Branch (1164:17): [True: 0, False: 0]
  ------------------
 1165|      0|                *ct_nw_proto_p == IPPROTO_UDP ||
  ------------------
  |  Branch (1165:17): [True: 0, False: 0]
  ------------------
 1166|      0|                *ct_nw_proto_p == IPPROTO_SCTP ||
  ------------------
  |  Branch (1166:17): [True: 0, False: 0]
  ------------------
 1167|      0|                *ct_nw_proto_p == IPPROTO_ICMP ||
  ------------------
  |  Branch (1167:17): [True: 0, False: 0]
  ------------------
 1168|      0|                (*ct_nw_proto_p == IPPROTO_ICMPV6 && !icmp6_is_nd(data)))) {
  ------------------
  |  Branch (1168:18): [True: 0, False: 0]
  |  Branch (1168:54): [True: 0, False: 0]
  ------------------
 1169|      0|        miniflow_pad_from_64(mf, ct_tp_src);
  ------------------
  |  |  315|      0|    miniflow_pad_from_64_(MF, offsetof(struct flow, FIELD))
  |  |  ------------------
  |  |  |  |  241|      0|#define miniflow_pad_from_64_(MF, OFS)                          \
  |  |  |  |  242|      0|{                                                               \
  |  |  |  |  243|      0|    MINIFLOW_ASSERT(MF.data < MF.end);                          \
  |  |  |  |  244|      0|                                                                \
  |  |  |  |  245|      0|    MINIFLOW_ASSERT((OFS) % 8 != 0);                            \
  |  |  |  |  246|      0|    miniflow_set_map(MF, OFS / 8);                              \
  |  |  |  |  ------------------
  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  162|      0|}
  |  |  |  |  ------------------
  |  |  |  |  247|      0|                                                                \
  |  |  |  |  248|      0|    memset((uint8_t *)MF.data, 0, (OFS) % 8);                   \
  |  |  |  |  249|      0|}
  |  |  ------------------
  ------------------
 1170|      0|        miniflow_push_be16(mf, ct_tp_src, ct_tp_src);
  ------------------
  |  |  306|      0|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|      0|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|      0|{                                               \
  |  |  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|      0|                                                \
  |  |  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1171|      0|        miniflow_push_be16(mf, ct_tp_dst, ct_tp_dst);
  ------------------
  |  |  306|      0|    miniflow_push_be16_(MF, offsetof(struct flow, FIELD), VALUE)
  |  |  ------------------
  |  |  |  |  252|      0|    miniflow_push_uint16_(MF, OFS, (OVS_FORCE uint16_t)VALUE);
  |  |  |  |  ------------------
  |  |  |  |  |  |  195|      0|#define miniflow_push_uint16_(MF, OFS, VALUE)   \
  |  |  |  |  |  |  196|      0|{                                               \
  |  |  |  |  |  |  197|      0|    MINIFLOW_ASSERT(MF.data < MF.end);          \
  |  |  |  |  |  |  198|      0|                                                \
  |  |  |  |  |  |  199|      0|    if ((OFS) % 8 == 0) {                       \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (199:9): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  200|      0|        miniflow_set_map(MF, OFS / 8);          \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  159|      0|    {                                        \
  |  |  |  |  |  |  |  |  160|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS));  \
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  161|      0|    flowmap_set(&MF.map, (OFS), 1);          \
  |  |  |  |  |  |  |  |  162|      0|}
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  201|      0|        *(uint16_t *)MF.data = VALUE;           \
  |  |  |  |  |  |  202|      0|    } else if ((OFS) % 8 == 2) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (202:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  203|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  204|      0|        *((uint16_t *)MF.data + 1) = VALUE;     \
  |  |  |  |  |  |  205|      0|    } else if ((OFS) % 8 == 4) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (205:16): [Folded, False: 0]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  206|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  207|      0|        *((uint16_t *)MF.data + 2) = VALUE;     \
  |  |  |  |  |  |  208|      0|    } else if ((OFS) % 8 == 6) {                \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  Branch (208:16): [True: 0, Folded]
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  209|      0|        miniflow_assert_in_map(MF, OFS / 8);    \
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  165|      0|    MINIFLOW_ASSERT(flowmap_is_set(&MF.map, (OFS))); \
  |  |  |  |  |  |  |  |  166|      0|    ASSERT_FLOWMAP_NOT_SET(&MF.map, (OFS) + 1)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  149|      0|#define ASSERT_FLOWMAP_NOT_SET(FM, IDX)                                 \
  |  |  |  |  |  |  |  |  |  |  150|      0|{                                                                       \
  |  |  |  |  |  |  |  |  |  |  151|      0|    MINIFLOW_ASSERT(!((FM)->bits[(IDX) / MAP_T_BITS] &                  \
  |  |  |  |  |  |  |  |  |  |  152|      0|                      (MAP_MAX << ((IDX) % MAP_T_BITS))));              \
  |  |  |  |  |  |  |  |  |  |  153|      0|    for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |                   for (size_t i = (IDX) / MAP_T_BITS + 1; i < FLOWMAP_UNITS; i++) {   \
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  280|      0|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  |  |  |  300|      0|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  |  Branch (153:45): [True: 0, False: 0]
  |  |  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  154|      0|        MINIFLOW_ASSERT(!(FM)->bits[i]);                                \
  |  |  |  |  |  |  |  |  |  |  155|      0|    }                                                                   \
  |  |  |  |  |  |  |  |  |  |  156|      0|}
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  210|      0|        *((uint16_t *)MF.data + 3) = VALUE;     \
  |  |  |  |  |  |  211|      0|        MF.data++;                              \
  |  |  |  |  |  |  212|      0|    }                                           \
  |  |  |  |  |  |  213|      0|}
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1172|      0|    }
 1173|  49.6k| out:
 1174|  49.6k|    dst->map = mf.map;
 1175|  49.6k|}
flow_zero_wildcards:
 1288|  90.8k|{
 1289|  90.8k|    uint64_t *flow_u64 = (uint64_t *) flow;
 1290|  90.8k|    const uint64_t *wc_u64 = (const uint64_t *) &wildcards->masks;
 1291|  90.8k|    size_t i;
 1292|       |
 1293|  8.44M|    for (i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  8.44M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (1293:17): [True: 8.35M, False: 90.8k]
  ------------------
 1294|  8.35M|        flow_u64[i] &= wc_u64[i];
 1295|  8.35M|    }
 1296|  90.8k|}
ct_state_to_string:
 1416|  43.4k|{
 1417|  43.4k|    switch (state) {
 1418|      0|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
 1419|      0|        CS_STATES
  ------------------
  |  |  926|  1.45k|    CS_STATE(NEW,         0, "new")             \
  |  |  ------------------
  |  |  |  | 1418|  1.45k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.45k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  927|  1.50k|    CS_STATE(ESTABLISHED, 1, "est")             \
  |  |  ------------------
  |  |  |  | 1418|  1.50k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.50k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  928|  1.55k|    CS_STATE(RELATED,     2, "rel")             \
  |  |  ------------------
  |  |  |  | 1418|  1.55k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.55k, False: 41.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  929|  1.55k|    CS_STATE(REPLY_DIR,   3, "rpl")             \
  |  |  ------------------
  |  |  |  | 1418|  1.44k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.44k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  930|  1.56k|    CS_STATE(INVALID,     4, "inv")             \
  |  |  ------------------
  |  |  |  | 1418|  1.56k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.56k, False: 41.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  931|  1.56k|    CS_STATE(TRACKED,     5, "trk")             \
  |  |  ------------------
  |  |  |  | 1418|  1.45k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.45k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  932|  1.45k|    CS_STATE(SRC_NAT,     6, "snat")            \
  |  |  ------------------
  |  |  |  | 1418|  1.44k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.44k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  933|  1.44k|    CS_STATE(DST_NAT,     7, "dnat")
  |  |  ------------------
  |  |  |  | 1418|  1.44k|#define CS_STATE(ENUM, INDEX, NAME) case CS_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (1418:37): [True: 1.44k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1420|      0|#undef CS_STATE
 1421|  31.5k|    default:
  ------------------
  |  Branch (1421:5): [True: 31.5k, False: 11.8k]
  ------------------
 1422|       |        return NULL;
 1423|  43.4k|    }
 1424|  43.4k|}
flow_tun_flag_to_string:
 1539|  2.03k|{
 1540|  2.03k|    switch (flags) {
 1541|     63|    case FLOW_TNL_F_DONT_FRAGMENT:
  ------------------
  |  |   61|     63|#define FLOW_TNL_F_DONT_FRAGMENT (1 << 1)
  ------------------
  |  Branch (1541:5): [True: 63, False: 1.96k]
  ------------------
 1542|     63|        return "df";
 1543|     65|    case FLOW_TNL_F_CSUM:
  ------------------
  |  |   62|     65|#define FLOW_TNL_F_CSUM (1 << 2)
  ------------------
  |  Branch (1543:5): [True: 65, False: 1.96k]
  ------------------
 1544|     65|        return "csum";
 1545|    358|    case FLOW_TNL_F_KEY:
  ------------------
  |  |   63|    358|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1545:5): [True: 358, False: 1.67k]
  ------------------
 1546|    358|        return "key";
 1547|    545|    case FLOW_TNL_F_OAM:
  ------------------
  |  |   56|    545|#define FLOW_TNL_F_OAM (1 << 0)
  ------------------
  |  Branch (1547:5): [True: 545, False: 1.48k]
  ------------------
 1548|    545|        return "oam";
 1549|    999|    default:
  ------------------
  |  Branch (1549:5): [True: 999, False: 1.03k]
  ------------------
 1550|       |        return NULL;
 1551|  2.03k|    }
 1552|  2.03k|}
format_flags:
 1557|  7.28k|{
 1558|  7.28k|    uint32_t bad = 0;
 1559|       |
 1560|  7.28k|    if (!flags) {
  ------------------
  |  Branch (1560:9): [True: 908, False: 6.37k]
  ------------------
 1561|    908|        ds_put_char(ds, '0');
 1562|    908|        return;
 1563|    908|    }
 1564|  36.9k|    while (flags) {
  ------------------
  |  Branch (1564:12): [True: 30.5k, False: 6.37k]
  ------------------
 1565|  30.5k|        uint32_t bit = rightmost_1bit(flags);
 1566|  30.5k|        const char *s;
 1567|       |
 1568|  30.5k|        s = bit_to_string(bit);
 1569|  30.5k|        if (s) {
  ------------------
  |  Branch (1569:13): [True: 27.9k, False: 2.67k]
  ------------------
 1570|  27.9k|            ds_put_format(ds, "%s%c", s, del);
 1571|  27.9k|        } else {
 1572|  2.67k|            bad |= bit;
 1573|  2.67k|        }
 1574|       |
 1575|  30.5k|        flags &= ~bit;
 1576|  30.5k|    }
 1577|       |
 1578|  6.37k|    if (bad) {
  ------------------
  |  Branch (1578:9): [True: 1.41k, False: 4.96k]
  ------------------
 1579|  1.41k|        ds_put_format(ds, "0x%"PRIx32"%c", bad, del);
 1580|  1.41k|    }
 1581|  6.37k|    ds_chomp(ds, del);
 1582|  6.37k|}
format_flags_masked:
 1588|  8.94k|{
 1589|  8.94k|    if (name) {
  ------------------
  |  Branch (1589:9): [True: 5.32k, False: 3.61k]
  ------------------
 1590|  5.32k|        ds_put_format(ds, "%s%s=%s", colors.param, name, colors.end);
 1591|  5.32k|    }
 1592|       |
 1593|  8.94k|    if (mask == max_mask) {
  ------------------
  |  Branch (1593:9): [True: 7.20k, False: 1.73k]
  ------------------
 1594|  7.20k|        format_flags(ds, bit_to_string, flags, '|');
 1595|  7.20k|        return;
 1596|  7.20k|    }
 1597|       |
 1598|  1.73k|    if (!mask) {
  ------------------
  |  Branch (1598:9): [True: 66, False: 1.66k]
  ------------------
 1599|     66|        ds_put_cstr(ds, "0/0");
 1600|     66|        return;
 1601|     66|    }
 1602|       |
 1603|  44.6k|    while (mask) {
  ------------------
  |  Branch (1603:12): [True: 42.9k, False: 1.66k]
  ------------------
 1604|  42.9k|        uint32_t bit = rightmost_1bit(mask);
 1605|  42.9k|        const char *s = bit_to_string(bit);
 1606|       |
 1607|  42.9k|        ds_put_format(ds, "%s%s", (flags & bit) ? "+" : "-",
  ------------------
  |  Branch (1607:35): [True: 13.8k, False: 29.1k]
  ------------------
 1608|  42.9k|                      s ? s : "[Unknown]");
  ------------------
  |  Branch (1608:23): [True: 11.4k, False: 31.5k]
  ------------------
 1609|  42.9k|        mask &= ~bit;
 1610|  42.9k|    }
 1611|  1.66k|}
format_packet_type_masked:
 1633|  16.8k|{
 1634|  16.8k|    if (value == htonl(PT_ETH) && mask == OVS_BE32_MAX) {
  ------------------
  |  |   43|    194|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (1634:9): [True: 194, False: 16.6k]
  |  Branch (1634:35): [True: 194, False: 0]
  ------------------
 1635|    194|        ds_put_cstr(s, "eth");
 1636|  16.6k|    } else {
 1637|  16.6k|        ds_put_cstr(s, "packet_type=(");
 1638|  16.6k|        put_u16_masked(s, pt_ns(value), pt_ns(mask));
 1639|  16.6k|        ds_put_char(s, ',');
 1640|  16.6k|        put_u16_masked(s, pt_ns_type(value), pt_ns_type(mask));
 1641|  16.6k|        ds_put_char(s, ')');
 1642|  16.6k|    }
 1643|  16.8k|}
flow_format:
 1807|  49.6k|{
 1808|  49.6k|    struct match match;
 1809|  49.6k|    struct flow_wildcards *wc = &match.wc;
 1810|       |
 1811|  49.6k|    match_wc_init(&match, flow);
 1812|       |
 1813|       |    /* As this function is most often used for formatting a packet in a
 1814|       |     * packet-in message, skip formatting the packet context fields that are
 1815|       |     * all-zeroes to make the print-out easier on the eyes.  This means that a
 1816|       |     * missing context field implies a zero value for that field.  This is
 1817|       |     * similar to OpenFlow encoding of these fields, as the specification
 1818|       |     * states that all-zeroes context fields should not be encoded in the
 1819|       |     * packet-in messages. */
 1820|  49.6k|    if (!flow->in_port.ofp_port) {
  ------------------
  |  Branch (1820:9): [True: 49.6k, False: 0]
  ------------------
 1821|  49.6k|        WC_UNMASK_FIELD(wc, in_port);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1822|  49.6k|    }
 1823|  49.6k|    if (!flow->skb_priority) {
  ------------------
  |  Branch (1823:9): [True: 49.6k, False: 0]
  ------------------
 1824|  49.6k|        WC_UNMASK_FIELD(wc, skb_priority);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1825|  49.6k|    }
 1826|  49.6k|    if (!flow->pkt_mark) {
  ------------------
  |  Branch (1826:9): [True: 49.6k, False: 0]
  ------------------
 1827|  49.6k|        WC_UNMASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1828|  49.6k|    }
 1829|  49.6k|    if (!flow->recirc_id) {
  ------------------
  |  Branch (1829:9): [True: 49.6k, False: 0]
  ------------------
 1830|  49.6k|        WC_UNMASK_FIELD(wc, recirc_id);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1831|  49.6k|    }
 1832|  49.6k|    if (!flow->dp_hash) {
  ------------------
  |  Branch (1832:9): [True: 49.6k, False: 0]
  ------------------
 1833|  49.6k|        WC_UNMASK_FIELD(wc, dp_hash);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1834|  49.6k|    }
 1835|  49.6k|    if (!flow->ct_state) {
  ------------------
  |  Branch (1835:9): [True: 49.6k, False: 0]
  ------------------
 1836|  49.6k|        WC_UNMASK_FIELD(wc, ct_state);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1837|  49.6k|    }
 1838|  49.6k|    if (!flow->ct_zone) {
  ------------------
  |  Branch (1838:9): [True: 49.6k, False: 0]
  ------------------
 1839|  49.6k|        WC_UNMASK_FIELD(wc, ct_zone);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1840|  49.6k|    }
 1841|  49.6k|    if (!flow->ct_mark) {
  ------------------
  |  Branch (1841:9): [True: 49.6k, False: 0]
  ------------------
 1842|  49.6k|        WC_UNMASK_FIELD(wc, ct_mark);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1843|  49.6k|    }
 1844|  49.6k|    if (ovs_u128_is_zero(flow->ct_label)) {
  ------------------
  |  Branch (1844:9): [True: 49.6k, False: 0]
  ------------------
 1845|  49.6k|        WC_UNMASK_FIELD(wc, ct_label);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1846|  49.6k|    }
 1847|  49.6k|    if (!is_ct_valid(flow, &match.wc, NULL) || !flow->ct_nw_proto) {
  ------------------
  |  Branch (1847:9): [True: 49.6k, False: 0]
  |  Branch (1847:48): [True: 0, False: 0]
  ------------------
 1848|  49.6k|        WC_UNMASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1849|  49.6k|        WC_UNMASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1850|  49.6k|        WC_UNMASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1851|  49.6k|        if (flow->dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1851:13): [True: 1.50k, False: 48.1k]
  ------------------
 1852|  1.50k|            WC_UNMASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  205|  1.50k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1853|  1.50k|            WC_UNMASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  205|  1.50k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1854|  48.1k|        } else if (flow->dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1854:20): [True: 9.79k, False: 38.3k]
  ------------------
 1855|  9.79k|            WC_UNMASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  205|  9.79k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1856|  9.79k|            WC_UNMASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  205|  9.79k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1857|  9.79k|        }
 1858|  49.6k|    }
 1859|  1.63M|    for (int i = 0; i < FLOW_N_REGS; i++) {
  ------------------
  |  |   33|  1.63M|#define FLOW_N_REGS 32
  ------------------
  |  Branch (1859:21): [True: 1.58M, False: 49.6k]
  ------------------
 1860|  1.58M|        if (!flow->regs[i]) {
  ------------------
  |  Branch (1860:13): [True: 1.58M, False: 0]
  ------------------
 1861|  1.58M|            WC_UNMASK_FIELD(wc, regs[i]);
  ------------------
  |  |  205|  1.58M|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1862|  1.58M|        }
 1863|  1.58M|    }
 1864|  49.6k|    if (!flow->metadata) {
  ------------------
  |  Branch (1864:9): [True: 49.6k, False: 0]
  ------------------
 1865|  49.6k|        WC_UNMASK_FIELD(wc, metadata);
  ------------------
  |  |  205|  49.6k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 1866|  49.6k|    }
 1867|       |
 1868|  49.6k|    match_format(&match, port_map, ds, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  49.6k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1869|  49.6k|}
flow_wildcards_init_catchall:
 1885|   452k|{
 1886|   452k|    memset(&wc->masks, 0, sizeof wc->masks);
 1887|   452k|}
flow_wildcards_init_for_packet:
 1896|  49.6k|{
 1897|  49.6k|    ovs_be16 dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  49.6k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 1898|       |
 1899|  49.6k|    memset(&wc->masks, 0x0, sizeof wc->masks);
 1900|       |
 1901|       |    /* Update this function whenever struct flow changes. */
 1902|  49.6k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  49.6k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
 1903|       |
 1904|  49.6k|    if (flow_tnl_dst_is_set(&flow->tunnel)) {
  ------------------
  |  Branch (1904:9): [True: 0, False: 49.6k]
  ------------------
 1905|      0|        if (flow->tunnel.flags & FLOW_TNL_F_KEY) {
  ------------------
  |  |   63|      0|#define FLOW_TNL_F_KEY (1 << 3)
  ------------------
  |  Branch (1905:13): [True: 0, False: 0]
  ------------------
 1906|      0|            WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1907|      0|        }
 1908|      0|        WC_MASK_FIELD(wc, tunnel.ip_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1909|      0|        WC_MASK_FIELD(wc, tunnel.ip_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1910|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1911|      0|        WC_MASK_FIELD(wc, tunnel.ipv6_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1912|      0|        WC_MASK_FIELD(wc, tunnel.flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1913|      0|        WC_MASK_FIELD(wc, tunnel.ip_tos);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1914|      0|        WC_MASK_FIELD(wc, tunnel.ip_ttl);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1915|      0|        WC_MASK_FIELD(wc, tunnel.tp_src);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1916|      0|        WC_MASK_FIELD(wc, tunnel.tp_dst);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1917|      0|        WC_MASK_FIELD(wc, tunnel.gbp_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1918|      0|        WC_MASK_FIELD(wc, tunnel.gbp_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1919|      0|        WC_MASK_FIELD(wc, tunnel.erspan_ver);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1920|      0|        WC_MASK_FIELD(wc, tunnel.erspan_idx);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1921|      0|        WC_MASK_FIELD(wc, tunnel.erspan_dir);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1922|      0|        WC_MASK_FIELD(wc, tunnel.erspan_hwid);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1923|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_flags);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1924|      0|        WC_MASK_FIELD(wc, tunnel.gtpu_msgtype);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1925|       |
 1926|      0|        if (!(flow->tunnel.flags & FLOW_TNL_F_UDPIF)) {
  ------------------
  |  |   45|      0|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (1926:13): [True: 0, False: 0]
  ------------------
 1927|      0|            if (flow->tunnel.metadata.present.map) {
  ------------------
  |  Branch (1927:17): [True: 0, False: 0]
  ------------------
 1928|      0|                wc->masks.tunnel.metadata.present.map =
 1929|      0|                                              flow->tunnel.metadata.present.map;
 1930|      0|                WC_MASK_FIELD(wc, tunnel.metadata.opts.u8);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1931|      0|                WC_MASK_FIELD(wc, tunnel.metadata.tab);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1932|      0|            }
 1933|      0|        } else {
 1934|      0|            WC_MASK_FIELD(wc, tunnel.metadata.present.len);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1935|      0|            memset(wc->masks.tunnel.metadata.opts.gnv, 0xff,
 1936|      0|                   flow->tunnel.metadata.present.len);
 1937|      0|        }
 1938|  49.6k|    } else if (flow->tunnel.tun_id) {
  ------------------
  |  Branch (1938:16): [True: 0, False: 49.6k]
  ------------------
 1939|      0|        WC_MASK_FIELD(wc, tunnel.tun_id);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1940|      0|    }
 1941|       |
 1942|       |    /* metadata, regs, and conj_id wildcarded. */
 1943|       |
 1944|  49.6k|    WC_MASK_FIELD(wc, skb_priority);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1945|  49.6k|    WC_MASK_FIELD(wc, pkt_mark);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1946|  49.6k|    WC_MASK_FIELD(wc, ct_state);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1947|  49.6k|    WC_MASK_FIELD(wc, ct_zone);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1948|  49.6k|    WC_MASK_FIELD(wc, ct_mark);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1949|  49.6k|    WC_MASK_FIELD(wc, ct_label);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1950|  49.6k|    WC_MASK_FIELD(wc, recirc_id);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1951|  49.6k|    WC_MASK_FIELD(wc, dp_hash);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1952|  49.6k|    WC_MASK_FIELD(wc, in_port);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1953|       |
 1954|       |    /* actset_output wildcarded. */
 1955|       |
 1956|  49.6k|    WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|  49.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1957|  49.6k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1957:9): [True: 41.7k, False: 7.94k]
  ------------------
 1958|  41.7k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  41.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1959|  41.7k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  41.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1960|  41.7k|        WC_MASK_FIELD(wc, dl_type);
  ------------------
  |  |  201|  41.7k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1961|       |        /* No need to set mask of inner VLANs that don't exist. */
 1962|  43.1k|        for (int i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  43.1k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1962:25): [True: 42.6k, False: 556]
  ------------------
 1963|       |            /* Always show the first zero VLAN. */
 1964|  42.6k|            WC_MASK_FIELD(wc, vlans[i]);
  ------------------
  |  |  201|  42.6k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1965|  42.6k|            if (flow->vlans[i].tci == htons(0)) {
  ------------------
  |  Branch (1965:17): [True: 41.1k, False: 1.44k]
  ------------------
 1966|  41.1k|                break;
 1967|  41.1k|            }
 1968|  42.6k|        }
 1969|  41.7k|        dl_type = flow->dl_type;
 1970|  41.7k|    } else {
 1971|  7.94k|        dl_type = pt_ns_type_be(flow->packet_type);
 1972|  7.94k|    }
 1973|       |
 1974|  49.6k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1974:9): [True: 1.50k, False: 48.1k]
  ------------------
 1975|  1.50k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  1.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1976|  1.50k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  1.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1977|  1.50k|        WC_MASK_FIELD(wc, ct_nw_src);
  ------------------
  |  |  201|  1.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1978|  1.50k|        WC_MASK_FIELD(wc, ct_nw_dst);
  ------------------
  |  |  201|  1.50k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1979|  48.1k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1979:16): [True: 9.79k, False: 38.3k]
  ------------------
 1980|  9.79k|        WC_MASK_FIELD(wc, ipv6_src);
  ------------------
  |  |  201|  9.79k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1981|  9.79k|        WC_MASK_FIELD(wc, ipv6_dst);
  ------------------
  |  |  201|  9.79k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1982|  9.79k|        WC_MASK_FIELD(wc, ipv6_label);
  ------------------
  |  |  201|  9.79k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1983|  9.79k|        if (is_nd(flow, wc)) {
  ------------------
  |  Branch (1983:13): [True: 505, False: 9.28k]
  ------------------
 1984|    505|            WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|    505|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1985|    505|            WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|    505|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1986|    505|            WC_MASK_FIELD(wc, nd_target);
  ------------------
  |  |  201|    505|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1987|  9.28k|        } else {
 1988|  9.28k|            WC_MASK_FIELD(wc, ct_ipv6_src);
  ------------------
  |  |  201|  9.28k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1989|  9.28k|            WC_MASK_FIELD(wc, ct_ipv6_dst);
  ------------------
  |  |  201|  9.28k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1990|  9.28k|        }
 1991|  38.3k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (1991:16): [True: 554, False: 37.8k]
  ------------------
 1992|  37.8k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (1992:16): [True: 622, False: 37.2k]
  ------------------
 1993|  1.17k|        WC_MASK_FIELD(wc, nw_src);
  ------------------
  |  |  201|  1.17k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1994|  1.17k|        WC_MASK_FIELD(wc, nw_dst);
  ------------------
  |  |  201|  1.17k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1995|  1.17k|        WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  1.17k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1996|  1.17k|        WC_MASK_FIELD(wc, arp_sha);
  ------------------
  |  |  201|  1.17k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1997|  1.17k|        WC_MASK_FIELD(wc, arp_tha);
  ------------------
  |  |  201|  1.17k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1998|  1.17k|        return;
 1999|  37.2k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (1999:16): [True: 563, False: 36.6k]
  ------------------
 2000|  1.28k|        for (int i = 0; i < FLOW_MAX_MPLS_LABELS; i++) {
  ------------------
  |  |   66|  1.28k|#define FLOW_MAX_MPLS_LABELS 3
  ------------------
  |  Branch (2000:25): [True: 1.14k, False: 133]
  ------------------
 2001|  1.14k|            WC_MASK_FIELD(wc, mpls_lse[i]);
  ------------------
  |  |  201|  1.14k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2002|  1.14k|            if (flow->mpls_lse[i] & htonl(MPLS_BOS_MASK)) {
  ------------------
  |  Branch (2002:17): [True: 430, False: 717]
  ------------------
 2003|    430|                break;
 2004|    430|            }
 2005|  1.14k|        }
 2006|    563|        return;
 2007|  36.6k|    } else if (flow->dl_type == htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (2007:16): [True: 7.18k, False: 29.4k]
  ------------------
 2008|  7.18k|        WC_MASK_FIELD(wc, nsh.flags);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2009|  7.18k|        WC_MASK_FIELD(wc, nsh.ttl);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2010|  7.18k|        WC_MASK_FIELD(wc, nsh.mdtype);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2011|  7.18k|        WC_MASK_FIELD(wc, nsh.np);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2012|  7.18k|        WC_MASK_FIELD(wc, nsh.path_hdr);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2013|  7.18k|        WC_MASK_FIELD(wc, nsh.context);
  ------------------
  |  |  201|  7.18k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2014|  29.4k|    } else {
 2015|  29.4k|        return; /* Unknown ethertype. */
 2016|  29.4k|    }
 2017|       |
 2018|       |    /* IPv4 or IPv6. */
 2019|  18.4k|    WC_MASK_FIELD_MASK(wc, nw_frag, FLOW_NW_FRAG_MASK);
  ------------------
  |  |  203|  18.4k|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 2020|  18.4k|    WC_MASK_FIELD(wc, nw_tos);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2021|  18.4k|    WC_MASK_FIELD(wc, nw_ttl);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2022|  18.4k|    WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2023|  18.4k|    WC_MASK_FIELD(wc, ct_nw_proto);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2024|  18.4k|    WC_MASK_FIELD(wc, ct_tp_src);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2025|  18.4k|    WC_MASK_FIELD(wc, ct_tp_dst);
  ------------------
  |  |  201|  18.4k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2026|       |
 2027|       |    /* No transport layer header in later fragments. */
 2028|  18.4k|    if (!(flow->nw_frag & FLOW_NW_FRAG_LATER) &&
  ------------------
  |  |   55|  18.4k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2028:9): [True: 18.3k, False: 155]
  ------------------
 2029|  18.3k|        (flow->nw_proto == IPPROTO_ICMP ||
  ------------------
  |  Branch (2029:10): [True: 1.51k, False: 16.8k]
  ------------------
 2030|  16.8k|         flow->nw_proto == IPPROTO_ICMPV6 ||
  ------------------
  |  Branch (2030:10): [True: 770, False: 16.0k]
  ------------------
 2031|  16.0k|         flow->nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (2031:10): [True: 4.97k, False: 11.0k]
  ------------------
 2032|  11.0k|         flow->nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (2032:10): [True: 520, False: 10.5k]
  ------------------
 2033|  10.5k|         flow->nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (2033:10): [True: 339, False: 10.2k]
  ------------------
 2034|  10.2k|         flow->nw_proto == IPPROTO_IGMP)) {
  ------------------
  |  Branch (2034:10): [True: 1.13k, False: 9.07k]
  ------------------
 2035|  9.24k|        WC_MASK_FIELD(wc, tp_src);
  ------------------
  |  |  201|  9.24k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2036|  9.24k|        WC_MASK_FIELD(wc, tp_dst);
  ------------------
  |  |  201|  9.24k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2037|       |
 2038|  9.24k|        if (flow->nw_proto == IPPROTO_TCP) {
  ------------------
  |  Branch (2038:13): [True: 4.97k, False: 4.27k]
  ------------------
 2039|  4.97k|            WC_MASK_FIELD(wc, tcp_flags);
  ------------------
  |  |  201|  4.97k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2040|  4.97k|        } else if (flow->nw_proto == IPPROTO_IGMP) {
  ------------------
  |  Branch (2040:20): [True: 1.13k, False: 3.14k]
  ------------------
 2041|  1.13k|            WC_MASK_FIELD(wc, igmp_group_ip4);
  ------------------
  |  |  201|  1.13k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 2042|  1.13k|        }
 2043|  9.24k|    }
 2044|  18.4k|}
flow_wildcards_equal:
 2230|  46.6k|{
 2231|  46.6k|    return flow_equal(&a->masks, &b->masks);
 2232|  46.6k|}
flow_wildcards_set_reg_mask:
 2275|  15.3k|{
 2276|  15.3k|    wc->masks.regs[idx] = mask;
 2277|  15.3k|}
flow_wildcards_set_xreg_mask:
 2283|  6.86k|{
 2284|  6.86k|    flow_set_xreg(&wc->masks, idx, mask);
 2285|  6.86k|}
flow_wildcards_set_xxreg_mask:
 2292|  4.03k|{
 2293|  4.03k|    flow_set_xxreg(&wc->masks, idx, mask);
 2294|  4.03k|}
flow_hash_fields_to_str:
 2723|  3.68k|{
 2724|  3.68k|    switch (fields) {
 2725|    586|    case NX_HASH_FIELDS_ETH_SRC: return "eth_src";
  ------------------
  |  Branch (2725:5): [True: 586, False: 3.09k]
  ------------------
 2726|    667|    case NX_HASH_FIELDS_SYMMETRIC_L4: return "symmetric_l4";
  ------------------
  |  Branch (2726:5): [True: 667, False: 3.01k]
  ------------------
 2727|     18|    case NX_HASH_FIELDS_SYMMETRIC_L3L4: return "symmetric_l3l4";
  ------------------
  |  Branch (2727:5): [True: 18, False: 3.66k]
  ------------------
 2728|    368|    case NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP: return "symmetric_l3l4+udp";
  ------------------
  |  Branch (2728:5): [True: 368, False: 3.31k]
  ------------------
 2729|     73|    case NX_HASH_FIELDS_NW_SRC: return "nw_src";
  ------------------
  |  Branch (2729:5): [True: 73, False: 3.60k]
  ------------------
 2730|  1.17k|    case NX_HASH_FIELDS_NW_DST: return "nw_dst";
  ------------------
  |  Branch (2730:5): [True: 1.17k, False: 2.50k]
  ------------------
 2731|    348|    case NX_HASH_FIELDS_SYMMETRIC_L3: return "symmetric_l3";
  ------------------
  |  Branch (2731:5): [True: 348, False: 3.33k]
  ------------------
 2732|    444|    default: return "<unknown>";
  ------------------
  |  Branch (2732:5): [True: 444, False: 3.23k]
  ------------------
 2733|  3.68k|    }
 2734|  3.68k|}
flow_hash_fields_valid:
 2739|  8.45k|{
 2740|  8.45k|    return fields == NX_HASH_FIELDS_ETH_SRC
  ------------------
  |  Branch (2740:12): [True: 781, False: 7.66k]
  ------------------
 2741|  7.66k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L4
  ------------------
  |  Branch (2741:12): [True: 1.68k, False: 5.98k]
  ------------------
 2742|  5.98k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4
  ------------------
  |  Branch (2742:12): [True: 839, False: 5.14k]
  ------------------
 2743|  5.14k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3L4_UDP
  ------------------
  |  Branch (2743:12): [True: 402, False: 4.74k]
  ------------------
 2744|  4.74k|        || fields == NX_HASH_FIELDS_NW_SRC
  ------------------
  |  Branch (2744:12): [True: 81, False: 4.66k]
  ------------------
 2745|  4.66k|        || fields == NX_HASH_FIELDS_NW_DST
  ------------------
  |  Branch (2745:12): [True: 2.15k, False: 2.51k]
  ------------------
 2746|  2.51k|        || fields == NX_HASH_FIELDS_SYMMETRIC_L3;
  ------------------
  |  Branch (2746:12): [True: 350, False: 2.16k]
  ------------------
 2747|  8.45k|}
flow_set_vlan_vid:
 2805|    361|{
 2806|       |    ovs_be16 mask = htons(VLAN_VID_MASK | VLAN_CFI);
 2807|    361|    flow->vlans[0].tci &= ~mask;
 2808|    361|    flow->vlans[0].tci |= vid & mask;
 2809|    361|}
flow_set_vlan_pcp:
 2820|    337|{
 2821|    337|    pcp &= 0x07;
 2822|    337|    flow->vlans[id].tci &= ~htons(VLAN_PCP_MASK);
 2823|       |    flow->vlans[id].tci |= htons((pcp << VLAN_PCP_SHIFT) | VLAN_CFI);
 2824|    337|}
flow_count_vlan_headers:
 2829|  5.56k|{
 2830|  5.56k|    int i;
 2831|       |
 2832|  9.19k|    for (i = 0; i < FLOW_MAX_VLAN_HEADERS; i++) {
  ------------------
  |  |   75|  9.19k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (2832:17): [True: 8.72k, False: 473]
  ------------------
 2833|  8.72k|        if (!(flow->vlans[i].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (2833:13): [True: 5.09k, False: 3.63k]
  ------------------
 2834|  5.09k|            break;
 2835|  5.09k|        }
 2836|  8.72k|    }
 2837|  5.56k|    return i;
 2838|  5.56k|}
flow_pop_vlan:
 2860|  5.56k|{
 2861|  5.56k|    int n = flow_count_vlan_headers(flow);
 2862|  5.56k|    if (n > 1) {
  ------------------
  |  Branch (2862:9): [True: 473, False: 5.09k]
  ------------------
 2863|    473|        if (wc) {
  ------------------
  |  Branch (2863:13): [True: 0, False: 473]
  ------------------
 2864|      0|            memset(&wc->masks.vlans[1], 0xff,
 2865|      0|                   sizeof(union flow_vlan_hdr) * (n - 1));
 2866|      0|        }
 2867|    473|        memmove(&flow->vlans[0], &flow->vlans[1],
 2868|    473|                sizeof(union flow_vlan_hdr) * (n - 1));
 2869|    473|    }
 2870|  5.56k|    if (n > 0) {
  ------------------
  |  Branch (2870:9): [True: 3.15k, False: 2.40k]
  ------------------
 2871|  3.15k|        memset(&flow->vlans[n - 1], 0, sizeof(union flow_vlan_hdr));
 2872|  3.15k|    }
 2873|  5.56k|}
flow_push_vlan_uninit:
 2877|  1.87k|{
 2878|  1.87k|    if (wc) {
  ------------------
  |  Branch (2878:9): [True: 0, False: 1.87k]
  ------------------
 2879|      0|        int n = flow_count_vlan_headers(flow);
 2880|      0|        if (n) {
  ------------------
  |  Branch (2880:13): [True: 0, False: 0]
  ------------------
 2881|      0|            memset(wc->masks.vlans, 0xff, sizeof(union flow_vlan_hdr) * n);
 2882|      0|        }
 2883|      0|    }
 2884|  1.87k|    memmove(&flow->vlans[1], &flow->vlans[0],
 2885|  1.87k|            sizeof(union flow_vlan_hdr) * (FLOW_MAX_VLAN_HEADERS - 1));
  ------------------
  |  |   75|  1.87k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
 2886|  1.87k|    memset(&flow->vlans[0], 0, sizeof(union flow_vlan_hdr));
 2887|  1.87k|}
flow_set_mpls_label:
 3076|  1.31k|{
 3077|  1.31k|    set_mpls_lse_label(&flow->mpls_lse[idx], label);
 3078|  1.31k|}
flow_set_mpls_ttl:
 3084|    143|{
 3085|    143|    set_mpls_lse_ttl(&flow->mpls_lse[idx], ttl);
 3086|    143|}
flow_set_mpls_tc:
 3092|    636|{
 3093|    636|    set_mpls_lse_tc(&flow->mpls_lse[idx], tc);
 3094|    636|}
flow_set_mpls_bos:
 3099|    232|{
 3100|    232|    set_mpls_lse_bos(&flow->mpls_lse[idx], bos);
 3101|    232|}
miniflow_init:
 3474|  75.1k|{
 3475|  75.1k|    uint64_t *dst_u64 = miniflow_values(dst);
 3476|  75.1k|    size_t idx;
 3477|       |
 3478|   244k|    FLOWMAP_FOR_EACH_INDEX(idx, dst->map) {
  ------------------
  |  |  337|  75.1k|    for (struct flowmap_aux aux__ = FLOWMAP_AUX_INITIALIZER(MAP);   \
  |  |  ------------------
  |  |  |  |  331|  75.1k|#define FLOWMAP_AUX_INITIALIZER(FLOWMAP) { .unit = 0, .map = (FLOWMAP) }
  |  |  ------------------
  |  |  338|   319k|         flowmap_next_index(&aux__, &(IDX));)
  |  |  ------------------
  |  |  |  Branch (338:10): [True: 244k, False: 75.1k]
  |  |  ------------------
  ------------------
 3479|   244k|        *dst_u64++ = flow_u64_value(src, idx);
 3480|   244k|    }
 3481|  75.1k|}
miniflow_map_init:
 3486|  37.5k|{
 3487|       |    /* Initialize map, counting the number of nonzero elements. */
 3488|  37.5k|    flowmap_init(&flow->map);
 3489|  3.49M|    for (size_t i = 0; i < FLOW_U64S; i++) {
  ------------------
  |  |  165|  3.49M|#define FLOW_U64S (sizeof(struct flow) / sizeof(uint64_t))
  ------------------
  |  Branch (3489:24): [True: 3.45M, False: 37.5k]
  ------------------
 3490|  3.45M|        if (flow_u64_value(src, i)) {
  ------------------
  |  Branch (3490:13): [True: 122k, False: 3.33M]
  ------------------
 3491|   122k|            flowmap_set(&flow->map, i, 1);
 3492|   122k|        }
 3493|  3.45M|    }
 3494|  37.5k|}
miniflow_alloc:
 3501|  37.5k|{
 3502|  37.5k|    size_t n_values = miniflow_n_values(src);
 3503|  37.5k|    size_t data_size = MINIFLOW_VALUES_SIZE(n_values);
  ------------------
  |  |  527|  37.5k|#define MINIFLOW_VALUES_SIZE(COUNT) ((COUNT) * sizeof(uint64_t))
  ------------------
 3504|  37.5k|    struct miniflow *dst = xmalloc(n * (sizeof *src + data_size));
 3505|  37.5k|    size_t i;
 3506|       |
 3507|  37.5k|    COVERAGE_INC(miniflow_malloc);
  ------------------
  |  |   83|  37.5k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  37.5k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
 3508|       |
 3509|   112k|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (3509:17): [True: 75.1k, False: 37.5k]
  ------------------
 3510|  75.1k|        *dst = *src;   /* Copy maps. */
 3511|  75.1k|        dsts[i] = dst;
 3512|  75.1k|        dst += 1;      /* Just past the maps. */
 3513|  75.1k|        dst = (struct miniflow *)((uint64_t *)dst + n_values); /* Skip data. */
 3514|  75.1k|    }
 3515|  37.5k|    return data_size;
 3516|  37.5k|}
miniflow_expand:
 3547|   124k|{
 3548|   124k|    memset(dst, 0, sizeof *dst);
 3549|   124k|    flow_union_with_miniflow(dst, src);
 3550|   124k|}
minimask_init:
 3616|  37.5k|{
 3617|  37.5k|    miniflow_init(&mask->masks, &wc->masks);
 3618|  37.5k|}
minimask_expand:
 3660|  37.5k|{
 3661|  37.5k|    miniflow_expand(&mask->masks, &wc->masks);
 3662|  37.5k|}
flow.c:parse_ipv6_ext_hdrs__:
  491|  9.37k|{
  492|  9.37k|    if (frag_hdr) {
  ------------------
  |  Branch (492:9): [True: 0, False: 9.37k]
  ------------------
  493|      0|        *frag_hdr = NULL;
  494|      0|    }
  495|       |
  496|  9.37k|    if (rt_hdr) {
  ------------------
  |  Branch (496:9): [True: 0, False: 9.37k]
  ------------------
  497|      0|        *rt_hdr = NULL;
  498|      0|    }
  499|       |
  500|  15.5k|    while (1) {
  ------------------
  |  Branch (500:12): [True: 15.5k, Folded]
  ------------------
  501|  15.5k|        if (OVS_LIKELY((*nw_proto != IPPROTO_HOPOPTS)
  ------------------
  |  |   65|  97.3k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 8.31k, False: 7.24k]
  |  |  |  Branch (65:51): [True: 9.07k, False: 6.48k]
  |  |  |  Branch (65:51): [True: 8.70k, False: 372]
  |  |  |  Branch (65:51): [True: 8.68k, False: 26]
  |  |  |  Branch (65:51): [True: 8.58k, False: 95]
  |  |  |  Branch (65:51): [True: 8.31k, False: 270]
  |  |  ------------------
  ------------------
  502|  15.5k|                       && (*nw_proto != IPPROTO_ROUTING)
  503|  15.5k|                       && (*nw_proto != IPPROTO_DSTOPTS)
  504|  15.5k|                       && (*nw_proto != IPPROTO_AH)
  505|  15.5k|                       && (*nw_proto != IPPROTO_FRAGMENT))) {
  506|       |            /* It's either a terminal header (e.g., TCP, UDP) or one we
  507|       |             * don't understand.  In either case, we're done with the
  508|       |             * packet, so use it to fill in 'nw_proto'. */
  509|  8.31k|            return true;
  510|  8.31k|        }
  511|       |
  512|       |        /* We only verify that at least 8 bytes of the next header are
  513|       |         * available, but many of these headers are longer.  Ensure that
  514|       |         * accesses within the extension header are within those first 8
  515|       |         * bytes. All extension headers are required to be at least 8
  516|       |         * bytes. */
  517|  7.24k|        if (OVS_UNLIKELY(*sizep < 8)) {
  ------------------
  |  |   66|  7.24k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 129, False: 7.12k]
  |  |  ------------------
  ------------------
  518|    129|            return false;
  519|    129|        }
  520|       |
  521|  7.12k|        if ((*nw_proto == IPPROTO_HOPOPTS)
  ------------------
  |  Branch (521:13): [True: 6.38k, False: 736]
  ------------------
  522|  6.40k|            || (*nw_proto == IPPROTO_DSTOPTS)) {
  ------------------
  |  Branch (522:16): [True: 24, False: 712]
  ------------------
  523|       |            /* These headers, while different, have the fields we care
  524|       |             * about in the same location and with the same
  525|       |             * interpretation. */
  526|  6.40k|            const struct ip6_ext *ext_hdr = *datap;
  527|  6.40k|            *nw_proto = ext_hdr->ip6e_nxt;
  528|  6.40k|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|  6.40k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 785, False: 5.62k]
  |  |  ------------------
  ------------------
  529|  6.40k|                                            (ext_hdr->ip6e_len + 1) * 8))) {
  530|    785|                return false;
  531|    785|            }
  532|  6.40k|        } else if (*nw_proto == IPPROTO_ROUTING) {
  ------------------
  |  Branch (532:20): [True: 370, False: 342]
  ------------------
  533|    370|            const struct ip6_rt_hdr *tmp;
  534|    370|            if (!rt_hdr) {
  ------------------
  |  Branch (534:17): [True: 120, False: 250]
  ------------------
  535|    120|                rt_hdr = &tmp;
  536|    120|            }
  537|       |
  538|    370|            *rt_hdr = *datap;
  539|    370|            *nw_proto = (*rt_hdr)->nexthdr;
  540|    370|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|    370|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 30, False: 340]
  |  |  ------------------
  ------------------
  541|    370|                                            ((*rt_hdr)->hdrlen + 1) * 8))) {
  542|     30|                return false;
  543|     30|            }
  544|    370|        } else if (*nw_proto == IPPROTO_AH) {
  ------------------
  |  Branch (544:20): [True: 72, False: 270]
  ------------------
  545|       |            /* A standard AH definition isn't available, but the fields
  546|       |             * we care about are in the same location as the generic
  547|       |             * option header--only the header length is calculated
  548|       |             * differently. */
  549|     72|            const struct ip6_ext *ext_hdr = *datap;
  550|     72|            *nw_proto = ext_hdr->ip6e_nxt;
  551|     72|            if (OVS_UNLIKELY(!data_try_pull(datap, sizep,
  ------------------
  |  |   66|     72|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 36, False: 36]
  |  |  ------------------
  ------------------
  552|     72|                                            (ext_hdr->ip6e_len + 2) * 4))) {
  553|     36|                return false;
  554|     36|            }
  555|    270|        } else if (*nw_proto == IPPROTO_FRAGMENT) {
  ------------------
  |  Branch (555:20): [True: 270, False: 0]
  ------------------
  556|    270|            const struct ovs_16aligned_ip6_frag *tmp;
  557|    270|            if (!frag_hdr) {
  ------------------
  |  Branch (557:17): [True: 111, False: 159]
  ------------------
  558|    111|                frag_hdr = &tmp;
  559|    111|            }
  560|       |
  561|    270|            *frag_hdr = *datap;
  562|       |
  563|    270|            *nw_proto = (*frag_hdr)->ip6f_nxt;
  564|    270|            if (!data_try_pull(datap, sizep, sizeof **frag_hdr)) {
  ------------------
  |  Branch (564:17): [True: 0, False: 270]
  ------------------
  565|      0|                return false;
  566|      0|            }
  567|       |
  568|       |            /* We only process the first fragment. */
  569|    270|            if ((*frag_hdr)->ip6f_offlg != htons(0)) {
  ------------------
  |  Branch (569:17): [True: 201, False: 69]
  ------------------
  570|    201|                *nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    201|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  571|    201|                if (((*frag_hdr)->ip6f_offlg & IP6F_OFF_MASK) != htons(0)) {
  ------------------
  |  Branch (571:21): [True: 76, False: 125]
  ------------------
  572|     76|                    *nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     76|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  573|     76|                    *nw_proto = IPPROTO_FRAGMENT;
  574|       |                    return true;
  575|     76|                }
  576|    201|            }
  577|    270|        }
  578|  7.12k|    }
  579|  9.37k|}
flow.c:data_pull:
  110|  60.0k|{
  111|  60.0k|    const char *data = *datap;
  112|  60.0k|    *datap = data + size;
  113|  60.0k|    *sizep -= size;
  114|  60.0k|    return data;
  115|  60.0k|}
flow.c:parse_vlan:
  350|  17.0k|{
  351|  17.0k|    const ovs_be16 *eth_type;
  352|       |
  353|  17.0k|    data_pull(datap, sizep, ETH_ADDR_LEN * 2);
  ------------------
  |  |  205|  17.0k|#define ETH_ADDR_LEN           6
  ------------------
  354|       |
  355|  17.0k|    eth_type = *datap;
  356|       |
  357|  17.0k|    size_t n;
  358|  18.5k|    for (n = 0; eth_type_vlan(*eth_type) && n < flow_vlan_limit; n++) {
  ------------------
  |  Branch (358:17): [True: 1.95k, False: 16.5k]
  |  Branch (358:45): [True: 1.46k, False: 485]
  ------------------
  359|  1.46k|        if (OVS_UNLIKELY(*sizep < sizeof(ovs_be32) + sizeof(ovs_be16))) {
  ------------------
  |  |   66|  1.46k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 24, False: 1.44k]
  |  |  ------------------
  ------------------
  360|     24|            break;
  361|     24|        }
  362|       |
  363|  1.44k|        memset(vlan_hdrs + n, 0, sizeof(union flow_vlan_hdr));
  364|  1.44k|        const ovs_16aligned_be32 *qp = data_pull(datap, sizep, sizeof *qp);
  365|  1.44k|        vlan_hdrs[n].qtag = get_16aligned_be32(qp);
  366|       |        vlan_hdrs[n].tci |= htons(VLAN_CFI);
  367|  1.44k|        eth_type = *datap;
  368|  1.44k|    }
  369|  17.0k|    return n;
  370|  17.0k|}
flow.c:parse_ethertype:
  374|  17.0k|{
  375|  17.0k|    const struct llc_snap_header *llc;
  376|  17.0k|    ovs_be16 proto;
  377|       |
  378|  17.0k|    proto = *(ovs_be16 *) data_pull(datap, sizep, sizeof proto);
  379|  17.0k|    if (OVS_LIKELY(ntohs(proto) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|  17.0k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 15.8k, False: 1.21k]
  |  |  ------------------
  ------------------
  380|  15.8k|        return proto;
  381|  15.8k|    }
  382|       |
  383|  1.21k|    if (OVS_UNLIKELY(*sizep < sizeof *llc)) {
  ------------------
  |  |   66|  1.21k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 192, False: 1.01k]
  |  |  ------------------
  ------------------
  384|    192|        return htons(FLOW_DL_TYPE_NONE);
  385|    192|    }
  386|       |
  387|  1.01k|    llc = *datap;
  388|  1.01k|    if (OVS_UNLIKELY(llc->llc.llc_dsap != LLC_DSAP_SNAP
  ------------------
  |  |   66|  3.97k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 771, False: 248]
  |  |  |  Branch (66:53): [True: 693, False: 326]
  |  |  |  Branch (66:53): [True: 23, False: 303]
  |  |  |  Branch (66:53): [True: 18, False: 285]
  |  |  |  Branch (66:53): [True: 37, False: 248]
  |  |  ------------------
  ------------------
  389|  1.01k|                     || llc->llc.llc_ssap != LLC_SSAP_SNAP
  390|  1.01k|                     || llc->llc.llc_cntl != LLC_CNTL_SNAP
  391|  1.01k|                     || memcmp(llc->snap.snap_org, SNAP_ORG_ETHERNET,
  392|  1.01k|                               sizeof llc->snap.snap_org))) {
  393|    771|        return htons(FLOW_DL_TYPE_NONE);
  394|    771|    }
  395|       |
  396|    248|    data_pull(datap, sizep, sizeof *llc);
  397|       |
  398|    248|    if (OVS_LIKELY(ntohs(llc->snap.snap_type) >= ETH_TYPE_MIN)) {
  ------------------
  |  |   65|    248|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 238, False: 10]
  |  |  ------------------
  ------------------
  399|    238|        return llc->snap.snap_type;
  400|    238|    }
  401|       |
  402|     10|    return htons(FLOW_DL_TYPE_NONE);
  403|    248|}
flow.c:parse_mpls:
  334|    563|{
  335|    563|    const struct mpls_hdr *mh;
  336|    563|    int count = 0;
  337|       |
  338|  1.41k|    while ((mh = data_try_pull(datap, sizep, sizeof *mh))) {
  ------------------
  |  Branch (338:12): [True: 1.28k, False: 132]
  ------------------
  339|  1.28k|        count++;
  340|  1.28k|        if (mh->mpls_lse.lo & htons(1 << MPLS_BOS_SHIFT)) {
  ------------------
  |  Branch (340:13): [True: 431, False: 850]
  ------------------
  341|    431|            break;
  342|    431|        }
  343|  1.28k|    }
  344|    563|    return MIN(count, FLOW_MAX_MPLS_LABELS);
  ------------------
  |  |   91|    563|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 458, False: 105]
  |  |  ------------------
  ------------------
  345|    563|}
flow.c:ipv4_sanity_check:
  685|  1.50k|{
  686|  1.50k|    int ip_len;
  687|  1.50k|    uint16_t tot_len;
  688|       |
  689|  1.50k|    if (OVS_UNLIKELY(size < IP_HEADER_LEN)) {
  ------------------
  |  |   66|  1.50k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 70, False: 1.43k]
  |  |  ------------------
  ------------------
  690|     70|        COVERAGE_INC(miniflow_extract_ipv4_pkt_too_short);
  ------------------
  |  |   83|     70|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     70|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  691|     70|        return false;
  692|     70|    }
  693|  1.43k|    ip_len = IP_IHL(nh->ip_ihl_ver) * 4;
  ------------------
  |  |  694|  1.43k|#define IP_IHL(ip_ihl_ver) ((ip_ihl_ver) & 15)
  ------------------
  694|       |
  695|  1.43k|    if (OVS_UNLIKELY(ip_len < IP_HEADER_LEN || size < ip_len)) {
  ------------------
  |  |   66|  2.82k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 53, False: 1.37k]
  |  |  |  Branch (66:53): [True: 40, False: 1.39k]
  |  |  |  Branch (66:53): [True: 13, False: 1.37k]
  |  |  ------------------
  ------------------
  696|     53|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|     53|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     53|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  697|     53|        return false;
  698|     53|    }
  699|       |
  700|  1.37k|    tot_len = ntohs(nh->ip_tot_len);
  701|  1.37k|    if (OVS_UNLIKELY(tot_len > size || ip_len > tot_len ||
  ------------------
  |  |   66|  5.33k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 130, False: 1.24k]
  |  |  |  Branch (66:53): [True: 44, False: 1.33k]
  |  |  |  Branch (66:53): [True: 86, False: 1.24k]
  |  |  |  Branch (66:53): [True: 0, False: 1.24k]
  |  |  ------------------
  ------------------
  702|  1.37k|                size - tot_len > UINT16_MAX)) {
  703|    130|        COVERAGE_INC(miniflow_extract_ipv4_pkt_len_error);
  ------------------
  |  |   83|    130|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    130|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  704|    130|        return false;
  705|    130|    }
  706|       |
  707|  1.24k|    *ip_lenp = ip_len;
  708|  1.24k|    *tot_lenp = tot_len;
  709|       |
  710|       |    return true;
  711|  1.37k|}
flow.c:ipv4_get_nw_frag:
  715|  1.24k|{
  716|  1.24k|    uint8_t nw_frag = 0;
  717|       |
  718|  1.24k|    if (OVS_UNLIKELY(IP_IS_FRAGMENT(nh->ip_frag_off))) {
  ------------------
  |  |   66|  1.24k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 119, False: 1.12k]
  |  |  ------------------
  ------------------
  719|    119|        nw_frag = FLOW_NW_FRAG_ANY;
  ------------------
  |  |   54|    119|#define FLOW_NW_FRAG_ANY   (1 << 0) /* Set for any IP frag. */
  ------------------
  720|    119|        if (nh->ip_frag_off & htons(IP_FRAG_OFF_MASK)) {
  ------------------
  |  Branch (720:13): [True: 79, False: 40]
  ------------------
  721|     79|            nw_frag |= FLOW_NW_FRAG_LATER;
  ------------------
  |  |   55|     79|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  722|     79|        }
  723|    119|    }
  724|       |
  725|  1.24k|    return nw_frag;
  726|  1.24k|}
flow.c:ipv6_sanity_check:
  730|  9.79k|{
  731|  9.79k|    uint16_t plen;
  732|       |
  733|  9.79k|    if (OVS_UNLIKELY(size < sizeof *nh)) {
  ------------------
  |  |   66|  9.79k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 69, False: 9.72k]
  |  |  ------------------
  ------------------
  734|     69|        COVERAGE_INC(miniflow_extract_ipv6_pkt_too_short);
  ------------------
  |  |   83|     69|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|     69|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  735|     69|        return false;
  736|     69|    }
  737|       |
  738|  9.72k|    plen = ntohs(nh->ip6_plen);
  739|  9.72k|    if (OVS_UNLIKELY(plen + IPV6_HEADER_LEN > size)) {
  ------------------
  |  |   66|  9.72k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 350, False: 9.37k]
  |  |  ------------------
  ------------------
  740|    350|        COVERAGE_INC(miniflow_extract_ipv6_pkt_len_error);
  ------------------
  |  |   83|    350|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|    350|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  741|    350|        return false;
  742|    350|    }
  743|       |
  744|  9.37k|    if (OVS_UNLIKELY(size - (plen + IPV6_HEADER_LEN) > UINT16_MAX)) {
  ------------------
  |  |   66|  9.37k|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 9.37k]
  |  |  ------------------
  ------------------
  745|      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)
  |  |  ------------------
  ------------------
  746|      0|        return false;
  747|      0|    }
  748|       |
  749|  9.37k|    return true;
  750|  9.37k|}
flow.c:data_try_pull:
  122|  10.6k|{
  123|  10.6k|    return OVS_LIKELY(*sizep >= size) ? data_pull(datap, sizep, size) : NULL;
  ------------------
  |  |   65|  10.6k|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 9.00k, False: 1.67k]
  |  |  ------------------
  ------------------
  124|  10.6k|}
flow.c:parse_icmpv6:
  422|    719|{
  423|    719|    if (!icmp6_is_nd(icmp6)) {
  ------------------
  |  Branch (423:9): [True: 203, False: 516]
  ------------------
  424|    203|        return false;
  425|    203|    }
  426|       |
  427|    516|    arp_buf[0] = eth_addr_zero;
  428|    516|    arp_buf[1] = eth_addr_zero;
  429|    516|    *opt_type = 0;
  430|       |
  431|    516|    *rso_flags = get_16aligned_be32(icmp6->icmp6_data.be32);
  432|       |
  433|    516|    *nd_target = data_try_pull(datap, sizep, sizeof **nd_target);
  434|    516|    if (OVS_UNLIKELY(!*nd_target)) {
  ------------------
  |  |   66|    516|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 134, False: 382]
  |  |  ------------------
  ------------------
  435|    134|        return true;
  436|    134|    }
  437|       |
  438|    839|    while (*sizep >= 8) {
  ------------------
  |  Branch (438:12): [True: 780, False: 59]
  ------------------
  439|       |        /* The minimum size of an option is 8 bytes, which also is
  440|       |         * the size of Ethernet link-layer options. */
  441|    780|        const struct ovs_nd_lla_opt *lla_opt = *datap;
  442|    780|        int opt_len = lla_opt->len * ND_LLA_OPT_LEN;
  ------------------
  |  | 1044|    780|#define ND_LLA_OPT_LEN 8
  ------------------
  443|       |
  444|    780|        if (!opt_len || opt_len > *sizep) {
  ------------------
  |  Branch (444:13): [True: 80, False: 700]
  |  Branch (444:25): [True: 226, False: 474]
  ------------------
  445|    306|            return true;
  446|    306|        }
  447|       |
  448|       |        /* Store the link layer address if the appropriate option is
  449|       |         * provided.  It is considered an error if the same link
  450|       |         * layer option is specified twice. */
  451|    474|        if (lla_opt->type == ND_OPT_SOURCE_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (451:13): [True: 91, False: 383]
  |  Branch (451:56): [True: 67, False: 24]
  ------------------
  452|     67|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[0]))) {
  ------------------
  |  |   65|     67|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 56, False: 11]
  |  |  ------------------
  ------------------
  453|     56|                arp_buf[0] = lla_opt->mac;
  454|       |                /* We use only first option type present in ND packet. */
  455|     56|                if (*opt_type == 0) {
  ------------------
  |  Branch (455:21): [True: 21, False: 35]
  ------------------
  456|     21|                    *opt_type = lla_opt->type;
  457|     21|                }
  458|     56|            } else {
  459|     11|                goto invalid;
  460|     11|            }
  461|    407|        } else if (lla_opt->type == ND_OPT_TARGET_LINKADDR && opt_len == 8) {
  ------------------
  |  Branch (461:20): [True: 148, False: 259]
  |  Branch (461:63): [True: 134, False: 14]
  ------------------
  462|    134|            if (OVS_LIKELY(eth_addr_is_zero(arp_buf[1]))) {
  ------------------
  |  |   65|    134|#define OVS_LIKELY(CONDITION) __builtin_expect(!!(CONDITION), 1)
  |  |  ------------------
  |  |  |  Branch (65:31): [True: 128, False: 6]
  |  |  ------------------
  ------------------
  463|    128|                arp_buf[1] = lla_opt->mac;
  464|       |                /* We use only first option type present in ND packet. */
  465|    128|                if (*opt_type == 0) {
  ------------------
  |  Branch (465:21): [True: 120, False: 8]
  ------------------
  466|    120|                    *opt_type = lla_opt->type;
  467|    120|                }
  468|    128|            } else {
  469|      6|                goto invalid;
  470|      6|            }
  471|    134|        }
  472|       |
  473|    457|        if (OVS_UNLIKELY(!data_try_pull(datap, sizep, opt_len))) {
  ------------------
  |  |   66|    457|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 457]
  |  |  ------------------
  ------------------
  474|      0|            return true;
  475|      0|        }
  476|    457|    }
  477|     59|    return true;
  478|       |
  479|     17|invalid:
  480|     17|    *nd_target = NULL;
  481|     17|    arp_buf[0] = eth_addr_zero;
  482|     17|    arp_buf[1] = eth_addr_zero;
  483|       |    return true;
  484|    382|}
flow.c:icmp6_is_nd:
  407|    719|{
  408|    719|    return (icmp6->icmp6_base.icmp6_code == 0 &&
  ------------------
  |  Branch (408:13): [True: 634, False: 85]
  ------------------
  409|    634|            (icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_SOLICIT ||
  ------------------
  |  Branch (409:14): [True: 464, False: 170]
  ------------------
  410|    170|             icmp6->icmp6_base.icmp6_type == ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (410:14): [True: 52, False: 118]
  ------------------
  411|    719|}
flow.c:put_u16_masked:
 1615|  33.3k|{
 1616|  33.3k|    if (!mask) {
  ------------------
  |  Branch (1616:9): [True: 0, False: 33.3k]
  ------------------
 1617|      0|        ds_put_char(s, '*');
 1618|  33.3k|    } else {
 1619|  33.3k|        if (value > 9) {
  ------------------
  |  Branch (1619:13): [True: 20.4k, False: 12.9k]
  ------------------
 1620|  20.4k|            ds_put_format(s, "0x%"PRIx16, value);
 1621|  20.4k|        } else {
 1622|  12.9k|            ds_put_format(s, "%"PRIu16, value);
 1623|  12.9k|        }
 1624|       |
 1625|  33.3k|        if (mask != UINT16_MAX) {
  ------------------
  |  Branch (1625:13): [True: 0, False: 33.3k]
  ------------------
 1626|       |            ds_put_format(s, "/0x%"PRIx16, mask);
 1627|      0|        }
 1628|  33.3k|    }
 1629|  33.3k|}

ofp-queue.c:ofp_to_u16:
  196|  15.9k|{
  197|  15.9k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  15.9k|}
ofp-queue.c:u16_to_ofp:
  214|  11.9k|{
  215|  11.9k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  11.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  11.9k|}
flow.c:miniflow_values:
  530|   124k|{
  531|   124k|    return (uint64_t *)(mf + 1);
  532|   124k|}
flow.c:flowmap_set:
  385|   297k|{
  386|   297k|    map_t n_bits_mask = (MAP_1 << n_bits) - 1;
  ------------------
  |  |  271|   297k|#define MAP_1 (map_t)1
  ------------------
  387|   297k|    size_t unit = idx / MAP_T_BITS;
  ------------------
  |  |  270|   297k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  388|       |
  389|   297k|    idx %= MAP_T_BITS;
  ------------------
  |  |  270|   297k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  390|       |
  391|   297k|    fm->bits[unit] |= n_bits_mask << idx;
  392|       |    /* The seemingly unnecessary bounds check on 'unit' is a workaround for a
  393|       |     * false-positive array out of bounds error by GCC 4.9. */
  394|   297k|    if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  280|   297k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   594k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
                  if (unit + 1 < FLOWMAP_UNITS && idx + n_bits > MAP_T_BITS) {
  ------------------
  |  |  270|   142k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  |  Branch (394:9): [True: 142k, False: 155k]
  |  Branch (394:37): [True: 0, False: 142k]
  ------------------
  395|       |        /* 'MAP_T_BITS - idx' bits were set on 'unit', set the remaining
  396|       |         * bits from the next unit. */
  397|       |        fm->bits[unit + 1] |= n_bits_mask >> (MAP_T_BITS - idx);
  ------------------
  |  |  270|      0|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  398|      0|    }
  399|   297k|}
flow.c:odp_to_u32:
  202|  49.6k|{
  203|  49.6k|    return (OVS_FORCE uint32_t) odp_port;
  204|  49.6k|}
flow.c:is_ct_valid:
  954|  49.6k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  49.6k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 49.6k, False: 0]
  |  Branch (956:17): [True: 49.6k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  49.6k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 49.6k]
  ------------------
  960|  49.6k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|  49.6k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 49.6k]
  ------------------
  962|      0|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 0, False: 0]
  ------------------
  963|      0|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 0, False: 0]
  ------------------
  964|  49.6k|    }
  965|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  966|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  968|      0|    if (wc) {
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  ------------------
  969|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  970|      0|    }
  971|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  972|  49.6k|}
flow.c:is_nd:
 1119|  9.79k|{
 1120|  9.79k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 718, False: 9.07k]
  ------------------
 1121|    718|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 718, False: 0]
  ------------------
 1122|    718|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|    718|        }
 1124|    718|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 79, False: 639]
  ------------------
 1125|     79|            return false;
 1126|     79|        }
 1127|       |
 1128|    639|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 639, False: 0]
  ------------------
 1129|    639|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|    639|        }
 1131|    639|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 463, False: 176]
  ------------------
 1132|    176|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 42, False: 134]
  ------------------
 1133|    718|    }
 1134|  9.07k|    return false;
 1135|  9.79k|}
flow.c:is_icmpv6:
 1107|  9.79k|{
 1108|  9.79k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 9.75k, False: 35]
  ------------------
 1109|  9.75k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 9.75k, False: 0]
  ------------------
 1110|  9.75k|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|  9.75k|        }
 1112|  9.75k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  9.75k|    }
 1114|     35|    return false;
 1115|  9.79k|}
flow.c:get_dl_type:
 1036|  9.79k|{
 1037|  9.79k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 9.70k, False: 85]
  ------------------
 1038|  9.70k|        return flow->dl_type;
 1039|  9.70k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 50, False: 35]
  ------------------
 1040|     50|        return pt_ns_type_be(flow->packet_type);
 1041|     50|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|     35|    }
 1044|  9.79k|}
flow.c:flowmap_init:
  343|  37.5k|{
  344|  37.5k|    memset(fm, 0, sizeof *fm);
  345|  37.5k|}
flow.c:flow_equal:
  184|  46.6k|{
  185|  46.6k|    return !flow_compare_3way(a, b);
  186|  46.6k|}
flow.c:flow_compare_3way:
  178|  46.6k|{
  179|  46.6k|    return memcmp(a, b, sizeof *a);
  180|  46.6k|}
flow.c:flow_set_xreg:
  149|  6.86k|{
  150|  6.86k|    flow->regs[idx * 2] = value >> 32;
  151|  6.86k|    flow->regs[idx * 2 + 1] = value;
  152|  6.86k|}
flow.c:flow_set_xxreg:
  169|  4.03k|{
  170|  4.03k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  4.03k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  4.03k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  4.03k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  4.03k|}
flow.c:miniflow_get_values:
  535|   124k|{
  536|   124k|    return (const uint64_t *)(mf + 1);
  537|   124k|}
flow.c:flowmap_next_index:
  479|   319k|{
  480|   394k|    for (;;) {
  481|   394k|        map_t *map = &aux->map.bits[aux->unit];
  482|   394k|        if (*map) {
  ------------------
  |  Branch (482:13): [True: 244k, False: 150k]
  ------------------
  483|   244k|            *idx = aux->unit * MAP_T_BITS + raw_ctz(*map);
  ------------------
  |  |  270|   244k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  484|   244k|            *map = zero_rightmost_1bit(*map);
  485|   244k|            return true;
  486|   244k|        }
  487|   150k|        if (++aux->unit >= FLOWMAP_UNITS) {
  ------------------
  |  |  280|   150k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  ------------------
  |  |  |  |  300|   150k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (487:13): [True: 75.1k, False: 75.1k]
  ------------------
  488|       |            return false;
  489|  75.1k|        }
  490|   150k|    }
  491|   319k|}
flow.c:flow_u64_value:
  557|  3.69M|{
  558|  3.69M|    return ((uint64_t *)flow)[index];
  559|  3.69M|}
flow.c:miniflow_n_values:
  568|  37.5k|{
  569|  37.5k|    return flowmap_n_1bits(flow->map);
  570|  37.5k|}
flow.c:flowmap_n_1bits:
  462|  37.5k|{
  463|  37.5k|    unsigned int n_1bits = 0;
  464|  37.5k|    size_t unit;
  465|       |
  466|  75.1k|    FLOWMAP_FOR_EACH_UNIT (unit) {
  ------------------
  |  |  320|   112k|    for ((UNIT) = 0; (UNIT) < FLOWMAP_UNITS; (UNIT)++)
  |  |  ------------------
  |  |  |  |  280|   112k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   112k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (320:22): [True: 75.1k, False: 37.5k]
  |  |  ------------------
  ------------------
  467|  75.1k|        n_1bits += count_1bits(fm.bits[unit]);
  468|  75.1k|    }
  469|  37.5k|    return n_1bits;
  470|  37.5k|}
flow.c:flow_union_with_miniflow:
  938|   124k|{
  939|   124k|    flow_union_with_miniflow_subset(dst, src, src->map);
  940|   124k|}
flow.c:flow_union_with_miniflow_subset:
  919|   124k|{
  920|   124k|    uint64_t *dst_u64 = (uint64_t *) dst;
  921|   124k|    const uint64_t *p = miniflow_get_values(src);
  922|   124k|    map_t map;
  923|       |
  924|   249k|    FLOWMAP_FOR_EACH_MAP (map, subset) {
  ------------------
  |  |  324|   124k|    for (size_t unit__ = 0;                                       \
  |  |  325|   374k|         unit__ < FLOWMAP_UNITS && ((MAP) = (FLOWMAP).bits[unit__], true); \
  |  |  ------------------
  |  |  |  |  280|   374k|#define FLOWMAP_UNITS DIV_ROUND_UP(FLOW_U64S, MAP_T_BITS)
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|   748k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (325:10): [True: 249k, False: 124k]
  |  |  |  Branch (325:36): [True: 249k, False: 0]
  |  |  ------------------
  |  |  326|   249k|         unit__++)
  ------------------
  925|   249k|        size_t idx;
  926|       |
  927|   464k|        MAP_FOR_EACH_INDEX(idx, map) {
  ------------------
  |  |  278|   249k|    ULLONG_FOR_EACH_1(IDX, MAP)
  |  |  ------------------
  |  |  |  |  285|   249k|    for (uint64_t map__ = (MAP);                    \
  |  |  |  |  286|   713k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (286:10): [True: 464k, False: 249k]
  |  |  |  |  |  Branch (286:19): [True: 464k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  287|   464k|         map__ = zero_rightmost_1bit(map__))
  |  |  ------------------
  ------------------
  928|   464k|            dst_u64[idx] |= *p++;
  929|   464k|        }
  930|       |        dst_u64 += MAP_T_BITS;
  ------------------
  |  |  270|   249k|#define MAP_T_BITS (sizeof(map_t) * CHAR_BIT)
  ------------------
  931|   249k|    }
  932|   124k|}
match.c:flow_set_xreg:
  149|  6.86k|{
  150|  6.86k|    flow->regs[idx * 2] = value >> 32;
  151|  6.86k|    flow->regs[idx * 2 + 1] = value;
  152|  6.86k|}
match.c:flow_set_xxreg:
  169|  4.03k|{
  170|  4.03k|    flow->regs[idx * 4] = value.u64.hi >> 32;
  171|  4.03k|    flow->regs[idx * 4 + 1] = value.u64.hi;
  172|  4.03k|    flow->regs[idx * 4 + 2] = value.u64.lo >> 32;
  173|  4.03k|    flow->regs[idx * 4 + 3] = value.u64.lo;
  174|  4.03k|}
match.c:u16_to_ofp:
  214|   134k|{
  215|   134k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   134k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   134k|}
match.c:is_ip_any:
 1059|   181k|{
 1060|   181k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|   181k|}
match.c:get_dl_type:
 1036|   181k|{
 1037|   181k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 165k, False: 15.8k]
  ------------------
 1038|   165k|        return flow->dl_type;
 1039|   165k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 12.0k, False: 3.88k]
  ------------------
 1040|  12.0k|        return pt_ns_type_be(flow->packet_type);
 1041|  12.0k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  3.88k|    }
 1044|   181k|}
meta-flow.c:flow_get_xreg:
  143|  8.44k|{
  144|  8.44k|    return ((uint64_t) flow->regs[idx * 2] << 32) | flow->regs[idx * 2 + 1];
  145|  8.44k|}
meta-flow.c:flow_get_xxreg:
  156|  4.37k|{
  157|  4.37k|    ovs_u128 value;
  158|       |
  159|  4.37k|    value.u64.hi = (uint64_t) flow->regs[idx * 4] << 32;
  160|  4.37k|    value.u64.hi |= flow->regs[idx * 4 + 1];
  161|  4.37k|    value.u64.lo = (uint64_t) flow->regs[idx * 4 + 2] << 32;
  162|  4.37k|    value.u64.lo |= flow->regs[idx * 4 + 3];
  163|       |
  164|  4.37k|    return value;
  165|  4.37k|}
meta-flow.c:get_dl_type:
 1036|  62.0k|{
 1037|  62.0k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 46.9k, False: 15.1k]
  ------------------
 1038|  46.9k|        return flow->dl_type;
 1039|  46.9k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 11.8k, False: 3.24k]
  ------------------
 1040|  11.8k|        return pt_ns_type_be(flow->packet_type);
 1041|  11.8k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  3.24k|    }
 1044|  62.0k|}
meta-flow.c:is_ethernet:
 1028|  1.68k|{
 1029|  1.68k|    if (wc) {
  ------------------
  |  Branch (1029:9): [True: 0, False: 1.68k]
  ------------------
 1030|      0|        WC_MASK_FIELD(wc, packet_type);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1031|      0|    }
 1032|       |    return flow->packet_type == htonl(PT_ETH);
 1033|  1.68k|}
meta-flow.c:is_vlan:
 1048|  1.18k|{
 1049|  1.18k|    if (!is_ethernet(flow, wc)) {
  ------------------
  |  Branch (1049:9): [True: 227, False: 956]
  ------------------
 1050|    227|        return false;
 1051|    227|    }
 1052|    956|    if (wc) {
  ------------------
  |  Branch (1052:9): [True: 0, False: 956]
  ------------------
 1053|      0|        WC_MASK_FIELD_MASK(wc, vlans[0].tci, htons(VLAN_CFI));
  ------------------
  |  |  203|      0|    ((WC)->masks.FIELD |= (MASK))
  ------------------
 1054|      0|    }
 1055|       |    return (flow->vlans[0].tci & htons(VLAN_CFI)) != 0;
 1056|  1.18k|}
meta-flow.c:is_ct_valid:
  954|  1.62k|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|  1.62k|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 1.62k, False: 0]
  |  Branch (956:17): [True: 1.62k, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|  1.62k|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 325, False: 1.30k]
  ------------------
  960|  1.62k|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|  1.30k|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 1.07k, False: 225]
  ------------------
  962|  1.07k|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 1.07k, False: 3]
  ------------------
  963|  1.07k|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 1.07k, False: 3]
  ------------------
  964|  1.62k|    }
  965|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  966|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  968|      0|    if (wc) {
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  ------------------
  969|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  970|      0|    }
  971|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  972|  1.62k|}
meta-flow.c:is_tcp:
 1077|    543|{
 1078|       |    return is_ip_proto(flow, IPPROTO_TCP, wc);
 1079|    543|}
meta-flow.c:is_ip_proto:
 1065|  1.45k|{
 1066|  1.45k|    if (is_ip_any(flow)) {
  ------------------
  |  Branch (1066:9): [True: 748, False: 710]
  ------------------
 1067|    748|        if (wc) {
  ------------------
  |  Branch (1067:13): [True: 0, False: 748]
  ------------------
 1068|      0|            WC_MASK_FIELD(wc, nw_proto);
  ------------------
  |  |  201|      0|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
 1069|      0|        }
 1070|    748|        return flow->nw_proto == ip_proto;
 1071|    748|    }
 1072|    710|    return false;
 1073|  1.45k|}
meta-flow.c:is_udp:
 1083|    306|{
 1084|       |    return is_ip_proto(flow, IPPROTO_UDP, wc);
 1085|    306|}
meta-flow.c:is_sctp:
 1089|    609|{
 1090|       |    return is_ip_proto(flow, IPPROTO_SCTP, wc);
 1091|    609|}
meta-flow.c:is_icmpv4:
 1095|    579|{
 1096|    579|    if (get_dl_type(flow) == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (1096:9): [True: 46, False: 533]
  ------------------
 1097|     46|        if (wc) {
  ------------------
  |  Branch (1097:13): [True: 0, False: 46]
  ------------------
 1098|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1099|      0|        }
 1100|     46|        return flow->nw_proto == IPPROTO_ICMP;
 1101|     46|    }
 1102|    533|    return false;
 1103|    579|}
meta-flow.c:is_icmpv6:
 1107|  3.54k|{
 1108|  3.54k|    if (get_dl_type(flow) == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (1108:9): [True: 2.17k, False: 1.37k]
  ------------------
 1109|  2.17k|        if (wc) {
  ------------------
  |  Branch (1109:13): [True: 0, False: 2.17k]
  ------------------
 1110|      0|            memset(&wc->masks.nw_proto, 0xff, sizeof wc->masks.nw_proto);
 1111|      0|        }
 1112|  2.17k|        return flow->nw_proto == IPPROTO_ICMPV6;
 1113|  2.17k|    }
 1114|  1.37k|    return false;
 1115|  3.54k|}
meta-flow.c:is_nd:
 1119|  2.41k|{
 1120|  2.41k|    if (is_icmpv6(flow, wc)) {
  ------------------
  |  Branch (1120:9): [True: 723, False: 1.69k]
  ------------------
 1121|    723|        if (wc) {
  ------------------
  |  Branch (1121:13): [True: 0, False: 723]
  ------------------
 1122|      0|            memset(&wc->masks.tp_dst, 0xff, sizeof wc->masks.tp_dst);
 1123|      0|        }
 1124|    723|        if (flow->tp_dst != htons(0)) {
  ------------------
  |  Branch (1124:13): [True: 138, False: 585]
  ------------------
 1125|    138|            return false;
 1126|    138|        }
 1127|       |
 1128|    585|        if (wc) {
  ------------------
  |  Branch (1128:13): [True: 0, False: 585]
  ------------------
 1129|      0|            memset(&wc->masks.tp_src, 0xff, sizeof wc->masks.tp_src);
 1130|      0|        }
 1131|    585|        return (flow->tp_src == htons(ND_NEIGHBOR_SOLICIT) ||
  ------------------
  |  Branch (1131:17): [True: 248, False: 337]
  ------------------
 1132|    337|                flow->tp_src == htons(ND_NEIGHBOR_ADVERT));
  ------------------
  |  Branch (1132:17): [True: 309, False: 28]
  ------------------
 1133|    723|    }
 1134|  1.69k|    return false;
 1135|  2.41k|}
meta-flow.c:ofp_to_u16:
  196|     68|{
  197|     68|    return (OVS_FORCE uint16_t) ofp_port;
  198|     68|}
meta-flow.c:u16_to_ofp:
  214|  1.70k|{
  215|  1.70k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  1.70k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  1.70k|}
meta-flow.c:is_ip_any:
 1059|  4.69k|{
 1060|  4.69k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  4.69k|}
ofp-actions.c:u16_to_ofp:
  214|  35.2k|{
  215|  35.2k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  35.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  35.2k|}
ofp-actions.c:ofp_to_u16:
  196|  73.2k|{
  197|  73.2k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  73.2k|}
ofp-actions.c:get_dl_type:
 1036|  46.6k|{
 1037|  46.6k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (1037:9): [True: 34.0k, False: 12.5k]
  ------------------
 1038|  34.0k|        return flow->dl_type;
 1039|  34.0k|    } else if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (1039:16): [True: 7.44k, False: 5.14k]
  ------------------
 1040|  7.44k|        return pt_ns_type_be(flow->packet_type);
 1041|  7.44k|    } else {
 1042|       |        return htons(FLOW_DL_TYPE_NONE);
 1043|  5.14k|    }
 1044|  46.6k|}
ofp-actions.c:is_ip_any:
 1059|  23.9k|{
 1060|  23.9k|    return dl_type_is_ip_any(get_dl_type(flow));
 1061|  23.9k|}
ofp-actions.c:is_ct_valid:
  954|     10|{
  955|       |    /* Matches are checked with 'mask' and without 'wc'. */
  956|     10|    if (mask && !wc) {
  ------------------
  |  Branch (956:9): [True: 10, False: 0]
  |  Branch (956:17): [True: 10, False: 0]
  ------------------
  957|       |        /* Must match at least one of the bits that implies a valid
  958|       |         * conntrack entry, or an explicit not-invalid. */
  959|     10|        return flow->ct_state & (CS_NEW | CS_ESTABLISHED | CS_RELATED
  ------------------
  |  Branch (959:16): [True: 0, False: 10]
  ------------------
  960|     10|                                 | CS_REPLY_DIR | CS_SRC_NAT | CS_DST_NAT)
  961|     10|            || (flow->ct_state & CS_TRACKED
  ------------------
  |  Branch (961:17): [True: 0, False: 10]
  ------------------
  962|      0|                && mask->masks.ct_state & CS_INVALID
  ------------------
  |  Branch (962:20): [True: 0, False: 0]
  ------------------
  963|      0|                && !(flow->ct_state & CS_INVALID));
  ------------------
  |  Branch (963:20): [True: 0, False: 0]
  ------------------
  964|     10|    }
  965|       |    /* Else we are checking a fully extracted flow, where valid CT state always
  966|       |     * has either 'new', 'established', or 'reply_dir' bit set. */
  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  968|      0|    if (wc) {
  ------------------
  |  Branch (968:9): [True: 0, False: 0]
  ------------------
  969|      0|        wc->masks.ct_state |= CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  970|      0|    }
  971|      0|    return flow->ct_state & CS_VALID_MASK;
  ------------------
  |  |  967|      0|#define CS_VALID_MASK (CS_NEW | CS_ESTABLISHED | CS_REPLY_DIR)
  ------------------
  972|     10|}
ofp-flow.c:u16_to_ofp:
  214|  49.1k|{
  215|  49.1k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  49.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  49.1k|}
ofp-match.c:u16_to_ofp:
  214|  88.0k|{
  215|  88.0k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  88.0k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  88.0k|}
ofp-monitor.c:u16_to_ofp:
  214|  3.62k|{
  215|  3.62k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  3.62k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  3.62k|}
ofp-packet.c:u16_to_ofp:
  214|  78.3k|{
  215|  78.3k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|  78.3k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|  78.3k|}
ofp-packet.c:u32_to_odp:
  220|    470|{
  221|    470|    return ODP_PORT_C(port);
  ------------------
  |  |  158|    470|#define ODP_PORT_C(X) ((OVS_FORCE odp_port_t) (X))
  ------------------
  222|    470|}
ofp-packet.c:ofp_to_u16:
  196|  49.0k|{
  197|  49.0k|    return (OVS_FORCE uint16_t) ofp_port;
  198|  49.0k|}
ofp-port.c:ofp_to_u16:
  196|   437k|{
  197|   437k|    return (OVS_FORCE uint16_t) ofp_port;
  198|   437k|}
ofp-port.c:u16_to_ofp:
  214|   156k|{
  215|   156k|    return OFP_PORT_C(port);
  ------------------
  |  |  157|   156k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  ------------------
  216|   156k|}
ofp-port.c:ofp11_to_u32:
  208|  58.8k|{
  209|  58.8k|    return (OVS_FORCE uint32_t) ofp11_port;
  210|  58.8k|}

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

flow.c:hash_add64:
  113|  15.3k|{
  114|  15.3k|    return hash_add(hash_add(hash, data), data >> 32);
  115|  15.3k|}
flow.c:hash_add:
  108|  41.9k|{
  109|  41.9k|    return mhash_add(hash, data);
  110|  41.9k|}
flow.c:mhash_add:
   77|  41.9k|{
   78|  41.9k|    hash = mhash_add__(hash, data);
   79|  41.9k|    hash = hash_rot(hash, 13);
   80|  41.9k|    return hash * 5 + 0xe6546b64;
   81|  41.9k|}
flow.c:mhash_add__:
   64|  41.9k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  41.9k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 7.90k, False: 34.0k]
  ------------------
   67|  7.90k|        return hash;
   68|  7.90k|    }
   69|       |
   70|  34.0k|    data *= 0xcc9e2d51;
   71|  34.0k|    data = hash_rot(data, 15);
   72|  34.0k|    data *= 0x1b873593;
   73|  34.0k|    return hash ^ data;
   74|  41.9k|}
flow.c:hash_rot:
   31|  76.0k|{
   32|  76.0k|    return (x << k) | (x >> (32 - k));
   33|  76.0k|}
flow.c:hash_finish:
  118|  4.73k|{
  119|  4.73k|    return mhash_finish(hash ^ final);
  120|  4.73k|}
flow.c:mhash_finish:
   84|  4.73k|{
   85|  4.73k|    hash ^= hash >> 16;
   86|  4.73k|    hash *= 0x85ebca6b;
   87|  4.73k|    hash ^= hash >> 13;
   88|  4.73k|    hash *= 0xc2b2ae35;
   89|  4.73k|    hash ^= hash >> 16;
   90|  4.73k|    return hash;
   91|  4.73k|}
hash.c:hash_finish:
  118|    237|{
  119|    237|    return mhash_finish(hash ^ final);
  120|    237|}
hash.c:mhash_finish:
   84|    237|{
   85|    237|    hash ^= hash >> 16;
   86|    237|    hash *= 0x85ebca6b;
   87|    237|    hash ^= hash >> 13;
   88|    237|    hash *= 0xc2b2ae35;
   89|    237|    hash ^= hash >> 16;
   90|    237|    return hash;
   91|    237|}
hash.c:hash_add:
  108|  1.08k|{
  109|  1.08k|    return mhash_add(hash, data);
  110|  1.08k|}
hash.c:mhash_add:
   77|  1.08k|{
   78|  1.08k|    hash = mhash_add__(hash, data);
   79|  1.08k|    hash = hash_rot(hash, 13);
   80|  1.08k|    return hash * 5 + 0xe6546b64;
   81|  1.08k|}
hash.c:mhash_add__:
   64|  1.08k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  1.08k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 0, False: 1.08k]
  ------------------
   67|      0|        return hash;
   68|      0|    }
   69|       |
   70|  1.08k|    data *= 0xcc9e2d51;
   71|  1.08k|    data = hash_rot(data, 15);
   72|  1.08k|    data *= 0x1b873593;
   73|  1.08k|    return hash ^ data;
   74|  1.08k|}
hash.c:hash_rot:
   31|  2.17k|{
   32|  2.17k|    return (x << k) | (x >> (32 - k));
   33|  2.17k|}
nx-match.c:hash_string:
  403|    237|{
  404|    237|    return hash_bytes(s, strlen(s), basis);
  405|    237|}
nx-match.c:hash_uint64:
  164|  11.3M|{
  165|  11.3M|    return hash_uint64_basis(x, 0);
  166|  11.3M|}
nx-match.c:hash_uint64_basis:
  159|  11.3M|{
  160|  11.3M|    return hash_finish(hash_add64(basis, x), 8);
  161|  11.3M|}
nx-match.c:hash_finish:
  118|  11.3M|{
  119|  11.3M|    return mhash_finish(hash ^ final);
  120|  11.3M|}
nx-match.c:mhash_finish:
   84|  11.3M|{
   85|  11.3M|    hash ^= hash >> 16;
   86|  11.3M|    hash *= 0x85ebca6b;
   87|  11.3M|    hash ^= hash >> 13;
   88|  11.3M|    hash *= 0xc2b2ae35;
   89|  11.3M|    hash ^= hash >> 16;
   90|  11.3M|    return hash;
   91|  11.3M|}
nx-match.c:hash_add64:
  113|  11.3M|{
  114|  11.3M|    return hash_add(hash_add(hash, data), data >> 32);
  115|  11.3M|}
nx-match.c:hash_add:
  108|  22.6M|{
  109|  22.6M|    return mhash_add(hash, data);
  110|  22.6M|}
nx-match.c:mhash_add:
   77|  22.6M|{
   78|  22.6M|    hash = mhash_add__(hash, data);
   79|  22.6M|    hash = hash_rot(hash, 13);
   80|  22.6M|    return hash * 5 + 0xe6546b64;
   81|  22.6M|}
nx-match.c:mhash_add__:
   64|  22.6M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  22.6M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 9.42M, False: 13.2M]
  ------------------
   67|  9.42M|        return hash;
   68|  9.42M|    }
   69|       |
   70|  13.2M|    data *= 0xcc9e2d51;
   71|  13.2M|    data = hash_rot(data, 15);
   72|  13.2M|    data *= 0x1b873593;
   73|  13.2M|    return hash ^ data;
   74|  22.6M|}
nx-match.c:hash_rot:
   31|  35.8M|{
   32|  35.8M|    return (x << k) | (x >> (32 - k));
   33|  35.8M|}
ofp-actions.c:hash_2words:
  153|   304k|{
  154|   304k|    return hash_finish(hash_add(hash_add(x, 0), y), 8);
  155|   304k|}
ofp-actions.c:hash_finish:
  118|   304k|{
  119|   304k|    return mhash_finish(hash ^ final);
  120|   304k|}
ofp-actions.c:mhash_finish:
   84|   304k|{
   85|   304k|    hash ^= hash >> 16;
   86|   304k|    hash *= 0x85ebca6b;
   87|   304k|    hash ^= hash >> 13;
   88|   304k|    hash *= 0xc2b2ae35;
   89|   304k|    hash ^= hash >> 16;
   90|   304k|    return hash;
   91|   304k|}
ofp-actions.c:hash_add:
  108|   608k|{
  109|   608k|    return mhash_add(hash, data);
  110|   608k|}
ofp-actions.c:mhash_add:
   77|   608k|{
   78|   608k|    hash = mhash_add__(hash, data);
   79|   608k|    hash = hash_rot(hash, 13);
   80|   608k|    return hash * 5 + 0xe6546b64;
   81|   608k|}
ofp-actions.c:mhash_add__:
   64|   608k|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|   608k|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 304k, False: 304k]
  ------------------
   67|   304k|        return hash;
   68|   304k|    }
   69|       |
   70|   304k|    data *= 0xcc9e2d51;
   71|   304k|    data = hash_rot(data, 15);
   72|   304k|    data *= 0x1b873593;
   73|   304k|    return hash ^ data;
   74|   608k|}
ofp-actions.c:hash_rot:
   31|   912k|{
   32|   912k|    return (x << k) | (x >> (32 - k));
   33|   912k|}
ofp-msgs.c:hash_finish:
  118|  3.34M|{
  119|  3.34M|    return mhash_finish(hash ^ final);
  120|  3.34M|}
ofp-msgs.c:mhash_finish:
   84|  3.34M|{
   85|  3.34M|    hash ^= hash >> 16;
   86|  3.34M|    hash *= 0x85ebca6b;
   87|  3.34M|    hash ^= hash >> 13;
   88|  3.34M|    hash *= 0xc2b2ae35;
   89|  3.34M|    hash ^= hash >> 16;
   90|  3.34M|    return hash;
   91|  3.34M|}
ofp-msgs.c:hash_add:
  108|  10.0M|{
  109|  10.0M|    return mhash_add(hash, data);
  110|  10.0M|}
ofp-msgs.c:mhash_add:
   77|  10.0M|{
   78|  10.0M|    hash = mhash_add__(hash, data);
   79|  10.0M|    hash = hash_rot(hash, 13);
   80|  10.0M|    return hash * 5 + 0xe6546b64;
   81|  10.0M|}
ofp-msgs.c:mhash_add__:
   64|  10.0M|{
   65|       |    /* zero-valued 'data' will not change the 'hash' value */
   66|  10.0M|    if (!data) {
  ------------------
  |  Branch (66:9): [True: 6.42M, False: 3.59M]
  ------------------
   67|  6.42M|        return hash;
   68|  6.42M|    }
   69|       |
   70|  3.59M|    data *= 0xcc9e2d51;
   71|  3.59M|    data = hash_rot(data, 15);
   72|  3.59M|    data *= 0x1b873593;
   73|  3.59M|    return hash ^ data;
   74|  10.0M|}
ofp-msgs.c:hash_rot:
   31|  13.6M|{
   32|  13.6M|    return (x << k) | (x >> (32 - k));
   33|  13.6M|}
ofp-msgs.c:hash_bytes32:
  392|  3.34M|{
  393|  3.34M|    return hash_words(p, n_bytes / 4, basis);
  394|  3.34M|}
ofp-msgs.c:hash_words:
  357|  3.34M|{
  358|  3.34M|    if (__builtin_constant_p(n_words)) {
  ------------------
  |  Branch (358:9): [True: 3.34M, False: 0]
  ------------------
  359|  3.34M|        return hash_words_inline(p, n_words, basis);
  360|  3.34M|    } else {
  361|      0|        return hash_words__(p, n_words, basis);
  362|      0|    }
  363|  3.34M|}
ofp-msgs.c:hash_words_inline:
  129|  3.34M|{
  130|  3.34M|    return hash_finish(hash_add_words(basis, p, n_words), n_words * 4);
  131|  3.34M|}
ofp-msgs.c:hash_add_words:
  428|  3.34M|{
  429|  13.3M|    for (size_t i = 0; i < n_words; i++) {
  ------------------
  |  Branch (429:24): [True: 10.0M, False: 3.34M]
  ------------------
  430|  10.0M|        hash = hash_add(hash, p[i]);
  431|  10.0M|    }
  432|  3.34M|    return hash;
  433|  3.34M|}

hmap_init:
   36|     32|{
   37|     32|    hmap->buckets = &hmap->one;
   38|       |    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));
  ------------------
  |  |   62|     28|#define ovs_assert ovs_ignore
  ------------------
   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: 7, False: 10]
  ------------------
  120|      7|                biggest_count = count;
  121|      7|                n_biggest_buckets = 1;
  122|     10|            } else if (count == biggest_count) {
  ------------------
  |  Branch (122:24): [True: 2, False: 8]
  ------------------
  123|      2|                n_biggest_buckets++;
  124|      2|            }
  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): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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, "
  ------------------
  |  |  226|      6|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      6|    do {                                                                \
  |  |  |  |  288|      6|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      6|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 6]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      6|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 6]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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|  15.2k|{
   43|  15.2k|    const struct ofpact_learn_spec *spec;
   44|  15.2k|    struct match dst_match;
   45|       |
   46|  15.2k|    match_init_catchall(&dst_match);
   47|  30.1k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  15.2k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  44.3k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 30.1k, False: 14.2k]
  |  |  ------------------
  |  |  902|  29.1k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
   48|  30.1k|        enum ofperr error;
   49|       |
   50|       |        /* Check the source. */
   51|  30.1k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  30.1k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (51:13): [True: 585, False: 29.5k]
  ------------------
   52|    585|            error = mf_check_src(&spec->src, src_match);
   53|    585|            if (error) {
  ------------------
  |  Branch (53:17): [True: 189, False: 396]
  ------------------
   54|    189|                return error;
   55|    189|            }
   56|    585|        }
   57|       |
   58|       |        /* Check the destination. */
   59|  29.9k|        switch (spec->dst_type) {
  ------------------
  |  Branch (59:17): [True: 29.9k, False: 0]
  ------------------
   60|  28.2k|        case NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|  28.2k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (60:9): [True: 28.2k, False: 1.66k]
  ------------------
   61|  28.2k|            error = mf_check_src(&spec->dst, &dst_match);
   62|  28.2k|            if (error) {
  ------------------
  |  Branch (62:17): [True: 676, False: 27.5k]
  ------------------
   63|    676|                return error;
   64|    676|            }
   65|  27.5k|            if (spec->src_type & NX_LEARN_SRC_IMMEDIATE) {
  ------------------
  |  |  822|  27.5k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
  |  Branch (65:17): [True: 27.4k, False: 80]
  ------------------
   66|  27.4k|                mf_write_subfield_value(&spec->dst,
   67|  27.4k|                                        ofpact_learn_spec_imm(spec),
   68|  27.4k|                                        &dst_match);
   69|  27.4k|            }
   70|  27.5k|            break;
   71|       |
   72|  1.34k|        case NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|  1.34k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (72:9): [True: 1.34k, False: 28.5k]
  ------------------
   73|  1.34k|            error = mf_check_dst(&spec->dst, &dst_match);
   74|  1.34k|            if (error) {
  ------------------
  |  Branch (74:17): [True: 104, False: 1.24k]
  ------------------
   75|    104|                return error;
   76|    104|            }
   77|  1.24k|            break;
   78|       |
   79|  1.24k|        case NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|    316|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (79:9): [True: 316, False: 29.5k]
  ------------------
   80|       |            /* Nothing to do. */
   81|    316|            break;
   82|  29.9k|        }
   83|  29.9k|    }
   84|  14.2k|    return 0;
   85|  15.2k|}
learn_format:
  494|  14.8k|{
  495|  14.8k|    const struct ofpact_learn_spec *spec;
  496|  14.8k|    struct match match;
  497|       |
  498|  14.8k|    match_init_catchall(&match);
  499|       |
  500|  14.8k|    ds_put_format(s, "%slearn(%s%stable=%s",
  501|  14.8k|                  colors.learn, colors.end, colors.special, colors.end);
  502|  14.8k|    ofputil_format_table(learn->table_id, table_map, s);
  503|  14.8k|    if (learn->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  14.8k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (503:9): [True: 14.0k, False: 795]
  ------------------
  504|  14.0k|        ds_put_format(s, ",%sidle_timeout=%s%"PRIu16,
  505|  14.0k|                      colors.param, colors.end, learn->idle_timeout);
  506|  14.0k|    }
  507|  14.8k|    if (learn->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  14.8k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (507:9): [True: 13.4k, False: 1.33k]
  ------------------
  508|  13.4k|        ds_put_format(s, ",%shard_timeout=%s%"PRIu16,
  509|  13.4k|                      colors.param, colors.end, learn->hard_timeout);
  510|  13.4k|    }
  511|  14.8k|    if (learn->fin_idle_timeout) {
  ------------------
  |  Branch (511:9): [True: 13.4k, False: 1.34k]
  ------------------
  512|  13.4k|        ds_put_format(s, ",%sfin_idle_timeout=%s%"PRIu16,
  513|  13.4k|                      colors.param, colors.end, learn->fin_idle_timeout);
  514|  13.4k|    }
  515|  14.8k|    if (learn->fin_hard_timeout) {
  ------------------
  |  Branch (515:9): [True: 13.9k, False: 852]
  ------------------
  516|  13.9k|        ds_put_format(s, "%s,fin_hard_timeout=%s%"PRIu16,
  517|  13.9k|                      colors.param, colors.end, learn->fin_hard_timeout);
  518|  13.9k|    }
  519|  14.8k|    if (learn->priority != OFP_DEFAULT_PRIORITY) {
  ------------------
  |  |  138|  14.8k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (519:9): [True: 13.7k, False: 1.05k]
  ------------------
  520|  13.7k|        ds_put_format(s, "%s,priority=%s%"PRIu16,
  521|  13.7k|                      colors.special, colors.end, learn->priority);
  522|  13.7k|    }
  523|  14.8k|    if (learn->flags & NX_LEARN_F_SEND_FLOW_REM) {
  ------------------
  |  Branch (523:9): [True: 6.31k, False: 8.49k]
  ------------------
  524|  6.31k|        ds_put_format(s, ",%ssend_flow_rem%s", colors.value, colors.end);
  525|  6.31k|    }
  526|  14.8k|    if (learn->flags & NX_LEARN_F_DELETE_LEARNED) {
  ------------------
  |  Branch (526:9): [True: 4.37k, False: 10.4k]
  ------------------
  527|  4.37k|        ds_put_format(s, ",%sdelete_learned%s", colors.value, colors.end);
  528|  4.37k|    }
  529|  14.8k|    if (learn->cookie != 0) {
  ------------------
  |  Branch (529:9): [True: 14.3k, False: 419]
  ------------------
  530|  14.3k|        ds_put_format(s, ",%scookie=%s%#"PRIx64,
  531|  14.3k|                      colors.param, colors.end, ntohll(learn->cookie));
  532|  14.3k|    }
  533|  14.8k|    if (learn->limit != 0) {
  ------------------
  |  Branch (533:9): [True: 144, False: 14.6k]
  ------------------
  534|    144|        ds_put_format(s, ",%slimit=%s%"PRIu32,
  535|    144|                      colors.param, colors.end, learn->limit);
  536|    144|    }
  537|  14.8k|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (537:9): [True: 119, False: 14.6k]
  ------------------
  538|    119|        ds_put_format(s, ",%sresult_dst=%s", colors.param, colors.end);
  539|    119|        mf_format_subfield(&learn->result_dst, s);
  540|    119|    }
  541|       |
  542|  28.7k|    OFPACT_LEARN_SPEC_FOR_EACH (spec, learn) {
  ------------------
  |  |  900|  14.8k|    for ((SPEC) = (LEARN)->specs;               \
  |  |  901|  43.5k|         (SPEC) < ofpact_learn_spec_end(LEARN); \
  |  |  ------------------
  |  |  |  Branch (901:10): [True: 28.7k, False: 14.8k]
  |  |  ------------------
  |  |  902|  28.7k|         (SPEC) = ofpact_learn_spec_next(SPEC))
  ------------------
  543|  28.7k|        unsigned int n_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  28.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
  544|  28.7k|        ds_put_char(s, ',');
  545|       |
  546|  28.7k|        switch (spec->src_type | spec->dst_type) {
  ------------------
  |  Branch (546:17): [True: 28.7k, False: 0]
  ------------------
  547|  27.0k|        case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  822|  27.0k|#define NX_LEARN_SRC_IMMEDIATE (1 << 13) /* Copy from immediate value. */
  ------------------
                      case NX_LEARN_SRC_IMMEDIATE | NX_LEARN_DST_MATCH: {
  ------------------
  |  |  825|  27.0k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (547:9): [True: 27.0k, False: 1.69k]
  ------------------
  548|  27.0k|            if (spec->dst.ofs == 0
  ------------------
  |  Branch (548:17): [True: 12.4k, False: 14.6k]
  ------------------
  549|  12.4k|                && spec->dst.n_bits == spec->dst.field->n_bits) {
  ------------------
  |  Branch (549:20): [True: 3.80k, False: 8.60k]
  ------------------
  550|  3.80k|                union mf_value value;
  551|       |
  552|  3.80k|                memset(&value, 0, sizeof value);
  553|  3.80k|                memcpy(&value.b[spec->dst.field->n_bytes - n_bytes],
  554|  3.80k|                       ofpact_learn_spec_imm(spec), n_bytes);
  555|  3.80k|                ds_put_format(s, "%s%s=%s", colors.param,
  556|  3.80k|                              spec->dst.field->name, colors.end);
  557|  3.80k|                mf_format(spec->dst.field, &value, NULL, port_map, s);
  558|  23.2k|            } else {
  559|  23.2k|                ds_put_format(s, "%s", colors.param);
  560|  23.2k|                mf_format_subfield(&spec->dst, s);
  561|  23.2k|                ds_put_format(s, "=%s", colors.end);
  562|  23.2k|                ds_put_hex(s, ofpact_learn_spec_imm(spec), n_bytes);
  563|  23.2k|            }
  564|  27.0k|            break;
  565|      0|        }
  566|    177|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  821|    177|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_MATCH:
  ------------------
  |  |  825|    177|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (566:9): [True: 177, False: 28.5k]
  ------------------
  567|    177|            ds_put_format(s, "%s", colors.param);
  568|    177|            mf_format_subfield(&spec->dst, s);
  569|    177|            ds_put_format(s, "%s", colors.end);
  570|    177|            if (spec->src.field != spec->dst.field ||
  ------------------
  |  Branch (570:17): [True: 81, False: 96]
  ------------------
  571|    109|                spec->src.ofs != spec->dst.ofs) {
  ------------------
  |  Branch (571:17): [True: 28, False: 68]
  ------------------
  572|    109|                ds_put_format(s, "%s=%s", colors.param, colors.end);
  573|    109|                mf_format_subfield(&spec->src, s);
  574|    109|            }
  575|    177|            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: 27.4k]
  ------------------
  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|     20|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  821|     20|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_LOAD:
  ------------------
  |  |  826|     20|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (584:9): [True: 20, False: 28.7k]
  ------------------
  585|     20|            ds_put_format(s, "%sload:%s", colors.special, colors.end);
  586|     20|            mf_format_subfield(&spec->src, s);
  587|     20|            ds_put_format(s, "%s->%s", colors.special, colors.end);
  588|     20|            mf_format_subfield(&spec->dst, s);
  589|     20|            break;
  590|       |
  591|    171|        case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  821|    171|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
                      case NX_LEARN_SRC_FIELD | NX_LEARN_DST_OUTPUT:
  ------------------
  |  |  827|    171|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (591:9): [True: 171, False: 28.5k]
  ------------------
  592|    171|            ds_put_format(s, "%soutput:%s", colors.special, colors.end);
  593|    171|            mf_format_subfield(&spec->src, s);
  594|    171|            break;
  595|  28.7k|        }
  596|  28.7k|    }
  597|  14.8k|    ds_put_format(s, "%s)%s", colors.learn, colors.end);
  598|  14.8k|}

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

mf_subvalue_format:
  195|  2.17k|{
  196|  2.17k|    ds_put_hex(s, sv, sizeof *sv);
  197|  2.17k|}
mf_is_all_wild:
  206|   173k|{
  207|   173k|    switch (mf->id) {
  208|    441|    case MFF_DP_HASH:
  ------------------
  |  Branch (208:5): [True: 441, False: 172k]
  ------------------
  209|    441|        return !wc->masks.dp_hash;
  210|    632|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (210:5): [True: 632, False: 172k]
  ------------------
  211|    632|        return !wc->masks.recirc_id;
  212|  11.4k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (212:5): [True: 11.4k, False: 161k]
  ------------------
  213|  11.4k|        return !wc->masks.packet_type;
  214|    240|    case MFF_CONJ_ID:
  ------------------
  |  Branch (214:5): [True: 240, False: 172k]
  ------------------
  215|    240|        return !wc->masks.conj_id;
  216|    507|    case MFF_TUN_SRC:
  ------------------
  |  Branch (216:5): [True: 507, False: 172k]
  ------------------
  217|    507|        return !wc->masks.tunnel.ip_src;
  218|    240|    case MFF_TUN_DST:
  ------------------
  |  Branch (218:5): [True: 240, False: 172k]
  ------------------
  219|    240|        return !wc->masks.tunnel.ip_dst;
  220|  1.08k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (220:5): [True: 1.08k, False: 171k]
  ------------------
  221|  1.08k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_src);
  222|  1.39k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (222:5): [True: 1.39k, False: 171k]
  ------------------
  223|  1.39k|        return ipv6_mask_is_any(&wc->masks.tunnel.ipv6_dst);
  224|    612|    case MFF_TUN_ID:
  ------------------
  |  Branch (224:5): [True: 612, False: 172k]
  ------------------
  225|    612|        return !wc->masks.tunnel.tun_id;
  226|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (226:5): [True: 0, False: 173k]
  ------------------
  227|      0|        return !wc->masks.tunnel.ip_tos;
  228|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (228:5): [True: 0, False: 173k]
  ------------------
  229|      0|        return !wc->masks.tunnel.ip_ttl;
  230|    333|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (230:5): [True: 333, False: 172k]
  ------------------
  231|    333|        return !(wc->masks.tunnel.flags & FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    333|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
  232|    254|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (232:5): [True: 254, False: 172k]
  ------------------
  233|    254|        return !wc->masks.tunnel.gbp_id;
  234|  1.03k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (234:5): [True: 1.03k, False: 172k]
  ------------------
  235|  1.03k|        return !wc->masks.tunnel.gbp_flags;
  236|    370|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (236:5): [True: 370, False: 172k]
  ------------------
  237|    370|        return !wc->masks.tunnel.erspan_ver;
  238|    221|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (238:5): [True: 221, False: 172k]
  ------------------
  239|    221|        return !wc->masks.tunnel.erspan_idx;
  240|    250|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (240:5): [True: 250, False: 172k]
  ------------------
  241|    250|        return !wc->masks.tunnel.erspan_dir;
  242|    747|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (242:5): [True: 747, False: 172k]
  ------------------
  243|    747|        return !wc->masks.tunnel.erspan_hwid;
  244|  78.9k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  5.97k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.42k, False: 171k]
  |  |  |  Branch (2110:29): [True: 4.54k, False: 168k]
  |  |  ------------------
  |  | 2111|  8.28k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.40k, False: 171k]
  |  |  |  Branch (2111:29): [True: 905, False: 172k]
  |  |  ------------------
  |  | 2112|  10.8k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 883, False: 172k]
  |  |  |  Branch (2112:29): [True: 1.71k, False: 171k]
  |  |  ------------------
  |  | 2113|  16.4k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.70k, False: 168k]
  |  |  |  Branch (2113:29): [True: 840, False: 172k]
  |  |  ------------------
  |  | 2114|  19.1k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.76k, False: 171k]
  |  |  |  Branch (2114:29): [True: 984, False: 172k]
  |  |  ------------------
  |  | 2115|  20.4k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.20k, False: 171k]
  |  |  |  Branch (2115:30): [True: 119, False: 172k]
  |  |  ------------------
  |  | 2116|  25.6k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.19k, False: 168k]
  |  |  |  Branch (2116:30): [True: 979, False: 172k]
  |  |  ------------------
  |  | 2117|  28.4k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.57k, False: 171k]
  |  |  |  Branch (2117:30): [True: 1.16k, False: 171k]
  |  |  ------------------
  |  | 2118|  30.1k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 833, False: 172k]
  |  |  |  Branch (2118:30): [True: 871, False: 172k]
  |  |  ------------------
  |  | 2119|  37.5k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.19k, False: 166k]
  |  |  |  Branch (2119:30): [True: 1.27k, False: 171k]
  |  |  ------------------
  |  | 2120|  40.8k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 565, False: 172k]
  |  |  |  Branch (2120:30): [True: 2.66k, False: 170k]
  |  |  ------------------
  |  | 2121|  43.0k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.64k, False: 171k]
  |  |  |  Branch (2121:30): [True: 535, False: 172k]
  |  |  ------------------
  |  | 2122|  46.5k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 851, False: 172k]
  |  |  |  Branch (2122:30): [True: 2.71k, False: 170k]
  |  |  ------------------
  |  | 2123|  47.8k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 598, False: 172k]
  |  |  |  Branch (2123:30): [True: 700, False: 172k]
  |  |  ------------------
  |  | 2124|  48.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 220, False: 172k]
  |  |  |  Branch (2124:30): [True: 880, False: 172k]
  |  |  ------------------
  |  | 2125|  51.2k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 926, False: 172k]
  |  |  |  Branch (2125:30): [True: 1.38k, False: 171k]
  |  |  ------------------
  |  | 2126|  54.7k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.77k, False: 171k]
  |  |  |  Branch (2126:30): [True: 1.68k, False: 171k]
  |  |  ------------------
  |  | 2127|  57.1k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.60k, False: 171k]
  |  |  |  Branch (2127:30): [True: 774, False: 172k]
  |  |  ------------------
  |  | 2128|  58.0k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 286, False: 172k]
  |  |  |  Branch (2128:30): [True: 624, False: 172k]
  |  |  ------------------
  |  | 2129|  59.6k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 624, False: 172k]
  |  |  |  Branch (2129:30): [True: 979, False: 172k]
  |  |  ------------------
  |  | 2130|  61.3k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 752, False: 172k]
  |  |  |  Branch (2130:30): [True: 930, False: 172k]
  |  |  ------------------
  |  | 2131|  62.2k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 343, False: 172k]
  |  |  |  Branch (2131:30): [True: 634, False: 172k]
  |  |  ------------------
  |  | 2132|  63.7k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 248, False: 172k]
  |  |  |  Branch (2132:30): [True: 1.17k, False: 171k]
  |  |  ------------------
  |  | 2133|  65.6k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.36k, False: 171k]
  |  |  |  Branch (2133:30): [True: 586, False: 172k]
  |  |  ------------------
  |  | 2134|  66.6k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 409, False: 172k]
  |  |  |  Branch (2134:30): [True: 588, False: 172k]
  |  |  ------------------
  |  | 2135|  68.8k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.43k, False: 171k]
  |  |  |  Branch (2135:30): [True: 737, False: 172k]
  |  |  ------------------
  |  | 2136|  71.0k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 524, False: 172k]
  |  |  |  Branch (2136:30): [True: 1.66k, False: 171k]
  |  |  ------------------
  |  | 2137|  73.4k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 434, False: 172k]
  |  |  |  Branch (2137:30): [True: 1.99k, False: 171k]
  |  |  ------------------
  |  | 2138|  74.6k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 329, False: 172k]
  |  |  |  Branch (2138:30): [True: 906, False: 172k]
  |  |  ------------------
  |  | 2139|  76.0k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 907, False: 172k]
  |  |  |  Branch (2139:30): [True: 458, False: 172k]
  |  |  ------------------
  |  | 2140|  77.5k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.07k, False: 171k]
  |  |  |  Branch (2140:30): [True: 461, False: 172k]
  |  |  ------------------
  |  | 2141|  78.9k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 729, False: 172k]
  |  |  ------------------
  ------------------
  245|  78.9k|        return !ULLONG_GET(wc->masks.tunnel.metadata.present.map,
  ------------------
  |  |  293|  78.9k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  246|  2.98M|                           mf->id - MFF_TUN_METADATA0);
  247|    463|    case MFF_METADATA:
  ------------------
  |  Branch (247:5): [True: 463, False: 172k]
  ------------------
  248|    463|        return !wc->masks.metadata;
  249|  1.71k|    case MFF_IN_PORT:
  ------------------
  |  Branch (249:5): [True: 1.71k, False: 171k]
  ------------------
  250|  2.39k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (250:5): [True: 675, False: 172k]
  ------------------
  251|  2.39k|        return !wc->masks.in_port.ofp_port;
  252|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (252:5): [True: 0, False: 173k]
  ------------------
  253|      0|        return !wc->masks.skb_priority;
  254|    363|    case MFF_PKT_MARK:
  ------------------
  |  Branch (254:5): [True: 363, False: 172k]
  ------------------
  255|    363|        return !wc->masks.pkt_mark;
  256|  1.03k|    case MFF_CT_STATE:
  ------------------
  |  Branch (256:5): [True: 1.03k, False: 172k]
  ------------------
  257|  1.03k|        return !wc->masks.ct_state;
  258|    463|    case MFF_CT_ZONE:
  ------------------
  |  Branch (258:5): [True: 463, False: 172k]
  ------------------
  259|    463|        return !wc->masks.ct_zone;
  260|    918|    case MFF_CT_MARK:
  ------------------
  |  Branch (260:5): [True: 918, False: 172k]
  ------------------
  261|    918|        return !wc->masks.ct_mark;
  262|    722|    case MFF_CT_LABEL:
  ------------------
  |  Branch (262:5): [True: 722, False: 172k]
  ------------------
  263|    722|        return ovs_u128_is_zero(wc->masks.ct_label);
  264|    382|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (264:5): [True: 382, False: 172k]
  ------------------
  265|    382|        return !wc->masks.ct_nw_proto;
  266|    734|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (266:5): [True: 734, False: 172k]
  ------------------
  267|    734|        return !wc->masks.ct_nw_src;
  268|    176|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (268:5): [True: 176, False: 172k]
  ------------------
  269|    176|        return !wc->masks.ct_nw_dst;
  270|    461|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (270:5): [True: 461, False: 172k]
  ------------------
  271|    461|        return !wc->masks.ct_tp_src;
  272|    233|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (272:5): [True: 233, False: 172k]
  ------------------
  273|    233|        return !wc->masks.ct_tp_dst;
  274|    487|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (274:5): [True: 487, False: 172k]
  ------------------
  275|    487|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_src);
  276|    947|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (276:5): [True: 947, False: 172k]
  ------------------
  277|    947|        return ipv6_mask_is_any(&wc->masks.ct_ipv6_dst);
  278|  13.4k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  2.16k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 747, False: 172k]
  |  |  |  Branch (2065:20): [True: 355, False: 172k]
  |  |  |  Branch (2065:35): [True: 558, False: 172k]
  |  |  |  Branch (2065:50): [True: 502, False: 172k]
  |  |  ------------------
  |  | 2066|  4.11k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 305, False: 172k]
  |  |  |  Branch (2066:20): [True: 965, False: 172k]
  |  |  |  Branch (2066:35): [True: 413, False: 172k]
  |  |  |  Branch (2066:50): [True: 270, False: 172k]
  |  |  ------------------
  |  | 2067|  7.73k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 887, False: 172k]
  |  |  |  Branch (2067:20): [True: 416, False: 172k]
  |  |  |  Branch (2067:35): [True: 1.16k, False: 171k]
  |  |  |  Branch (2067:51): [True: 1.14k, False: 171k]
  |  |  ------------------
  |  | 2068|  10.9k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 586, False: 172k]
  |  |  |  Branch (2068:21): [True: 292, False: 172k]
  |  |  |  Branch (2068:37): [True: 838, False: 172k]
  |  |  |  Branch (2068:53): [True: 1.47k, False: 171k]
  |  |  ------------------
  |  | 2069|  11.3k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 122, False: 172k]
  |  |  |  Branch (2069:21): [True: 157, False: 172k]
  |  |  |  Branch (2069:37): [True: 115, False: 172k]
  |  |  |  Branch (2069:53): [True: 63, False: 172k]
  |  |  ------------------
  |  | 2070|  12.1k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 40, False: 172k]
  |  |  |  Branch (2070:21): [True: 394, False: 172k]
  |  |  |  Branch (2070:37): [True: 190, False: 172k]
  |  |  |  Branch (2070:53): [True: 132, False: 172k]
  |  |  ------------------
  |  | 2071|  12.9k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 178, False: 172k]
  |  |  |  Branch (2071:21): [True: 420, False: 172k]
  |  |  |  Branch (2071:37): [True: 95, False: 172k]
  |  |  |  Branch (2071:53): [True: 154, False: 172k]
  |  |  ------------------
  |  | 2072|  13.4k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 175, False: 172k]
  |  |  |  Branch (2072:21): [True: 96, False: 172k]
  |  |  |  Branch (2072:37): [True: 70, False: 172k]
  |  |  ------------------
  ------------------
  279|  13.4k|        return !wc->masks.regs[mf->id - MFF_REG0];
  280|  5.44k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  2.43k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 364, False: 172k]
  |  |  |  Branch (2081:21): [True: 110, False: 172k]
  |  |  |  Branch (2081:37): [True: 757, False: 172k]
  |  |  |  Branch (2081:53): [True: 1.20k, False: 171k]
  |  |  ------------------
  |  | 2082|  3.89k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 101, False: 172k]
  |  |  |  Branch (2082:21): [True: 688, False: 172k]
  |  |  |  Branch (2082:37): [True: 241, False: 172k]
  |  |  |  Branch (2082:53): [True: 423, False: 172k]
  |  |  ------------------
  |  | 2083|  4.58k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 170, False: 172k]
  |  |  |  Branch (2083:21): [True: 212, False: 172k]
  |  |  |  Branch (2083:37): [True: 286, False: 172k]
  |  |  |  Branch (2083:54): [True: 28, False: 173k]
  |  |  ------------------
  |  | 2084|  5.44k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 302, False: 172k]
  |  |  |  Branch (2084:22): [True: 57, False: 172k]
  |  |  |  Branch (2084:39): [True: 292, False: 172k]
  |  |  ------------------
  ------------------
  281|  5.44k|        return !flow_get_xreg(&wc->masks, mf->id - MFF_XREG0);
  282|  3.95k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  3.76k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 366, False: 172k]
  |  |  |  Branch (2093:22): [True: 353, False: 172k]
  |  |  |  Branch (2093:39): [True: 2.27k, False: 170k]
  |  |  |  Branch (2093:56): [True: 774, False: 172k]
  |  |  ------------------
  |  | 2094|  3.95k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 173k]
  |  |  |  Branch (2094:22): [True: 10, False: 173k]
  |  |  |  Branch (2094:39): [True: 67, False: 172k]
  |  |  ------------------
  ------------------
  283|  3.95k|        ovs_u128 value = flow_get_xxreg(&wc->masks, mf->id - MFF_XXREG0);
  284|  3.95k|        return ovs_u128_is_zero(value);
  285|  19.2k|    }
  286|    642|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (286:5): [True: 642, False: 172k]
  ------------------
  287|    642|        return !wc->masks.actset_output;
  288|       |
  289|    424|    case MFF_ETH_SRC:
  ------------------
  |  Branch (289:5): [True: 424, False: 172k]
  ------------------
  290|    424|        return eth_addr_is_zero(wc->masks.dl_src);
  291|    412|    case MFF_ETH_DST:
  ------------------
  |  Branch (291:5): [True: 412, False: 172k]
  ------------------
  292|    412|        return eth_addr_is_zero(wc->masks.dl_dst);
  293|    340|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (293:5): [True: 340, False: 172k]
  ------------------
  294|    340|        return !wc->masks.dl_type;
  295|       |
  296|    161|    case MFF_ARP_SHA:
  ------------------
  |  Branch (296:5): [True: 161, False: 172k]
  ------------------
  297|    559|    case MFF_ND_SLL:
  ------------------
  |  Branch (297:5): [True: 398, False: 172k]
  ------------------
  298|    559|        return eth_addr_is_zero(wc->masks.arp_sha);
  299|       |
  300|    545|    case MFF_ARP_THA:
  ------------------
  |  Branch (300:5): [True: 545, False: 172k]
  ------------------
  301|  2.93k|    case MFF_ND_TLL:
  ------------------
  |  Branch (301:5): [True: 2.39k, False: 170k]
  ------------------
  302|  2.93k|        return eth_addr_is_zero(wc->masks.arp_tha);
  303|       |
  304|    733|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (304:5): [True: 733, False: 172k]
  ------------------
  305|    733|        return !wc->masks.vlans[0].tci;
  306|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (306:5): [True: 0, False: 173k]
  ------------------
  307|      0|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK));
  308|  1.16k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (308:5): [True: 1.16k, False: 171k]
  ------------------
  309|  1.16k|        return !(wc->masks.vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI));
  310|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (310:5): [True: 0, False: 173k]
  ------------------
  311|    808|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (311:5): [True: 808, False: 172k]
  ------------------
  312|    808|        return !(wc->masks.vlans[0].tci & htons(VLAN_PCP_MASK));
  313|       |
  314|  1.06k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (314:5): [True: 1.06k, False: 171k]
  ------------------
  315|  1.06k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_LABEL_MASK));
  316|    294|    case MFF_MPLS_TC:
  ------------------
  |  Branch (316:5): [True: 294, False: 172k]
  ------------------
  317|    294|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TC_MASK));
  318|    317|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (318:5): [True: 317, False: 172k]
  ------------------
  319|    317|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_BOS_MASK));
  320|  1.06k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (320:5): [True: 1.06k, False: 171k]
  ------------------
  321|  1.06k|        return !(wc->masks.mpls_lse[0] & htonl(MPLS_TTL_MASK));
  322|       |
  323|    205|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (323:5): [True: 205, False: 172k]
  ------------------
  324|    205|        return !wc->masks.nw_src;
  325|    847|    case MFF_IPV4_DST:
  ------------------
  |  Branch (325:5): [True: 847, False: 172k]
  ------------------
  326|    847|        return !wc->masks.nw_dst;
  327|       |
  328|    947|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (328:5): [True: 947, False: 172k]
  ------------------
  329|    947|        return ipv6_mask_is_any(&wc->masks.ipv6_src);
  330|  1.39k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (330:5): [True: 1.39k, False: 171k]
  ------------------
  331|  1.39k|        return ipv6_mask_is_any(&wc->masks.ipv6_dst);
  332|       |
  333|    372|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (333:5): [True: 372, False: 172k]
  ------------------
  334|    372|        return !wc->masks.ipv6_label;
  335|       |
  336|  2.50k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (336:5): [True: 2.50k, False: 170k]
  ------------------
  337|  2.50k|        return !wc->masks.nw_proto;
  338|    301|    case MFF_IP_DSCP:
  ------------------
  |  Branch (338:5): [True: 301, False: 172k]
  ------------------
  339|  1.29k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (339:5): [True: 990, False: 172k]
  ------------------
  340|  1.29k|        return !(wc->masks.nw_tos & IP_DSCP_MASK);
  ------------------
  |  |  724|  1.29k|#define IP_DSCP_MASK 0xfc
  ------------------
  341|    616|    case MFF_IP_ECN:
  ------------------
  |  Branch (341:5): [True: 616, False: 172k]
  ------------------
  342|    616|        return !(wc->masks.nw_tos & IP_ECN_MASK);
  ------------------
  |  |  722|    616|#define IP_ECN_MASK 0x03
  ------------------
  343|    535|    case MFF_IP_TTL:
  ------------------
  |  Branch (343:5): [True: 535, False: 172k]
  ------------------
  344|    535|        return !wc->masks.nw_ttl;
  345|       |
  346|    633|    case MFF_ND_TARGET:
  ------------------
  |  Branch (346:5): [True: 633, False: 172k]
  ------------------
  347|    633|        return ipv6_mask_is_any(&wc->masks.nd_target);
  348|       |
  349|    837|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (349:5): [True: 837, False: 172k]
  ------------------
  350|    837|        return !wc->masks.igmp_group_ip4;
  351|    778|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (351:5): [True: 778, False: 172k]
  ------------------
  352|    778|        return !wc->masks.tcp_flags;
  353|       |
  354|  1.00k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (354:5): [True: 1.00k, False: 172k]
  ------------------
  355|  1.00k|        return !(wc->masks.nw_frag & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  1.00k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  1.00k|#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.00k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  356|       |
  357|    325|    case MFF_ARP_OP:
  ------------------
  |  Branch (357:5): [True: 325, False: 172k]
  ------------------
  358|    325|        return !wc->masks.nw_proto;
  359|    366|    case MFF_ARP_SPA:
  ------------------
  |  Branch (359:5): [True: 366, False: 172k]
  ------------------
  360|    366|        return !wc->masks.nw_src;
  361|    708|    case MFF_ARP_TPA:
  ------------------
  |  Branch (361:5): [True: 708, False: 172k]
  ------------------
  362|    708|        return !wc->masks.nw_dst;
  363|       |
  364|  2.03k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (364:5): [True: 2.03k, False: 171k]
  ------------------
  365|  2.36k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (365:5): [True: 336, False: 172k]
  ------------------
  366|  2.88k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (366:5): [True: 515, False: 172k]
  ------------------
  367|  3.08k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (367:5): [True: 197, False: 172k]
  ------------------
  368|  4.04k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (368:5): [True: 961, False: 172k]
  ------------------
  369|  4.04k|        return !wc->masks.tp_src;
  370|    243|    case MFF_TCP_DST:
  ------------------
  |  Branch (370:5): [True: 243, False: 172k]
  ------------------
  371|    695|    case MFF_UDP_DST:
  ------------------
  |  Branch (371:5): [True: 452, False: 172k]
  ------------------
  372|  1.33k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (372:5): [True: 643, False: 172k]
  ------------------
  373|  1.77k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (373:5): [True: 438, False: 172k]
  ------------------
  374|  1.99k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (374:5): [True: 222, False: 172k]
  ------------------
  375|  1.99k|        return !wc->masks.tp_dst;
  376|    790|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (376:5): [True: 790, False: 172k]
  ------------------
  377|    790|        return !wc->masks.tcp_flags;
  378|       |
  379|  1.13k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (379:5): [True: 1.13k, False: 171k]
  ------------------
  380|  1.13k|        return !wc->masks.nsh.flags;
  381|    554|    case MFF_NSH_TTL:
  ------------------
  |  Branch (381:5): [True: 554, False: 172k]
  ------------------
  382|    554|        return !wc->masks.nsh.ttl;
  383|     69|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (383:5): [True: 69, False: 172k]
  ------------------
  384|     69|        return !wc->masks.nsh.mdtype;
  385|  3.75k|    case MFF_NSH_NP:
  ------------------
  |  Branch (385:5): [True: 3.75k, False: 169k]
  ------------------
  386|  3.75k|        return !wc->masks.nsh.np;
  387|    545|    case MFF_NSH_SPI:
  ------------------
  |  Branch (387:5): [True: 545, False: 172k]
  ------------------
  388|    545|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SPI_MASK));
  389|    601|    case MFF_NSH_SI:
  ------------------
  |  Branch (389:5): [True: 601, False: 172k]
  ------------------
  390|    601|        return !(wc->masks.nsh.path_hdr & htonl(NSH_SI_MASK));
  391|    485|    case MFF_NSH_C1:
  ------------------
  |  Branch (391:5): [True: 485, False: 172k]
  ------------------
  392|  2.49k|    case MFF_NSH_C2:
  ------------------
  |  Branch (392:5): [True: 2.01k, False: 171k]
  ------------------
  393|  2.64k|    case MFF_NSH_C3:
  ------------------
  |  Branch (393:5): [True: 146, False: 172k]
  ------------------
  394|  2.79k|    case MFF_NSH_C4:
  ------------------
  |  Branch (394:5): [True: 154, False: 172k]
  ------------------
  395|  2.79k|        return !wc->masks.nsh.context[mf->id - MFF_NSH_C1];
  396|    649|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (396:5): [True: 649, False: 172k]
  ------------------
  397|    649|        return !wc->masks.tunnel.gtpu_flags;
  398|    666|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (398:5): [True: 666, False: 172k]
  ------------------
  399|    666|        return !wc->masks.tunnel.gtpu_msgtype;
  400|       |
  401|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (401:5): [True: 0, False: 173k]
  ------------------
  402|      0|    default:
  ------------------
  |  Branch (402:5): [True: 0, False: 173k]
  ------------------
  403|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  404|   173k|    }
  405|   173k|}
mf_get_mask:
  416|  27.4k|{
  417|  27.4k|    mf_get_value(mf, &wc->masks, mask);
  418|  27.4k|}
mf_is_mask_valid:
  424|   187k|{
  425|   187k|    switch (mf->maskable) {
  ------------------
  |  Branch (425:13): [True: 187k, False: 0]
  ------------------
  426|  36.7k|    case MFM_NONE:
  ------------------
  |  Branch (426:5): [True: 36.7k, False: 150k]
  ------------------
  427|  36.7k|        return (is_all_zeros(mask, mf->n_bytes) ||
  ------------------
  |  Branch (427:17): [True: 6.22k, False: 30.5k]
  ------------------
  428|  30.5k|                is_all_ones(mask, mf->n_bytes));
  ------------------
  |  Branch (428:17): [True: 29.9k, False: 604]
  ------------------
  429|       |
  430|   150k|    case MFM_FULLY:
  ------------------
  |  Branch (430:5): [True: 150k, False: 36.7k]
  ------------------
  431|   150k|        return true;
  432|   187k|    }
  433|       |
  434|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  435|   187k|}
mf_are_prereqs_ok:
  496|  2.49k|{
  497|       |    return mf_are_prereqs_ok__(mf, flow, NULL, wc);
  498|  2.49k|}
mf_are_match_prereqs_ok:
  504|  50.7k|{
  505|       |    return mf_are_prereqs_ok__(mf, &match->flow, &match->wc, NULL);
  506|  50.7k|}
mf_is_value_valid:
  520|   186k|{
  521|   186k|    switch (mf->id) {
  522|    441|    case MFF_DP_HASH:
  ------------------
  |  Branch (522:5): [True: 441, False: 186k]
  ------------------
  523|  1.07k|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (523:5): [True: 632, False: 185k]
  ------------------
  524|  12.5k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (524:5): [True: 11.4k, False: 175k]
  ------------------
  525|  12.7k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (525:5): [True: 240, False: 186k]
  ------------------
  526|  13.3k|    case MFF_TUN_ID:
  ------------------
  |  Branch (526:5): [True: 612, False: 185k]
  ------------------
  527|  13.8k|    case MFF_TUN_SRC:
  ------------------
  |  Branch (527:5): [True: 507, False: 185k]
  ------------------
  528|  14.1k|    case MFF_TUN_DST:
  ------------------
  |  Branch (528:5): [True: 240, False: 186k]
  ------------------
  529|  15.2k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (529:5): [True: 1.08k, False: 185k]
  ------------------
  530|  16.6k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (530:5): [True: 1.39k, False: 185k]
  ------------------
  531|  16.6k|    case MFF_TUN_TOS:
  ------------------
  |  Branch (531:5): [True: 0, False: 186k]
  ------------------
  532|  16.6k|    case MFF_TUN_TTL:
  ------------------
  |  Branch (532:5): [True: 0, False: 186k]
  ------------------
  533|  16.8k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (533:5): [True: 254, False: 186k]
  ------------------
  534|  17.9k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (534:5): [True: 1.03k, False: 185k]
  ------------------
  535|  18.1k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (535:5): [True: 221, False: 186k]
  ------------------
  536|  18.4k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (536:5): [True: 370, False: 186k]
  ------------------
  537|  18.7k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (537:5): [True: 250, False: 186k]
  ------------------
  538|  19.4k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (538:5): [True: 747, False: 185k]
  ------------------
  539|  20.1k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (539:5): [True: 649, False: 185k]
  ------------------
  540|  20.8k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (540:5): [True: 666, False: 185k]
  ------------------
  541|  4.71M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  26.7k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.42k, False: 185k]
  |  |  |  Branch (2110:29): [True: 4.54k, False: 181k]
  |  |  ------------------
  |  | 2111|  29.0k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.40k, False: 185k]
  |  |  |  Branch (2111:29): [True: 905, False: 185k]
  |  |  ------------------
  |  | 2112|  33.7k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 2.96k, False: 183k]
  |  |  |  Branch (2112:29): [True: 1.71k, False: 184k]
  |  |  ------------------
  |  | 2113|  39.3k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.70k, False: 181k]
  |  |  |  Branch (2113:29): [True: 840, False: 185k]
  |  |  ------------------
  |  | 2114|  42.8k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 2.55k, False: 183k]
  |  |  |  Branch (2114:29): [True: 984, False: 185k]
  |  |  ------------------
  |  | 2115|  44.2k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 1.21k, False: 185k]
  |  |  |  Branch (2115:30): [True: 196, False: 186k]
  |  |  ------------------
  |  | 2116|  49.4k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.19k, False: 182k]
  |  |  |  Branch (2116:30): [True: 979, False: 185k]
  |  |  ------------------
  |  | 2117|  52.1k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 1.57k, False: 184k]
  |  |  |  Branch (2117:30): [True: 1.16k, False: 185k]
  |  |  ------------------
  |  | 2118|  55.1k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 833, False: 185k]
  |  |  |  Branch (2118:30): [True: 2.15k, False: 184k]
  |  |  ------------------
  |  | 2119|  62.6k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.19k, False: 180k]
  |  |  |  Branch (2119:30): [True: 1.27k, False: 185k]
  |  |  ------------------
  |  | 2120|  65.8k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 565, False: 185k]
  |  |  |  Branch (2120:30): [True: 2.66k, False: 183k]
  |  |  ------------------
  |  | 2121|  68.0k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.64k, False: 184k]
  |  |  |  Branch (2121:30): [True: 536, False: 185k]
  |  |  ------------------
  |  | 2122|  72.4k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.69k, False: 184k]
  |  |  |  Branch (2122:30): [True: 2.71k, False: 183k]
  |  |  ------------------
  |  | 2123|  73.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 598, False: 185k]
  |  |  |  Branch (2123:30): [True: 700, False: 185k]
  |  |  ------------------
  |  | 2124|  74.8k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 220, False: 186k]
  |  |  |  Branch (2124:30): [True: 882, False: 185k]
  |  |  ------------------
  |  | 2125|  77.1k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 926, False: 185k]
  |  |  |  Branch (2125:30): [True: 1.38k, False: 185k]
  |  |  ------------------
  |  | 2126|  81.6k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.77k, False: 184k]
  |  |  |  Branch (2126:30): [True: 2.67k, False: 183k]
  |  |  ------------------
  |  | 2127|  83.9k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.60k, False: 184k]
  |  |  |  Branch (2127:30): [True: 774, False: 185k]
  |  |  ------------------
  |  | 2128|  84.8k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 286, False: 186k]
  |  |  |  Branch (2128:30): [True: 624, False: 185k]
  |  |  ------------------
  |  | 2129|  86.4k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 624, False: 185k]
  |  |  |  Branch (2129:30): [True: 979, False: 185k]
  |  |  ------------------
  |  | 2130|  88.1k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 752, False: 185k]
  |  |  |  Branch (2130:30): [True: 930, False: 185k]
  |  |  ------------------
  |  | 2131|  89.1k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 345, False: 186k]
  |  |  |  Branch (2131:30): [True: 634, False: 185k]
  |  |  ------------------
  |  | 2132|  90.5k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 248, False: 186k]
  |  |  |  Branch (2132:30): [True: 1.17k, False: 185k]
  |  |  ------------------
  |  | 2133|  92.5k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.36k, False: 185k]
  |  |  |  Branch (2133:30): [True: 586, False: 185k]
  |  |  ------------------
  |  | 2134|  93.5k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 409, False: 186k]
  |  |  |  Branch (2134:30): [True: 588, False: 185k]
  |  |  ------------------
  |  | 2135|  95.7k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.43k, False: 185k]
  |  |  |  Branch (2135:30): [True: 737, False: 185k]
  |  |  ------------------
  |  | 2136|  97.8k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 524, False: 185k]
  |  |  |  Branch (2136:30): [True: 1.66k, False: 184k]
  |  |  ------------------
  |  | 2137|   100k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 434, False: 186k]
  |  |  |  Branch (2137:30): [True: 1.99k, False: 184k]
  |  |  ------------------
  |  | 2138|   103k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 1.32k, False: 185k]
  |  |  |  Branch (2138:30): [True: 2.12k, False: 184k]
  |  |  ------------------
  |  | 2139|   105k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 911, False: 185k]
  |  |  |  Branch (2139:30): [True: 458, False: 186k]
  |  |  ------------------
  |  | 2140|   106k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.07k, False: 185k]
  |  |  |  Branch (2140:30): [True: 461, False: 186k]
  |  |  ------------------
  |  | 2141|   108k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 729, False: 185k]
  |  |  ------------------
  ------------------
  542|  4.71M|    case MFF_METADATA:
  ------------------
  |  Branch (542:5): [True: 463, False: 186k]
  ------------------
  543|   110k|    case MFF_IN_PORT:
  ------------------
  |  Branch (543:5): [True: 1.71k, False: 184k]
  ------------------
  544|   110k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (544:5): [True: 0, False: 186k]
  ------------------
  545|   110k|    case MFF_PKT_MARK:
  ------------------
  |  Branch (545:5): [True: 363, False: 186k]
  ------------------
  546|   111k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (546:5): [True: 463, False: 186k]
  ------------------
  547|   111k|    case MFF_CT_MARK:
  ------------------
  |  Branch (547:5): [True: 918, False: 185k]
  ------------------
  548|   112k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (548:5): [True: 722, False: 185k]
  ------------------
  549|   113k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (549:5): [True: 382, False: 186k]
  ------------------
  550|   113k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (550:5): [True: 734, False: 185k]
  ------------------
  551|   113k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (551:5): [True: 180, False: 186k]
  ------------------
  552|   114k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (552:5): [True: 487, False: 185k]
  ------------------
  553|   115k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (553:5): [True: 947, False: 185k]
  ------------------
  554|   115k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (554:5): [True: 464, False: 186k]
  ------------------
  555|   116k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (555:5): [True: 233, False: 186k]
  ------------------
  556|  3.99M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|   118k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 750, False: 185k]
  |  |  |  Branch (2065:20): [True: 355, False: 186k]
  |  |  |  Branch (2065:35): [True: 558, False: 185k]
  |  |  |  Branch (2065:50): [True: 502, False: 185k]
  |  |  ------------------
  |  | 2066|   120k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 305, False: 186k]
  |  |  |  Branch (2066:20): [True: 965, False: 185k]
  |  |  |  Branch (2066:35): [True: 413, False: 186k]
  |  |  |  Branch (2066:50): [True: 270, False: 186k]
  |  |  ------------------
  |  | 2067|   123k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 887, False: 185k]
  |  |  |  Branch (2067:20): [True: 416, False: 186k]
  |  |  |  Branch (2067:35): [True: 1.16k, False: 185k]
  |  |  |  Branch (2067:51): [True: 1.14k, False: 185k]
  |  |  ------------------
  |  | 2068|   127k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 586, False: 185k]
  |  |  |  Branch (2068:21): [True: 292, False: 186k]
  |  |  |  Branch (2068:37): [True: 838, False: 185k]
  |  |  |  Branch (2068:53): [True: 1.47k, False: 185k]
  |  |  ------------------
  |  | 2069|   127k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 122, False: 186k]
  |  |  |  Branch (2069:21): [True: 157, False: 186k]
  |  |  |  Branch (2069:37): [True: 115, False: 186k]
  |  |  |  Branch (2069:53): [True: 63, False: 186k]
  |  |  ------------------
  |  | 2070|   128k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 40, False: 186k]
  |  |  |  Branch (2070:21): [True: 394, False: 186k]
  |  |  |  Branch (2070:37): [True: 190, False: 186k]
  |  |  |  Branch (2070:53): [True: 132, False: 186k]
  |  |  ------------------
  |  | 2071|   129k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 178, False: 186k]
  |  |  |  Branch (2071:21): [True: 420, False: 186k]
  |  |  |  Branch (2071:37): [True: 95, False: 186k]
  |  |  |  Branch (2071:53): [True: 154, False: 186k]
  |  |  ------------------
  |  | 2072|   129k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 175, False: 186k]
  |  |  |  Branch (2072:21): [True: 96, False: 186k]
  |  |  |  Branch (2072:37): [True: 70, False: 186k]
  |  |  ------------------
  ------------------
  557|  3.99M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|   131k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 364, False: 186k]
  |  |  |  Branch (2081:21): [True: 110, False: 186k]
  |  |  |  Branch (2081:37): [True: 757, False: 185k]
  |  |  |  Branch (2081:53): [True: 1.20k, False: 185k]
  |  |  ------------------
  |  | 2082|   133k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 101, False: 186k]
  |  |  |  Branch (2082:21): [True: 688, False: 185k]
  |  |  |  Branch (2082:37): [True: 241, False: 186k]
  |  |  |  Branch (2082:53): [True: 423, False: 186k]
  |  |  ------------------
  |  | 2083|   134k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 170, False: 186k]
  |  |  |  Branch (2083:21): [True: 212, False: 186k]
  |  |  |  Branch (2083:37): [True: 286, False: 186k]
  |  |  |  Branch (2083:54): [True: 28, False: 186k]
  |  |  ------------------
  |  | 2084|   134k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 302, False: 186k]
  |  |  |  Branch (2084:22): [True: 57, False: 186k]
  |  |  |  Branch (2084:39): [True: 292, False: 186k]
  |  |  ------------------
  ------------------
  558|  2.12M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|   138k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 366, False: 186k]
  |  |  |  Branch (2093:22): [True: 353, False: 186k]
  |  |  |  Branch (2093:39): [True: 2.27k, False: 184k]
  |  |  |  Branch (2093:56): [True: 774, False: 185k]
  |  |  ------------------
  |  | 2094|   138k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 186k]
  |  |  |  Branch (2094:22): [True: 10, False: 186k]
  |  |  |  Branch (2094:39): [True: 67, False: 186k]
  |  |  ------------------
  ------------------
  559|  1.10M|    case MFF_ETH_SRC:
  ------------------
  |  Branch (559:5): [True: 490, False: 185k]
  ------------------
  560|   139k|    case MFF_ETH_DST:
  ------------------
  |  Branch (560:5): [True: 412, False: 186k]
  ------------------
  561|   140k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (561:5): [True: 340, False: 186k]
  ------------------
  562|   140k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (562:5): [True: 737, False: 185k]
  ------------------
  563|   141k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (563:5): [True: 1.06k, False: 185k]
  ------------------
  564|   142k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (564:5): [True: 205, False: 186k]
  ------------------
  565|   143k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (565:5): [True: 858, False: 185k]
  ------------------
  566|   143k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (566:5): [True: 947, False: 185k]
  ------------------
  567|   145k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (567:5): [True: 1.39k, False: 185k]
  ------------------
  568|   148k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (568:5): [True: 3.04k, False: 183k]
  ------------------
  569|   148k|    case MFF_IP_TTL:
  ------------------
  |  Branch (569:5): [True: 535, False: 185k]
  ------------------
  570|   149k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (570:5): [True: 369, False: 186k]
  ------------------
  571|   149k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (571:5): [True: 708, False: 185k]
  ------------------
  572|   150k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (572:5): [True: 161, False: 186k]
  ------------------
  573|   150k|    case MFF_ARP_THA:
  ------------------
  |  Branch (573:5): [True: 545, False: 185k]
  ------------------
  574|   152k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (574:5): [True: 2.29k, False: 184k]
  ------------------
  575|   153k|    case MFF_TCP_DST:
  ------------------
  |  Branch (575:5): [True: 243, False: 186k]
  ------------------
  576|   153k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (576:5): [True: 394, False: 186k]
  ------------------
  577|   154k|    case MFF_UDP_DST:
  ------------------
  |  Branch (577:5): [True: 525, False: 185k]
  ------------------
  578|   154k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (578:5): [True: 520, False: 185k]
  ------------------
  579|   155k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (579:5): [True: 753, False: 185k]
  ------------------
  580|   155k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (580:5): [True: 197, False: 186k]
  ------------------
  581|   156k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (581:5): [True: 933, False: 185k]
  ------------------
  582|   157k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (582:5): [True: 1.10k, False: 185k]
  ------------------
  583|   157k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (583:5): [True: 256, False: 186k]
  ------------------
  584|   158k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (584:5): [True: 869, False: 185k]
  ------------------
  585|   160k|    case MFF_ND_SLL:
  ------------------
  |  Branch (585:5): [True: 1.58k, False: 184k]
  ------------------
  586|   163k|    case MFF_ND_TLL:
  ------------------
  |  Branch (586:5): [True: 2.94k, False: 183k]
  ------------------
  587|   164k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (587:5): [True: 837, False: 185k]
  ------------------
  588|   164k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (588:5): [True: 804, False: 185k]
  ------------------
  589|   164k|        return true;
  590|       |
  591|    678|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (591:5): [True: 678, False: 185k]
  ------------------
  592|  1.32k|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (592:5): [True: 647, False: 185k]
  ------------------
  593|  1.32k|        ofp_port_t port;
  594|  1.32k|        return !ofputil_port_from_ofp11(value->be32, &port);
  595|    678|    }
  596|       |
  597|    305|    case MFF_IP_DSCP:
  ------------------
  |  Branch (597:5): [True: 305, False: 186k]
  ------------------
  598|    305|        return !(value->u8 & ~IP_DSCP_MASK);
  ------------------
  |  |  724|    305|#define IP_DSCP_MASK 0xfc
  ------------------
  599|  1.04k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (599:5): [True: 1.04k, False: 185k]
  ------------------
  600|  1.04k|        return !(value->u8 & (~IP_DSCP_MASK >> 2));
  ------------------
  |  |  724|  1.04k|#define IP_DSCP_MASK 0xfc
  ------------------
  601|    616|    case MFF_IP_ECN:
  ------------------
  |  Branch (601:5): [True: 616, False: 185k]
  ------------------
  602|    616|        return !(value->u8 & ~IP_ECN_MASK);
  ------------------
  |  |  722|    616|#define IP_ECN_MASK 0x03
  ------------------
  603|  1.00k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (603:5): [True: 1.00k, False: 185k]
  ------------------
  604|  1.00k|        return !(value->u8 & ~FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|  1.00k|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|  1.00k|#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.00k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
  605|    791|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (605:5): [True: 791, False: 185k]
  ------------------
  606|    791|        return !(value->be16 & ~htons(0x0fff));
  607|       |
  608|    329|    case MFF_ARP_OP:
  ------------------
  |  Branch (608:5): [True: 329, False: 186k]
  ------------------
  609|    329|        return !(value->be16 & htons(0xff00));
  610|       |
  611|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (611:5): [True: 0, False: 186k]
  ------------------
  612|      0|        return !(value->be16 & htons(VLAN_CFI | VLAN_PCP_MASK));
  613|  1.88k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (613:5): [True: 1.88k, False: 184k]
  ------------------
  614|  1.88k|        return !(value->be16 & htons(VLAN_PCP_MASK));
  615|       |
  616|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (616:5): [True: 0, False: 186k]
  ------------------
  617|    819|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (617:5): [True: 819, False: 185k]
  ------------------
  618|    819|        return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  497|    819|#define VLAN_PCP_MASK 0xe000
  ------------------
                      return !(value->u8 & ~(VLAN_PCP_MASK >> VLAN_PCP_SHIFT));
  ------------------
  |  |  498|    819|#define VLAN_PCP_SHIFT 13
  ------------------
  619|       |
  620|    384|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (620:5): [True: 384, False: 186k]
  ------------------
  621|    384|        return !(value->be32 & ~htonl(IPV6_LABEL_MASK));
  622|       |
  623|  1.08k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (623:5): [True: 1.08k, False: 185k]
  ------------------
  624|  1.08k|        return !(value->be32 & ~htonl(MPLS_LABEL_MASK >> MPLS_LABEL_SHIFT));
  625|       |
  626|    426|    case MFF_MPLS_TC:
  ------------------
  |  Branch (626:5): [True: 426, False: 186k]
  ------------------
  627|    426|        return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  551|    426|#define MPLS_TC_MASK        0x00000e00
  ------------------
                      return !(value->u8 & ~(MPLS_TC_MASK >> MPLS_TC_SHIFT));
  ------------------
  |  |  552|    426|#define MPLS_TC_SHIFT       9
  ------------------
  628|       |
  629|    412|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (629:5): [True: 412, False: 186k]
  ------------------
  630|    412|        return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  548|    412|#define MPLS_BOS_MASK       0x00000100
  ------------------
                      return !(value->u8 & ~(MPLS_BOS_MASK >> MPLS_BOS_SHIFT));
  ------------------
  |  |  549|    412|#define MPLS_BOS_SHIFT      8
  ------------------
  631|       |
  632|    334|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (632:5): [True: 334, False: 186k]
  ------------------
  633|    334|        return !(value->be16 & ~htons(FLOW_TNL_PUB_F_MASK));
  634|       |
  635|  1.04k|    case MFF_CT_STATE:
  ------------------
  |  Branch (635:5): [True: 1.04k, False: 185k]
  ------------------
  636|  1.04k|        return !(value->be32 & ~htonl(CS_SUPPORTED_MASK));
  637|       |
  638|  1.20k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (638:5): [True: 1.20k, False: 185k]
  ------------------
  639|  1.20k|        return true;
  640|    566|    case MFF_NSH_TTL:
  ------------------
  |  Branch (640:5): [True: 566, False: 185k]
  ------------------
  641|    566|        return (value->u8 <= 63);
  642|     97|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (642:5): [True: 97, False: 186k]
  ------------------
  643|     97|        return (value->u8 == 1 || value->u8 == 2);
  ------------------
  |  Branch (643:17): [True: 34, False: 63]
  |  Branch (643:35): [True: 35, False: 28]
  ------------------
  644|  3.75k|    case MFF_NSH_NP:
  ------------------
  |  Branch (644:5): [True: 3.75k, False: 182k]
  ------------------
  645|  3.75k|        return true;
  646|    694|    case MFF_NSH_SPI:
  ------------------
  |  Branch (646:5): [True: 694, False: 185k]
  ------------------
  647|    694|        return !(value->be32 & htonl(0xFF000000));
  648|    601|    case MFF_NSH_SI:
  ------------------
  |  Branch (648:5): [True: 601, False: 185k]
  ------------------
  649|  1.08k|    case MFF_NSH_C1:
  ------------------
  |  Branch (649:5): [True: 485, False: 186k]
  ------------------
  650|  3.09k|    case MFF_NSH_C2:
  ------------------
  |  Branch (650:5): [True: 2.01k, False: 184k]
  ------------------
  651|  3.24k|    case MFF_NSH_C3:
  ------------------
  |  Branch (651:5): [True: 146, False: 186k]
  ------------------
  652|  3.39k|    case MFF_NSH_C4:
  ------------------
  |  Branch (652:5): [True: 154, False: 186k]
  ------------------
  653|  3.39k|        return true;
  654|       |
  655|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (655:5): [True: 0, False: 186k]
  ------------------
  656|      0|    default:
  ------------------
  |  Branch (656:5): [True: 0, False: 186k]
  ------------------
  657|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  658|   186k|    }
  659|   186k|}
mf_get_value:
  666|  54.9k|{
  667|  54.9k|    switch (mf->id) {
  668|    114|    case MFF_DP_HASH:
  ------------------
  |  Branch (668:5): [True: 114, False: 54.8k]
  ------------------
  669|    114|        value->be32 = htonl(flow->dp_hash);
  670|    114|        break;
  671|    804|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (671:5): [True: 804, False: 54.1k]
  ------------------
  672|    804|        value->be32 = htonl(flow->recirc_id);
  673|    804|        break;
  674|  2.82k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (674:5): [True: 2.82k, False: 52.1k]
  ------------------
  675|  2.82k|        value->be32 = flow->packet_type;
  676|  2.82k|        break;
  677|  1.35k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (677:5): [True: 1.35k, False: 53.6k]
  ------------------
  678|  1.35k|        value->be32 = htonl(flow->conj_id);
  679|  1.35k|        break;
  680|  1.92k|    case MFF_TUN_ID:
  ------------------
  |  Branch (680:5): [True: 1.92k, False: 53.0k]
  ------------------
  681|  1.92k|        value->be64 = flow->tunnel.tun_id;
  682|  1.92k|        break;
  683|     34|    case MFF_TUN_SRC:
  ------------------
  |  Branch (683:5): [True: 34, False: 54.9k]
  ------------------
  684|     34|        value->be32 = flow->tunnel.ip_src;
  685|     34|        break;
  686|     34|    case MFF_TUN_DST:
  ------------------
  |  Branch (686:5): [True: 34, False: 54.9k]
  ------------------
  687|     34|        value->be32 = flow->tunnel.ip_dst;
  688|     34|        break;
  689|      6|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (689:5): [True: 6, False: 54.9k]
  ------------------
  690|      6|        value->ipv6 = flow->tunnel.ipv6_src;
  691|      6|        break;
  692|    192|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (692:5): [True: 192, False: 54.7k]
  ------------------
  693|    192|        value->ipv6 = flow->tunnel.ipv6_dst;
  694|    192|        break;
  695|    594|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (695:5): [True: 594, False: 54.3k]
  ------------------
  696|    594|        value->be16 = htons(flow->tunnel.flags & FLOW_TNL_PUB_F_MASK);
  697|    594|        break;
  698|      2|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (698:5): [True: 2, False: 54.9k]
  ------------------
  699|      2|        value->be16 = flow->tunnel.gbp_id;
  700|      2|        break;
  701|    972|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (701:5): [True: 972, False: 54.0k]
  ------------------
  702|    972|        value->u8 = flow->tunnel.gbp_flags;
  703|    972|        break;
  704|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (704:5): [True: 0, False: 54.9k]
  ------------------
  705|      0|        value->u8 = flow->tunnel.ip_ttl;
  706|      0|        break;
  707|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (707:5): [True: 0, False: 54.9k]
  ------------------
  708|      0|        value->u8 = flow->tunnel.ip_tos;
  709|      0|        break;
  710|      0|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (710:5): [True: 0, False: 54.9k]
  ------------------
  711|      0|        value->u8 = flow->tunnel.erspan_ver;
  712|      0|        break;
  713|      0|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (713:5): [True: 0, False: 54.9k]
  ------------------
  714|      0|        value->be32 = htonl(flow->tunnel.erspan_idx);
  715|      0|        break;
  716|      0|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (716:5): [True: 0, False: 54.9k]
  ------------------
  717|      0|        value->u8 = flow->tunnel.erspan_dir;
  718|      0|        break;
  719|      0|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (719:5): [True: 0, False: 54.9k]
  ------------------
  720|      0|        value->u8 = flow->tunnel.erspan_hwid;
  721|      0|        break;
  722|      0|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (722:5): [True: 0, False: 54.9k]
  ------------------
  723|      0|        value->u8 = flow->tunnel.gtpu_flags;
  724|      0|        break;
  725|      0|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (725:5): [True: 0, False: 54.9k]
  ------------------
  726|      0|        value->u8 = flow->tunnel.gtpu_msgtype;
  727|      0|        break;
  728|  25.3k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|    492|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 94, False: 54.8k]
  |  |  |  Branch (2110:29): [True: 398, False: 54.5k]
  |  |  ------------------
  |  | 2111|  1.20k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 118, False: 54.8k]
  |  |  |  Branch (2111:29): [True: 590, False: 54.3k]
  |  |  ------------------
  |  | 2112|  1.60k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 6, False: 54.9k]
  |  |  |  Branch (2112:29): [True: 396, False: 54.5k]
  |  |  ------------------
  |  | 2113|  1.84k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 120, False: 54.8k]
  |  |  |  Branch (2113:29): [True: 118, False: 54.8k]
  |  |  ------------------
  |  | 2114|  1.87k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 10, False: 54.9k]
  |  |  |  Branch (2114:29): [True: 20, False: 54.9k]
  |  |  ------------------
  |  | 2115|  2.04k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 18, False: 54.9k]
  |  |  |  Branch (2115:30): [True: 152, False: 54.8k]
  |  |  ------------------
  |  | 2116|  2.25k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 30, False: 54.9k]
  |  |  |  Branch (2116:30): [True: 180, False: 54.8k]
  |  |  ------------------
  |  | 2117|  2.35k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 74, False: 54.9k]
  |  |  |  Branch (2117:30): [True: 34, False: 54.9k]
  |  |  ------------------
  |  | 2118|  2.71k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 310, False: 54.6k]
  |  |  |  Branch (2118:30): [True: 42, False: 54.9k]
  |  |  ------------------
  |  | 2119|  3.69k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 626, False: 54.3k]
  |  |  |  Branch (2119:30): [True: 362, False: 54.6k]
  |  |  ------------------
  |  | 2120|  4.15k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 94, False: 54.8k]
  |  |  |  Branch (2120:30): [True: 362, False: 54.6k]
  |  |  ------------------
  |  | 2121|  5.06k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 882, False: 54.1k]
  |  |  |  Branch (2121:30): [True: 24, False: 54.9k]
  |  |  ------------------
  |  | 2122|  10.0k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 876, False: 54.1k]
  |  |  |  Branch (2122:30): [True: 4.06k, False: 50.9k]
  |  |  ------------------
  |  | 2123|  10.8k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 34, False: 54.9k]
  |  |  |  Branch (2123:30): [True: 802, False: 54.1k]
  |  |  ------------------
  |  | 2124|  11.5k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 400, False: 54.5k]
  |  |  |  Branch (2124:30): [True: 310, False: 54.6k]
  |  |  ------------------
  |  | 2125|  12.4k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 640, False: 54.3k]
  |  |  |  Branch (2125:30): [True: 260, False: 54.7k]
  |  |  ------------------
  |  | 2126|  12.7k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 210, False: 54.7k]
  |  |  |  Branch (2126:30): [True: 78, False: 54.9k]
  |  |  ------------------
  |  | 2127|  13.6k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 498, False: 54.4k]
  |  |  |  Branch (2127:30): [True: 370, False: 54.6k]
  |  |  ------------------
  |  | 2128|  15.1k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 1.54k, False: 53.4k]
  |  |  |  Branch (2128:30): [True: 14, False: 54.9k]
  |  |  ------------------
  |  | 2129|  15.2k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 30, False: 54.9k]
  |  |  |  Branch (2129:30): [True: 16, False: 54.9k]
  |  |  ------------------
  |  | 2130|  15.5k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 310, False: 54.6k]
  |  |  |  Branch (2130:30): [True: 18, False: 54.9k]
  |  |  ------------------
  |  | 2131|  17.2k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 1.58k, False: 53.3k]
  |  |  |  Branch (2131:30): [True: 76, False: 54.9k]
  |  |  ------------------
  |  | 2132|  18.9k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 650, False: 54.3k]
  |  |  |  Branch (2132:30): [True: 1.12k, False: 53.8k]
  |  |  ------------------
  |  | 2133|  19.7k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 96, False: 54.8k]
  |  |  |  Branch (2133:30): [True: 708, False: 54.2k]
  |  |  ------------------
  |  | 2134|  19.8k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 14, False: 54.9k]
  |  |  |  Branch (2134:30): [True: 44, False: 54.9k]
  |  |  ------------------
  |  | 2135|  21.5k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.58k, False: 53.4k]
  |  |  |  Branch (2135:30): [True: 104, False: 54.8k]
  |  |  ------------------
  |  | 2136|  22.3k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 342, False: 54.6k]
  |  |  |  Branch (2136:30): [True: 530, False: 54.4k]
  |  |  ------------------
  |  | 2137|  22.4k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 8, False: 54.9k]
  |  |  |  Branch (2137:30): [True: 18, False: 54.9k]
  |  |  ------------------
  |  | 2138|  23.7k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 260, False: 54.7k]
  |  |  |  Branch (2138:30): [True: 1.02k, False: 53.9k]
  |  |  ------------------
  |  | 2139|  24.0k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 274, False: 54.7k]
  |  |  |  Branch (2139:30): [True: 72, False: 54.9k]
  |  |  ------------------
  |  | 2140|  24.6k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 342, False: 54.6k]
  |  |  |  Branch (2140:30): [True: 292, False: 54.6k]
  |  |  ------------------
  |  | 2141|  25.3k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 64, False: 54.9k]
  |  |  ------------------
  ------------------
  729|  25.3k|        tun_metadata_read(&flow->tunnel, mf, value);
  730|  25.3k|        break;
  731|       |
  732|     30|    case MFF_METADATA:
  ------------------
  |  Branch (732:5): [True: 30, False: 54.9k]
  ------------------
  733|     30|        value->be64 = flow->metadata;
  734|     30|        break;
  735|       |
  736|     68|    case MFF_IN_PORT:
  ------------------
  |  Branch (736:5): [True: 68, False: 54.9k]
  ------------------
  737|     68|        value->be16 = htons(ofp_to_u16(flow->in_port.ofp_port));
  738|     68|        break;
  739|  3.25k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (739:5): [True: 3.25k, False: 51.7k]
  ------------------
  740|  3.25k|        value->be32 = ofputil_port_to_ofp11(flow->in_port.ofp_port);
  741|  3.25k|        break;
  742|  1.48k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (742:5): [True: 1.48k, False: 53.4k]
  ------------------
  743|  1.48k|        value->be32 = ofputil_port_to_ofp11(flow->actset_output);
  744|  1.48k|        break;
  745|       |
  746|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (746:5): [True: 0, False: 54.9k]
  ------------------
  747|      0|        value->be32 = htonl(flow->skb_priority);
  748|      0|        break;
  749|       |
  750|     66|    case MFF_PKT_MARK:
  ------------------
  |  Branch (750:5): [True: 66, False: 54.9k]
  ------------------
  751|     66|        value->be32 = htonl(flow->pkt_mark);
  752|     66|        break;
  753|       |
  754|  2.83k|    case MFF_CT_STATE:
  ------------------
  |  Branch (754:5): [True: 2.83k, False: 52.1k]
  ------------------
  755|  2.83k|        value->be32 = htonl(flow->ct_state);
  756|  2.83k|        break;
  757|       |
  758|    274|    case MFF_CT_ZONE:
  ------------------
  |  Branch (758:5): [True: 274, False: 54.7k]
  ------------------
  759|    274|        value->be16 = htons(flow->ct_zone);
  760|    274|        break;
  761|       |
  762|  1.63k|    case MFF_CT_MARK:
  ------------------
  |  Branch (762:5): [True: 1.63k, False: 53.3k]
  ------------------
  763|  1.63k|        value->be32 = htonl(flow->ct_mark);
  764|  1.63k|        break;
  765|       |
  766|      6|    case MFF_CT_LABEL:
  ------------------
  |  Branch (766:5): [True: 6, False: 54.9k]
  ------------------
  767|      6|        value->be128 = hton128(flow->ct_label);
  768|      6|        break;
  769|       |
  770|    492|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (770:5): [True: 492, False: 54.4k]
  ------------------
  771|    492|        value->u8 = flow->ct_nw_proto;
  772|    492|        break;
  773|       |
  774|      2|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (774:5): [True: 2, False: 54.9k]
  ------------------
  775|      2|        value->be32 = flow->ct_nw_src;
  776|      2|        break;
  777|       |
  778|      6|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (778:5): [True: 6, False: 54.9k]
  ------------------
  779|      6|        value->be32 = flow->ct_nw_dst;
  780|      6|        break;
  781|       |
  782|      6|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (782:5): [True: 6, False: 54.9k]
  ------------------
  783|      6|        value->ipv6 = flow->ct_ipv6_src;
  784|      6|        break;
  785|       |
  786|    468|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (786:5): [True: 468, False: 54.5k]
  ------------------
  787|    468|        value->ipv6 = flow->ct_ipv6_dst;
  788|    468|        break;
  789|       |
  790|    278|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (790:5): [True: 278, False: 54.7k]
  ------------------
  791|    278|        value->be16 = flow->ct_tp_src;
  792|    278|        break;
  793|       |
  794|  1.36k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (794:5): [True: 1.36k, False: 53.6k]
  ------------------
  795|  1.36k|        value->be16 = flow->ct_tp_dst;
  796|  1.36k|        break;
  797|       |
  798|  4.78k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.41k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 760, False: 54.2k]
  |  |  |  Branch (2065:20): [True: 34, False: 54.9k]
  |  |  |  Branch (2065:35): [True: 614, False: 54.3k]
  |  |  |  Branch (2065:50): [True: 8, False: 54.9k]
  |  |  ------------------
  |  | 2066|  2.00k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 206, False: 54.7k]
  |  |  |  Branch (2066:20): [True: 6, False: 54.9k]
  |  |  |  Branch (2066:35): [True: 356, False: 54.6k]
  |  |  |  Branch (2066:50): [True: 16, False: 54.9k]
  |  |  ------------------
  |  | 2067|  4.11k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 570, False: 54.4k]
  |  |  |  Branch (2067:20): [True: 1.19k, False: 53.7k]
  |  |  |  Branch (2067:35): [True: 334, False: 54.6k]
  |  |  |  Branch (2067:51): [True: 14, False: 54.9k]
  |  |  ------------------
  |  | 2068|  4.78k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 414, False: 54.5k]
  |  |  |  Branch (2068:21): [True: 190, False: 54.7k]
  |  |  |  Branch (2068:37): [True: 30, False: 54.9k]
  |  |  |  Branch (2068:53): [True: 36, False: 54.9k]
  |  |  ------------------
  |  | 2069|  4.78k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 0, False: 54.9k]
  |  |  |  Branch (2069:21): [True: 0, False: 54.9k]
  |  |  |  Branch (2069:37): [True: 0, False: 54.9k]
  |  |  |  Branch (2069:53): [True: 0, False: 54.9k]
  |  |  ------------------
  |  | 2070|  4.78k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 0, False: 54.9k]
  |  |  |  Branch (2070:21): [True: 0, False: 54.9k]
  |  |  |  Branch (2070:37): [True: 0, False: 54.9k]
  |  |  |  Branch (2070:53): [True: 0, False: 54.9k]
  |  |  ------------------
  |  | 2071|  4.78k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 0, False: 54.9k]
  |  |  |  Branch (2071:21): [True: 0, False: 54.9k]
  |  |  |  Branch (2071:37): [True: 0, False: 54.9k]
  |  |  |  Branch (2071:53): [True: 0, False: 54.9k]
  |  |  ------------------
  |  | 2072|  4.78k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 0, False: 54.9k]
  |  |  |  Branch (2072:21): [True: 0, False: 54.9k]
  |  |  |  Branch (2072:37): [True: 0, False: 54.9k]
  |  |  ------------------
  ------------------
  799|  4.78k|        value->be32 = htonl(flow->regs[mf->id - MFF_REG0]);
  800|  4.78k|        break;
  801|       |
  802|  3.00k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.38k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 8, False: 54.9k]
  |  |  |  Branch (2081:21): [True: 1.35k, False: 53.6k]
  |  |  |  Branch (2081:37): [True: 22, False: 54.9k]
  |  |  |  Branch (2081:53): [True: 6, False: 54.9k]
  |  |  ------------------
  |  | 2082|  2.81k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 470, False: 54.5k]
  |  |  |  Branch (2082:21): [True: 162, False: 54.8k]
  |  |  |  Branch (2082:37): [True: 700, False: 54.2k]
  |  |  |  Branch (2082:53): [True: 92, False: 54.8k]
  |  |  ------------------
  |  | 2083|  2.91k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 6, False: 54.9k]
  |  |  |  Branch (2083:21): [True: 20, False: 54.9k]
  |  |  |  Branch (2083:37): [True: 62, False: 54.9k]
  |  |  |  Branch (2083:54): [True: 14, False: 54.9k]
  |  |  ------------------
  |  | 2084|  3.00k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 6, False: 54.9k]
  |  |  |  Branch (2084:22): [True: 6, False: 54.9k]
  |  |  |  Branch (2084:39): [True: 62, False: 54.9k]
  |  |  ------------------
  ------------------
  803|  3.00k|        value->be64 = htonll(flow_get_xreg(flow, mf->id - MFF_XREG0));
  804|  3.00k|        break;
  805|       |
  806|    422|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|    422|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 6, False: 54.9k]
  |  |  |  Branch (2093:22): [True: 14, False: 54.9k]
  |  |  |  Branch (2093:39): [True: 14, False: 54.9k]
  |  |  |  Branch (2093:56): [True: 388, False: 54.5k]
  |  |  ------------------
  |  | 2094|    422|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 54.9k]
  |  |  |  Branch (2094:22): [True: 0, False: 54.9k]
  |  |  |  Branch (2094:39): [True: 0, False: 54.9k]
  |  |  ------------------
  ------------------
  807|    422|        value->be128 = hton128(flow_get_xxreg(flow, mf->id - MFF_XXREG0));
  808|    422|        break;
  809|       |
  810|      6|    case MFF_ETH_SRC:
  ------------------
  |  Branch (810:5): [True: 6, False: 54.9k]
  ------------------
  811|      6|        value->mac = flow->dl_src;
  812|      6|        break;
  813|       |
  814|      6|    case MFF_ETH_DST:
  ------------------
  |  Branch (814:5): [True: 6, False: 54.9k]
  ------------------
  815|      6|        value->mac = flow->dl_dst;
  816|      6|        break;
  817|       |
  818|     20|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (818:5): [True: 20, False: 54.9k]
  ------------------
  819|     20|        value->be16 = flow->dl_type;
  820|     20|        break;
  821|       |
  822|    244|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (822:5): [True: 244, False: 54.7k]
  ------------------
  823|    244|        value->be16 = flow->vlans[0].tci;
  824|    244|        break;
  825|       |
  826|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (826:5): [True: 0, False: 54.9k]
  ------------------
  827|      0|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK);
  828|      0|        break;
  829|      2|    case MFF_VLAN_VID:
  ------------------
  |  Branch (829:5): [True: 2, False: 54.9k]
  ------------------
  830|      2|        value->be16 = flow->vlans[0].tci & htons(VLAN_VID_MASK | VLAN_CFI);
  831|      2|        break;
  832|       |
  833|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (833:5): [True: 0, False: 54.9k]
  ------------------
  834|      0|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (834:5): [True: 0, False: 54.9k]
  ------------------
  835|      0|        value->u8 = vlan_tci_to_pcp(flow->vlans[0].tci);
  836|      0|        break;
  837|       |
  838|      0|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (838:5): [True: 0, False: 54.9k]
  ------------------
  839|      0|        value->be32 = htonl(mpls_lse_to_label(flow->mpls_lse[0]));
  840|      0|        break;
  841|       |
  842|      0|    case MFF_MPLS_TC:
  ------------------
  |  Branch (842:5): [True: 0, False: 54.9k]
  ------------------
  843|      0|        value->u8 = mpls_lse_to_tc(flow->mpls_lse[0]);
  844|      0|        break;
  845|       |
  846|      0|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (846:5): [True: 0, False: 54.9k]
  ------------------
  847|      0|        value->u8 = mpls_lse_to_bos(flow->mpls_lse[0]);
  848|      0|        break;
  849|       |
  850|      0|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (850:5): [True: 0, False: 54.9k]
  ------------------
  851|      0|        value->u8 = mpls_lse_to_ttl(flow->mpls_lse[0]);
  852|      0|        break;
  853|       |
  854|      0|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (854:5): [True: 0, False: 54.9k]
  ------------------
  855|      0|        value->be32 = flow->nw_src;
  856|      0|        break;
  857|       |
  858|      0|    case MFF_IPV4_DST:
  ------------------
  |  Branch (858:5): [True: 0, False: 54.9k]
  ------------------
  859|      0|        value->be32 = flow->nw_dst;
  860|      0|        break;
  861|       |
  862|      0|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (862:5): [True: 0, False: 54.9k]
  ------------------
  863|      0|        value->ipv6 = flow->ipv6_src;
  864|      0|        break;
  865|       |
  866|      0|    case MFF_IPV6_DST:
  ------------------
  |  Branch (866:5): [True: 0, False: 54.9k]
  ------------------
  867|      0|        value->ipv6 = flow->ipv6_dst;
  868|      0|        break;
  869|       |
  870|      0|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (870:5): [True: 0, False: 54.9k]
  ------------------
  871|      0|        value->be32 = flow->ipv6_label;
  872|      0|        break;
  873|       |
  874|      0|    case MFF_IP_PROTO:
  ------------------
  |  Branch (874:5): [True: 0, False: 54.9k]
  ------------------
  875|      0|        value->u8 = flow->nw_proto;
  876|      0|        break;
  877|       |
  878|      0|    case MFF_IP_DSCP:
  ------------------
  |  Branch (878:5): [True: 0, False: 54.9k]
  ------------------
  879|      0|        value->u8 = flow->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|      0|#define IP_DSCP_MASK 0xfc
  ------------------
  880|      0|        break;
  881|       |
  882|      0|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (882:5): [True: 0, False: 54.9k]
  ------------------
  883|      0|        value->u8 = flow->nw_tos >> 2;
  884|      0|        break;
  885|       |
  886|      0|    case MFF_IP_ECN:
  ------------------
  |  Branch (886:5): [True: 0, False: 54.9k]
  ------------------
  887|      0|        value->u8 = flow->nw_tos & IP_ECN_MASK;
  ------------------
  |  |  722|      0|#define IP_ECN_MASK 0x03
  ------------------
  888|      0|        break;
  889|       |
  890|      0|    case MFF_IP_TTL:
  ------------------
  |  Branch (890:5): [True: 0, False: 54.9k]
  ------------------
  891|      0|        value->u8 = flow->nw_ttl;
  892|      0|        break;
  893|       |
  894|      0|    case MFF_IP_FRAG:
  ------------------
  |  Branch (894:5): [True: 0, False: 54.9k]
  ------------------
  895|      0|        value->u8 = flow->nw_frag;
  896|      0|        break;
  897|       |
  898|      0|    case MFF_ARP_OP:
  ------------------
  |  Branch (898:5): [True: 0, False: 54.9k]
  ------------------
  899|      0|        value->be16 = htons(flow->nw_proto);
  900|      0|        break;
  901|       |
  902|      0|    case MFF_ARP_SPA:
  ------------------
  |  Branch (902:5): [True: 0, False: 54.9k]
  ------------------
  903|      0|        value->be32 = flow->nw_src;
  904|      0|        break;
  905|       |
  906|      0|    case MFF_ARP_TPA:
  ------------------
  |  Branch (906:5): [True: 0, False: 54.9k]
  ------------------
  907|      0|        value->be32 = flow->nw_dst;
  908|      0|        break;
  909|       |
  910|      0|    case MFF_ARP_SHA:
  ------------------
  |  Branch (910:5): [True: 0, False: 54.9k]
  ------------------
  911|      0|    case MFF_ND_SLL:
  ------------------
  |  Branch (911:5): [True: 0, False: 54.9k]
  ------------------
  912|      0|        value->mac = flow->arp_sha;
  913|      0|        break;
  914|       |
  915|      0|    case MFF_ARP_THA:
  ------------------
  |  Branch (915:5): [True: 0, False: 54.9k]
  ------------------
  916|      0|    case MFF_ND_TLL:
  ------------------
  |  Branch (916:5): [True: 0, False: 54.9k]
  ------------------
  917|      0|        value->mac = flow->arp_tha;
  918|      0|        break;
  919|       |
  920|      0|    case MFF_TCP_SRC:
  ------------------
  |  Branch (920:5): [True: 0, False: 54.9k]
  ------------------
  921|      0|    case MFF_UDP_SRC:
  ------------------
  |  Branch (921:5): [True: 0, False: 54.9k]
  ------------------
  922|      0|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (922:5): [True: 0, False: 54.9k]
  ------------------
  923|      0|        value->be16 = flow->tp_src;
  924|      0|        break;
  925|       |
  926|      0|    case MFF_TCP_DST:
  ------------------
  |  Branch (926:5): [True: 0, False: 54.9k]
  ------------------
  927|      0|    case MFF_UDP_DST:
  ------------------
  |  Branch (927:5): [True: 0, False: 54.9k]
  ------------------
  928|      0|    case MFF_SCTP_DST:
  ------------------
  |  Branch (928:5): [True: 0, False: 54.9k]
  ------------------
  929|      0|        value->be16 = flow->tp_dst;
  930|      0|        break;
  931|       |
  932|      0|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (932:5): [True: 0, False: 54.9k]
  ------------------
  933|      0|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (933:5): [True: 0, False: 54.9k]
  ------------------
  934|      0|        value->be16 = flow->tcp_flags;
  935|      0|        break;
  936|       |
  937|      0|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (937:5): [True: 0, False: 54.9k]
  ------------------
  938|      0|        value->be32 = flow->igmp_group_ip4;
  939|      0|        break;
  940|       |
  941|      0|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (941:5): [True: 0, False: 54.9k]
  ------------------
  942|      0|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (942:5): [True: 0, False: 54.9k]
  ------------------
  943|      0|        value->u8 = ntohs(flow->tp_src);
  944|      0|        break;
  945|       |
  946|      0|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (946:5): [True: 0, False: 54.9k]
  ------------------
  947|      0|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (947:5): [True: 0, False: 54.9k]
  ------------------
  948|      0|        value->u8 = ntohs(flow->tp_dst);
  949|      0|        break;
  950|       |
  951|      0|    case MFF_ND_TARGET:
  ------------------
  |  Branch (951:5): [True: 0, False: 54.9k]
  ------------------
  952|      0|        value->ipv6 = flow->nd_target;
  953|      0|        break;
  954|       |
  955|      0|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (955:5): [True: 0, False: 54.9k]
  ------------------
  956|      0|        value->u8 = flow->nsh.flags;
  957|      0|        break;
  958|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (958:5): [True: 0, False: 54.9k]
  ------------------
  959|      0|        value->u8 = flow->nsh.ttl;
  960|      0|        break;
  961|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (961:5): [True: 0, False: 54.9k]
  ------------------
  962|      0|        value->u8 = flow->nsh.mdtype;
  963|      0|        break;
  964|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (964:5): [True: 0, False: 54.9k]
  ------------------
  965|      0|        value->u8 = flow->nsh.np;
  966|      0|        break;
  967|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (967:5): [True: 0, False: 54.9k]
  ------------------
  968|      0|        value->be32 = nsh_path_hdr_to_spi(flow->nsh.path_hdr);
  969|      0|        if (value->be32 == htonl(NSH_SPI_MASK >> NSH_SPI_SHIFT)) {
  ------------------
  |  Branch (969:13): [True: 0, False: 0]
  ------------------
  970|      0|            value->be32 = OVS_BE32_MAX;
  ------------------
  |  |   43|      0|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  971|      0|        }
  972|      0|        break;
  973|      0|    case MFF_NSH_SI:
  ------------------
  |  Branch (973:5): [True: 0, False: 54.9k]
  ------------------
  974|      0|        value->u8 = nsh_path_hdr_to_si(flow->nsh.path_hdr);
  975|      0|        break;
  976|      0|    case MFF_NSH_C1:
  ------------------
  |  Branch (976:5): [True: 0, False: 54.9k]
  ------------------
  977|      0|    case MFF_NSH_C2:
  ------------------
  |  Branch (977:5): [True: 0, False: 54.9k]
  ------------------
  978|      0|    case MFF_NSH_C3:
  ------------------
  |  Branch (978:5): [True: 0, False: 54.9k]
  ------------------
  979|      0|    case MFF_NSH_C4:
  ------------------
  |  Branch (979:5): [True: 0, False: 54.9k]
  ------------------
  980|      0|        value->be32 = flow->nsh.context[mf->id - MFF_NSH_C1];
  981|      0|        break;
  982|       |
  983|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (983:5): [True: 0, False: 54.9k]
  ------------------
  984|      0|    default:
  ------------------
  |  Branch (984:5): [True: 0, False: 54.9k]
  ------------------
  985|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  986|  54.9k|    }
  987|  54.9k|}
mf_set_value:
  999|  78.9k|{
 1000|  78.9k|    if (err_str) {
  ------------------
  |  Branch (1000:9): [True: 75.3k, False: 3.63k]
  ------------------
 1001|  75.3k|        *err_str = NULL;
 1002|  75.3k|    }
 1003|       |
 1004|  78.9k|    switch (mf->id) {
 1005|     38|    case MFF_DP_HASH:
  ------------------
  |  Branch (1005:5): [True: 38, False: 78.9k]
  ------------------
 1006|     38|        match_set_dp_hash(match, ntohl(value->be32));
 1007|     38|        break;
 1008|    302|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (1008:5): [True: 302, False: 78.6k]
  ------------------
 1009|    302|        match_set_recirc_id(match, ntohl(value->be32));
 1010|    302|        break;
 1011|  12.3k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (1011:5): [True: 12.3k, False: 66.6k]
  ------------------
 1012|  12.3k|        match_set_packet_type(match, value->be32);
 1013|  12.3k|        break;
 1014|     37|    case MFF_CONJ_ID:
  ------------------
  |  Branch (1014:5): [True: 37, False: 78.9k]
  ------------------
 1015|     37|        match_set_conj_id(match, ntohl(value->be32));
 1016|     37|        break;
 1017|     98|    case MFF_TUN_ID:
  ------------------
  |  Branch (1017:5): [True: 98, False: 78.8k]
  ------------------
 1018|     98|        match_set_tun_id(match, value->be64);
 1019|     98|        break;
 1020|    272|    case MFF_TUN_SRC:
  ------------------
  |  Branch (1020:5): [True: 272, False: 78.6k]
  ------------------
 1021|    272|        match_set_tun_src(match, value->be32);
 1022|    272|        break;
 1023|     21|    case MFF_TUN_DST:
  ------------------
  |  Branch (1023:5): [True: 21, False: 78.9k]
  ------------------
 1024|     21|        match_set_tun_dst(match, value->be32);
 1025|     21|        break;
 1026|    103|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (1026:5): [True: 103, False: 78.8k]
  ------------------
 1027|    103|        match_set_tun_ipv6_src(match, &value->ipv6);
 1028|    103|        break;
 1029|     66|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (1029:5): [True: 66, False: 78.9k]
  ------------------
 1030|     66|        match_set_tun_ipv6_dst(match, &value->ipv6);
 1031|     66|        break;
 1032|    135|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (1032:5): [True: 135, False: 78.8k]
  ------------------
 1033|    135|        match_set_tun_flags(match, ntohs(value->be16));
 1034|    135|        break;
 1035|    121|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (1035:5): [True: 121, False: 78.8k]
  ------------------
 1036|    121|         match_set_tun_gbp_id(match, value->be16);
 1037|    121|         break;
 1038|     78|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (1038:5): [True: 78, False: 78.8k]
  ------------------
 1039|     78|         match_set_tun_gbp_flags(match, value->u8);
 1040|     78|         break;
 1041|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (1041:5): [True: 0, False: 78.9k]
  ------------------
 1042|      0|        match_set_tun_tos(match, value->u8);
 1043|      0|        break;
 1044|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (1044:5): [True: 0, False: 78.9k]
  ------------------
 1045|      0|        match_set_tun_ttl(match, value->u8);
 1046|      0|        break;
 1047|    220|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (1047:5): [True: 220, False: 78.7k]
  ------------------
 1048|    220|        match_set_tun_erspan_ver(match, value->u8);
 1049|    220|        break;
 1050|    161|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (1050:5): [True: 161, False: 78.8k]
  ------------------
 1051|    161|        match_set_tun_erspan_idx(match, ntohl(value->be32));
 1052|    161|        break;
 1053|    144|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (1053:5): [True: 144, False: 78.8k]
  ------------------
 1054|    144|        match_set_tun_erspan_dir(match, value->u8);
 1055|    144|        break;
 1056|    287|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (1056:5): [True: 287, False: 78.6k]
  ------------------
 1057|    287|        match_set_tun_erspan_hwid(match, value->u8);
 1058|    287|        break;
 1059|    321|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (1059:5): [True: 321, False: 78.6k]
  ------------------
 1060|    321|        match_set_tun_gtpu_flags(match, value->u8);
 1061|    321|        break;
 1062|     36|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (1062:5): [True: 36, False: 78.9k]
  ------------------
 1063|     36|        match_set_tun_gtpu_msgtype(match, value->u8);
 1064|     36|        break;
 1065|  38.1k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  1.35k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 124, False: 78.8k]
  |  |  |  Branch (2110:29): [True: 1.22k, False: 77.7k]
  |  |  ------------------
  |  | 2111|  2.86k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.03k, False: 77.9k]
  |  |  |  Branch (2111:29): [True: 476, False: 78.4k]
  |  |  ------------------
  |  | 2112|  4.06k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 800, False: 78.1k]
  |  |  |  Branch (2112:29): [True: 399, False: 78.5k]
  |  |  ------------------
  |  | 2113|  5.15k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 849, False: 78.1k]
  |  |  |  Branch (2113:29): [True: 246, False: 78.7k]
  |  |  ------------------
  |  | 2114|  6.09k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 564, False: 78.4k]
  |  |  |  Branch (2114:29): [True: 375, False: 78.5k]
  |  |  ------------------
  |  | 2115|  6.45k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 288, False: 78.6k]
  |  |  |  Branch (2115:30): [True: 73, False: 78.8k]
  |  |  ------------------
  |  | 2116|  10.1k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 2.80k, False: 76.1k]
  |  |  |  Branch (2116:30): [True: 894, False: 78.0k]
  |  |  ------------------
  |  | 2117|  11.8k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 990, False: 77.9k]
  |  |  |  Branch (2117:30): [True: 667, False: 78.3k]
  |  |  ------------------
  |  | 2118|  12.5k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 389, False: 78.5k]
  |  |  |  Branch (2118:30): [True: 353, False: 78.6k]
  |  |  ------------------
  |  | 2119|  16.4k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 3.76k, False: 75.2k]
  |  |  |  Branch (2119:30): [True: 178, False: 78.7k]
  |  |  ------------------
  |  | 2120|  18.3k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 327, False: 78.6k]
  |  |  |  Branch (2120:30): [True: 1.53k, False: 77.4k]
  |  |  ------------------
  |  | 2121|  20.3k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.57k, False: 77.3k]
  |  |  |  Branch (2121:30): [True: 471, False: 78.4k]
  |  |  ------------------
  |  | 2122|  20.9k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 174, False: 78.7k]
  |  |  |  Branch (2122:30): [True: 391, False: 78.5k]
  |  |  ------------------
  |  | 2123|  21.7k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 419, False: 78.5k]
  |  |  |  Branch (2123:30): [True: 384, False: 78.5k]
  |  |  ------------------
  |  | 2124|  21.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 74, False: 78.8k]
  |  |  |  Branch (2124:30): [True: 154, False: 78.8k]
  |  |  ------------------
  |  | 2125|  23.9k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 915, False: 78.0k]
  |  |  |  Branch (2125:30): [True: 1.02k, False: 77.9k]
  |  |  ------------------
  |  | 2126|  24.6k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 346, False: 78.6k]
  |  |  |  Branch (2126:30): [True: 329, False: 78.6k]
  |  |  ------------------
  |  | 2127|  26.0k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 871, False: 78.0k]
  |  |  |  Branch (2127:30): [True: 609, False: 78.3k]
  |  |  ------------------
  |  | 2128|  26.4k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 152, False: 78.8k]
  |  |  |  Branch (2128:30): [True: 206, False: 78.7k]
  |  |  ------------------
  |  | 2129|  26.9k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 275, False: 78.6k]
  |  |  |  Branch (2129:30): [True: 228, False: 78.7k]
  |  |  ------------------
  |  | 2130|  27.8k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 316, False: 78.6k]
  |  |  |  Branch (2130:30): [True: 550, False: 78.4k]
  |  |  ------------------
  |  | 2131|  28.2k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 128, False: 78.8k]
  |  |  |  Branch (2131:30): [True: 346, False: 78.6k]
  |  |  ------------------
  |  | 2132|  28.9k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 139, False: 78.8k]
  |  |  |  Branch (2132:30): [True: 557, False: 78.4k]
  |  |  ------------------
  |  | 2133|  30.3k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.12k, False: 77.8k]
  |  |  |  Branch (2133:30): [True: 263, False: 78.7k]
  |  |  ------------------
  |  | 2134|  30.7k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 83, False: 78.8k]
  |  |  |  Branch (2134:30): [True: 272, False: 78.6k]
  |  |  ------------------
  |  | 2135|  32.3k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.29k, False: 77.6k]
  |  |  |  Branch (2135:30): [True: 364, False: 78.6k]
  |  |  ------------------
  |  | 2136|  34.4k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 448, False: 78.5k]
  |  |  |  Branch (2136:30): [True: 1.61k, False: 77.3k]
  |  |  ------------------
  |  | 2137|  35.7k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 350, False: 78.6k]
  |  |  |  Branch (2137:30): [True: 954, False: 78.0k]
  |  |  ------------------
  |  | 2138|  36.5k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 219, False: 78.7k]
  |  |  |  Branch (2138:30): [True: 562, False: 78.4k]
  |  |  ------------------
  |  | 2139|  36.9k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 395, False: 78.5k]
  |  |  |  Branch (2139:30): [True: 65, False: 78.9k]
  |  |  ------------------
  |  | 2140|  37.5k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 117, False: 78.8k]
  |  |  |  Branch (2140:30): [True: 444, False: 78.5k]
  |  |  ------------------
  |  | 2141|  38.1k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 453, False: 78.5k]
  |  |  ------------------
  ------------------
 1066|  38.1k|        tun_metadata_set_match(mf, value, NULL, match, err_str);
 1067|  38.1k|        break;
 1068|       |
 1069|     99|    case MFF_METADATA:
  ------------------
  |  Branch (1069:5): [True: 99, False: 78.8k]
  ------------------
 1070|     99|        match_set_metadata(match, value->be64);
 1071|     99|        break;
 1072|       |
 1073|  1.63k|    case MFF_IN_PORT:
  ------------------
  |  Branch (1073:5): [True: 1.63k, False: 77.3k]
  ------------------
 1074|  1.63k|        match_set_in_port(match, u16_to_ofp(ntohs(value->be16)));
 1075|  1.63k|        break;
 1076|       |
 1077|  1.23k|    case MFF_IN_PORT_OXM: {
  ------------------
  |  Branch (1077:5): [True: 1.23k, False: 77.7k]
  ------------------
 1078|  1.23k|        ofp_port_t port;
 1079|  1.23k|        ofputil_port_from_ofp11(value->be32, &port);
 1080|  1.23k|        match_set_in_port(match, port);
 1081|  1.23k|        break;
 1082|  1.35M|    }
 1083|    985|    case MFF_ACTSET_OUTPUT: {
  ------------------
  |  Branch (1083:5): [True: 985, False: 77.9k]
  ------------------
 1084|    985|        ofp_port_t port;
 1085|    985|        ofputil_port_from_ofp11(value->be32, &port);
 1086|    985|        match_set_actset_output(match, port);
 1087|    985|        break;
 1088|  1.35M|    }
 1089|       |
 1090|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (1090:5): [True: 0, False: 78.9k]
  ------------------
 1091|      0|        match_set_skb_priority(match, ntohl(value->be32));
 1092|      0|        break;
 1093|       |
 1094|     44|    case MFF_PKT_MARK:
  ------------------
  |  Branch (1094:5): [True: 44, False: 78.9k]
  ------------------
 1095|     44|        match_set_pkt_mark(match, ntohl(value->be32));
 1096|     44|        break;
 1097|       |
 1098|  1.59k|    case MFF_CT_STATE:
  ------------------
  |  Branch (1098:5): [True: 1.59k, False: 77.3k]
  ------------------
 1099|  1.59k|        match_set_ct_state(match, ntohl(value->be32));
 1100|  1.59k|        break;
 1101|       |
 1102|    243|    case MFF_CT_ZONE:
  ------------------
  |  Branch (1102:5): [True: 243, False: 78.7k]
  ------------------
 1103|    243|        match_set_ct_zone(match, ntohs(value->be16));
 1104|    243|        break;
 1105|       |
 1106|    100|    case MFF_CT_MARK:
  ------------------
  |  Branch (1106:5): [True: 100, False: 78.8k]
  ------------------
 1107|    100|        match_set_ct_mark(match, ntohl(value->be32));
 1108|    100|        break;
 1109|       |
 1110|     81|    case MFF_CT_LABEL:
  ------------------
  |  Branch (1110:5): [True: 81, False: 78.8k]
  ------------------
 1111|     81|        match_set_ct_label(match, ntoh128(value->be128));
 1112|     81|        break;
 1113|       |
 1114|    167|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (1114:5): [True: 167, False: 78.8k]
  ------------------
 1115|    167|        match_set_ct_nw_proto(match, value->u8);
 1116|    167|        break;
 1117|       |
 1118|    463|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (1118:5): [True: 463, False: 78.5k]
  ------------------
 1119|    463|        match_set_ct_nw_src(match, value->be32);
 1120|    463|        break;
 1121|       |
 1122|     26|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (1122:5): [True: 26, False: 78.9k]
  ------------------
 1123|     26|        match_set_ct_nw_dst(match, value->be32);
 1124|     26|        break;
 1125|       |
 1126|     37|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (1126:5): [True: 37, False: 78.9k]
  ------------------
 1127|     37|        match_set_ct_ipv6_src(match, &value->ipv6);
 1128|     37|        break;
 1129|       |
 1130|     10|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (1130:5): [True: 10, False: 78.9k]
  ------------------
 1131|     10|        match_set_ct_ipv6_dst(match, &value->ipv6);
 1132|     10|        break;
 1133|       |
 1134|    198|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (1134:5): [True: 198, False: 78.7k]
  ------------------
 1135|    198|        match_set_ct_tp_src(match, value->be16);
 1136|    198|        break;
 1137|       |
 1138|     66|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (1138:5): [True: 66, False: 78.9k]
  ------------------
 1139|     66|        match_set_ct_tp_dst(match, value->be16);
 1140|     66|        break;
 1141|       |
 1142|  4.15k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    961|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 209, False: 78.7k]
  |  |  |  Branch (2065:20): [True: 82, False: 78.8k]
  |  |  |  Branch (2065:35): [True: 467, False: 78.5k]
  |  |  |  Branch (2065:50): [True: 203, False: 78.7k]
  |  |  ------------------
  |  | 2066|  1.60k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 196, False: 78.7k]
  |  |  |  Branch (2066:20): [True: 227, False: 78.7k]
  |  |  |  Branch (2066:35): [True: 36, False: 78.9k]
  |  |  |  Branch (2066:50): [True: 185, False: 78.7k]
  |  |  ------------------
  |  | 2067|  2.78k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 207, False: 78.7k]
  |  |  |  Branch (2067:20): [True: 16, False: 78.9k]
  |  |  |  Branch (2067:35): [True: 107, False: 78.8k]
  |  |  |  Branch (2067:51): [True: 854, False: 78.1k]
  |  |  ------------------
  |  | 2068|  3.28k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 105, False: 78.8k]
  |  |  |  Branch (2068:21): [True: 35, False: 78.9k]
  |  |  |  Branch (2068:37): [True: 259, False: 78.7k]
  |  |  |  Branch (2068:53): [True: 97, False: 78.8k]
  |  |  ------------------
  |  | 2069|  3.49k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 66, False: 78.9k]
  |  |  |  Branch (2069:21): [True: 34, False: 78.9k]
  |  |  |  Branch (2069:37): [True: 71, False: 78.8k]
  |  |  |  Branch (2069:53): [True: 34, False: 78.9k]
  |  |  ------------------
  |  | 2070|  3.73k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 10, False: 78.9k]
  |  |  |  Branch (2070:21): [True: 40, False: 78.9k]
  |  |  |  Branch (2070:37): [True: 117, False: 78.8k]
  |  |  |  Branch (2070:53): [True: 82, False: 78.8k]
  |  |  ------------------
  |  | 2071|  3.99k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 10, False: 78.9k]
  |  |  |  Branch (2071:21): [True: 140, False: 78.8k]
  |  |  |  Branch (2071:37): [True: 70, False: 78.8k]
  |  |  |  Branch (2071:53): [True: 34, False: 78.9k]
  |  |  ------------------
  |  | 2072|  4.15k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 18, False: 78.9k]
  |  |  |  Branch (2072:21): [True: 68, False: 78.9k]
  |  |  |  Branch (2072:37): [True: 35, False: 78.9k]
  |  |  ------------------
  ------------------
 1143|  4.15k|        match_set_reg(match, mf->id - MFF_REG0, ntohl(value->be32));
 1144|  4.15k|        break;
 1145|       |
 1146|  2.35k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.17k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 105, False: 78.8k]
  |  |  |  Branch (2081:21): [True: 35, False: 78.9k]
  |  |  |  Branch (2081:37): [True: 616, False: 78.3k]
  |  |  |  Branch (2081:53): [True: 423, False: 78.5k]
  |  |  ------------------
  |  | 2082|  1.87k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 13, False: 78.9k]
  |  |  |  Branch (2082:21): [True: 450, False: 78.5k]
  |  |  |  Branch (2082:37): [True: 201, False: 78.7k]
  |  |  |  Branch (2082:53): [True: 36, False: 78.9k]
  |  |  ------------------
  |  | 2083|  2.17k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 68, False: 78.9k]
  |  |  |  Branch (2083:21): [True: 200, False: 78.7k]
  |  |  |  Branch (2083:37): [True: 19, False: 78.9k]
  |  |  |  Branch (2083:54): [True: 10, False: 78.9k]
  |  |  ------------------
  |  | 2084|  2.35k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 66, False: 78.9k]
  |  |  |  Branch (2084:22): [True: 40, False: 78.9k]
  |  |  |  Branch (2084:39): [True: 35, False: 78.9k]
  |  |  ------------------
  ------------------
 1147|  2.35k|        match_set_xreg(match, mf->id - MFF_XREG0, ntohll(value->be64));
 1148|  2.35k|        break;
 1149|       |
 1150|    431|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|    242|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 97, False: 78.8k]
  |  |  |  Branch (2093:22): [True: 40, False: 78.9k]
  |  |  |  Branch (2093:39): [True: 38, False: 78.9k]
  |  |  |  Branch (2093:56): [True: 67, False: 78.9k]
  |  |  ------------------
  |  | 2094|    431|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 78.9k]
  |  |  |  Branch (2094:22): [True: 10, False: 78.9k]
  |  |  |  Branch (2094:39): [True: 67, False: 78.9k]
  |  |  ------------------
  ------------------
 1151|    431|        match_set_xxreg(match, mf->id - MFF_XXREG0, ntoh128(value->be128));
 1152|    431|        break;
 1153|       |
 1154|    133|    case MFF_ETH_SRC:
  ------------------
  |  Branch (1154:5): [True: 133, False: 78.8k]
  ------------------
 1155|    133|        match_set_dl_src(match, value->mac);
 1156|    133|        break;
 1157|       |
 1158|    112|    case MFF_ETH_DST:
  ------------------
  |  Branch (1158:5): [True: 112, False: 78.8k]
  ------------------
 1159|    112|        match_set_dl_dst(match, value->mac);
 1160|    112|        break;
 1161|       |
 1162|    136|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (1162:5): [True: 136, False: 78.8k]
  ------------------
 1163|    136|        match_set_dl_type(match, value->be16);
 1164|    136|        break;
 1165|       |
 1166|    198|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (1166:5): [True: 198, False: 78.7k]
  ------------------
 1167|    198|        match_set_dl_tci(match, value->be16);
 1168|    198|        break;
 1169|       |
 1170|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (1170:5): [True: 0, False: 78.9k]
  ------------------
 1171|      0|        match_set_dl_vlan(match, value->be16, 0);
 1172|      0|        break;
 1173|    166|    case MFF_VLAN_VID:
  ------------------
  |  Branch (1173:5): [True: 166, False: 78.8k]
  ------------------
 1174|    166|        match_set_vlan_vid(match, value->be16);
 1175|    166|        break;
 1176|       |
 1177|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (1177:5): [True: 0, False: 78.9k]
  ------------------
 1178|    337|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (1178:5): [True: 337, False: 78.6k]
  ------------------
 1179|    337|        match_set_dl_vlan_pcp(match, value->u8, 0);
 1180|    337|        break;
 1181|       |
 1182|    108|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (1182:5): [True: 108, False: 78.8k]
  ------------------
 1183|    108|        match_set_mpls_label(match, 0, value->be32);
 1184|    108|        break;
 1185|       |
 1186|    174|    case MFF_MPLS_TC:
  ------------------
  |  Branch (1186:5): [True: 174, False: 78.7k]
  ------------------
 1187|    174|        match_set_mpls_tc(match, 0, value->u8);
 1188|    174|        break;
 1189|       |
 1190|    185|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (1190:5): [True: 185, False: 78.7k]
  ------------------
 1191|    185|        match_set_mpls_bos(match, 0, value->u8);
 1192|    185|        break;
 1193|       |
 1194|    118|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (1194:5): [True: 118, False: 78.8k]
  ------------------
 1195|    118|        match_set_mpls_ttl(match, 0, value->u8);
 1196|    118|        break;
 1197|       |
 1198|     80|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (1198:5): [True: 80, False: 78.8k]
  ------------------
 1199|     80|        match_set_nw_src(match, value->be32);
 1200|     80|        break;
 1201|       |
 1202|    547|    case MFF_IPV4_DST:
  ------------------
  |  Branch (1202:5): [True: 547, False: 78.4k]
  ------------------
 1203|    547|        match_set_nw_dst(match, value->be32);
 1204|    547|        break;
 1205|       |
 1206|     67|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (1206:5): [True: 67, False: 78.9k]
  ------------------
 1207|     67|        match_set_ipv6_src(match, &value->ipv6);
 1208|     67|        break;
 1209|       |
 1210|     20|    case MFF_IPV6_DST:
  ------------------
  |  Branch (1210:5): [True: 20, False: 78.9k]
  ------------------
 1211|     20|        match_set_ipv6_dst(match, &value->ipv6);
 1212|     20|        break;
 1213|       |
 1214|    205|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (1214:5): [True: 205, False: 78.7k]
  ------------------
 1215|    205|        match_set_ipv6_label(match, value->be32);
 1216|    205|        break;
 1217|       |
 1218|  1.74k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (1218:5): [True: 1.74k, False: 77.2k]
  ------------------
 1219|  1.74k|        match_set_nw_proto(match, value->u8);
 1220|  1.74k|        break;
 1221|       |
 1222|    140|    case MFF_IP_DSCP:
  ------------------
  |  Branch (1222:5): [True: 140, False: 78.8k]
  ------------------
 1223|    140|        match_set_nw_dscp(match, value->u8);
 1224|    140|        break;
 1225|       |
 1226|     41|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (1226:5): [True: 41, False: 78.9k]
  ------------------
 1227|     41|        match_set_nw_dscp(match, value->u8 << 2);
 1228|     41|        break;
 1229|       |
 1230|    182|    case MFF_IP_ECN:
  ------------------
  |  Branch (1230:5): [True: 182, False: 78.7k]
  ------------------
 1231|    182|        match_set_nw_ecn(match, value->u8);
 1232|    182|        break;
 1233|       |
 1234|    343|    case MFF_IP_TTL:
  ------------------
  |  Branch (1234:5): [True: 343, False: 78.6k]
  ------------------
 1235|    343|        match_set_nw_ttl(match, value->u8);
 1236|    343|        break;
 1237|       |
 1238|     41|    case MFF_IP_FRAG:
  ------------------
  |  Branch (1238:5): [True: 41, False: 78.9k]
  ------------------
 1239|     41|        match_set_nw_frag(match, value->u8);
 1240|     41|        break;
 1241|       |
 1242|     41|    case MFF_ARP_OP:
  ------------------
  |  Branch (1242:5): [True: 41, False: 78.9k]
  ------------------
 1243|     41|        match_set_nw_proto(match, ntohs(value->be16));
 1244|     41|        break;
 1245|       |
 1246|     36|    case MFF_ARP_SPA:
  ------------------
  |  Branch (1246:5): [True: 36, False: 78.9k]
  ------------------
 1247|     36|        match_set_nw_src(match, value->be32);
 1248|     36|        break;
 1249|       |
 1250|     38|    case MFF_ARP_TPA:
  ------------------
  |  Branch (1250:5): [True: 38, False: 78.9k]
  ------------------
 1251|     38|        match_set_nw_dst(match, value->be32);
 1252|     38|        break;
 1253|       |
 1254|     35|    case MFF_ARP_SHA:
  ------------------
  |  Branch (1254:5): [True: 35, False: 78.9k]
  ------------------
 1255|    144|    case MFF_ND_SLL:
  ------------------
  |  Branch (1255:5): [True: 109, False: 78.8k]
  ------------------
 1256|    144|        match_set_arp_sha(match, value->mac);
 1257|    144|        break;
 1258|       |
 1259|     88|    case MFF_ARP_THA:
  ------------------
  |  Branch (1259:5): [True: 88, False: 78.8k]
  ------------------
 1260|    248|    case MFF_ND_TLL:
  ------------------
  |  Branch (1260:5): [True: 160, False: 78.8k]
  ------------------
 1261|    248|        match_set_arp_tha(match, value->mac);
 1262|    248|        break;
 1263|       |
 1264|    975|    case MFF_TCP_SRC:
  ------------------
  |  Branch (1264:5): [True: 975, False: 77.9k]
  ------------------
 1265|  1.13k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (1265:5): [True: 157, False: 78.8k]
  ------------------
 1266|  1.33k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (1266:5): [True: 204, False: 78.7k]
  ------------------
 1267|  1.33k|        match_set_tp_src(match, value->be16);
 1268|  1.33k|        break;
 1269|       |
 1270|     69|    case MFF_TCP_DST:
  ------------------
  |  Branch (1270:5): [True: 69, False: 78.9k]
  ------------------
 1271|    170|    case MFF_UDP_DST:
  ------------------
  |  Branch (1271:5): [True: 101, False: 78.8k]
  ------------------
 1272|    187|    case MFF_SCTP_DST:
  ------------------
  |  Branch (1272:5): [True: 17, False: 78.9k]
  ------------------
 1273|    187|        match_set_tp_dst(match, value->be16);
 1274|    187|        break;
 1275|       |
 1276|    135|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (1276:5): [True: 135, False: 78.8k]
  ------------------
 1277|    135|        match_set_tcp_flags(match, value->be16);
 1278|    135|        break;
 1279|       |
 1280|     70|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (1280:5): [True: 70, False: 78.8k]
  ------------------
 1281|    544|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (1281:5): [True: 474, False: 78.4k]
  ------------------
 1282|    544|        match_set_icmp_type(match, value->u8);
 1283|    544|        break;
 1284|       |
 1285|    201|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (1285:5): [True: 201, False: 78.7k]
  ------------------
 1286|    363|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (1286:5): [True: 162, False: 78.8k]
  ------------------
 1287|    363|        match_set_icmp_code(match, value->u8);
 1288|    363|        break;
 1289|       |
 1290|     17|    case MFF_ND_TARGET:
  ------------------
  |  Branch (1290:5): [True: 17, False: 78.9k]
  ------------------
 1291|     17|        match_set_nd_target(match, &value->ipv6);
 1292|     17|        break;
 1293|       |
 1294|    260|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (1294:5): [True: 260, False: 78.7k]
  ------------------
 1295|    260|        match_set_nd_reserved(match, value->be32);
 1296|    260|        break;
 1297|       |
 1298|    296|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (1298:5): [True: 296, False: 78.6k]
  ------------------
 1299|    296|        match_set_nd_options_type(match, value->u8);
 1300|    296|        break;
 1301|       |
 1302|    301|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (1302:5): [True: 301, False: 78.6k]
  ------------------
 1303|    301|        MATCH_SET_FIELD_UINT8(match, nsh.flags, value->u8);
  ------------------
  |  |   56|    301|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    301|    do {                                                      \
  |  |  |  |   51|    301|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    301|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1304|    301|        break;
 1305|    231|    case MFF_NSH_TTL:
  ------------------
  |  Branch (1305:5): [True: 231, False: 78.7k]
  ------------------
 1306|    231|        MATCH_SET_FIELD_UINT8(match, nsh.ttl, value->u8);
  ------------------
  |  |   56|    231|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|    231|    do {                                                      \
  |  |  |  |   51|    231|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|    231|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|    231|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 231]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1307|    231|        break;
 1308|     34|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (1308:5): [True: 34, False: 78.9k]
  ------------------
 1309|     34|        MATCH_SET_FIELD_UINT8(match, nsh.mdtype, value->u8);
  ------------------
  |  |   56|     34|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|     34|    do {                                                      \
  |  |  |  |   51|     34|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     34|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1310|     34|        break;
 1311|  2.19k|    case MFF_NSH_NP:
  ------------------
  |  Branch (1311:5): [True: 2.19k, False: 76.7k]
  ------------------
 1312|  2.19k|        MATCH_SET_FIELD_UINT8(match, nsh.np, value->u8);
  ------------------
  |  |   56|  2.19k|    MATCH_SET_FIELD_MASKED(match, field, value, UINT8_MAX)
  |  |  ------------------
  |  |  |  |   50|  2.19k|    do {                                                      \
  |  |  |  |   51|  2.19k|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|  2.19k|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|  2.19k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 2.19k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1313|  2.19k|        break;
 1314|     38|    case MFF_NSH_SPI:
  ------------------
  |  Branch (1314:5): [True: 38, False: 78.9k]
  ------------------
 1315|     38|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SPI_MASK);
 1316|     38|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, value->be32);
 1317|     38|        break;
 1318|    505|    case MFF_NSH_SI:
  ------------------
  |  Branch (1318:5): [True: 505, False: 78.4k]
  ------------------
 1319|    505|        match->wc.masks.nsh.path_hdr |= htonl(NSH_SI_MASK);
 1320|    505|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, value->u8);
 1321|    505|        break;
 1322|     19|    case MFF_NSH_C1:
  ------------------
  |  Branch (1322:5): [True: 19, False: 78.9k]
  ------------------
 1323|     29|    case MFF_NSH_C2:
  ------------------
  |  Branch (1323:5): [True: 10, False: 78.9k]
  ------------------
 1324|     39|    case MFF_NSH_C3:
  ------------------
  |  Branch (1324:5): [True: 10, False: 78.9k]
  ------------------
 1325|     74|    case MFF_NSH_C4:
  ------------------
  |  Branch (1325:5): [True: 35, False: 78.9k]
  ------------------
 1326|     74|        MATCH_SET_FIELD_BE32(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   59|     74|    MATCH_SET_FIELD_MASKED(match, field, value, OVS_BE32_MAX)
  |  |  ------------------
  |  |  |  |   50|     74|    do {                                                      \
  |  |  |  |   51|     74|        (match)->wc.masks.field = (msk);                      \
  |  |  |  |   52|     74|        (match)->flow.field = (value) & (msk);                \
  |  |  |  |   53|     74|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (53:14): [Folded, False: 74]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1327|     74|                             value->be32);
 1328|     74|        break;
 1329|       |
 1330|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (1330:5): [True: 0, False: 78.9k]
  ------------------
 1331|      0|    default:
  ------------------
  |  Branch (1331:5): [True: 0, False: 78.9k]
  ------------------
 1332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1333|  78.9k|    }
 1334|  78.9k|}
mf_field_len:
 1403|  86.1k|{
 1404|  86.1k|    int len, mask_len;
 1405|  86.1k|    bool is_masked = mask && !is_all_ones(mask, mf->n_bytes);
  ------------------
  |  Branch (1405:22): [True: 48.0k, False: 38.1k]
  |  Branch (1405:30): [True: 48.0k, False: 0]
  ------------------
 1406|       |
 1407|  86.1k|    len = field_len(mf, value);
 1408|  86.1k|    if (is_masked) {
  ------------------
  |  Branch (1408:9): [True: 48.0k, False: 38.1k]
  ------------------
 1409|  48.0k|        mask_len = field_len(mf, mask);
 1410|  48.0k|        len = MAX(len, mask_len);
  ------------------
  |  |   95|  48.0k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 0, False: 48.0k]
  |  |  ------------------
  ------------------
 1411|  48.0k|    }
 1412|       |
 1413|  86.1k|    if (is_masked_) {
  ------------------
  |  Branch (1413:9): [True: 86.1k, False: 0]
  ------------------
 1414|  86.1k|        *is_masked_ = is_masked;
 1415|  86.1k|    }
 1416|       |
 1417|  86.1k|    return len;
 1418|  86.1k|}
mf_is_tun_metadata:
 1897|  55.7k|{
 1898|  55.7k|    return mf->id >= MFF_TUN_METADATA0 &&
  ------------------
  |  Branch (1898:12): [True: 53.4k, False: 2.27k]
  ------------------
 1899|  53.4k|           mf->id < MFF_TUN_METADATA0 + TUN_METADATA_NUM_OPTS;
  ------------------
  |  |   26|   109k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  |  Branch (1899:12): [True: 32.0k, False: 21.4k]
  ------------------
 1900|  55.7k|}
mf_is_pipeline_field:
 2026|  86.6k|{
 2027|  86.6k|    switch (mf->id) {
 2028|    296|    case MFF_TUN_ID:
  ------------------
  |  Branch (2028:5): [True: 296, False: 86.3k]
  ------------------
 2029|    504|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2029:5): [True: 208, False: 86.4k]
  ------------------
 2030|    587|    case MFF_TUN_DST:
  ------------------
  |  Branch (2030:5): [True: 83, False: 86.5k]
  ------------------
 2031|  1.12k|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2031:5): [True: 535, False: 86.0k]
  ------------------
 2032|  1.59k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2032:5): [True: 473, False: 86.1k]
  ------------------
 2033|  1.74k|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2033:5): [True: 153, False: 86.4k]
  ------------------
 2034|  1.89k|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2034:5): [True: 151, False: 86.4k]
  ------------------
 2035|  2.62k|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2035:5): [True: 730, False: 85.8k]
  ------------------
 2036|  2.78k|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2036:5): [True: 156, False: 86.4k]
  ------------------
 2037|  2.79k|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2037:5): [True: 10, False: 86.6k]
  ------------------
 2038|  2.93k|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2038:5): [True: 144, False: 86.4k]
  ------------------
 2039|  3.05k|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2039:5): [True: 119, False: 86.4k]
  ------------------
 2040|  3.38k|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2040:5): [True: 327, False: 86.2k]
  ------------------
 2041|  3.44k|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2041:5): [True: 58, False: 86.5k]
  ------------------
 2042|  2.54M|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  7.80k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.40k, False: 85.2k]
  |  |  |  Branch (2110:29): [True: 2.95k, False: 83.6k]
  |  |  ------------------
  |  | 2111|  9.90k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 1.29k, False: 85.3k]
  |  |  |  Branch (2111:29): [True: 814, False: 85.7k]
  |  |  ------------------
  |  | 2112|  12.3k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 800, False: 85.8k]
  |  |  |  Branch (2112:29): [True: 1.63k, False: 84.9k]
  |  |  ------------------
  |  | 2113|  17.0k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 4.42k, False: 82.1k]
  |  |  |  Branch (2113:29): [True: 310, False: 86.3k]
  |  |  ------------------
  |  | 2114|  18.0k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 547, False: 86.0k]
  |  |  |  Branch (2114:29): [True: 376, False: 86.2k]
  |  |  ------------------
  |  | 2115|  18.3k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 293, False: 86.3k]
  |  |  |  Branch (2115:30): [True: 43, False: 86.5k]
  |  |  ------------------
  |  | 2116|  23.4k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 4.19k, False: 82.4k]
  |  |  |  Branch (2116:30): [True: 873, False: 85.7k]
  |  |  ------------------
  |  | 2117|  25.2k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 674, False: 85.9k]
  |  |  |  Branch (2117:30): [True: 1.13k, False: 85.4k]
  |  |  ------------------
  |  | 2118|  26.4k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 456, False: 86.1k]
  |  |  |  Branch (2118:30): [True: 810, False: 85.8k]
  |  |  ------------------
  |  | 2119|  33.7k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 6.15k, False: 80.4k]
  |  |  |  Branch (2119:30): [True: 1.10k, False: 85.5k]
  |  |  ------------------
  |  | 2120|  36.4k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 561, False: 86.0k]
  |  |  |  Branch (2120:30): [True: 2.12k, False: 84.4k]
  |  |  ------------------
  |  | 2121|  38.2k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 1.56k, False: 85.0k]
  |  |  |  Branch (2121:30): [True: 279, False: 86.3k]
  |  |  ------------------
  |  | 2122|  39.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 651, False: 85.9k]
  |  |  |  Branch (2122:30): [True: 341, False: 86.2k]
  |  |  ------------------
  |  | 2123|  40.2k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 575, False: 86.0k]
  |  |  |  Branch (2123:30): [True: 395, False: 86.2k]
  |  |  ------------------
  |  | 2124|  40.6k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 95, False: 86.5k]
  |  |  |  Branch (2124:30): [True: 331, False: 86.2k]
  |  |  ------------------
  |  | 2125|  42.7k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 918, False: 85.6k]
  |  |  |  Branch (2125:30): [True: 1.23k, False: 85.3k]
  |  |  ------------------
  |  | 2126|  45.3k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.42k, False: 85.1k]
  |  |  |  Branch (2126:30): [True: 1.10k, False: 85.5k]
  |  |  ------------------
  |  | 2127|  47.3k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 1.29k, False: 85.3k]
  |  |  |  Branch (2127:30): [True: 687, False: 85.9k]
  |  |  ------------------
  |  | 2128|  47.7k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 76, False: 86.5k]
  |  |  |  Branch (2128:30): [True: 374, False: 86.2k]
  |  |  ------------------
  |  | 2129|  49.1k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 521, False: 86.0k]
  |  |  |  Branch (2129:30): [True: 826, False: 85.7k]
  |  |  ------------------
  |  | 2130|  50.1k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 734, False: 85.8k]
  |  |  |  Branch (2130:30): [True: 347, False: 86.2k]
  |  |  ------------------
  |  | 2131|  50.9k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 176, False: 86.4k]
  |  |  |  Branch (2131:30): [True: 621, False: 85.9k]
  |  |  ------------------
  |  | 2132|  51.8k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 144, False: 86.4k]
  |  |  |  Branch (2132:30): [True: 679, False: 85.9k]
  |  |  ------------------
  |  | 2133|  53.0k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 1.03k, False: 85.5k]
  |  |  |  Branch (2133:30): [True: 212, False: 86.3k]
  |  |  ------------------
  |  | 2134|  53.9k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 342, False: 86.2k]
  |  |  |  Branch (2134:30): [True: 571, False: 86.0k]
  |  |  ------------------
  |  | 2135|  55.4k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 1.27k, False: 85.3k]
  |  |  |  Branch (2135:30): [True: 225, False: 86.3k]
  |  |  ------------------
  |  | 2136|  55.6k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 187, False: 86.4k]
  |  |  |  Branch (2136:30): [True: 36, False: 86.5k]
  |  |  ------------------
  |  | 2137|  56.8k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 388, False: 86.2k]
  |  |  |  Branch (2137:30): [True: 769, False: 85.8k]
  |  |  ------------------
  |  | 2138|  57.9k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 319, False: 86.2k]
  |  |  |  Branch (2138:30): [True: 767, False: 85.8k]
  |  |  ------------------
  |  | 2139|  58.8k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 882, False: 85.7k]
  |  |  |  Branch (2139:30): [True: 35, False: 86.5k]
  |  |  ------------------
  |  | 2140|  60.2k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 987, False: 85.6k]
  |  |  |  Branch (2140:30): [True: 456, False: 86.1k]
  |  |  ------------------
  |  | 2141|  60.7k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 127, False: 86.4k]
  |  |  ------------------
  ------------------
 2043|  2.54M|    case MFF_METADATA:
  ------------------
  |  Branch (2043:5): [True: 256, False: 86.3k]
  ------------------
 2044|  62.6k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2044:5): [True: 1.60k, False: 85.0k]
  ------------------
 2045|  62.7k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2045:5): [True: 80, False: 86.5k]
  ------------------
 2046|  2.17M|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  63.8k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 553, False: 86.0k]
  |  |  |  Branch (2065:20): [True: 21, False: 86.5k]
  |  |  |  Branch (2065:35): [True: 458, False: 86.1k]
  |  |  |  Branch (2065:50): [True: 87, False: 86.5k]
  |  |  ------------------
  |  | 2066|  65.3k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 153, False: 86.4k]
  |  |  |  Branch (2066:20): [True: 948, False: 85.6k]
  |  |  |  Branch (2066:35): [True: 351, False: 86.2k]
  |  |  |  Branch (2066:50): [True: 69, False: 86.5k]
  |  |  ------------------
  |  | 2067|  66.7k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 201, False: 86.4k]
  |  |  |  Branch (2067:20): [True: 258, False: 86.3k]
  |  |  |  Branch (2067:35): [True: 99, False: 86.5k]
  |  |  |  Branch (2067:51): [True: 810, False: 85.8k]
  |  |  ------------------
  |  | 2068|  69.7k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 567, False: 86.0k]
  |  |  |  Branch (2068:21): [True: 271, False: 86.3k]
  |  |  |  Branch (2068:37): [True: 742, False: 85.8k]
  |  |  |  Branch (2068:53): [True: 1.40k, False: 85.2k]
  |  |  ------------------
  |  | 2069|  69.9k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 36, False: 86.5k]
  |  |  |  Branch (2069:21): [True: 99, False: 86.5k]
  |  |  |  Branch (2069:37): [True: 45, False: 86.5k]
  |  |  |  Branch (2069:53): [True: 29, False: 86.5k]
  |  |  ------------------
  |  | 2070|  70.3k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 31, False: 86.5k]
  |  |  |  Branch (2070:21): [True: 348, False: 86.2k]
  |  |  |  Branch (2070:37): [True: 20, False: 86.5k]
  |  |  |  Branch (2070:53): [True: 49, False: 86.5k]
  |  |  ------------------
  |  | 2071|  70.6k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 94, False: 86.5k]
  |  |  |  Branch (2071:21): [True: 25, False: 86.5k]
  |  |  |  Branch (2071:37): [True: 16, False: 86.5k]
  |  |  |  Branch (2071:53): [True: 112, False: 86.4k]
  |  |  ------------------
  |  | 2072|  70.8k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 147, False: 86.4k]
  |  |  |  Branch (2072:21): [True: 26, False: 86.5k]
  |  |  |  Branch (2072:37): [True: 19, False: 86.5k]
  |  |  ------------------
  ------------------
 2047|  2.17M|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  72.4k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 237, False: 86.3k]
  |  |  |  Branch (2081:21): [True: 100, False: 86.5k]
  |  |  |  Branch (2081:37): [True: 132, False: 86.4k]
  |  |  |  Branch (2081:53): [True: 1.15k, False: 85.4k]
  |  |  ------------------
  |  | 2082|  73.1k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 19, False: 86.5k]
  |  |  |  Branch (2082:21): [True: 156, False: 86.4k]
  |  |  |  Branch (2082:37): [True: 208, False: 86.4k]
  |  |  |  Branch (2082:53): [True: 303, False: 86.3k]
  |  |  ------------------
  |  | 2083|  73.5k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 94, False: 86.5k]
  |  |  |  Branch (2083:21): [True: 209, False: 86.4k]
  |  |  |  Branch (2083:37): [True: 20, False: 86.5k]
  |  |  |  Branch (2083:54): [True: 20, False: 86.5k]
  |  |  ------------------
  |  | 2084|  73.9k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 291, False: 86.3k]
  |  |  |  Branch (2084:22): [True: 54, False: 86.5k]
  |  |  |  Branch (2084:39): [True: 34, False: 86.5k]
  |  |  ------------------
  ------------------
 2048|  1.16M|    CASE_MFF_XXREGS:
  ------------------
  |  | 2093|  76.9k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 137, False: 86.4k]
  |  |  |  Branch (2093:22): [True: 39, False: 86.5k]
  |  |  |  Branch (2093:39): [True: 2.15k, False: 84.4k]
  |  |  |  Branch (2093:56): [True: 688, False: 85.9k]
  |  |  ------------------
  |  | 2094|  77.1k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 18, False: 86.5k]
  |  |  |  Branch (2094:22): [True: 10, False: 86.6k]
  |  |  |  Branch (2094:39): [True: 67, False: 86.5k]
  |  |  ------------------
  ------------------
 2049|   609k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2049:5): [True: 195, False: 86.4k]
  ------------------
 2050|  77.3k|        return true;
 2051|       |
 2052|     37|    case MFF_DP_HASH:
  ------------------
  |  Branch (2052:5): [True: 37, False: 86.5k]
  ------------------
 2053|    282|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2053:5): [True: 245, False: 86.3k]
  ------------------
 2054|    477|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2054:5): [True: 195, False: 86.4k]
  ------------------
 2055|    477|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2055:5): [True: 0, False: 86.6k]
  ------------------
 2056|    477|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2056:5): [True: 0, False: 86.6k]
  ------------------
 2057|    543|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2057:5): [True: 66, False: 86.5k]
  ------------------
 2058|    543|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2058:5): [True: 0, False: 86.6k]
  ------------------
 2059|    546|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2059:5): [True: 3, False: 86.6k]
  ------------------
 2060|    977|    case MFF_CT_STATE:
  ------------------
  |  Branch (2060:5): [True: 431, False: 86.1k]
  ------------------
 2061|  1.18k|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2061:5): [True: 209, False: 86.4k]
  ------------------
 2062|  1.20k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2062:5): [True: 18, False: 86.5k]
  ------------------
 2063|  1.33k|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2063:5): [True: 130, False: 86.4k]
  ------------------
 2064|  1.53k|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2064:5): [True: 197, False: 86.4k]
  ------------------
 2065|  1.60k|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2065:5): [True: 69, False: 86.5k]
  ------------------
 2066|  1.67k|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2066:5): [True: 74, False: 86.5k]
  ------------------
 2067|  1.68k|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2067:5): [True: 6, False: 86.6k]
  ------------------
 2068|  1.68k|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2068:5): [True: 6, False: 86.6k]
  ------------------
 2069|  1.75k|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2069:5): [True: 66, False: 86.5k]
  ------------------
 2070|  1.78k|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2070:5): [True: 34, False: 86.5k]
  ------------------
 2071|  1.87k|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2071:5): [True: 93, False: 86.5k]
  ------------------
 2072|  1.94k|    case MFF_ETH_DST:
  ------------------
  |  Branch (2072:5): [True: 66, False: 86.5k]
  ------------------
 2073|  2.02k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2073:5): [True: 76, False: 86.5k]
  ------------------
 2074|  2.15k|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2074:5): [True: 138, False: 86.4k]
  ------------------
 2075|  2.15k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2075:5): [True: 0, False: 86.6k]
  ------------------
 2076|  2.35k|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2076:5): [True: 196, False: 86.4k]
  ------------------
 2077|  2.35k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2077:5): [True: 0, False: 86.6k]
  ------------------
 2078|  2.36k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2078:5): [True: 10, False: 86.6k]
  ------------------
 2079|  2.39k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2079:5): [True: 34, False: 86.5k]
  ------------------
 2080|  2.46k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2080:5): [True: 67, False: 86.5k]
  ------------------
 2081|  2.53k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2081:5): [True: 70, False: 86.5k]
  ------------------
 2082|  3.37k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2082:5): [True: 842, False: 85.7k]
  ------------------
 2083|  3.39k|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2083:5): [True: 18, False: 86.5k]
  ------------------
 2084|  3.40k|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2084:5): [True: 10, False: 86.6k]
  ------------------
 2085|  3.60k|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2085:5): [True: 194, False: 86.4k]
  ------------------
 2086|  3.77k|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2086:5): [True: 179, False: 86.4k]
  ------------------
 2087|  3.84k|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2087:5): [True: 67, False: 86.5k]
  ------------------
 2088|  4.04k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2088:5): [True: 194, False: 86.4k]
  ------------------
 2089|  4.07k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2089:5): [True: 34, False: 86.5k]
  ------------------
 2090|  4.10k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2090:5): [True: 34, False: 86.5k]
  ------------------
 2091|  4.37k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2091:5): [True: 263, False: 86.3k]
  ------------------
 2092|  4.43k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2092:5): [True: 67, False: 86.5k]
  ------------------
 2093|  4.65k|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2093:5): [True: 213, False: 86.3k]
  ------------------
 2094|  4.68k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2094:5): [True: 34, False: 86.5k]
  ------------------
 2095|  4.89k|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2095:5): [True: 209, False: 86.4k]
  ------------------
 2096|  5.02k|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2096:5): [True: 128, False: 86.4k]
  ------------------
 2097|  5.04k|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2097:5): [True: 18, False: 86.5k]
  ------------------
 2098|  5.07k|    case MFF_ARP_THA:
  ------------------
  |  Branch (2098:5): [True: 36, False: 86.5k]
  ------------------
 2099|  5.17k|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2099:5): [True: 98, False: 86.5k]
  ------------------
 2100|  5.24k|    case MFF_TCP_DST:
  ------------------
  |  Branch (2100:5): [True: 72, False: 86.5k]
  ------------------
 2101|  5.31k|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2101:5): [True: 66, False: 86.5k]
  ------------------
 2102|  5.43k|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2102:5): [True: 124, False: 86.4k]
  ------------------
 2103|  5.65k|    case MFF_UDP_DST:
  ------------------
  |  Branch (2103:5): [True: 221, False: 86.3k]
  ------------------
 2104|  5.72k|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2104:5): [True: 67, False: 86.5k]
  ------------------
 2105|  5.79k|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2105:5): [True: 66, False: 86.5k]
  ------------------
 2106|  5.83k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2106:5): [True: 47, False: 86.5k]
  ------------------
 2107|  5.87k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2107:5): [True: 34, False: 86.5k]
  ------------------
 2108|  5.93k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2108:5): [True: 66, False: 86.5k]
  ------------------
 2109|  5.97k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2109:5): [True: 38, False: 86.5k]
  ------------------
 2110|  6.01k|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2110:5): [True: 38, False: 86.5k]
  ------------------
 2111|  6.08k|    case MFF_ND_SLL:
  ------------------
  |  Branch (2111:5): [True: 68, False: 86.5k]
  ------------------
 2112|  6.14k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2112:5): [True: 66, False: 86.5k]
  ------------------
 2113|  6.21k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2113:5): [True: 70, False: 86.5k]
  ------------------
 2114|  6.30k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2114:5): [True: 88, False: 86.5k]
  ------------------
 2115|  6.34k|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2115:5): [True: 35, False: 86.5k]
  ------------------
 2116|  6.53k|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2116:5): [True: 195, False: 86.4k]
  ------------------
 2117|  6.57k|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2117:5): [True: 35, False: 86.5k]
  ------------------
 2118|  6.63k|    case MFF_NSH_NP:
  ------------------
  |  Branch (2118:5): [True: 67, False: 86.5k]
  ------------------
 2119|  7.12k|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2119:5): [True: 484, False: 86.1k]
  ------------------
 2120|  7.13k|    case MFF_NSH_SI:
  ------------------
  |  Branch (2120:5): [True: 18, False: 86.5k]
  ------------------
 2121|  7.33k|    case MFF_NSH_C1:
  ------------------
  |  Branch (2121:5): [True: 196, False: 86.4k]
  ------------------
 2122|  9.11k|    case MFF_NSH_C2:
  ------------------
  |  Branch (2122:5): [True: 1.77k, False: 84.8k]
  ------------------
 2123|  9.17k|    case MFF_NSH_C3:
  ------------------
  |  Branch (2123:5): [True: 66, False: 86.5k]
  ------------------
 2124|  9.25k|    case MFF_NSH_C4:
  ------------------
  |  Branch (2124:5): [True: 72, False: 86.5k]
  ------------------
 2125|  9.25k|        return false;
 2126|       |
 2127|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2127:5): [True: 0, False: 86.6k]
  ------------------
 2128|      0|    default:
  ------------------
  |  Branch (2128:5): [True: 0, False: 86.6k]
  ------------------
 2129|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2130|  86.6k|    }
 2131|  86.6k|}
mf_set_wild:
 2162|  23.7k|{
 2163|  23.7k|    if (err_str) {
  ------------------
  |  Branch (2163:9): [True: 23.7k, False: 0]
  ------------------
 2164|  23.7k|        *err_str = NULL;
 2165|  23.7k|    }
 2166|       |
 2167|  23.7k|    switch (mf->id) {
 2168|    269|    case MFF_DP_HASH:
  ------------------
  |  Branch (2168:5): [True: 269, False: 23.4k]
  ------------------
 2169|    269|        match->flow.dp_hash = 0;
 2170|    269|        match->wc.masks.dp_hash = 0;
 2171|    269|        break;
 2172|     83|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2172:5): [True: 83, False: 23.6k]
  ------------------
 2173|     83|        match->flow.recirc_id = 0;
 2174|     83|        match->wc.masks.recirc_id = 0;
 2175|     83|        break;
 2176|     36|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2176:5): [True: 36, False: 23.6k]
  ------------------
 2177|     36|        match->flow.packet_type = 0;
 2178|     36|        match->wc.masks.packet_type = 0;
 2179|     36|        break;
 2180|     10|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2180:5): [True: 10, False: 23.7k]
  ------------------
 2181|     10|        match->flow.conj_id = 0;
 2182|     10|        match->wc.masks.conj_id = 0;
 2183|     10|        break;
 2184|    168|    case MFF_TUN_ID:
  ------------------
  |  Branch (2184:5): [True: 168, False: 23.5k]
  ------------------
 2185|    168|        match_set_tun_id_masked(match, htonll(0), htonll(0));
 2186|    168|        break;
 2187|     26|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2187:5): [True: 26, False: 23.7k]
  ------------------
 2188|     26|        match_set_tun_src_masked(match, htonl(0), htonl(0));
 2189|     26|        break;
 2190|     75|    case MFF_TUN_DST:
  ------------------
  |  Branch (2190:5): [True: 75, False: 23.6k]
  ------------------
 2191|     75|        match_set_tun_dst_masked(match, htonl(0), htonl(0));
 2192|     75|        break;
 2193|     71|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2193:5): [True: 71, False: 23.6k]
  ------------------
 2194|     71|        memset(&match->wc.masks.tunnel.ipv6_src, 0,
 2195|     71|               sizeof match->wc.masks.tunnel.ipv6_src);
 2196|     71|        memset(&match->flow.tunnel.ipv6_src, 0,
 2197|     71|               sizeof match->flow.tunnel.ipv6_src);
 2198|     71|        break;
 2199|     23|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2199:5): [True: 23, False: 23.7k]
  ------------------
 2200|     23|        memset(&match->wc.masks.tunnel.ipv6_dst, 0,
 2201|     23|               sizeof match->wc.masks.tunnel.ipv6_dst);
 2202|     23|        memset(&match->flow.tunnel.ipv6_dst, 0,
 2203|     23|               sizeof match->flow.tunnel.ipv6_dst);
 2204|     23|        break;
 2205|     23|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2205:5): [True: 23, False: 23.7k]
  ------------------
 2206|     23|        match_set_tun_flags_masked(match, 0, 0);
 2207|     23|        break;
 2208|     48|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2208:5): [True: 48, False: 23.6k]
  ------------------
 2209|     48|        match_set_tun_gbp_id_masked(match, 0, 0);
 2210|     48|        break;
 2211|    581|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2211:5): [True: 581, False: 23.1k]
  ------------------
 2212|    581|        match_set_tun_gbp_flags_masked(match, 0, 0);
 2213|    581|        break;
 2214|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2214:5): [True: 0, False: 23.7k]
  ------------------
 2215|      0|        match_set_tun_tos_masked(match, 0, 0);
 2216|      0|        break;
 2217|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2217:5): [True: 0, False: 23.7k]
  ------------------
 2218|      0|        match_set_tun_ttl_masked(match, 0, 0);
 2219|      0|        break;
 2220|     93|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2220:5): [True: 93, False: 23.6k]
  ------------------
 2221|     93|        match_set_tun_erspan_ver_masked(match, 0, 0);
 2222|     93|        break;
 2223|     14|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2223:5): [True: 14, False: 23.7k]
  ------------------
 2224|     14|        match_set_tun_erspan_idx_masked(match, 0, 0);
 2225|     14|        break;
 2226|     66|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2226:5): [True: 66, False: 23.6k]
  ------------------
 2227|     66|        match_set_tun_erspan_dir_masked(match, 0, 0);
 2228|     66|        break;
 2229|     34|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2229:5): [True: 34, False: 23.7k]
  ------------------
 2230|     34|        match_set_tun_erspan_hwid_masked(match, 0, 0);
 2231|     34|        break;
 2232|    128|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2232:5): [True: 128, False: 23.6k]
  ------------------
 2233|    128|        match_set_tun_gtpu_flags_masked(match, 0, 0);
 2234|    128|        break;
 2235|    530|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2235:5): [True: 530, False: 23.2k]
  ------------------
 2236|    530|        match_set_tun_gtpu_msgtype_masked(match, 0, 0);
 2237|    530|        break;
 2238|      0|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|      0|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2110:29): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2111|      0|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2111:29): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2112|      0|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2112:29): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2113|      0|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2113:29): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2114|      0|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2114:29): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2115|      0|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2115:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2116|      0|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2116:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2117|      0|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2117:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2118|      0|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2118:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2119|      0|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2119:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2120|      0|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2120:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2121|      0|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2121:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2122|      0|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2122:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2123|      0|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2123:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2124|      0|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2124:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2125|      0|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2125:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2126|      0|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2126:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2127|      0|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2127:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2128|      0|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2128:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2129|      0|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2129:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2130|      0|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2130:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2131|      0|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2131:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2132|      0|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2132:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2133|      0|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2133:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2134|      0|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2134:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2135|      0|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2135:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2136|      0|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2136:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2137|      0|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2137:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2138|      0|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2138:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2139|      0|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2139:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2140|      0|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2140:30): [True: 0, False: 23.7k]
  |  |  ------------------
  |  | 2141|      0|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 0, False: 23.7k]
  |  |  ------------------
  ------------------
 2239|      0|        tun_metadata_set_match(mf, NULL, NULL, match, err_str);
 2240|      0|        break;
 2241|       |
 2242|    189|    case MFF_METADATA:
  ------------------
  |  Branch (2242:5): [True: 189, False: 23.5k]
  ------------------
 2243|    189|        match_set_metadata_masked(match, htonll(0), htonll(0));
 2244|    189|        break;
 2245|       |
 2246|     79|    case MFF_IN_PORT:
  ------------------
  |  Branch (2246:5): [True: 79, False: 23.6k]
  ------------------
 2247|    128|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2247:5): [True: 49, False: 23.6k]
  ------------------
 2248|    128|        match->flow.in_port.ofp_port = 0;
 2249|    128|        match->wc.masks.in_port.ofp_port = 0;
 2250|    128|        break;
 2251|     82|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2251:5): [True: 82, False: 23.6k]
  ------------------
 2252|     82|        match->flow.actset_output = 0;
 2253|     82|        match->wc.masks.actset_output = 0;
 2254|     82|        break;
 2255|       |
 2256|      0|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2256:5): [True: 0, False: 23.7k]
  ------------------
 2257|      0|        match->flow.skb_priority = 0;
 2258|      0|        match->wc.masks.skb_priority = 0;
 2259|      0|        break;
 2260|       |
 2261|     80|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2261:5): [True: 80, False: 23.6k]
  ------------------
 2262|     80|        match->flow.pkt_mark = 0;
 2263|     80|        match->wc.masks.pkt_mark = 0;
 2264|     80|        break;
 2265|       |
 2266|    231|    case MFF_CT_STATE:
  ------------------
  |  Branch (2266:5): [True: 231, False: 23.5k]
  ------------------
 2267|    231|        match->flow.ct_state = 0;
 2268|    231|        match->wc.masks.ct_state = 0;
 2269|    231|        break;
 2270|       |
 2271|     10|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2271:5): [True: 10, False: 23.7k]
  ------------------
 2272|     10|        match->flow.ct_zone = 0;
 2273|     10|        match->wc.masks.ct_zone = 0;
 2274|     10|        break;
 2275|       |
 2276|      6|    case MFF_CT_MARK:
  ------------------
  |  Branch (2276:5): [True: 6, False: 23.7k]
  ------------------
 2277|      6|        match->flow.ct_mark = 0;
 2278|      6|        match->wc.masks.ct_mark = 0;
 2279|      6|        break;
 2280|       |
 2281|     69|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2281:5): [True: 69, False: 23.6k]
  ------------------
 2282|     69|        memset(&match->flow.ct_label, 0, sizeof(match->flow.ct_label));
 2283|     69|        memset(&match->wc.masks.ct_label, 0, sizeof(match->wc.masks.ct_label));
 2284|     69|        break;
 2285|       |
 2286|     18|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2286:5): [True: 18, False: 23.7k]
  ------------------
 2287|     18|        match->flow.ct_nw_proto = 0;
 2288|     18|        match->wc.masks.ct_nw_proto = 0;
 2289|     18|        break;
 2290|       |
 2291|    130|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2291:5): [True: 130, False: 23.6k]
  ------------------
 2292|    130|        match->flow.ct_nw_src = 0;
 2293|    130|        match->wc.masks.ct_nw_src = 0;
 2294|    130|        break;
 2295|       |
 2296|     18|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2296:5): [True: 18, False: 23.7k]
  ------------------
 2297|     18|        match->flow.ct_nw_dst = 0;
 2298|     18|        match->wc.masks.ct_nw_dst = 0;
 2299|     18|        break;
 2300|       |
 2301|     11|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2301:5): [True: 11, False: 23.7k]
  ------------------
 2302|     11|        memset(&match->flow.ct_ipv6_src, 0, sizeof(match->flow.ct_ipv6_src));
 2303|     11|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_src);
  ------------------
  |  |  205|     11|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2304|     11|        break;
 2305|       |
 2306|     75|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2306:5): [True: 75, False: 23.6k]
  ------------------
 2307|     75|        memset(&match->flow.ct_ipv6_dst, 0, sizeof(match->flow.ct_ipv6_dst));
 2308|     75|        WC_UNMASK_FIELD(&match->wc, ct_ipv6_dst);
  ------------------
  |  |  205|     75|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
 2309|     75|        break;
 2310|       |
 2311|    194|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2311:5): [True: 194, False: 23.5k]
  ------------------
 2312|    194|        match->flow.ct_tp_src = 0;
 2313|    194|        match->wc.masks.ct_tp_src = 0;
 2314|    194|        break;
 2315|       |
 2316|     98|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2316:5): [True: 98, False: 23.6k]
  ------------------
 2317|     98|        match->flow.ct_tp_dst = 0;
 2318|     98|        match->wc.masks.ct_tp_dst = 0;
 2319|     98|        break;
 2320|       |
 2321|  4.73k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|    243|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 39, False: 23.6k]
  |  |  |  Branch (2065:20): [True: 69, False: 23.6k]
  |  |  |  Branch (2065:35): [True: 11, False: 23.7k]
  |  |  |  Branch (2065:50): [True: 124, False: 23.6k]
  |  |  ------------------
  |  | 2066|    847|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 36, False: 23.6k]
  |  |  |  Branch (2066:20): [True: 326, False: 23.4k]
  |  |  |  Branch (2066:35): [True: 224, False: 23.5k]
  |  |  |  Branch (2066:50): [True: 18, False: 23.7k]
  |  |  ------------------
  |  | 2067|  2.37k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 670, False: 23.0k]
  |  |  |  Branch (2067:20): [True: 246, False: 23.4k]
  |  |  |  Branch (2067:35): [True: 585, False: 23.1k]
  |  |  |  Branch (2067:51): [True: 22, False: 23.7k]
  |  |  ------------------
  |  | 2068|  3.98k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 192, False: 23.5k]
  |  |  |  Branch (2068:21): [True: 138, False: 23.5k]
  |  |  |  Branch (2068:37): [True: 376, False: 23.3k]
  |  |  |  Branch (2068:53): [True: 904, False: 22.8k]
  |  |  ------------------
  |  | 2069|  4.09k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 11, False: 23.7k]
  |  |  |  Branch (2069:21): [True: 61, False: 23.6k]
  |  |  |  Branch (2069:37): [True: 34, False: 23.7k]
  |  |  |  Branch (2069:53): [True: 10, False: 23.7k]
  |  |  ------------------
  |  | 2070|  4.30k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 10, False: 23.7k]
  |  |  |  Branch (2070:21): [True: 142, False: 23.5k]
  |  |  |  Branch (2070:37): [True: 19, False: 23.7k]
  |  |  |  Branch (2070:53): [True: 35, False: 23.7k]
  |  |  ------------------
  |  | 2071|  4.61k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 10, False: 23.7k]
  |  |  |  Branch (2071:21): [True: 209, False: 23.5k]
  |  |  |  Branch (2071:37): [True: 12, False: 23.7k]
  |  |  |  Branch (2071:53): [True: 80, False: 23.6k]
  |  |  ------------------
  |  | 2072|  4.73k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 73, False: 23.6k]
  |  |  |  Branch (2072:21): [True: 18, False: 23.7k]
  |  |  |  Branch (2072:37): [True: 11, False: 23.7k]
  |  |  ------------------
  ------------------
 2322|  4.73k|        match_set_reg_masked(match, mf->id - MFF_REG0, 0, 0);
 2323|  4.73k|        break;
 2324|       |
 2325|  1.50k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|    904|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 110, False: 23.6k]
  |  |  |  Branch (2081:21): [True: 66, False: 23.6k]
  |  |  |  Branch (2081:37): [True: 45, False: 23.6k]
  |  |  |  Branch (2081:53): [True: 683, False: 23.0k]
  |  |  ------------------
  |  | 2082|  1.20k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 69, False: 23.6k]
  |  |  |  Branch (2082:21): [True: 107, False: 23.6k]
  |  |  |  Branch (2082:37): [True: 27, False: 23.7k]
  |  |  |  Branch (2082:53): [True: 95, False: 23.6k]
  |  |  ------------------
  |  | 2083|  1.29k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 66, False: 23.6k]
  |  |  |  Branch (2083:21): [True: 10, False: 23.7k]
  |  |  |  Branch (2083:37): [True: 10, False: 23.7k]
  |  |  |  Branch (2083:54): [True: 10, False: 23.7k]
  |  |  ------------------
  |  | 2084|  1.50k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 109, False: 23.6k]
  |  |  |  Branch (2084:22): [True: 8, False: 23.7k]
  |  |  |  Branch (2084:39): [True: 70, False: 23.6k]
  |  |  ------------------
  ------------------
 2326|  1.50k|        match_set_xreg_masked(match, mf->id - MFF_XREG0, 0, 0);
 2327|  1.50k|        break;
 2328|       |
 2329|  2.42k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  2.42k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 82, False: 23.6k]
  |  |  |  Branch (2093:22): [True: 67, False: 23.6k]
  |  |  |  Branch (2093:39): [True: 1.62k, False: 22.1k]
  |  |  |  Branch (2093:56): [True: 655, False: 23.0k]
  |  |  ------------------
  |  | 2094|  2.42k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 23.7k]
  |  |  |  Branch (2094:22): [True: 0, False: 23.7k]
  |  |  |  Branch (2094:39): [True: 0, False: 23.7k]
  |  |  ------------------
  ------------------
 2330|  2.42k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0, OVS_U128_ZERO,
  ------------------
  |  |  130|  2.42k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2331|  2.42k|                               OVS_U128_ZERO);
  ------------------
  |  |  130|  2.42k|#define OVS_U128_ZERO OVS_U128_MIN
  ------------------
 2332|  2.42k|        break;
 2333|  11.7k|    }
 2334|       |
 2335|     71|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2335:5): [True: 71, False: 23.6k]
  ------------------
 2336|     71|        match->flow.dl_src = eth_addr_zero;
 2337|     71|        match->wc.masks.dl_src = eth_addr_zero;
 2338|     71|        break;
 2339|       |
 2340|     96|    case MFF_ETH_DST:
  ------------------
  |  Branch (2340:5): [True: 96, False: 23.6k]
  ------------------
 2341|     96|        match->flow.dl_dst = eth_addr_zero;
 2342|     96|        match->wc.masks.dl_dst = eth_addr_zero;
 2343|     96|        break;
 2344|       |
 2345|    121|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2345:5): [True: 121, False: 23.6k]
  ------------------
 2346|    121|        match->flow.dl_type = htons(0);
 2347|    121|        match->wc.masks.dl_type = htons(0);
 2348|    121|        break;
 2349|       |
 2350|     13|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2350:5): [True: 13, False: 23.7k]
  ------------------
 2351|     13|        match_set_dl_tci_masked(match, htons(0), htons(0));
 2352|     13|        break;
 2353|       |
 2354|      0|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2354:5): [True: 0, False: 23.7k]
  ------------------
 2355|    530|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2355:5): [True: 530, False: 23.2k]
  ------------------
 2356|    530|        match_set_any_vid(match);
 2357|    530|        break;
 2358|       |
 2359|      0|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2359:5): [True: 0, False: 23.7k]
  ------------------
 2360|    207|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2360:5): [True: 207, False: 23.5k]
  ------------------
 2361|    207|        match_set_any_pcp(match);
 2362|    207|        break;
 2363|       |
 2364|    861|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2364:5): [True: 861, False: 22.8k]
  ------------------
 2365|    861|        match_set_any_mpls_label(match, 0);
 2366|    861|        break;
 2367|       |
 2368|     34|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2368:5): [True: 34, False: 23.7k]
  ------------------
 2369|     34|        match_set_any_mpls_tc(match, 0);
 2370|     34|        break;
 2371|       |
 2372|     47|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2372:5): [True: 47, False: 23.6k]
  ------------------
 2373|     47|        match_set_any_mpls_bos(match, 0);
 2374|     47|        break;
 2375|       |
 2376|     25|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2376:5): [True: 25, False: 23.7k]
  ------------------
 2377|     25|        match_set_any_mpls_ttl(match, 0);
 2378|     25|        break;
 2379|       |
 2380|     19|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2380:5): [True: 19, False: 23.7k]
  ------------------
 2381|     55|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2381:5): [True: 36, False: 23.6k]
  ------------------
 2382|     55|        match_set_nw_src_masked(match, htonl(0), htonl(0));
 2383|     55|        break;
 2384|       |
 2385|     66|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2385:5): [True: 66, False: 23.6k]
  ------------------
 2386|    441|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2386:5): [True: 375, False: 23.3k]
  ------------------
 2387|    441|        match_set_nw_dst_masked(match, htonl(0), htonl(0));
 2388|    441|        break;
 2389|       |
 2390|    206|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2390:5): [True: 206, False: 23.5k]
  ------------------
 2391|    206|        memset(&match->wc.masks.ipv6_src, 0, sizeof match->wc.masks.ipv6_src);
 2392|    206|        memset(&match->flow.ipv6_src, 0, sizeof match->flow.ipv6_src);
 2393|    206|        break;
 2394|       |
 2395|     68|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2395:5): [True: 68, False: 23.6k]
  ------------------
 2396|     68|        memset(&match->wc.masks.ipv6_dst, 0, sizeof match->wc.masks.ipv6_dst);
 2397|     68|        memset(&match->flow.ipv6_dst, 0, sizeof match->flow.ipv6_dst);
 2398|     68|        break;
 2399|       |
 2400|     67|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2400:5): [True: 67, False: 23.6k]
  ------------------
 2401|     67|        match->wc.masks.ipv6_label = htonl(0);
 2402|     67|        match->flow.ipv6_label = htonl(0);
 2403|     67|        break;
 2404|       |
 2405|    385|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2405:5): [True: 385, False: 23.3k]
  ------------------
 2406|    385|        match->wc.masks.nw_proto = 0;
 2407|    385|        match->flow.nw_proto = 0;
 2408|    385|        break;
 2409|       |
 2410|     21|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2410:5): [True: 21, False: 23.7k]
  ------------------
 2411|    904|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2411:5): [True: 883, False: 22.8k]
  ------------------
 2412|    904|        match->wc.masks.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    904|#define IP_DSCP_MASK 0xfc
  ------------------
 2413|    904|        match->flow.nw_tos &= ~IP_DSCP_MASK;
  ------------------
  |  |  724|    904|#define IP_DSCP_MASK 0xfc
  ------------------
 2414|    904|        break;
 2415|       |
 2416|     18|    case MFF_IP_ECN:
  ------------------
  |  Branch (2416:5): [True: 18, False: 23.7k]
  ------------------
 2417|     18|        match->wc.masks.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     18|#define IP_ECN_MASK 0x03
  ------------------
 2418|     18|        match->flow.nw_tos &= ~IP_ECN_MASK;
  ------------------
  |  |  722|     18|#define IP_ECN_MASK 0x03
  ------------------
 2419|     18|        break;
 2420|       |
 2421|    104|    case MFF_IP_TTL:
  ------------------
  |  Branch (2421:5): [True: 104, False: 23.6k]
  ------------------
 2422|    104|        match->wc.masks.nw_ttl = 0;
 2423|    104|        match->flow.nw_ttl = 0;
 2424|    104|        break;
 2425|       |
 2426|     31|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2426:5): [True: 31, False: 23.7k]
  ------------------
 2427|     31|        match->wc.masks.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     31|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     31|#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|     31|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2428|     31|        match->flow.nw_frag &= ~FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|     31|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|     31|#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|     31|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2429|     31|        break;
 2430|       |
 2431|    213|    case MFF_ARP_OP:
  ------------------
  |  Branch (2431:5): [True: 213, False: 23.5k]
  ------------------
 2432|    213|        match->wc.masks.nw_proto = 0;
 2433|    213|        match->flow.nw_proto = 0;
 2434|    213|        break;
 2435|       |
 2436|     37|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2436:5): [True: 37, False: 23.6k]
  ------------------
 2437|    176|    case MFF_ND_SLL:
  ------------------
  |  Branch (2437:5): [True: 139, False: 23.5k]
  ------------------
 2438|    176|        match->flow.arp_sha = eth_addr_zero;
 2439|    176|        match->wc.masks.arp_sha = eth_addr_zero;
 2440|    176|        break;
 2441|       |
 2442|    319|    case MFF_ARP_THA:
  ------------------
  |  Branch (2442:5): [True: 319, False: 23.4k]
  ------------------
 2443|  2.21k|    case MFF_ND_TLL:
  ------------------
  |  Branch (2443:5): [True: 1.89k, False: 21.8k]
  ------------------
 2444|  2.21k|        match->flow.arp_tha = eth_addr_zero;
 2445|  2.21k|        match->wc.masks.arp_tha = eth_addr_zero;
 2446|  2.21k|        break;
 2447|       |
 2448|    503|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2448:5): [True: 503, False: 23.2k]
  ------------------
 2449|    503|        match->wc.masks.igmp_group_ip4 = htonl(0);
 2450|    503|        match->flow.igmp_group_ip4 = htonl(0);
 2451|    503|        break;
 2452|       |
 2453|     11|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2453:5): [True: 11, False: 23.7k]
  ------------------
 2454|     22|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2454:5): [True: 11, False: 23.7k]
  ------------------
 2455|     56|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2455:5): [True: 34, False: 23.7k]
  ------------------
 2456|    135|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2456:5): [True: 79, False: 23.6k]
  ------------------
 2457|    541|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2457:5): [True: 406, False: 23.3k]
  ------------------
 2458|    541|        match->wc.masks.tp_src = htons(0);
 2459|    541|        match->flow.tp_src = htons(0);
 2460|    541|        break;
 2461|       |
 2462|     68|    case MFF_TCP_DST:
  ------------------
  |  Branch (2462:5): [True: 68, False: 23.6k]
  ------------------
 2463|     90|    case MFF_UDP_DST:
  ------------------
  |  Branch (2463:5): [True: 22, False: 23.7k]
  ------------------
 2464|    451|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2464:5): [True: 361, False: 23.3k]
  ------------------
 2465|    645|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2465:5): [True: 194, False: 23.5k]
  ------------------
 2466|    667|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2466:5): [True: 22, False: 23.7k]
  ------------------
 2467|    667|        match->wc.masks.tp_dst = htons(0);
 2468|    667|        match->flow.tp_dst = htons(0);
 2469|    667|        break;
 2470|       |
 2471|    336|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2471:5): [True: 336, False: 23.3k]
  ------------------
 2472|    532|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2472:5): [True: 196, False: 23.5k]
  ------------------
 2473|    532|        match->wc.masks.tcp_flags = htons(0);
 2474|    532|        match->flow.tcp_flags = htons(0);
 2475|    532|        break;
 2476|       |
 2477|    183|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2477:5): [True: 183, False: 23.5k]
  ------------------
 2478|    183|        memset(&match->wc.masks.nd_target, 0,
 2479|    183|               sizeof match->wc.masks.nd_target);
 2480|    183|        memset(&match->flow.nd_target, 0, sizeof match->flow.nd_target);
 2481|    183|        break;
 2482|       |
 2483|    713|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2483:5): [True: 713, False: 23.0k]
  ------------------
 2484|    713|        MATCH_SET_FIELD_MASKED(match, nsh.flags, 0, 0);
  ------------------
  |  |   50|    713|    do {                                                      \
  |  |   51|    713|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    713|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    713|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 713]
  |  |  ------------------
  ------------------
 2485|    713|        break;
 2486|    113|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2486:5): [True: 113, False: 23.6k]
  ------------------
 2487|    113|        MATCH_SET_FIELD_MASKED(match, nsh.ttl, 0, 0);
  ------------------
  |  |   50|    113|    do {                                                      \
  |  |   51|    113|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    113|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    113|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 113]
  |  |  ------------------
  ------------------
 2488|    113|        break;
 2489|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2489:5): [True: 0, False: 23.7k]
  ------------------
 2490|      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, False: 0]
  |  |  ------------------
  ------------------
 2491|      0|        break;
 2492|    945|    case MFF_NSH_NP:
  ------------------
  |  Branch (2492:5): [True: 945, False: 22.7k]
  ------------------
 2493|    945|        MATCH_SET_FIELD_MASKED(match, nsh.np, 0, 0);
  ------------------
  |  |   50|    945|    do {                                                      \
  |  |   51|    945|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    945|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    945|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 945]
  |  |  ------------------
  ------------------
 2494|    945|        break;
 2495|     18|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2495:5): [True: 18, False: 23.7k]
  ------------------
 2496|     18|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SPI_MASK);
 2497|     18|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr, htonl(0));
 2498|     18|        break;
 2499|     73|    case MFF_NSH_SI:
  ------------------
  |  Branch (2499:5): [True: 73, False: 23.6k]
  ------------------
 2500|     73|        match->wc.masks.nsh.path_hdr &= ~htonl(NSH_SI_MASK);
 2501|     73|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr, 0);
 2502|     73|        break;
 2503|    136|    case MFF_NSH_C1:
  ------------------
  |  Branch (2503:5): [True: 136, False: 23.5k]
  ------------------
 2504|    240|    case MFF_NSH_C2:
  ------------------
  |  Branch (2504:5): [True: 104, False: 23.6k]
  ------------------
 2505|    274|    case MFF_NSH_C3:
  ------------------
  |  Branch (2505:5): [True: 34, False: 23.7k]
  ------------------
 2506|    284|    case MFF_NSH_C4:
  ------------------
  |  Branch (2506:5): [True: 10, False: 23.7k]
  ------------------
 2507|    284|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    284|    do {                                                      \
  |  |   51|    284|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    284|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    284|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 284]
  |  |  ------------------
  ------------------
 2508|    284|                               htonl(0), htonl(0));
 2509|    284|        break;
 2510|       |
 2511|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2511:5): [True: 0, False: 23.7k]
  ------------------
 2512|      0|    default:
  ------------------
  |  Branch (2512:5): [True: 0, False: 23.7k]
  ------------------
 2513|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2514|  23.7k|    }
 2515|  23.7k|}
mf_set:
 2540|   179k|{
 2541|   179k|    if (!mask || is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (2541:9): [True: 0, False: 179k]
  |  Branch (2541:18): [True: 78.7k, False: 100k]
  ------------------
 2542|  78.7k|        mf_set_value(mf, value, match, err_str);
 2543|  78.7k|        return mf->usable_protocols_exact;
 2544|   100k|    } else if (is_all_zeros(mask, mf->n_bytes) && !mf_is_tun_metadata(mf)) {
  ------------------
  |  Branch (2544:16): [True: 55.7k, False: 45.0k]
  |  Branch (2544:51): [True: 23.7k, False: 32.0k]
  ------------------
 2545|       |        /* Tunnel metadata matches on the existence of the field itself, so
 2546|       |         * it still needs to be encoded even if the value is wildcarded. */
 2547|  23.7k|        mf_set_wild(mf, match, err_str);
 2548|  23.7k|        return OFPUTIL_P_ANY;
  ------------------
  |  |  100|  23.7k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 2549|  23.7k|    }
 2550|       |
 2551|  77.0k|    if (err_str) {
  ------------------
  |  Branch (2551:9): [True: 53.1k, False: 23.8k]
  ------------------
 2552|  53.1k|        *err_str = NULL;
 2553|  53.1k|    }
 2554|       |
 2555|       |    /* The cases where 'mask' is all-1-bits or all-0-bits were already handled
 2556|       |     * above[*], so the code below only needs to work for the remaining cases
 2557|       |     * of a nontrivial mask.
 2558|       |     *
 2559|       |     * [*] Except where the field is a tunnel metadata field and 'mask' is
 2560|       |     *     all-0-bits; see above. */
 2561|  77.0k|    switch (mf->id) {
 2562|    137|    case MFF_CT_ZONE:
  ------------------
  |  Branch (2562:5): [True: 137, False: 76.9k]
  ------------------
 2563|    383|    case MFF_CT_NW_PROTO:
  ------------------
  |  Branch (2563:5): [True: 246, False: 76.7k]
  ------------------
 2564|    784|    case MFF_RECIRC_ID:
  ------------------
  |  Branch (2564:5): [True: 401, False: 76.6k]
  ------------------
 2565|  1.26k|    case MFF_PACKET_TYPE:
  ------------------
  |  Branch (2565:5): [True: 483, False: 76.5k]
  ------------------
 2566|  1.94k|    case MFF_CONJ_ID:
  ------------------
  |  Branch (2566:5): [True: 677, False: 76.3k]
  ------------------
 2567|  1.97k|    case MFF_IN_PORT:
  ------------------
  |  Branch (2567:5): [True: 34, False: 77.0k]
  ------------------
 2568|  2.99k|    case MFF_IN_PORT_OXM:
  ------------------
  |  Branch (2568:5): [True: 1.02k, False: 76.0k]
  ------------------
 2569|  3.24k|    case MFF_ACTSET_OUTPUT:
  ------------------
  |  Branch (2569:5): [True: 250, False: 76.7k]
  ------------------
 2570|  3.24k|    case MFF_SKB_PRIORITY:
  ------------------
  |  Branch (2570:5): [True: 0, False: 77.0k]
  ------------------
 2571|  3.25k|    case MFF_ETH_TYPE:
  ------------------
  |  Branch (2571:5): [True: 10, False: 77.0k]
  ------------------
 2572|  3.25k|    case MFF_DL_VLAN:
  ------------------
  |  Branch (2572:5): [True: 0, False: 77.0k]
  ------------------
 2573|  3.25k|    case MFF_DL_VLAN_PCP:
  ------------------
  |  Branch (2573:5): [True: 0, False: 77.0k]
  ------------------
 2574|  3.25k|    case MFF_VLAN_PCP:
  ------------------
  |  Branch (2574:5): [True: 0, False: 77.0k]
  ------------------
 2575|  3.25k|    case MFF_MPLS_LABEL:
  ------------------
  |  Branch (2575:5): [True: 0, False: 77.0k]
  ------------------
 2576|  3.25k|    case MFF_MPLS_TC:
  ------------------
  |  Branch (2576:5): [True: 0, False: 77.0k]
  ------------------
 2577|  3.25k|    case MFF_MPLS_BOS:
  ------------------
  |  Branch (2577:5): [True: 0, False: 77.0k]
  ------------------
 2578|  3.25k|    case MFF_MPLS_TTL:
  ------------------
  |  Branch (2578:5): [True: 0, False: 77.0k]
  ------------------
 2579|  3.25k|    case MFF_IP_PROTO:
  ------------------
  |  Branch (2579:5): [True: 0, False: 77.0k]
  ------------------
 2580|  3.25k|    case MFF_IP_TTL:
  ------------------
  |  Branch (2580:5): [True: 0, False: 77.0k]
  ------------------
 2581|  3.25k|    case MFF_IP_DSCP:
  ------------------
  |  Branch (2581:5): [True: 0, False: 77.0k]
  ------------------
 2582|  3.25k|    case MFF_IP_DSCP_SHIFTED:
  ------------------
  |  Branch (2582:5): [True: 0, False: 77.0k]
  ------------------
 2583|  3.25k|    case MFF_IP_ECN:
  ------------------
  |  Branch (2583:5): [True: 0, False: 77.0k]
  ------------------
 2584|  3.25k|    case MFF_ARP_OP:
  ------------------
  |  Branch (2584:5): [True: 0, False: 77.0k]
  ------------------
 2585|  3.25k|    case MFF_ICMPV4_TYPE:
  ------------------
  |  Branch (2585:5): [True: 0, False: 77.0k]
  ------------------
 2586|  3.25k|    case MFF_ICMPV4_CODE:
  ------------------
  |  Branch (2586:5): [True: 0, False: 77.0k]
  ------------------
 2587|  3.25k|    case MFF_ICMPV6_TYPE:
  ------------------
  |  Branch (2587:5): [True: 0, False: 77.0k]
  ------------------
 2588|  3.25k|    case MFF_ICMPV6_CODE:
  ------------------
  |  Branch (2588:5): [True: 0, False: 77.0k]
  ------------------
 2589|  3.25k|    case MFF_ND_RESERVED:
  ------------------
  |  Branch (2589:5): [True: 0, False: 77.0k]
  ------------------
 2590|  3.25k|    case MFF_ND_OPTIONS_TYPE:
  ------------------
  |  Branch (2590:5): [True: 0, False: 77.0k]
  ------------------
 2591|  3.25k|        return OFPUTIL_P_NONE;
  ------------------
  |  |   53|  3.25k|#define OFPUTIL_P_NONE 0
  ------------------
 2592|       |
 2593|    154|    case MFF_DP_HASH:
  ------------------
  |  Branch (2593:5): [True: 154, False: 76.8k]
  ------------------
 2594|    154|        match_set_dp_hash_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2595|    154|        break;
 2596|  1.26k|    case MFF_TUN_ID:
  ------------------
  |  Branch (2596:5): [True: 1.26k, False: 75.7k]
  ------------------
 2597|  1.26k|        match_set_tun_id_masked(match, value->be64, mask->be64);
 2598|  1.26k|        break;
 2599|    225|    case MFF_TUN_SRC:
  ------------------
  |  Branch (2599:5): [True: 225, False: 76.8k]
  ------------------
 2600|    225|        match_set_tun_src_masked(match, value->be32, mask->be32);
 2601|    225|        break;
 2602|    160|    case MFF_TUN_DST:
  ------------------
  |  Branch (2602:5): [True: 160, False: 76.8k]
  ------------------
 2603|    160|        match_set_tun_dst_masked(match, value->be32, mask->be32);
 2604|    160|        break;
 2605|    555|    case MFF_TUN_IPV6_SRC:
  ------------------
  |  Branch (2605:5): [True: 555, False: 76.4k]
  ------------------
 2606|    555|        match_set_tun_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2607|    555|        break;
 2608|  1.11k|    case MFF_TUN_IPV6_DST:
  ------------------
  |  Branch (2608:5): [True: 1.11k, False: 75.9k]
  ------------------
 2609|  1.11k|        match_set_tun_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2610|  1.11k|        break;
 2611|    471|    case MFF_TUN_FLAGS:
  ------------------
  |  Branch (2611:5): [True: 471, False: 76.5k]
  ------------------
 2612|    471|        match_set_tun_flags_masked(match, ntohs(value->be16), ntohs(mask->be16));
 2613|    471|        break;
 2614|     86|    case MFF_TUN_GBP_ID:
  ------------------
  |  Branch (2614:5): [True: 86, False: 76.9k]
  ------------------
 2615|     86|        match_set_tun_gbp_id_masked(match, value->be16, mask->be16);
 2616|     86|        break;
 2617|    843|    case MFF_TUN_GBP_FLAGS:
  ------------------
  |  Branch (2617:5): [True: 843, False: 76.1k]
  ------------------
 2618|    843|        match_set_tun_gbp_flags_masked(match, value->u8, mask->u8);
 2619|    843|        break;
 2620|      0|    case MFF_TUN_TTL:
  ------------------
  |  Branch (2620:5): [True: 0, False: 77.0k]
  ------------------
 2621|      0|        match_set_tun_ttl_masked(match, value->u8, mask->u8);
 2622|      0|        break;
 2623|      0|    case MFF_TUN_TOS:
  ------------------
  |  Branch (2623:5): [True: 0, False: 77.0k]
  ------------------
 2624|      0|        match_set_tun_tos_masked(match, value->u8, mask->u8);
 2625|      0|        break;
 2626|     57|    case MFF_TUN_ERSPAN_VER:
  ------------------
  |  Branch (2626:5): [True: 57, False: 76.9k]
  ------------------
 2627|     57|        match_set_tun_erspan_ver_masked(match, value->u8, mask->u8);
 2628|     57|        break;
 2629|     46|    case MFF_TUN_ERSPAN_IDX:
  ------------------
  |  Branch (2629:5): [True: 46, False: 76.9k]
  ------------------
 2630|     46|        match_set_tun_erspan_idx_masked(match, ntohl(value->be32),
 2631|     46|                                        ntohl(mask->be32));
 2632|     46|        break;
 2633|     40|    case MFF_TUN_ERSPAN_DIR:
  ------------------
  |  Branch (2633:5): [True: 40, False: 76.9k]
  ------------------
 2634|     40|        match_set_tun_erspan_dir_masked(match, value->u8, mask->u8);
 2635|     40|        break;
 2636|    426|    case MFF_TUN_ERSPAN_HWID:
  ------------------
  |  Branch (2636:5): [True: 426, False: 76.6k]
  ------------------
 2637|    426|        match_set_tun_erspan_hwid_masked(match, value->u8, mask->u8);
 2638|    426|        break;
 2639|    191|    case MFF_TUN_GTPU_FLAGS:
  ------------------
  |  Branch (2639:5): [True: 191, False: 76.8k]
  ------------------
 2640|    191|        match_set_tun_gtpu_flags_masked(match, value->u8, mask->u8);
 2641|    191|        break;
 2642|     99|    case MFF_TUN_GTPU_MSGTYPE:
  ------------------
  |  Branch (2642:5): [True: 99, False: 76.9k]
  ------------------
 2643|     99|        match_set_tun_gtpu_msgtype_masked(match, value->u8, mask->u8);
 2644|     99|        break;
 2645|  48.0k|    CASE_MFF_TUN_METADATA:
  ------------------
  |  | 2110|  3.30k|    case MFF_TUN_METADATA0: case MFF_TUN_METADATA1:   \
  |  |  ------------------
  |  |  |  Branch (2110:5): [True: 1.34k, False: 75.6k]
  |  |  |  Branch (2110:29): [True: 1.95k, False: 75.0k]
  |  |  ------------------
  |  | 2111|  4.45k|    case MFF_TUN_METADATA2: case MFF_TUN_METADATA3:   \
  |  |  ------------------
  |  |  |  Branch (2111:5): [True: 429, False: 76.6k]
  |  |  |  Branch (2111:29): [True: 724, False: 76.3k]
  |  |  ------------------
  |  | 2112|  6.03k|    case MFF_TUN_METADATA4: case MFF_TUN_METADATA5:   \
  |  |  ------------------
  |  |  |  Branch (2112:5): [True: 78, False: 76.9k]
  |  |  |  Branch (2112:29): [True: 1.50k, False: 75.5k]
  |  |  ------------------
  |  | 2113|  10.0k|    case MFF_TUN_METADATA6: case MFF_TUN_METADATA7:   \
  |  |  ------------------
  |  |  |  Branch (2113:5): [True: 3.66k, False: 73.3k]
  |  |  |  Branch (2113:29): [True: 391, False: 76.6k]
  |  |  ------------------
  |  | 2114|  11.6k|    case MFF_TUN_METADATA8: case MFF_TUN_METADATA9:   \
  |  |  ------------------
  |  |  |  Branch (2114:5): [True: 1.20k, False: 75.8k]
  |  |  |  Branch (2114:29): [True: 321, False: 76.7k]
  |  |  ------------------
  |  | 2115|  12.6k|    case MFF_TUN_METADATA10: case MFF_TUN_METADATA11: \
  |  |  ------------------
  |  |  |  Branch (2115:5): [True: 920, False: 76.1k]
  |  |  |  Branch (2115:30): [True: 121, False: 76.9k]
  |  |  ------------------
  |  | 2116|  14.2k|    case MFF_TUN_METADATA12: case MFF_TUN_METADATA13: \
  |  |  ------------------
  |  |  |  Branch (2116:5): [True: 1.40k, False: 75.6k]
  |  |  |  Branch (2116:30): [True: 175, False: 76.8k]
  |  |  ------------------
  |  | 2117|  15.0k|    case MFF_TUN_METADATA14: case MFF_TUN_METADATA15: \
  |  |  ------------------
  |  |  |  Branch (2117:5): [True: 285, False: 76.7k]
  |  |  |  Branch (2117:30): [True: 513, False: 76.5k]
  |  |  ------------------
  |  | 2118|  16.1k|    case MFF_TUN_METADATA16: case MFF_TUN_METADATA17: \
  |  |  ------------------
  |  |  |  Branch (2118:5): [True: 594, False: 76.4k]
  |  |  |  Branch (2118:30): [True: 514, False: 76.5k]
  |  |  ------------------
  |  | 2119|  20.1k|    case MFF_TUN_METADATA18: case MFF_TUN_METADATA19: \
  |  |  ------------------
  |  |  |  Branch (2119:5): [True: 2.73k, False: 74.3k]
  |  |  |  Branch (2119:30): [True: 1.27k, False: 75.7k]
  |  |  ------------------
  |  | 2120|  21.2k|    case MFF_TUN_METADATA20: case MFF_TUN_METADATA21: \
  |  |  ------------------
  |  |  |  Branch (2120:5): [True: 282, False: 76.7k]
  |  |  |  Branch (2120:30): [True: 785, False: 76.2k]
  |  |  ------------------
  |  | 2121|  21.7k|    case MFF_TUN_METADATA22: case MFF_TUN_METADATA23: \
  |  |  ------------------
  |  |  |  Branch (2121:5): [True: 501, False: 76.5k]
  |  |  |  Branch (2121:30): [True: 73, False: 76.9k]
  |  |  ------------------
  |  | 2122|  27.2k|    case MFF_TUN_METADATA24: case MFF_TUN_METADATA25: \
  |  |  ------------------
  |  |  |  Branch (2122:5): [True: 1.11k, False: 75.9k]
  |  |  |  Branch (2122:30): [True: 4.34k, False: 72.6k]
  |  |  ------------------
  |  | 2123|  28.0k|    case MFF_TUN_METADATA26: case MFF_TUN_METADATA27: \
  |  |  ------------------
  |  |  |  Branch (2123:5): [True: 182, False: 76.8k]
  |  |  |  Branch (2123:30): [True: 614, False: 76.4k]
  |  |  ------------------
  |  | 2124|  28.9k|    case MFF_TUN_METADATA28: case MFF_TUN_METADATA29: \
  |  |  ------------------
  |  |  |  Branch (2124:5): [True: 297, False: 76.7k]
  |  |  |  Branch (2124:30): [True: 625, False: 76.4k]
  |  |  ------------------
  |  | 2125|  29.6k|    case MFF_TUN_METADATA30: case MFF_TUN_METADATA31: \
  |  |  ------------------
  |  |  |  Branch (2125:5): [True: 330, False: 76.7k]
  |  |  |  Branch (2125:30): [True: 345, False: 76.6k]
  |  |  ------------------
  |  | 2126|  32.3k|    case MFF_TUN_METADATA32: case MFF_TUN_METADATA33: \
  |  |  ------------------
  |  |  |  Branch (2126:5): [True: 1.53k, False: 75.5k]
  |  |  |  Branch (2126:30): [True: 1.13k, False: 75.9k]
  |  |  ------------------
  |  | 2127|  33.6k|    case MFF_TUN_METADATA34: case MFF_TUN_METADATA35: \
  |  |  ------------------
  |  |  |  Branch (2127:5): [True: 978, False: 76.0k]
  |  |  |  Branch (2127:30): [True: 336, False: 76.7k]
  |  |  ------------------
  |  | 2128|  34.9k|    case MFF_TUN_METADATA36: case MFF_TUN_METADATA37: \
  |  |  ------------------
  |  |  |  Branch (2128:5): [True: 906, False: 76.1k]
  |  |  |  Branch (2128:30): [True: 416, False: 76.6k]
  |  |  ------------------
  |  | 2129|  35.9k|    case MFF_TUN_METADATA38: case MFF_TUN_METADATA39: \
  |  |  ------------------
  |  |  |  Branch (2129:5): [True: 360, False: 76.6k]
  |  |  |  Branch (2129:30): [True: 616, False: 76.4k]
  |  |  ------------------
  |  | 2130|  36.8k|    case MFF_TUN_METADATA40: case MFF_TUN_METADATA41: \
  |  |  ------------------
  |  |  |  Branch (2130:5): [True: 587, False: 76.4k]
  |  |  |  Branch (2130:30): [True: 388, False: 76.6k]
  |  |  ------------------
  |  | 2131|  38.1k|    case MFF_TUN_METADATA42: case MFF_TUN_METADATA43: \
  |  |  ------------------
  |  |  |  Branch (2131:5): [True: 953, False: 76.0k]
  |  |  |  Branch (2131:30): [True: 323, False: 76.7k]
  |  |  ------------------
  |  | 2132|  39.2k|    case MFF_TUN_METADATA44: case MFF_TUN_METADATA45: \
  |  |  ------------------
  |  |  |  Branch (2132:5): [True: 342, False: 76.6k]
  |  |  |  Branch (2132:30): [True: 711, False: 76.3k]
  |  |  ------------------
  |  | 2133|  40.1k|    case MFF_TUN_METADATA46: case MFF_TUN_METADATA47: \
  |  |  ------------------
  |  |  |  Branch (2133:5): [True: 264, False: 76.7k]
  |  |  |  Branch (2133:30): [True: 676, False: 76.3k]
  |  |  ------------------
  |  | 2134|  40.8k|    case MFF_TUN_METADATA48: case MFF_TUN_METADATA49: \
  |  |  ------------------
  |  |  |  Branch (2134:5): [True: 301, False: 76.7k]
  |  |  |  Branch (2134:30): [True: 336, False: 76.7k]
  |  |  ------------------
  |  | 2135|  41.8k|    case MFF_TUN_METADATA50: case MFF_TUN_METADATA51: \
  |  |  ------------------
  |  |  |  Branch (2135:5): [True: 919, False: 76.1k]
  |  |  |  Branch (2135:30): [True: 174, False: 76.8k]
  |  |  ------------------
  |  | 2136|  42.4k|    case MFF_TUN_METADATA52: case MFF_TUN_METADATA53: \
  |  |  ------------------
  |  |  |  Branch (2136:5): [True: 245, False: 76.7k]
  |  |  |  Branch (2136:30): [True: 311, False: 76.7k]
  |  |  ------------------
  |  | 2137|  43.5k|    case MFF_TUN_METADATA54: case MFF_TUN_METADATA55: \
  |  |  ------------------
  |  |  |  Branch (2137:5): [True: 54, False: 76.9k]
  |  |  |  Branch (2137:30): [True: 1.04k, False: 75.9k]
  |  |  ------------------
  |  | 2138|  44.6k|    case MFF_TUN_METADATA56: case MFF_TUN_METADATA57: \
  |  |  ------------------
  |  |  |  Branch (2138:5): [True: 238, False: 76.8k]
  |  |  |  Branch (2138:30): [True: 853, False: 76.1k]
  |  |  ------------------
  |  | 2139|  45.7k|    case MFF_TUN_METADATA58: case MFF_TUN_METADATA59: \
  |  |  ------------------
  |  |  |  Branch (2139:5): [True: 647, False: 76.3k]
  |  |  |  Branch (2139:30): [True: 428, False: 76.6k]
  |  |  ------------------
  |  | 2140|  47.0k|    case MFF_TUN_METADATA60: case MFF_TUN_METADATA61: \
  |  |  ------------------
  |  |  |  Branch (2140:5): [True: 1.12k, False: 75.9k]
  |  |  |  Branch (2140:30): [True: 159, False: 76.8k]
  |  |  ------------------
  |  | 2141|  48.0k|    case MFF_TUN_METADATA62: case MFF_TUN_METADATA63
  |  |  ------------------
  |  |  |  Branch (2141:5): [True: 268, False: 76.7k]
  |  |  ------------------
  ------------------
 2646|  48.0k|        tun_metadata_set_match(mf, value, mask, match, err_str);
 2647|  48.0k|        break;
 2648|       |
 2649|    189|    case MFF_METADATA:
  ------------------
  |  Branch (2649:5): [True: 189, False: 76.8k]
  ------------------
 2650|    189|        match_set_metadata_masked(match, value->be64, mask->be64);
 2651|    189|        break;
 2652|       |
 2653|  6.47k|    CASE_MFF_REGS:
  ------------------
  |  | 2065|  1.50k|    case MFF_REG0: case MFF_REG1: case MFF_REG2: case MFF_REG3:     \
  |  |  ------------------
  |  |  |  Branch (2065:5): [True: 875, False: 76.1k]
  |  |  |  Branch (2065:20): [True: 212, False: 76.8k]
  |  |  |  Branch (2065:35): [True: 382, False: 76.6k]
  |  |  |  Branch (2065:50): [True: 35, False: 77.0k]
  |  |  ------------------
  |  | 2066|  2.47k|    case MFF_REG4: case MFF_REG5: case MFF_REG6: case MFF_REG7:     \
  |  |  ------------------
  |  |  |  Branch (2066:5): [True: 175, False: 76.8k]
  |  |  |  Branch (2066:20): [True: 398, False: 76.6k]
  |  |  |  Branch (2066:35): [True: 330, False: 76.7k]
  |  |  |  Branch (2066:50): [True: 72, False: 76.9k]
  |  |  ------------------
  |  | 2067|  4.41k|    case MFF_REG8: case MFF_REG9: case MFF_REG10: case MFF_REG11:   \
  |  |  ------------------
  |  |  |  Branch (2067:5): [True: 294, False: 76.7k]
  |  |  |  Branch (2067:20): [True: 752, False: 76.2k]
  |  |  |  Branch (2067:35): [True: 642, False: 76.3k]
  |  |  |  Branch (2067:51): [True: 251, False: 76.7k]
  |  |  ------------------
  |  | 2068|  5.70k|    case MFF_REG12: case MFF_REG13: case MFF_REG14: case MFF_REG15: \
  |  |  ------------------
  |  |  |  Branch (2068:5): [True: 495, False: 76.5k]
  |  |  |  Branch (2068:21): [True: 213, False: 76.8k]
  |  |  |  Branch (2068:37): [True: 132, False: 76.9k]
  |  |  |  Branch (2068:53): [True: 448, False: 76.5k]
  |  |  ------------------
  |  | 2069|  5.82k|    case MFF_REG16: case MFF_REG17: case MFF_REG18: case MFF_REG19: \
  |  |  ------------------
  |  |  |  Branch (2069:5): [True: 44, False: 76.9k]
  |  |  |  Branch (2069:21): [True: 43, False: 76.9k]
  |  |  |  Branch (2069:37): [True: 10, False: 77.0k]
  |  |  |  Branch (2069:53): [True: 19, False: 77.0k]
  |  |  ------------------
  |  | 2070|  6.11k|    case MFF_REG20: case MFF_REG21: case MFF_REG22: case MFF_REG23: \
  |  |  ------------------
  |  |  |  Branch (2070:5): [True: 20, False: 77.0k]
  |  |  |  Branch (2070:21): [True: 211, False: 76.8k]
  |  |  |  Branch (2070:37): [True: 53, False: 76.9k]
  |  |  |  Branch (2070:53): [True: 13, False: 77.0k]
  |  |  ------------------
  |  | 2071|  6.32k|    case MFF_REG24: case MFF_REG25: case MFF_REG26: case MFF_REG27: \
  |  |  ------------------
  |  |  |  Branch (2071:5): [True: 84, False: 76.9k]
  |  |  |  Branch (2071:21): [True: 71, False: 76.9k]
  |  |  |  Branch (2071:37): [True: 13, False: 77.0k]
  |  |  |  Branch (2071:53): [True: 40, False: 76.9k]
  |  |  ------------------
  |  | 2072|  6.47k|    case MFF_REG28: case MFF_REG29: case MFF_REG30: case MFF_REG31
  |  |  ------------------
  |  |  |  Branch (2072:5): [True: 74, False: 76.9k]
  |  |  |  Branch (2072:21): [True: 10, False: 77.0k]
  |  |  |  Branch (2072:37): [True: 22, False: 77.0k]
  |  |  ------------------
  ------------------
 2654|  6.47k|        match_set_reg_masked(match, mf->id - MFF_REG0,
 2655|  6.47k|                             ntohl(value->be32), ntohl(mask->be32));
 2656|  6.47k|        break;
 2657|       |
 2658|  3.01k|    CASE_MFF_XREGS:
  ------------------
  |  | 2081|  1.00k|    case MFF_XREG0: case MFF_XREG1: case MFF_XREG2: case MFF_XREG3:    \
  |  |  ------------------
  |  |  |  Branch (2081:5): [True: 152, False: 76.8k]
  |  |  |  Branch (2081:21): [True: 685, False: 76.3k]
  |  |  |  Branch (2081:37): [True: 107, False: 76.9k]
  |  |  |  Branch (2081:53): [True: 60, False: 76.9k]
  |  |  ------------------
  |  | 2082|  2.15k|    case MFF_XREG4: case MFF_XREG5: case MFF_XREG6: case MFF_XREG7:    \
  |  |  ------------------
  |  |  |  Branch (2082:5): [True: 254, False: 76.7k]
  |  |  |  Branch (2082:21): [True: 199, False: 76.8k]
  |  |  |  Branch (2082:37): [True: 360, False: 76.6k]
  |  |  |  Branch (2082:53): [True: 338, False: 76.7k]
  |  |  ------------------
  |  | 2083|  2.50k|    case MFF_XREG8: case MFF_XREG9: case MFF_XREG10: case MFF_XREG11:  \
  |  |  ------------------
  |  |  |  Branch (2083:5): [True: 38, False: 77.0k]
  |  |  |  Branch (2083:21): [True: 12, False: 77.0k]
  |  |  |  Branch (2083:37): [True: 288, False: 76.7k]
  |  |  |  Branch (2083:54): [True: 12, False: 77.0k]
  |  |  ------------------
  |  | 2084|  3.01k|    case MFF_XREG12: case MFF_XREG13: case MFF_XREG14: case MFF_XREG15
  |  |  ------------------
  |  |  |  Branch (2084:5): [True: 120, False: 76.9k]
  |  |  |  Branch (2084:22): [True: 11, False: 77.0k]
  |  |  |  Branch (2084:39): [True: 217, False: 76.8k]
  |  |  ------------------
  ------------------
 2659|  3.01k|        match_set_xreg_masked(match, mf->id - MFF_XREG0,
 2660|  3.01k|                              ntohll(value->be64), ntohll(mask->be64));
 2661|  3.01k|        break;
 2662|       |
 2663|  1.17k|    CASE_MFF_XXREGS: {
  ------------------
  |  | 2093|  1.17k|    case MFF_XXREG0: case MFF_XXREG1: case MFF_XXREG2: case MFF_XXREG3: \
  |  |  ------------------
  |  |  |  Branch (2093:5): [True: 108, False: 76.9k]
  |  |  |  Branch (2093:22): [True: 229, False: 76.8k]
  |  |  |  Branch (2093:39): [True: 597, False: 76.4k]
  |  |  |  Branch (2093:56): [True: 244, False: 76.7k]
  |  |  ------------------
  |  | 2094|  1.17k|    case MFF_XXREG4: case MFF_XXREG5: case MFF_XXREG6: case MFF_XXREG7
  |  |  ------------------
  |  |  |  Branch (2094:5): [True: 0, False: 77.0k]
  |  |  |  Branch (2094:22): [True: 0, False: 77.0k]
  |  |  |  Branch (2094:39): [True: 0, False: 77.0k]
  |  |  ------------------
  ------------------
 2664|  1.17k|        match_set_xxreg_masked(match, mf->id - MFF_XXREG0,
 2665|  1.17k|                ntoh128(value->be128), ntoh128(mask->be128));
 2666|  1.17k|        break;
 2667|  6.09k|    }
 2668|       |
 2669|    204|    case MFF_PKT_MARK:
  ------------------
  |  Branch (2669:5): [True: 204, False: 76.8k]
  ------------------
 2670|    204|        match_set_pkt_mark_masked(match, ntohl(value->be32),
 2671|    204|                                  ntohl(mask->be32));
 2672|    204|        break;
 2673|       |
 2674|    192|    case MFF_CT_STATE:
  ------------------
  |  Branch (2674:5): [True: 192, False: 76.8k]
  ------------------
 2675|    192|        match_set_ct_state_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2676|    192|        break;
 2677|       |
 2678|  1.60k|    case MFF_CT_MARK:
  ------------------
  |  Branch (2678:5): [True: 1.60k, False: 75.4k]
  ------------------
 2679|  1.60k|        match_set_ct_mark_masked(match, ntohl(value->be32), ntohl(mask->be32));
 2680|  1.60k|        break;
 2681|       |
 2682|    432|    case MFF_CT_LABEL:
  ------------------
  |  Branch (2682:5): [True: 432, False: 76.6k]
  ------------------
 2683|    432|        match_set_ct_label_masked(match, ntoh128(value->be128),
 2684|    432|                                  ntoh128(mask->be128));
 2685|    432|        break;
 2686|       |
 2687|     70|    case MFF_CT_NW_SRC:
  ------------------
  |  Branch (2687:5): [True: 70, False: 76.9k]
  ------------------
 2688|     70|        match_set_ct_nw_src_masked(match, value->be32, mask->be32);
 2689|     70|        break;
 2690|       |
 2691|     58|    case MFF_CT_NW_DST:
  ------------------
  |  Branch (2691:5): [True: 58, False: 76.9k]
  ------------------
 2692|     58|        match_set_ct_nw_dst_masked(match, value->be32, mask->be32);
 2693|     58|        break;
 2694|       |
 2695|    277|    case MFF_CT_IPV6_SRC:
  ------------------
  |  Branch (2695:5): [True: 277, False: 76.7k]
  ------------------
 2696|    277|        match_set_ct_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2697|    277|        break;
 2698|       |
 2699|    828|    case MFF_CT_IPV6_DST:
  ------------------
  |  Branch (2699:5): [True: 828, False: 76.2k]
  ------------------
 2700|    828|        match_set_ct_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2701|    828|        break;
 2702|       |
 2703|    142|    case MFF_CT_TP_SRC:
  ------------------
  |  Branch (2703:5): [True: 142, False: 76.8k]
  ------------------
 2704|    142|        match_set_ct_tp_src_masked(match, value->be16, mask->be16);
 2705|    142|        break;
 2706|       |
 2707|    718|    case MFF_CT_TP_DST:
  ------------------
  |  Branch (2707:5): [True: 718, False: 76.3k]
  ------------------
 2708|    718|        match_set_ct_tp_dst_masked(match, value->be16, mask->be16);
 2709|    718|        break;
 2710|       |
 2711|     47|    case MFF_ETH_DST:
  ------------------
  |  Branch (2711:5): [True: 47, False: 76.9k]
  ------------------
 2712|     47|        match_set_dl_dst_masked(match, value->mac, mask->mac);
 2713|     47|        break;
 2714|       |
 2715|    111|    case MFF_ETH_SRC:
  ------------------
  |  Branch (2715:5): [True: 111, False: 76.9k]
  ------------------
 2716|    111|        match_set_dl_src_masked(match, value->mac, mask->mac);
 2717|    111|        break;
 2718|       |
 2719|     68|    case MFF_ARP_SHA:
  ------------------
  |  Branch (2719:5): [True: 68, False: 76.9k]
  ------------------
 2720|    102|    case MFF_ND_SLL:
  ------------------
  |  Branch (2720:5): [True: 34, False: 77.0k]
  ------------------
 2721|    102|        match_set_arp_sha_masked(match, value->mac, mask->mac);
 2722|    102|        break;
 2723|       |
 2724|     73|    case MFF_ARP_THA:
  ------------------
  |  Branch (2724:5): [True: 73, False: 76.9k]
  ------------------
 2725|    228|    case MFF_ND_TLL:
  ------------------
  |  Branch (2725:5): [True: 155, False: 76.8k]
  ------------------
 2726|    228|        match_set_arp_tha_masked(match, value->mac, mask->mac);
 2727|    228|        break;
 2728|       |
 2729|    431|    case MFF_VLAN_TCI:
  ------------------
  |  Branch (2729:5): [True: 431, False: 76.6k]
  ------------------
 2730|    431|        match_set_dl_tci_masked(match, value->be16, mask->be16);
 2731|    431|        break;
 2732|       |
 2733|    195|    case MFF_VLAN_VID:
  ------------------
  |  Branch (2733:5): [True: 195, False: 76.8k]
  ------------------
 2734|    195|        match_set_vlan_vid_masked(match, value->be16, mask->be16);
 2735|    195|        break;
 2736|       |
 2737|     59|    case MFF_IPV4_SRC:
  ------------------
  |  Branch (2737:5): [True: 59, False: 76.9k]
  ------------------
 2738|     59|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2739|     59|        break;
 2740|       |
 2741|    105|    case MFF_IPV4_DST:
  ------------------
  |  Branch (2741:5): [True: 105, False: 76.9k]
  ------------------
 2742|    105|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2743|    105|        break;
 2744|       |
 2745|    245|    case MFF_IPV6_SRC:
  ------------------
  |  Branch (2745:5): [True: 245, False: 76.7k]
  ------------------
 2746|    245|        match_set_ipv6_src_masked(match, &value->ipv6, &mask->ipv6);
 2747|    245|        break;
 2748|       |
 2749|    569|    case MFF_IPV6_DST:
  ------------------
  |  Branch (2749:5): [True: 569, False: 76.4k]
  ------------------
 2750|    569|        match_set_ipv6_dst_masked(match, &value->ipv6, &mask->ipv6);
 2751|    569|        break;
 2752|       |
 2753|    221|    case MFF_IPV6_LABEL:
  ------------------
  |  Branch (2753:5): [True: 221, False: 76.8k]
  ------------------
 2754|    221|        if ((mask->be32 & htonl(IPV6_LABEL_MASK)) == htonl(IPV6_LABEL_MASK)) {
  ------------------
  |  Branch (2754:13): [True: 196, False: 25]
  ------------------
 2755|    196|            mf_set_value(mf, value, match, err_str);
 2756|    196|        } else {
 2757|     25|            match_set_ipv6_label_masked(match, value->be32, mask->be32);
 2758|     25|        }
 2759|    221|        break;
 2760|       |
 2761|    210|    case MFF_ND_TARGET:
  ------------------
  |  Branch (2761:5): [True: 210, False: 76.8k]
  ------------------
 2762|    210|        match_set_nd_target_masked(match, &value->ipv6, &mask->ipv6);
 2763|    210|        break;
 2764|       |
 2765|    708|    case MFF_IP_FRAG:
  ------------------
  |  Branch (2765:5): [True: 708, False: 76.3k]
  ------------------
 2766|    708|        match_set_nw_frag_masked(match, value->u8,
 2767|    708|                                 mask->u8 & FLOW_NW_FRAG_MASK);
  ------------------
  |  |   56|    708|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    708|#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|    708|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 2768|    708|        break;
 2769|       |
 2770|     83|    case MFF_ARP_SPA:
  ------------------
  |  Branch (2770:5): [True: 83, False: 76.9k]
  ------------------
 2771|     83|        match_set_nw_src_masked(match, value->be32, mask->be32);
 2772|     83|        break;
 2773|       |
 2774|    146|    case MFF_ARP_TPA:
  ------------------
  |  Branch (2774:5): [True: 146, False: 76.8k]
  ------------------
 2775|    146|        match_set_nw_dst_masked(match, value->be32, mask->be32);
 2776|    146|        break;
 2777|       |
 2778|    197|    case MFF_TCP_SRC:
  ------------------
  |  Branch (2778:5): [True: 197, False: 76.8k]
  ------------------
 2779|    232|    case MFF_UDP_SRC:
  ------------------
  |  Branch (2779:5): [True: 35, False: 77.0k]
  ------------------
 2780|    438|    case MFF_SCTP_SRC:
  ------------------
  |  Branch (2780:5): [True: 206, False: 76.8k]
  ------------------
 2781|    438|        match_set_tp_src_masked(match, value->be16, mask->be16);
 2782|    438|        break;
 2783|       |
 2784|     34|    case MFF_TCP_DST:
  ------------------
  |  Branch (2784:5): [True: 34, False: 77.0k]
  ------------------
 2785|    111|    case MFF_UDP_DST:
  ------------------
  |  Branch (2785:5): [True: 77, False: 76.9k]
  ------------------
 2786|    300|    case MFF_SCTP_DST:
  ------------------
  |  Branch (2786:5): [True: 189, False: 76.8k]
  ------------------
 2787|    300|        match_set_tp_dst_masked(match, value->be16, mask->be16);
 2788|    300|        break;
 2789|       |
 2790|    126|    case MFF_TCP_FLAGS:
  ------------------
  |  Branch (2790:5): [True: 126, False: 76.9k]
  ------------------
 2791|    126|        match_set_tcp_flags_masked(match, value->be16, mask->be16);
 2792|    126|        break;
 2793|       |
 2794|     34|    case MFF_NSH_FLAGS:
  ------------------
  |  Branch (2794:5): [True: 34, False: 77.0k]
  ------------------
 2795|     34|        MATCH_SET_FIELD_MASKED(match, nsh.flags, value->u8, mask->u8);
  ------------------
  |  |   50|     34|    do {                                                      \
  |  |   51|     34|        (match)->wc.masks.field = (msk);                      \
  |  |   52|     34|        (match)->flow.field = (value) & (msk);                \
  |  |   53|     34|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 34]
  |  |  ------------------
  ------------------
 2796|     34|        break;
 2797|      0|    case MFF_NSH_TTL:
  ------------------
  |  Branch (2797:5): [True: 0, False: 77.0k]
  ------------------
 2798|      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, False: 0]
  |  |  ------------------
  ------------------
 2799|      0|        break;
 2800|      0|    case MFF_NSH_MDTYPE:
  ------------------
  |  Branch (2800:5): [True: 0, False: 77.0k]
  ------------------
 2801|      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, False: 0]
  |  |  ------------------
  ------------------
 2802|      0|        break;
 2803|      0|    case MFF_NSH_NP:
  ------------------
  |  Branch (2803:5): [True: 0, False: 77.0k]
  ------------------
 2804|      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, False: 0]
  |  |  ------------------
  ------------------
 2805|      0|        break;
 2806|      0|    case MFF_NSH_SPI:
  ------------------
  |  Branch (2806:5): [True: 0, False: 77.0k]
  ------------------
 2807|      0|        match->wc.masks.nsh.path_hdr |= mask->be32;
 2808|      0|        nsh_path_hdr_set_spi(&match->flow.nsh.path_hdr,
 2809|      0|                             value->be32 & mask->be32);
 2810|      0|        break;
 2811|      0|    case MFF_NSH_SI:
  ------------------
  |  Branch (2811:5): [True: 0, False: 77.0k]
  ------------------
 2812|      0|        match->wc.masks.nsh.path_hdr |= htonl(mask->u8);
 2813|      0|        nsh_path_hdr_set_si(&match->flow.nsh.path_hdr,
 2814|      0|                             value->u8 & mask->u8);
 2815|      0|        break;
 2816|    131|    case MFF_NSH_C1:
  ------------------
  |  Branch (2816:5): [True: 131, False: 76.9k]
  ------------------
 2817|    241|    case MFF_NSH_C2:
  ------------------
  |  Branch (2817:5): [True: 110, False: 76.9k]
  ------------------
 2818|    276|    case MFF_NSH_C3:
  ------------------
  |  Branch (2818:5): [True: 35, False: 77.0k]
  ------------------
 2819|    313|    case MFF_NSH_C4:
  ------------------
  |  Branch (2819:5): [True: 37, False: 77.0k]
  ------------------
 2820|    313|        MATCH_SET_FIELD_MASKED(match, nsh.context[mf->id - MFF_NSH_C1],
  ------------------
  |  |   50|    313|    do {                                                      \
  |  |   51|    313|        (match)->wc.masks.field = (msk);                      \
  |  |   52|    313|        (match)->flow.field = (value) & (msk);                \
  |  |   53|    313|    } while (0)
  |  |  ------------------
  |  |  |  Branch (53:14): [Folded, False: 313]
  |  |  ------------------
  ------------------
 2821|    313|                               value->be32, mask->be32);
 2822|    313|        break;
 2823|       |
 2824|      0|    case MFF_N_IDS:
  ------------------
  |  Branch (2824:5): [True: 0, False: 77.0k]
  ------------------
 2825|      0|    default:
  ------------------
  |  Branch (2825:5): [True: 0, False: 77.0k]
  ------------------
 2826|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2827|  77.0k|    }
 2828|       |
 2829|  73.7k|    return ((mf->usable_protocols_bitwise == mf->usable_protocols_cidr
  ------------------
  |  Branch (2829:14): [True: 73.3k, False: 393]
  ------------------
 2830|    393|             || ip_is_cidr(mask->be32))
  ------------------
  |  Branch (2830:17): [True: 67, False: 326]
  ------------------
 2831|  73.7k|            ? mf->usable_protocols_cidr
 2832|  73.7k|            : mf->usable_protocols_bitwise);
 2833|  77.0k|}
mf_check_src:
 2948|  41.5k|{
 2949|  41.5k|    return mf_check__(sf, match, "source");
 2950|  41.5k|}
mf_check_dst:
 2957|  13.3k|{
 2958|  13.3k|    int error = mf_check__(sf, match, "destination");
 2959|  13.3k|    if (!error && !sf->field->writable) {
  ------------------
  |  Branch (2959:9): [True: 11.8k, False: 1.44k]
  |  Branch (2959:19): [True: 94, False: 11.7k]
  ------------------
 2960|     94|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|     94|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     94|    do {                                                                \
  |  |  |  |  288|     94|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     94|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 94]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     94|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 94]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2961|     94|                     sf->field->name);
 2962|     94|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2963|     94|    }
 2964|  13.2k|    return error;
 2965|  13.3k|}
mf_get:
 2972|  27.4k|{
 2973|  27.4k|    mf_get_value(mf, &match->flow, value);
 2974|  27.4k|    mf_get_mask(mf, &match->wc, mask);
 2975|  27.4k|}
mf_format:
 3401|  17.1k|{
 3402|  17.1k|    if (mask) {
  ------------------
  |  Branch (3402:9): [True: 4.48k, False: 12.6k]
  ------------------
 3403|  4.48k|        if (is_all_zeros(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3403:13): [True: 861, False: 3.62k]
  ------------------
 3404|    861|            ds_put_cstr(s, "ANY");
 3405|    861|            return;
 3406|  3.62k|        } else if (is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (3406:20): [True: 2.23k, False: 1.39k]
  ------------------
 3407|  2.23k|            mask = NULL;
 3408|  2.23k|        }
 3409|  4.48k|    }
 3410|       |
 3411|  16.2k|    switch (mf->string) {
 3412|  1.35k|    case MFS_OFP_PORT_OXM:
  ------------------
  |  Branch (3412:5): [True: 1.35k, False: 14.9k]
  ------------------
 3413|  1.35k|        if (!mask) {
  ------------------
  |  Branch (3413:13): [True: 1.08k, False: 267]
  ------------------
 3414|  1.08k|            ofp_port_t port;
 3415|  1.08k|            ofputil_port_from_ofp11(value->be32, &port);
 3416|  1.08k|            ofputil_format_port(port, port_map, s);
 3417|  1.08k|            break;
 3418|  1.08k|        }
 3419|       |        /* fall through */
 3420|    339|    case MFS_OFP_PORT:
  ------------------
  |  Branch (3420:5): [True: 72, False: 16.2k]
  ------------------
 3421|    339|        if (!mask) {
  ------------------
  |  Branch (3421:13): [True: 72, False: 267]
  ------------------
 3422|     72|            ofputil_format_port(u16_to_ofp(ntohs(value->be16)), port_map, s);
 3423|     72|            break;
 3424|     72|        }
 3425|       |        /* fall through */
 3426|  2.93k|    case MFS_DECIMAL:
  ------------------
  |  Branch (3426:5): [True: 2.66k, False: 13.6k]
  ------------------
 3427|  10.0k|    case MFS_HEXADECIMAL:
  ------------------
  |  Branch (3427:5): [True: 7.08k, False: 9.19k]
  ------------------
 3428|  10.0k|        mf_format_integer_string(mf, (uint8_t *) value, (uint8_t *) mask, s);
 3429|  10.0k|        break;
 3430|       |
 3431|  1.31k|    case MFS_CT_STATE:
  ------------------
  |  Branch (3431:5): [True: 1.31k, False: 14.9k]
  ------------------
 3432|  1.31k|        mf_format_ct_state_string(value->be32,
 3433|  1.31k|                                  mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|  1.31k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3433:35): [True: 0, False: 1.31k]
  ------------------
 3434|  1.31k|        break;
 3435|       |
 3436|     67|    case MFS_ETHERNET:
  ------------------
  |  Branch (3436:5): [True: 67, False: 16.2k]
  ------------------
 3437|     67|        eth_format_masked(value->mac, mask ? &mask->mac : NULL, s);
  ------------------
  |  Branch (3437:39): [True: 1, False: 66]
  ------------------
 3438|     67|        break;
 3439|       |
 3440|    132|    case MFS_IPV4:
  ------------------
  |  Branch (3440:5): [True: 132, False: 16.1k]
  ------------------
 3441|    132|        ip_format_masked(value->be32, mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|     30|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3441:39): [True: 102, False: 30]
  ------------------
 3442|    132|        break;
 3443|       |
 3444|     48|    case MFS_IPV6:
  ------------------
  |  Branch (3444:5): [True: 48, False: 16.2k]
  ------------------
 3445|     48|        ipv6_format_masked(&value->ipv6, mask ? &mask->ipv6 : NULL, s);
  ------------------
  |  Branch (3445:42): [True: 6, False: 42]
  ------------------
 3446|     48|        break;
 3447|       |
 3448|    315|    case MFS_FRAG:
  ------------------
  |  Branch (3448:5): [True: 315, False: 15.9k]
  ------------------
 3449|    315|        mf_format_frag_string(value->u8, mask ? mask->u8 : UINT8_MAX, s);
  ------------------
  |  Branch (3449:42): [True: 0, False: 315]
  ------------------
 3450|    315|        break;
 3451|       |
 3452|    436|    case MFS_TNL_FLAGS:
  ------------------
  |  Branch (3452:5): [True: 436, False: 15.8k]
  ------------------
 3453|    436|        mf_format_tnl_flags_string(value->be16,
 3454|    436|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|    806|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3454:36): [True: 66, False: 370]
  ------------------
 3455|    436|        break;
 3456|       |
 3457|  1.86k|    case MFS_TCP_FLAGS:
  ------------------
  |  Branch (3457:5): [True: 1.86k, False: 14.4k]
  ------------------
 3458|  1.86k|        mf_format_tcp_flags_string(value->be16,
 3459|  1.86k|                                   mask ? mask->be16 : OVS_BE16_MAX, s);
  ------------------
  |  |   42|  3.72k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  |  Branch (3459:36): [True: 0, False: 1.86k]
  ------------------
 3460|  1.86k|        break;
 3461|       |
 3462|    927|    case MFS_PACKET_TYPE:
  ------------------
  |  Branch (3462:5): [True: 927, False: 15.3k]
  ------------------
 3463|    927|        mf_format_packet_type_string(value->be32,
 3464|    927|                                     mask ? mask->be32 : OVS_BE32_MAX, s);
  ------------------
  |  |   43|    927|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (3464:38): [True: 0, False: 927]
  ------------------
 3465|    927|        break;
 3466|       |
 3467|      0|    default:
  ------------------
  |  Branch (3467:5): [True: 0, False: 16.2k]
  ------------------
 3468|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 3469|  16.2k|    }
 3470|  16.2k|}
mf_write_subfield_value:
 3507|  27.4k|{
 3508|  27.4k|    const struct mf_field *field = sf->field;
 3509|  27.4k|    union mf_value value, mask;
 3510|  27.4k|    unsigned int size = DIV_ROUND_UP(sf->n_bits, 8);
  ------------------
  |  |  300|  27.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 3511|       |
 3512|  27.4k|    mf_get(field, match, &value, &mask);
 3513|  27.4k|    bitwise_copy(src, size, 0, &value, field->n_bytes, sf->ofs, sf->n_bits);
 3514|  27.4k|    bitwise_one (              &mask,  field->n_bytes, sf->ofs, sf->n_bits);
 3515|       |    mf_set(field, &value, &mask, match, NULL);
 3516|  27.4k|}
field_array_set:
 3571|  9.20k|{
 3572|  9.20k|    size_t i, offset = 0;
 3573|       |
 3574|  9.20k|    ovs_assert(id < MFF_N_IDS);
  ------------------
  |  |   62|  9.20k|#define ovs_assert ovs_ignore
  ------------------
 3575|       |
 3576|       |    /* Find the spot for 'id'. */
 3577|  9.20k|    BITMAP_FOR_EACH_1 (i, id, fa->used.bm) {
  ------------------
  |  |  281|  9.20k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  15.4k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 6.21k, False: 9.20k]
  |  |  |  |  ------------------
  |  |  |  |  279|  9.20k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 3578|  6.21k|        offset += mf_from_id(i)->n_bytes;
 3579|  6.21k|    }
 3580|       |
 3581|  9.20k|    size_t value_size = mf_from_id(id)->n_bytes;
 3582|       |
 3583|       |    /* make room if necessary. */
 3584|  9.20k|    if (!bitmap_is_set(fa->used.bm, id)) {
  ------------------
  |  Branch (3584:9): [True: 9.20k, False: 0]
  ------------------
 3585|  9.20k|        fa->values = xrealloc(fa->values, fa->values_size + value_size);
 3586|       |        /* Move remainder forward, if any. */
 3587|  9.20k|        if (offset < fa->values_size) {
  ------------------
  |  Branch (3587:13): [True: 2.22k, False: 6.98k]
  ------------------
 3588|  2.22k|            memmove(fa->values + offset + value_size, fa->values + offset,
 3589|  2.22k|                    fa->values_size - offset);
 3590|  2.22k|        }
 3591|  9.20k|        fa->values_size += value_size;
 3592|  9.20k|    }
 3593|  9.20k|    bitmap_set1(fa->used.bm, id);
 3594|       |
 3595|  9.20k|    memcpy(fa->values + offset, value, value_size);
 3596|  9.20k|}
mf_get_vl_mff:
 3670|   275k|{
 3671|   275k|    if (mff && mff->variable_len && vl_mff_map) {
  ------------------
  |  Branch (3671:9): [True: 275k, False: 0]
  |  Branch (3671:16): [True: 121k, False: 154k]
  |  Branch (3671:37): [True: 0, False: 121k]
  ------------------
 3672|      0|        struct vl_mf_field *vl_mff = mf_get_vl_mff__(mff->id, vl_mff_map);
 3673|       |
 3674|      0|        return vl_mff ? &vl_mff->mf : NULL;
  ------------------
  |  Branch (3674:16): [True: 0, False: 0]
  ------------------
 3675|      0|    }
 3676|       |
 3677|   275k|    return NULL;
 3678|   275k|}
mf_vl_mff_invalid:
 3781|   275k|{
 3782|   275k|    return map && mff && mff->variable_len && !mff->mapped;
  ------------------
  |  Branch (3782:12): [True: 0, False: 275k]
  |  Branch (3782:19): [True: 0, False: 0]
  |  Branch (3782:26): [True: 0, False: 0]
  |  Branch (3782:47): [True: 0, False: 0]
  ------------------
 3783|   275k|}
mf_vl_mff_set_tlv_bitmap:
 3787|  81.1k|{
 3788|  81.1k|    if (mff && mff->mapped) {
  ------------------
  |  Branch (3788:9): [True: 81.1k, False: 0]
  |  Branch (3788:16): [True: 0, False: 81.1k]
  ------------------
 3789|      0|        ovs_assert(mf_is_tun_metadata(mff));
  ------------------
  |  |   62|      0|#define ovs_assert ovs_ignore
  ------------------
 3790|      0|        ULLONG_SET1(*tlv_bitmap, mff->id - MFF_TUN_METADATA0);
  ------------------
  |  |  290|      0|#define ULLONG_SET1(MAP, OFFSET) ((MAP) |= 1ULL << (OFFSET))
  ------------------
 3791|      0|    }
 3792|  81.1k|}
mf_vl_mff_nx_pull_header:
 3833|  23.6k|{
 3834|  23.6k|    enum ofperr error = nx_pull_header(b, vl_mff_map, field, masked);
 3835|  23.6k|    if (error) {
  ------------------
  |  Branch (3835:9): [True: 3.28k, False: 20.4k]
  ------------------
 3836|  3.28k|        return error;
 3837|  3.28k|    }
 3838|       |
 3839|  20.4k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3840|  20.4k|    return 0;
 3841|  23.6k|}
mf_vl_mff_nx_pull_entry:
 3847|  16.1k|{
 3848|  16.1k|    enum ofperr error = nx_pull_entry(b, vl_mff_map, field, value, mask, true);
 3849|  16.1k|    if (error) {
  ------------------
  |  Branch (3849:9): [True: 1.84k, False: 14.3k]
  ------------------
 3850|  1.84k|        return error;
 3851|  1.84k|    }
 3852|       |
 3853|  14.3k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3854|  14.3k|    return 0;
 3855|  16.1k|}
mf_vl_mff_mf_from_nxm_header:
 3862|  50.3k|{
 3863|  50.3k|    *field = mf_from_nxm_header(header, vl_mff_map);
 3864|  50.3k|    if (!*field) {
  ------------------
  |  Branch (3864:9): [True: 3.84k, False: 46.4k]
  ------------------
 3865|  3.84k|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 3866|  46.4k|    } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (3866:16): [True: 0, False: 46.4k]
  ------------------
 3867|      0|        return OFPERR_NXFMFC_INVALID_TLV_FIELD;
 3868|      0|    }
 3869|       |
 3870|  46.4k|    mf_vl_mff_set_tlv_bitmap(*field, tlv_bitmap);
 3871|  46.4k|    return 0;
 3872|  50.3k|}
mf_bitmap_and:
 3886|   125k|{
 3887|   125k|    bitmap_and(a.bm, b.bm, MFF_N_IDS);
 3888|   125k|    return a;
 3889|   125k|}
mf_bitmap_not:
 3902|  62.8k|{
 3903|  62.8k|    bitmap_not(x.bm, MFF_N_IDS);
 3904|  62.8k|    return x;
 3905|  62.8k|}
meta-flow.c:mf_are_prereqs_ok__:
  444|  53.2k|{
  445|  53.2k|    ovs_be16 dl_type = get_dl_type(flow);
  446|       |
  447|  53.2k|    switch (mf->prereqs) {
  ------------------
  |  Branch (447:13): [True: 53.2k, False: 0]
  ------------------
  448|  39.7k|    case MFP_NONE:
  ------------------
  |  Branch (448:5): [True: 39.7k, False: 13.4k]
  ------------------
  449|  39.7k|        return true;
  450|    498|    case MFP_ETHERNET:
  ------------------
  |  Branch (450:5): [True: 498, False: 52.7k]
  ------------------
  451|    498|        return is_ethernet(flow, wc);
  452|  1.06k|    case MFP_ARP:
  ------------------
  |  Branch (452:5): [True: 1.06k, False: 52.1k]
  ------------------
  453|  1.06k|        return (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (453:17): [True: 472, False: 595]
  ------------------
  454|    595|                dl_type == htons(ETH_TYPE_RARP));
  ------------------
  |  Branch (454:17): [True: 23, False: 572]
  ------------------
  455|     12|    case MFP_IPV4:
  ------------------
  |  Branch (455:5): [True: 12, False: 53.2k]
  ------------------
  456|     12|        return dl_type == htons(ETH_TYPE_IP);
  457|     42|    case MFP_IPV6:
  ------------------
  |  Branch (457:5): [True: 42, False: 53.2k]
  ------------------
  458|     42|        return dl_type == htons(ETH_TYPE_IPV6);
  459|  1.18k|    case MFP_VLAN_VID:
  ------------------
  |  Branch (459:5): [True: 1.18k, False: 52.0k]
  ------------------
  460|  1.18k|        return is_vlan(flow, wc);
  461|    170|    case MFP_MPLS:
  ------------------
  |  Branch (461:5): [True: 170, False: 53.0k]
  ------------------
  462|    170|        return eth_type_mpls(dl_type);
  463|  3.23k|    case MFP_IP_ANY:
  ------------------
  |  Branch (463:5): [True: 3.23k, False: 50.0k]
  ------------------
  464|  3.23k|        return is_ip_any(flow);
  465|     67|    case MFP_NSH:
  ------------------
  |  Branch (465:5): [True: 67, False: 53.1k]
  ------------------
  466|     67|        return dl_type == htons(ETH_TYPE_NSH);
  467|  1.62k|    case MFP_CT_VALID:
  ------------------
  |  Branch (467:5): [True: 1.62k, False: 51.6k]
  ------------------
  468|  1.62k|        return is_ct_valid(flow, mask, wc);
  469|    543|    case MFP_TCP:
  ------------------
  |  Branch (469:5): [True: 543, False: 52.7k]
  ------------------
  470|       |        /* Matching !FRAG_LATER is not enforced (mask is not checked). */
  471|    543|        return is_tcp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    179|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (471:16): [True: 179, False: 364]
  |  Branch (471:36): [True: 179, False: 0]
  ------------------
  472|    306|    case MFP_UDP:
  ------------------
  |  Branch (472:5): [True: 306, False: 52.9k]
  ------------------
  473|    306|        return is_udp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    157|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (473:16): [True: 157, False: 149]
  |  Branch (473:36): [True: 157, False: 0]
  ------------------
  474|    609|    case MFP_SCTP:
  ------------------
  |  Branch (474:5): [True: 609, False: 52.6k]
  ------------------
  475|    609|        return is_sctp(flow, wc) && !(flow->nw_frag & FLOW_NW_FRAG_LATER);
  ------------------
  |  |   55|    251|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (475:16): [True: 251, False: 358]
  |  Branch (475:37): [True: 251, False: 0]
  ------------------
  476|    579|    case MFP_ICMPV4:
  ------------------
  |  Branch (476:5): [True: 579, False: 52.6k]
  ------------------
  477|    579|        return is_icmpv4(flow, wc);
  478|  1.12k|    case MFP_ICMPV6:
  ------------------
  |  Branch (478:5): [True: 1.12k, False: 52.1k]
  ------------------
  479|  1.12k|        return is_icmpv6(flow, wc);
  480|    284|    case MFP_ND:
  ------------------
  |  Branch (480:5): [True: 284, False: 52.9k]
  ------------------
  481|    284|        return is_nd(flow, wc);
  482|  1.33k|    case MFP_ND_SOLICIT:
  ------------------
  |  Branch (482:5): [True: 1.33k, False: 51.9k]
  ------------------
  483|  1.33k|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_SOLICIT);
  ------------------
  |  Branch (483:16): [True: 215, False: 1.12k]
  |  Branch (483:35): [True: 152, False: 63]
  ------------------
  484|    794|    case MFP_ND_ADVERT:
  ------------------
  |  Branch (484:5): [True: 794, False: 52.4k]
  ------------------
  485|    794|        return is_nd(flow, wc) && flow->tp_src == htons(ND_NEIGHBOR_ADVERT);
  ------------------
  |  Branch (485:16): [True: 320, False: 474]
  |  Branch (485:35): [True: 236, False: 84]
  ------------------
  486|  53.2k|    }
  487|       |
  488|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  489|  53.2k|}
meta-flow.c:field_len:
 1371|   134k|{
 1372|   134k|    const uint8_t *value = &value_->u8;
 1373|   134k|    int i;
 1374|       |
 1375|   134k|    if (!mf->variable_len) {
  ------------------
  |  Branch (1375:9): [True: 0, False: 134k]
  ------------------
 1376|      0|        return mf->n_bytes;
 1377|      0|    }
 1378|       |
 1379|   134k|    if (!value) {
  ------------------
  |  Branch (1379:9): [True: 0, False: 134k]
  ------------------
 1380|      0|        return 0;
 1381|      0|    }
 1382|       |
 1383|  16.0M|    for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (1383:17): [True: 15.9M, False: 101k]
  ------------------
 1384|  15.9M|        if (value[i] != 0) {
  ------------------
  |  Branch (1384:13): [True: 32.8k, False: 15.9M]
  ------------------
 1385|  32.8k|            break;
 1386|  32.8k|        }
 1387|  15.9M|    }
 1388|       |
 1389|   134k|    return mf->n_bytes - i;
 1390|   134k|}
meta-flow.c:mf_check__:
 2838|  54.8k|{
 2839|  54.8k|    if (!sf->field) {
  ------------------
  |  Branch (2839:9): [True: 0, False: 54.8k]
  ------------------
 2840|      0|        VLOG_WARN_RL(&rl, "unknown %s field", type);
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2841|      0|        return OFPERR_OFPBAC_BAD_SET_TYPE;
 2842|  54.8k|    } else if (!sf->n_bits) {
  ------------------
  |  Branch (2842:16): [True: 5.30k, False: 49.5k]
  ------------------
 2843|  5.30k|        VLOG_WARN_RL(&rl, "zero bit %s field %s", type, sf->field->name);
  ------------------
  |  |  224|  5.30k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  5.30k|    do {                                                                \
  |  |  |  |  288|  5.30k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  5.30k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 5.30k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  5.30k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 5.30k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2844|  5.30k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2845|  49.5k|    } else if (sf->ofs >= sf->field->n_bits) {
  ------------------
  |  Branch (2845:16): [True: 3.33k, False: 46.2k]
  ------------------
 2846|  3.33k|        VLOG_WARN_RL(&rl, "bit offset %d exceeds %d-bit width of %s field %s",
  ------------------
  |  |  224|  3.33k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.33k|    do {                                                                \
  |  |  |  |  288|  3.33k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.33k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.33k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.33k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.33k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2847|  3.33k|                     sf->ofs, sf->field->n_bits, type, sf->field->name);
 2848|  3.33k|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2849|  46.2k|    } else if (sf->ofs + sf->n_bits > sf->field->n_bits) {
  ------------------
  |  Branch (2849:16): [True: 490, False: 45.7k]
  ------------------
 2850|    490|        VLOG_WARN_RL(&rl, "bit offset %d and width %d exceeds %d-bit width "
  ------------------
  |  |  224|    490|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    490|    do {                                                                \
  |  |  |  |  288|    490|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    490|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 490]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    490|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 490]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2851|    490|                     "of %s field %s", sf->ofs, sf->n_bits,
 2852|    490|                     sf->field->n_bits, type, sf->field->name);
 2853|    490|        return OFPERR_OFPBAC_BAD_SET_LEN;
 2854|  45.7k|    } else if (match && !mf_are_match_prereqs_ok(sf->field, match)) {
  ------------------
  |  Branch (2854:16): [True: 32.0k, False: 13.6k]
  |  Branch (2854:25): [True: 858, False: 31.2k]
  ------------------
 2855|    858|        VLOG_WARN_RL(&rl, "%s field %s lacks correct prerequisites",
  ------------------
  |  |  224|    858|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    858|    do {                                                                \
  |  |  |  |  288|    858|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    858|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 858]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    858|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 858]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2856|    858|                     type, sf->field->name);
 2857|    858|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 2858|  44.8k|    } else {
 2859|  44.8k|        return 0;
 2860|  44.8k|    }
 2861|  54.8k|}
meta-flow.c:mf_format_integer_string:
 3327|  10.0k|{
 3328|  10.0k|    if (mf->string == MFS_HEXADECIMAL) {
  ------------------
  |  Branch (3328:9): [True: 7.08k, False: 2.93k]
  ------------------
 3329|  7.08k|        ds_put_hex(s, valuep, mf->n_bytes);
 3330|  7.08k|    } else {
 3331|  2.93k|        unsigned long long int integer = 0;
 3332|  2.93k|        int i;
 3333|       |
 3334|  2.93k|        ovs_assert(mf->n_bytes <= 8);
  ------------------
  |  |   62|  2.93k|#define ovs_assert ovs_ignore
  ------------------
 3335|  8.19k|        for (i = 0; i < mf->n_bytes; i++) {
  ------------------
  |  Branch (3335:21): [True: 5.26k, False: 2.93k]
  ------------------
 3336|  5.26k|            integer = (integer << 8) | valuep[i];
 3337|  5.26k|        }
 3338|  2.93k|        ds_put_format(s, "%lld", integer);
 3339|  2.93k|    }
 3340|       |
 3341|  10.0k|    if (maskp) {
  ------------------
  |  Branch (3341:9): [True: 1.22k, False: 8.79k]
  ------------------
 3342|       |        /* I guess we could write the mask in decimal for MFS_DECIMAL but I'm
 3343|       |         * not sure that that a bit-mask written in decimal is ever easier to
 3344|       |         * understand than the same bit-mask written in hexadecimal. */
 3345|  1.22k|        ds_put_char(s, '/');
 3346|  1.22k|        ds_put_hex(s, maskp, mf->n_bytes);
 3347|  1.22k|    }
 3348|  10.0k|}
meta-flow.c:mf_format_ct_state_string:
 3383|  1.31k|{
 3384|  1.31k|    format_flags_masked(s, NULL, ct_state_to_string, ntohl(value),
 3385|  1.31k|                        ntohl(mask), UINT16_MAX);
 3386|  1.31k|}
meta-flow.c:mf_format_frag_string:
 3352|    315|{
 3353|    315|    const struct frag_handling *h;
 3354|       |
 3355|    315|    mask &= FLOW_NW_FRAG_MASK;
  ------------------
  |  |   56|    315|#define FLOW_NW_FRAG_MASK  (FLOW_NW_FRAG_ANY | FLOW_NW_FRAG_LATER)
  |  |  ------------------
  |  |  |  |   54|    315|#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|    315|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  |  |  ------------------
  ------------------
 3356|    315|    value &= mask;
 3357|       |
 3358|  2.05k|    for (h = all_frags; h < &all_frags[ARRAY_SIZE(all_frags)]; h++) {
  ------------------
  |  |  297|  2.05k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  2.05k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  2.05k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  2.05k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  2.05k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  2.05k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (3358:25): [True: 1.82k, False: 236]
  ------------------
 3359|  1.82k|        if (value == h->value && mask == h->mask) {
  ------------------
  |  Branch (3359:13): [True: 315, False: 1.50k]
  |  Branch (3359:34): [True: 79, False: 236]
  ------------------
 3360|     79|            ds_put_cstr(s, h->name);
 3361|     79|            return;
 3362|     79|        }
 3363|  1.82k|    }
 3364|    236|    ds_put_cstr(s, "<error>");
 3365|    236|}
meta-flow.c:mf_format_tnl_flags_string:
 3369|    436|{
 3370|    436|    format_flags_masked(s, NULL, flow_tun_flag_to_string, ntohs(value),
 3371|    436|                        ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    436|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
                                      ntohs(mask) & FLOW_TNL_PUB_F_MASK, FLOW_TNL_PUB_F_MASK);
  ------------------
  |  |   58|    436|#define FLOW_TNL_PUB_F_MASK ((1 << 1) - 1)
  ------------------
 3372|    436|}
meta-flow.c:mf_format_tcp_flags_string:
 3376|  1.86k|{
 3377|  1.86k|    format_flags_masked(s, NULL, packet_tcp_flag_to_string, ntohs(value),
 3378|  1.86k|                        TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.86k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
                                      TCP_FLAGS(mask), TCP_FLAGS(OVS_BE16_MAX));
  ------------------
  |  |  904|  1.86k|#define TCP_FLAGS(tcp_ctl) (ntohs(tcp_ctl) & 0x0fff)
  ------------------
 3379|  1.86k|}
meta-flow.c:mf_format_packet_type_string:
 3390|    927|{
 3391|    927|    format_packet_type_masked(s, value, mask);
 3392|    927|}

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

netdev_features_to_bps:
 1180|  32.0k|{
 1181|  32.0k|    enum {
 1182|  32.0k|        F_1000000MB = NETDEV_F_1TB_FD,
 1183|  32.0k|        F_100000MB = NETDEV_F_100GB_FD,
 1184|  32.0k|        F_40000MB = NETDEV_F_40GB_FD,
 1185|  32.0k|        F_10000MB = NETDEV_F_10GB_FD,
 1186|  32.0k|        F_1000MB = NETDEV_F_1GB_HD | NETDEV_F_1GB_FD,
 1187|  32.0k|        F_100MB = NETDEV_F_100MB_HD | NETDEV_F_100MB_FD,
 1188|  32.0k|        F_10MB = NETDEV_F_10MB_HD | NETDEV_F_10MB_FD
 1189|  32.0k|    };
 1190|       |
 1191|  32.0k|    return (  features & F_1000000MB ? UINT64_C(1000000000000)
  ------------------
  |  Branch (1191:15): [True: 0, False: 32.0k]
  ------------------
 1192|  32.0k|            : features & F_100000MB  ? UINT64_C(100000000000)
  ------------------
  |  Branch (1192:15): [True: 0, False: 32.0k]
  ------------------
 1193|  32.0k|            : features & F_40000MB   ? UINT64_C(40000000000)
  ------------------
  |  Branch (1193:15): [True: 0, False: 32.0k]
  ------------------
 1194|  32.0k|            : features & F_10000MB   ? UINT64_C(10000000000)
  ------------------
  |  Branch (1194:15): [True: 10.8k, False: 21.2k]
  ------------------
 1195|  32.0k|            : features & F_1000MB    ? UINT64_C(1000000000)
  ------------------
  |  Branch (1195:15): [True: 3.97k, False: 17.2k]
  ------------------
 1196|  21.2k|            : features & F_100MB     ? UINT64_C(100000000)
  ------------------
  |  Branch (1196:15): [True: 4.40k, False: 12.8k]
  ------------------
 1197|  17.2k|            : features & F_10MB      ? UINT64_C(10000000)
  ------------------
  |  Branch (1197:15): [True: 2.42k, False: 10.4k]
  ------------------
 1198|  12.8k|                                     : default_bps);
 1199|  32.0k|}
netdev_features_format:
 1273|  53.9k|{
 1274|  53.9k|    ofp_print_bit_names(s, features, netdev_feature_to_name, ' ');
 1275|  53.9k|    ds_put_char(s, '\n');
 1276|  53.9k|}
netdev_free_custom_stats_counters:
 2350|  26.1k|{
 2351|  26.1k|    if (custom_stats) {
  ------------------
  |  Branch (2351:9): [True: 26.1k, False: 0]
  ------------------
 2352|  26.1k|        if (custom_stats->counters) {
  ------------------
  |  Branch (2352:13): [True: 4.35k, False: 21.8k]
  ------------------
 2353|  4.35k|            free(custom_stats->counters);
 2354|  4.35k|            custom_stats->counters = NULL;
 2355|  4.35k|            custom_stats->size = 0;
 2356|  4.35k|        }
 2357|  26.1k|        free(custom_stats->label);
 2358|       |        custom_stats->label = NULL;
 2359|  26.1k|    }
 2360|  26.1k|}
netdev.c:netdev_feature_to_name:
 1246|   294k|{
 1247|   294k|    enum netdev_features f = bit;
 1248|       |
 1249|   294k|    switch (f) {
  ------------------
  |  Branch (1249:13): [True: 294k, False: 0]
  ------------------
 1250|  25.5k|    case NETDEV_F_10MB_HD:    return "10MB-HD";
  ------------------
  |  Branch (1250:5): [True: 25.5k, False: 268k]
  ------------------
 1251|  23.9k|    case NETDEV_F_10MB_FD:    return "10MB-FD";
  ------------------
  |  Branch (1251:5): [True: 23.9k, False: 270k]
  ------------------
 1252|  23.6k|    case NETDEV_F_100MB_HD:   return "100MB-HD";
  ------------------
  |  Branch (1252:5): [True: 23.6k, False: 270k]
  ------------------
 1253|  29.7k|    case NETDEV_F_100MB_FD:   return "100MB-FD";
  ------------------
  |  Branch (1253:5): [True: 29.7k, False: 264k]
  ------------------
 1254|  21.1k|    case NETDEV_F_1GB_HD:     return "1GB-HD";
  ------------------
  |  Branch (1254:5): [True: 21.1k, False: 273k]
  ------------------
 1255|  23.1k|    case NETDEV_F_1GB_FD:     return "1GB-FD";
  ------------------
  |  Branch (1255:5): [True: 23.1k, False: 271k]
  ------------------
 1256|  24.2k|    case NETDEV_F_10GB_FD:    return "10GB-FD";
  ------------------
  |  Branch (1256:5): [True: 24.2k, False: 269k]
  ------------------
 1257|  1.19k|    case NETDEV_F_40GB_FD:    return "40GB-FD";
  ------------------
  |  Branch (1257:5): [True: 1.19k, False: 293k]
  ------------------
 1258|  1.41k|    case NETDEV_F_100GB_FD:   return "100GB-FD";
  ------------------
  |  Branch (1258:5): [True: 1.41k, False: 292k]
  ------------------
 1259|  1.25k|    case NETDEV_F_1TB_FD:     return "1TB-FD";
  ------------------
  |  Branch (1259:5): [True: 1.25k, False: 292k]
  ------------------
 1260|  1.24k|    case NETDEV_F_OTHER:      return "OTHER";
  ------------------
  |  Branch (1260:5): [True: 1.24k, False: 292k]
  ------------------
 1261|  18.9k|    case NETDEV_F_COPPER:     return "COPPER";
  ------------------
  |  Branch (1261:5): [True: 18.9k, False: 275k]
  ------------------
 1262|  25.6k|    case NETDEV_F_FIBER:      return "FIBER";
  ------------------
  |  Branch (1262:5): [True: 25.6k, False: 268k]
  ------------------
 1263|  22.9k|    case NETDEV_F_AUTONEG:    return "AUTO_NEG";
  ------------------
  |  Branch (1263:5): [True: 22.9k, False: 271k]
  ------------------
 1264|  23.6k|    case NETDEV_F_PAUSE:      return "AUTO_PAUSE";
  ------------------
  |  Branch (1264:5): [True: 23.6k, False: 270k]
  ------------------
 1265|  26.3k|    case NETDEV_F_PAUSE_ASYM: return "AUTO_PAUSE_ASYM";
  ------------------
  |  Branch (1265:5): [True: 26.3k, False: 267k]
  ------------------
 1266|   294k|    }
 1267|       |
 1268|      0|    return NULL;
 1269|   294k|}

mf_nxm_header:
  234|  1.19k|{
  235|  1.19k|    uint64_t oxm = mf_oxm_header(id, 0);
  236|  1.19k|    return is_experimenter_oxm(oxm) ? 0 : oxm >> 32;
  ------------------
  |  Branch (236:12): [True: 0, False: 1.19k]
  ------------------
  237|  1.19k|}
mf_from_nxm_header:
  274|  50.3k|{
  275|  50.3k|    return mf_from_oxm_header((uint64_t) header << 32, vl_mff_map, false, NULL);
  276|  50.3k|}
nx_pull_entry:
  468|  16.1k|{
  469|  16.1k|    uint64_t header;
  470|       |
  471|       |    return nx_pull_entry__(b, false, vl_mff_map, &header, field, value, mask, is_action);
  472|  16.1k|}
nx_pull_header:
  487|  54.4k|{
  488|  54.4k|    enum ofperr error;
  489|  54.4k|    uint64_t header;
  490|       |
  491|  54.4k|    error = nx_pull_header__(b, false, vl_mff_map,  &header, field, false);
  492|  54.4k|    if (masked) {
  ------------------
  |  Branch (492:9): [True: 30.4k, False: 23.9k]
  ------------------
  493|  30.4k|        *masked = !error && nxm_hasmask(header);
  ------------------
  |  Branch (493:19): [True: 843, False: 29.6k]
  |  Branch (493:29): [True: 746, False: 97]
  ------------------
  494|  30.4k|    } else if (!error && nxm_hasmask(header)) {
  ------------------
  |  Branch (494:16): [True: 20.6k, False: 3.27k]
  |  Branch (494:26): [True: 130, False: 20.5k]
  ------------------
  495|    130|        error = OFPERR_OFPBMC_BAD_MASK;
  496|    130|    }
  497|  54.4k|    return error;
  498|  54.4k|}
nx_pull_match:
  642|  9.76k|{
  643|       |    return nx_pull_match__(b, match_len, true, pipeline_fields_only, match,
  644|  9.76k|                           cookie, cookie_mask, tun_table, vl_mff_map);
  645|  9.76k|}
nx_pull_match_loose:
  655|  1.81k|{
  656|  1.81k|    return nx_pull_match__(b, match_len, false, pipeline_fields_only, match,
  657|       |                           cookie, cookie_mask, tun_table, NULL);
  658|  1.81k|}
oxm_pull_match:
  712|  46.5k|{
  713|       |    return oxm_pull_match__(b, true, pipeline_fields_only, tun_table,
  714|  46.5k|                            vl_mff_map, match);
  715|  46.5k|}
oxm_pull_match_loose:
  723|   127k|{
  724|   127k|    return oxm_pull_match__(b, false, pipeline_fields_only, tun_table, NULL,
  725|   127k|                            match);
  726|   127k|}
oxm_decode_match:
  740|  3.07k|{
  741|  3.07k|    return nx_pull_raw(oxm, oxm_len, !loose, false, match, NULL, NULL,
  742|  3.07k|                       tun_table, vl_mff_map);
  743|  3.07k|}
oxm_pull_field_array:
  750|  3.86k|{
  751|  3.86k|    struct ofpbuf b = ofpbuf_const_initializer(fields_data, fields_len);
  752|  13.0k|    while (b.size) {
  ------------------
  |  Branch (752:12): [True: 10.0k, False: 2.98k]
  ------------------
  753|  10.0k|        const uint8_t *pos = b.data;
  754|  10.0k|        const struct mf_field *field;
  755|  10.0k|        union mf_value value;
  756|  10.0k|        enum ofperr error;
  757|  10.0k|        uint64_t header;
  758|       |
  759|  10.0k|        error = nx_pull_entry__(&b, false, NULL, &header, &field, &value,
  760|  10.0k|                                NULL, false);
  761|  10.0k|        if (error) {
  ------------------
  |  Branch (761:13): [True: 757, False: 9.32k]
  ------------------
  762|    757|            VLOG_DBG_RL(&rl, "error pulling field array field");
  ------------------
  |  |  226|    757|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    757|    do {                                                                \
  |  |  |  |  288|    757|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    757|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 757]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    757|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 757]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  763|  9.32k|        } else if (!field) {
  ------------------
  |  Branch (763:20): [True: 0, False: 9.32k]
  ------------------
  764|      0|            VLOG_DBG_RL(&rl, "unknown field array field");
  ------------------
  |  |  226|      0|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  765|      0|            error = OFPERR_OFPBMC_BAD_FIELD;
  766|  9.32k|        } else if (bitmap_is_set(fa->used.bm, field->id)) {
  ------------------
  |  Branch (766:20): [True: 70, False: 9.25k]
  ------------------
  767|     70|            VLOG_DBG_RL(&rl, "duplicate field array field '%s'", field->name);
  ------------------
  |  |  226|     70|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     70|    do {                                                                \
  |  |  |  |  288|     70|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     70|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 70]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     70|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 70]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  768|     70|            error = OFPERR_OFPBMC_DUP_FIELD;
  769|  9.25k|        } else if (!mf_is_mask_valid(field, &value)) {
  ------------------
  |  Branch (769:20): [True: 51, False: 9.20k]
  ------------------
  770|     51|            VLOG_DBG_RL(&rl, "bad mask in field array field '%s'", field->name);
  ------------------
  |  |  226|     51|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     51|    do {                                                                \
  |  |  |  |  288|     51|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     51|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 51]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     51|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 51]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  771|     51|            error = OFPERR_OFPBMC_BAD_MASK;
  772|  9.20k|        } else {
  773|  9.20k|            field_array_set(field->id, &value, fa);
  774|  9.20k|        }
  775|       |
  776|  10.0k|        if (error) {
  ------------------
  |  Branch (776:13): [True: 878, False: 9.20k]
  ------------------
  777|    878|            const uint8_t *start = fields_data;
  778|       |
  779|    878|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  226|    878|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    878|    do {                                                                \
  |  |  |  |  288|    878|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    878|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 878]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    878|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 878]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|    878|                        "within field array (%s)", pos - start,
  781|    878|                        ofperr_to_string(error));
  782|       |
  783|    878|            free(fa->values);
  784|    878|            fa->values = NULL;
  785|    878|            return error;
  786|    878|        }
  787|  10.0k|    }
  788|       |
  789|  2.98k|    return 0;
  790|  3.86k|}
oxm_format_field_array:
 1395|  2.90k|{
 1396|  2.90k|    size_t start_len = ds->length;
 1397|  2.90k|    size_t i, offset = 0;
 1398|       |
 1399|  8.31k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, fa->used.bm) {
  ------------------
  |  |  281|  2.90k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|  11.2k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 8.31k, False: 2.90k]
  |  |  |  |  ------------------
  |  |  |  |  279|  8.31k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1400|  8.31k|        const struct mf_field *mf = mf_from_id(i);
 1401|  8.31k|        union mf_value value;
 1402|       |
 1403|  8.31k|        memcpy(&value, fa->values + offset, mf->n_bytes);
 1404|  8.31k|        nx_format_mask_tlv(ds, i, &value);
 1405|  8.31k|        offset += mf->n_bytes;
 1406|  8.31k|    }
 1407|       |
 1408|  2.90k|    if (ds->length > start_len) {
  ------------------
  |  Branch (1408:9): [True: 2.90k, False: 0]
  ------------------
 1409|  2.90k|        ds_chomp(ds, ',');
 1410|  2.90k|    }
 1411|  2.90k|}
nxm_format_reg_move:
 1821|    136|{
 1822|    136|    ds_put_format(s, "%smove:%s", colors.special, colors.end);
 1823|    136|    mf_format_subfield(&move->src, s);
 1824|    136|    ds_put_format(s, "%s->%s", colors.special, colors.end);
 1825|    136|    mf_format_subfield(&move->dst, s);
 1826|    136|}
nxm_reg_move_check:
 1832|  7.71k|{
 1833|  7.71k|    enum ofperr error;
 1834|       |
 1835|  7.71k|    error = mf_check_src(&move->src, match);
 1836|  7.71k|    if (error) {
  ------------------
  |  Branch (1836:9): [True: 6.94k, False: 777]
  ------------------
 1837|  6.94k|        return error;
 1838|  6.94k|    }
 1839|       |
 1840|    777|    return mf_check_dst(&move->dst, match);
 1841|  7.71k|}
nxm_format_stack_push:
 1892|    205|{
 1893|    205|    ds_put_format(s, "%spush:%s", colors.param, colors.end);
 1894|    205|    mf_format_subfield(&push->subfield, s);
 1895|    205|}
nxm_format_stack_pop:
 1899|    492|{
 1900|    492|    ds_put_format(s, "%spop:%s", colors.param, colors.end);
 1901|    492|    mf_format_subfield(&pop->subfield, s);
 1902|    492|}
nxm_stack_push_check:
 1907|    833|{
 1908|    833|    return mf_check_src(&push->subfield, match);
 1909|    833|}
nxm_stack_pop_check:
 1914|  1.63k|{
 1915|  1.63k|    return mf_check_dst(&pop->subfield, match);
 1916|  1.63k|}
nx_stack_push_bottom:
 1942|  3.30k|{
 1943|  3.30k|    ofpbuf_push(stack, &bytes, sizeof bytes);
 1944|  3.30k|    ofpbuf_push(stack, v, bytes);
 1945|  3.30k|}
nx_stack_pop:
 1952|  2.17k|{
 1953|  2.17k|    if (!stack->size) {
  ------------------
  |  Branch (1953:9): [True: 0, False: 2.17k]
  ------------------
 1954|      0|        *bytes = 0;
 1955|      0|        return NULL;
 1956|      0|    }
 1957|       |
 1958|  2.17k|    stack->size -= sizeof *bytes;
 1959|  2.17k|    memcpy(bytes, ofpbuf_tail(stack), sizeof *bytes);
 1960|       |
 1961|  2.17k|    ovs_assert(stack->size >= *bytes);
  ------------------
  |  |   62|  2.17k|#define ovs_assert ovs_ignore
  ------------------
 1962|  2.17k|    stack->size -= *bytes;
 1963|  2.17k|    return ofpbuf_tail(stack);
 1964|  2.17k|}
mf_format_subfield:
 2036|  34.5k|{
 2037|  34.5k|    if (!sf->field) {
  ------------------
  |  Branch (2037:9): [True: 0, False: 34.5k]
  ------------------
 2038|      0|        ds_put_cstr(s, "<unknown>");
 2039|  34.5k|    } else {
 2040|  34.5k|        const struct nxm_field *f = nxm_field_by_mf_id(sf->field->id, 0);
 2041|  34.5k|        ds_put_cstr(s, f ? f->name : sf->field->name);
  ------------------
  |  Branch (2041:24): [True: 34.5k, False: 0]
  ------------------
 2042|  34.5k|    }
 2043|       |
 2044|  34.5k|    if (sf->field && sf->ofs == 0 && sf->n_bits == sf->field->n_bits) {
  ------------------
  |  Branch (2044:9): [True: 34.5k, False: 0]
  |  Branch (2044:22): [True: 13.5k, False: 21.0k]
  |  Branch (2044:38): [True: 2.10k, False: 11.4k]
  ------------------
 2045|  2.10k|        ds_put_cstr(s, "[]");
 2046|  32.4k|    } else if (sf->n_bits == 1) {
  ------------------
  |  Branch (2046:16): [True: 3.95k, False: 28.5k]
  ------------------
 2047|  3.95k|        ds_put_format(s, "[%d]", sf->ofs);
 2048|  28.5k|    } else {
 2049|  28.5k|        ds_put_format(s, "[%d..%d]", sf->ofs, sf->ofs + sf->n_bits - 1);
 2050|  28.5k|    }
 2051|  34.5k|}
oxm_bitmap_to_mf_bitmap:
 2181|  52.8k|{
 2182|  52.8k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  52.8k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2183|       |
 2184|  11.2M|    for (enum mf_field_id id = 0; id < MFF_N_IDS; id++) {
  ------------------
  |  Branch (2184:35): [True: 11.1M, False: 52.8k]
  ------------------
 2185|  11.1M|        uint64_t oxm = mf_oxm_header(id, version);
 2186|  11.1M|        if (oxm && version >= nxm_field_by_header(oxm, false, NULL)->version) {
  ------------------
  |  Branch (2186:13): [True: 10.8M, False: 264k]
  |  Branch (2186:20): [True: 9.88M, False: 1.00M]
  ------------------
 2187|  9.88M|            uint32_t class = nxm_class(oxm);
 2188|  9.88M|            int field = nxm_field(oxm);
 2189|       |
 2190|  9.88M|            if (class == OFPXMC12_OPENFLOW_BASIC
  ------------------
  |  Branch (2190:17): [True: 1.85M, False: 8.03M]
  ------------------
 2191|  1.85M|                && field < 64
  ------------------
  |  Branch (2191:20): [True: 1.85M, False: 0]
  ------------------
 2192|  1.85M|                && oxm_bitmap & htonll(UINT64_C(1) << field)) {
  ------------------
  |  Branch (2192:20): [True: 393k, False: 1.45M]
  ------------------
 2193|   393k|                bitmap_set1(fields.bm, id);
 2194|   393k|            }
 2195|  9.88M|        }
 2196|  11.1M|    }
 2197|  52.8k|    return fields;
 2198|  52.8k|}
nx-match.c:mf_oxm_header:
  221|  11.1M|{
  222|  11.1M|    const struct nxm_field *f = nxm_field_by_mf_id(id, version);
  223|  11.1M|    return f ? f->header : 0;
  ------------------
  |  Branch (223:12): [True: 10.8M, False: 264k]
  ------------------
  224|  11.1M|}
nx-match.c:is_experimenter_oxm:
  108|  3.04M|{
  109|  3.04M|    return nxm_class(header) == OFPXMC12_EXPERIMENTER;
  110|  3.04M|}
nx-match.c:nxm_no_len:
  104|  32.9M|static uint64_t nxm_no_len(uint64_t header) { return header & 0xffffff80ffffffffULL; }
nx-match.c:mf_from_oxm_header:
  258|   421k|{
  259|   421k|    const struct nxm_field *f = nxm_field_by_header(header, is_action, h_error);
  260|       |
  261|   421k|    if (f) {
  ------------------
  |  Branch (261:9): [True: 275k, False: 145k]
  ------------------
  262|   275k|        const struct mf_field *mff = mf_from_id(f->id);
  263|   275k|        const struct mf_field *vl_mff = mf_get_vl_mff(mff, vl_mff_map);
  264|   275k|        return vl_mff ? vl_mff : mff;
  ------------------
  |  Branch (264:16): [True: 0, False: 275k]
  ------------------
  265|   275k|    } else {
  266|       |        return NULL;
  267|   145k|    }
  268|   421k|}
nx-match.c:nx_pull_entry__:
  398|   326k|{
  399|   326k|    const struct mf_field *field;
  400|   326k|    enum ofperr header_error;
  401|   326k|    unsigned int payload_len;
  402|   326k|    const uint8_t *payload;
  403|   326k|    int width;
  404|       |
  405|   326k|    header_error = nx_pull_header__(b, allow_cookie, vl_mff_map, header,
  406|   326k|                                    &field, is_action);
  407|   326k|    if (header_error && header_error != OFPERR_OFPBMC_BAD_FIELD) {
  ------------------
  |  Branch (407:9): [True: 118k, False: 207k]
  |  Branch (407:25): [True: 10.5k, False: 108k]
  ------------------
  408|  10.5k|        return header_error;
  409|  10.5k|    }
  410|       |
  411|   315k|    payload_len = nxm_payload_len(*header);
  412|   315k|    payload = ofpbuf_try_pull(b, payload_len);
  413|   315k|    if (!payload) {
  ------------------
  |  Branch (413:9): [True: 24.6k, False: 290k]
  ------------------
  414|  24.6k|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" calls for %u-byte "
  ------------------
  |  |  226|  24.6k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  24.6k|    do {                                                                \
  |  |  |  |  288|  24.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  24.6k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 24.6k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  24.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 24.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  415|  24.6k|                    "payload but only %"PRIu32" bytes follow OXM header",
  416|  24.6k|                    NXM_HEADER_ARGS(*header), payload_len, b->size);
  417|  24.6k|        return OFPERR_OFPBMC_BAD_LEN;
  418|  24.6k|    }
  419|       |
  420|   290k|    width = nxm_field_bytes(*header);
  421|   290k|    if (nxm_hasmask(*header)
  ------------------
  |  Branch (421:9): [True: 120k, False: 170k]
  ------------------
  422|   120k|        && !is_mask_consistent(*header, payload, payload + width)) {
  ------------------
  |  Branch (422:12): [True: 4.44k, False: 116k]
  ------------------
  423|  4.44k|        return OFPERR_OFPBMC_BAD_WILDCARDS;
  424|  4.44k|    }
  425|       |
  426|   286k|    copy_entry_value(field, value, payload, width);
  427|       |
  428|   286k|    if (mask) {
  ------------------
  |  Branch (428:9): [True: 270k, False: 16.0k]
  ------------------
  429|   270k|        if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (429:13): [True: 115k, False: 155k]
  ------------------
  430|   115k|            copy_entry_value(field, mask, payload + width, width);
  431|   155k|        } else {
  432|   155k|            memset(mask, 0xff, sizeof *mask);
  433|   155k|        }
  434|   270k|    } else if (nxm_hasmask(*header)) {
  ------------------
  |  Branch (434:16): [True: 769, False: 15.2k]
  ------------------
  435|    769|        VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" includes mask but "
  ------------------
  |  |  226|    769|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    769|    do {                                                                \
  |  |  |  |  288|    769|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    769|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 769]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    769|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 769]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  436|    769|                    "masked OXMs are not allowed here",
  437|    769|                    NXM_HEADER_ARGS(*header));
  438|    769|        return OFPERR_OFPBMC_BAD_MASK;
  439|    769|    }
  440|       |
  441|   285k|    if (field_) {
  ------------------
  |  Branch (441:9): [True: 285k, False: 0]
  ------------------
  442|   285k|        *field_ = field;
  443|   285k|        return header_error;
  444|   285k|    }
  445|       |
  446|      0|    return 0;
  447|   285k|}
nx-match.c:nxm_payload_len:
  136|   884k|{
  137|   884k|    ovs_assert(nxm_length(header) >= nxm_experimenter_len(header));
  ------------------
  |  |   62|   884k|#define ovs_assert ovs_ignore
  ------------------
  138|   884k|    return nxm_length(header) - nxm_experimenter_len(header);
  139|   884k|}
nx-match.c:nxm_experimenter_len:
  128|  2.66M|{
  129|  2.66M|    return is_experimenter_oxm(header) ? 4 : 0;
  ------------------
  |  Branch (129:12): [True: 188k, False: 2.48M]
  ------------------
  130|  2.66M|}
nx-match.c:nxm_vendor:
   99|   157k|static uint32_t nxm_vendor(uint64_t header) { return header; }
nx-match.c:nxm_length:
  103|  24.6M|static int nxm_length(uint64_t header) { return (header >> 32) & 0xff; }
nx-match.c:is_mask_consistent:
  294|   120k|{
  295|   120k|    unsigned int width = nxm_field_bytes(header);
  296|   120k|    unsigned int i;
  297|       |
  298|   476k|    for (i = 0; i < width; i++) {
  ------------------
  |  Branch (298:17): [True: 360k, False: 116k]
  ------------------
  299|   360k|        if (value[i] & ~mask[i]) {
  ------------------
  |  Branch (299:13): [True: 4.44k, False: 356k]
  ------------------
  300|  4.44k|            if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|  4.44k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (300:17): [True: 0, False: 4.44k]
  ------------------
  301|      0|                VLOG_WARN_RL(&rl, "Rejecting NXM/OXM entry "NXM_HEADER_FMT " "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  302|      0|                             "with 1-bits in value for bits wildcarded by the "
  303|      0|                             "mask.", NXM_HEADER_ARGS(header));
  304|      0|            }
  305|  4.44k|            return false;
  306|  4.44k|        }
  307|   360k|    }
  308|   116k|    return true;
  309|   120k|}
nx-match.c:copy_entry_value:
  378|   401k|{
  379|   401k|    int copy_len;
  380|   401k|    void *copy_dst;
  381|       |
  382|   401k|    copy_dst = value;
  383|   401k|    copy_len = MIN(width, field ? field->n_bytes : sizeof *value);
  ------------------
  |  |   91|   803k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 237k, False: 164k]
  |  |  |  Branch (91:27): [True: 300k, False: 100k]
  |  |  |  Branch (91:39): [True: 164k, False: 12]
  |  |  ------------------
  ------------------
  384|       |
  385|   401k|    if (field && field->variable_len) {
  ------------------
  |  Branch (385:9): [True: 300k, False: 100k]
  |  Branch (385:18): [True: 136k, False: 164k]
  ------------------
  386|   136k|        memset(value, 0, field->n_bytes);
  387|   136k|        copy_dst = &value->u8 + field->n_bytes - copy_len;
  388|   136k|    }
  389|       |
  390|   401k|    memcpy(copy_dst, payload, copy_len);
  391|   401k|}
nx-match.c:nx_pull_header__:
  321|   380k|{
  322|   380k|    if (b->size < 4) {
  ------------------
  |  Branch (322:9): [True: 8.38k, False: 372k]
  ------------------
  323|  8.38k|        goto bad_len;
  324|  8.38k|    }
  325|       |
  326|   372k|    *header = ((uint64_t) ntohl(get_unaligned_be32(b->data))) << 32;
  327|   372k|    if (is_experimenter_oxm(*header)) {
  ------------------
  |  Branch (327:9): [True: 20.2k, False: 351k]
  ------------------
  328|  20.2k|        if (b->size < 8) {
  ------------------
  |  Branch (328:13): [True: 1.08k, False: 19.1k]
  ------------------
  329|  1.08k|            goto bad_len;
  330|  1.08k|        }
  331|  19.1k|        *header = ntohll(get_unaligned_be64(b->data));
  332|  19.1k|    }
  333|   371k|    if (nxm_length(*header) < nxm_experimenter_len(*header)) {
  ------------------
  |  Branch (333:9): [True: 233, False: 370k]
  ------------------
  334|    233|        VLOG_WARN_RL(&rl, "OXM header "NXM_HEADER_FMT" has invalid length %d "
  ------------------
  |  |  224|    233|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    233|    do {                                                                \
  |  |  |  |  288|    233|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    233|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 233]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    233|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 233]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  335|    233|                     "(minimum is %d)",
  336|    233|                     NXM_HEADER_ARGS(*header), nxm_length(*header),
  337|    233|                     nxm_header_len(*header));
  338|    233|        goto error;
  339|    233|    }
  340|   370k|    ofpbuf_pull(b, nxm_header_len(*header));
  341|       |
  342|   370k|    if (field) {
  ------------------
  |  Branch (342:9): [True: 370k, False: 0]
  ------------------
  343|   370k|        enum ofperr h_error = 0;
  344|   370k|        *field = mf_from_oxm_header(*header, vl_mff_map, is_action, &h_error);
  345|   370k|        if (!*field && !(allow_cookie && is_cookie_pseudoheader(*header))) {
  ------------------
  |  Branch (345:13): [True: 141k, False: 228k]
  |  Branch (345:26): [True: 325, False: 141k]
  |  Branch (345:42): [True: 110, False: 215]
  ------------------
  346|   141k|            VLOG_DBG_RL(&rl, "OXM header "NXM_HEADER_FMT" is unknown",
  ------------------
  |  |  226|   141k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|   141k|    do {                                                                \
  |  |  |  |  288|   141k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|   141k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 141k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|   141k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 141k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  347|   141k|                        NXM_HEADER_ARGS(*header));
  348|   141k|            if (is_action) {
  ------------------
  |  Branch (348:17): [True: 1.00k, False: 140k]
  ------------------
  349|  1.00k|                if (h_error) {
  ------------------
  |  Branch (349:21): [True: 407, False: 595]
  ------------------
  350|    407|                     *field = NULL;
  351|    407|                     return h_error;
  352|    407|                }
  353|    595|                return OFPERR_OFPBAC_BAD_SET_TYPE;
  354|   140k|            } else {
  355|   140k|                return OFPERR_OFPBMC_BAD_FIELD;
  356|   140k|            }
  357|   228k|        } else if (mf_vl_mff_invalid(*field, vl_mff_map)) {
  ------------------
  |  Branch (357:20): [True: 0, False: 228k]
  ------------------
  358|      0|            return OFPERR_NXFMFC_INVALID_TLV_FIELD;
  359|      0|        }
  360|   370k|    }
  361|       |
  362|   228k|    return 0;
  363|       |
  364|  9.47k|bad_len:
  365|  9.47k|    VLOG_DBG_RL(&rl, "encountered partial (%"PRIu32"-byte) OXM entry",
  ------------------
  |  |  226|  9.47k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  9.47k|    do {                                                                \
  |  |  |  |  288|  9.47k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  9.47k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 9.47k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  9.47k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 9.47k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  366|  9.47k|                b->size);
  367|  9.70k|error:
  368|  9.70k|    *header = 0;
  369|  9.70k|    if (field) {
  ------------------
  |  Branch (369:9): [True: 9.70k, False: 0]
  ------------------
  370|       |        *field = NULL;
  371|  9.70k|    }
  372|  9.70k|    return OFPERR_OFPBMC_BAD_LEN;
  373|  9.47k|}
nx-match.c:nxm_header_len:
  145|   370k|{
  146|   370k|    return 4 + nxm_experimenter_len(header);
  147|   370k|}
nx-match.c:is_cookie_pseudoheader:
  313|    325|{
  314|    325|    return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  187|    325|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  ------------------
  |  |  |  |  150|    650|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  151|    650|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  152|    650|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  153|    650|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  154|    650|     (VENDOR))
  |  |  ------------------
  ------------------
                  return header == NXM_NX_COOKIE || header == NXM_NX_COOKIE_W;
  ------------------
  |  |  188|    608|#define NXM_NX_COOKIE_W   nxm_make_wild_header(NXM_NX_COOKIE)
  |  |  ------------------
  |  |  |  |  187|    283|#define NXM_NX_COOKIE     NXM_HEADER  (0, 0x0001, 30, 0, 8)
  |  |  |  |  ------------------
  |  |  |  |  |  |  150|    283|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  |  |  |  |  151|    283|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  |  |  |  |  152|    283|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  |  |  |  |  153|    283|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  |  |  |  |  154|    283|     (VENDOR))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (314:12): [True: 42, False: 283]
  |  Branch (314:39): [True: 68, False: 215]
  ------------------
  315|    325|}
nx-match.c:nxm_make_wild_header:
  173|    283|{
  174|    283|    unsigned int new_len = nxm_payload_len(header) * 2
  175|    283|                           + nxm_experimenter_len(header);
  176|    283|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  150|    283|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  151|    283|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  152|    283|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  153|    283|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  154|    283|     (VENDOR))
  ------------------
  177|    283|                      nxm_field(header), 1, new_len);
  178|    283|}
nx-match.c:nxm_hasmask:
  102|  12.3M|static bool nxm_hasmask(uint64_t header) { return (header >> 40) & 1; }
nx-match.c:nx_pull_match__:
  605|  11.5k|{
  606|  11.5k|    uint8_t *p = NULL;
  607|       |
  608|  11.5k|    if (match_len) {
  ------------------
  |  Branch (608:9): [True: 2.54k, False: 9.03k]
  ------------------
  609|  2.54k|        p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  303|  2.54k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  2.54k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  610|  2.54k|        if (!p) {
  ------------------
  |  Branch (610:13): [True: 1.32k, False: 1.22k]
  ------------------
  611|  1.32k|            VLOG_DBG_RL(&rl, "nx_match length %u, rounded up to a "
  ------------------
  |  |  226|  1.32k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.32k|    do {                                                                \
  |  |  |  |  288|  1.32k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.32k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.32k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.32k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.32k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  612|  1.32k|                        "multiple of 8, is longer than space in message (max "
  613|  1.32k|                        "length %"PRIu32")", match_len, b->size);
  614|  1.32k|            return OFPERR_OFPBMC_BAD_LEN;
  615|  1.32k|        }
  616|  2.54k|    }
  617|       |
  618|  10.2k|    return nx_pull_raw(p, match_len, strict, pipeline_fields_only, match,
  619|  10.2k|                       cookie, cookie_mask, tun_table, vl_mff_map);
  620|  11.5k|}
nx-match.c:oxm_pull_match__:
  664|   174k|{
  665|   174k|    struct ofp11_match_header *omh = b->data;
  666|   174k|    uint8_t *p;
  667|   174k|    uint16_t match_len;
  668|       |
  669|   174k|    if (b->size < sizeof *omh) {
  ------------------
  |  Branch (669:9): [True: 3.06k, False: 171k]
  ------------------
  670|  3.06k|        return OFPERR_OFPBMC_BAD_LEN;
  671|  3.06k|    }
  672|       |
  673|   171k|    match_len = ntohs(omh->length);
  674|   171k|    if (match_len < sizeof *omh) {
  ------------------
  |  Branch (674:9): [True: 2.84k, False: 168k]
  ------------------
  675|  2.84k|        return OFPERR_OFPBMC_BAD_LEN;
  676|  2.84k|    }
  677|       |
  678|   168k|    if (omh->type != htons(OFPMT_OXM)) {
  ------------------
  |  Branch (678:9): [True: 13.8k, False: 154k]
  ------------------
  679|  13.8k|        return OFPERR_OFPBMC_BAD_TYPE;
  680|  13.8k|    }
  681|       |
  682|   154k|    p = ofpbuf_try_pull(b, ROUND_UP(match_len, 8));
  ------------------
  |  |  303|   154k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   154k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  683|   154k|    if (!p) {
  ------------------
  |  Branch (683:9): [True: 3.20k, False: 151k]
  ------------------
  684|  3.20k|        VLOG_DBG_RL(&rl, "oxm length %u, rounded up to a "
  ------------------
  |  |  226|  3.20k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.20k|    do {                                                                \
  |  |  |  |  288|  3.20k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.20k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.20k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.20k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.20k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  685|  3.20k|                    "multiple of 8, is longer than space in message (max "
  686|  3.20k|                    "length %"PRIu32")", match_len, b->size);
  687|  3.20k|        return OFPERR_OFPBMC_BAD_LEN;
  688|  3.20k|    }
  689|       |
  690|   151k|    return nx_pull_raw(p + sizeof *omh, match_len - sizeof *omh,
  691|   151k|                       strict, pipeline_fields_only, match, NULL, NULL,
  692|   151k|                       tun_table, vl_mff_map);
  693|   154k|}
nx-match.c:nx_pull_raw:
  535|   164k|{
  536|   164k|    ovs_assert((cookie != NULL) == (cookie_mask != NULL));
  ------------------
  |  |   62|   164k|#define ovs_assert ovs_ignore
  ------------------
  537|       |
  538|   164k|    match_init_catchall(match);
  539|   164k|    match->flow.tunnel.metadata.tab = tun_table;
  540|   164k|    if (cookie) {
  ------------------
  |  Branch (540:9): [True: 1.40k, False: 163k]
  ------------------
  541|  1.40k|        *cookie = *cookie_mask = htonll(0);
  542|  1.40k|    }
  543|       |
  544|   164k|    struct ofpbuf b = ofpbuf_const_initializer(p, match_len);
  545|   399k|    while (b.size) {
  ------------------
  |  Branch (545:12): [True: 299k, False: 99.7k]
  ------------------
  546|   299k|        const uint8_t *pos = b.data;
  547|   299k|        const struct mf_field *field;
  548|   299k|        union mf_value value;
  549|   299k|        union mf_value mask;
  550|   299k|        enum ofperr error;
  551|       |
  552|   299k|        error = nx_pull_match_entry(&b, cookie != NULL, vl_mff_map, &field,
  553|   299k|                                    &value, &mask);
  554|   299k|        if (error) {
  ------------------
  |  Branch (554:13): [True: 122k, False: 176k]
  ------------------
  555|   122k|            if (error == OFPERR_OFPBMC_BAD_FIELD && !strict) {
  ------------------
  |  Branch (555:17): [True: 83.7k, False: 39.2k]
  |  Branch (555:53): [True: 83.0k, False: 665]
  ------------------
  556|  83.0k|                continue;
  557|  83.0k|            }
  558|   176k|        } else if (!field) {
  ------------------
  |  Branch (558:20): [True: 68, False: 176k]
  ------------------
  559|     68|            if (!cookie) {
  ------------------
  |  Branch (559:17): [True: 0, False: 68]
  ------------------
  560|      0|                error = OFPERR_OFPBMC_BAD_FIELD;
  561|     68|            } else if (*cookie_mask) {
  ------------------
  |  Branch (561:24): [True: 0, False: 68]
  ------------------
  562|      0|                error = OFPERR_OFPBMC_DUP_FIELD;
  563|     68|            } else {
  564|     68|                *cookie = value.be64;
  565|     68|                *cookie_mask = mask.be64;
  566|     68|            }
  567|   176k|        } else if (strict && !mf_are_match_prereqs_ok(field, match)) {
  ------------------
  |  Branch (567:20): [True: 18.7k, False: 158k]
  |  Branch (567:30): [True: 3.83k, False: 14.8k]
  ------------------
  568|  3.83k|            error = OFPERR_OFPBMC_BAD_PREREQ;
  569|   173k|        } else if (!mf_is_all_wild(field, &match->wc)) {
  ------------------
  |  Branch (569:20): [True: 11.7k, False: 161k]
  ------------------
  570|  11.7k|            error = OFPERR_OFPBMC_DUP_FIELD;
  571|   161k|        } else if (pipeline_fields_only && !mf_is_pipeline_field(field)) {
  ------------------
  |  Branch (571:20): [True: 86.6k, False: 74.6k]
  |  Branch (571:44): [True: 9.25k, False: 77.3k]
  ------------------
  572|  9.25k|            error = OFPERR_OFPBRC_PIPELINE_FIELDS_ONLY;
  573|   152k|        } else {
  574|   152k|            char *err_str;
  575|       |
  576|   152k|            mf_set(field, &value, &mask, match, &err_str);
  577|   152k|            if (err_str) {
  ------------------
  |  Branch (577:17): [True: 0, False: 152k]
  ------------------
  578|      0|                VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  226|      0|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  579|      0|                           "within match (%s)", pos - p, err_str);
  580|      0|                free(err_str);
  581|      0|                return OFPERR_OFPBMC_BAD_VALUE;
  582|      0|            }
  583|       |
  584|   152k|            match_add_ethernet_prereq(match, field);
  585|   152k|        }
  586|       |
  587|   216k|        if (error) {
  ------------------
  |  Branch (587:13): [True: 64.7k, False: 152k]
  ------------------
  588|  64.7k|            VLOG_DBG_RL(&rl, "error parsing OXM at offset %"PRIdPTR" "
  ------------------
  |  |  226|  64.7k|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  64.7k|    do {                                                                \
  |  |  |  |  288|  64.7k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  64.7k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 64.7k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  64.7k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 64.7k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  589|  64.7k|                        "within match (%s)", pos -
  590|  64.7k|                        p, ofperr_to_string(error));
  591|  64.7k|            return error;
  592|  64.7k|        }
  593|   216k|    }
  594|       |
  595|  99.7k|    match->flow.tunnel.metadata.tab = NULL;
  596|  99.7k|    return 0;
  597|   164k|}
nx-match.c:nx_pull_match_entry:
  505|   299k|{
  506|   299k|    enum ofperr error;
  507|   299k|    uint64_t header;
  508|       |
  509|   299k|    error = nx_pull_entry__(b, allow_cookie, vl_mff_map, &header, field, value,
  510|   299k|                            mask, false);
  511|   299k|    if (error) {
  ------------------
  |  Branch (511:9): [True: 121k, False: 178k]
  ------------------
  512|   121k|        return error;
  513|   121k|    }
  514|   178k|    if (field && *field) {
  ------------------
  |  Branch (514:9): [True: 178k, False: 0]
  |  Branch (514:18): [True: 177k, False: 68]
  ------------------
  515|   177k|        if (!mf_is_mask_valid(*field, mask)) {
  ------------------
  |  Branch (515:13): [True: 553, False: 177k]
  ------------------
  516|    553|            VLOG_DBG_RL(&rl, "bad mask for field %s", (*field)->name);
  ------------------
  |  |  226|    553|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    553|    do {                                                                \
  |  |  |  |  288|    553|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    553|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 553]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    553|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 553]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  517|    553|            return OFPERR_OFPBMC_BAD_MASK;
  518|    553|        }
  519|   177k|        if (!mf_is_value_valid(*field, value)) {
  ------------------
  |  Branch (519:13): [True: 516, False: 176k]
  ------------------
  520|    516|            VLOG_DBG_RL(&rl, "bad value for field %s", (*field)->name);
  ------------------
  |  |  226|    516|#define VLOG_DBG_RL(RL, ...) VLOG_RL(RL, VLL_DBG, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    516|    do {                                                                \
  |  |  |  |  288|    516|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    516|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 516]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    516|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 516]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  521|    516|            return OFPERR_OFPBMC_BAD_VALUE;
  522|    516|        }
  523|   177k|    }
  524|   176k|    return 0;
  525|   178k|}
nx-match.c:nx_format_mask_tlv:
 1377|  8.31k|{
 1378|  8.31k|    const struct mf_field *mf = mf_from_id(id);
 1379|       |
 1380|  8.31k|    ds_put_format(ds, "%s", mf->name);
 1381|       |
 1382|  8.31k|    if (!is_all_ones(mask, mf->n_bytes)) {
  ------------------
  |  Branch (1382:9): [True: 8.18k, False: 129]
  ------------------
 1383|  8.18k|        ds_put_char(ds, '=');
 1384|  8.18k|        mf_format(mf, mask, NULL, NULL, ds);
 1385|  8.18k|    }
 1386|       |
 1387|  8.31k|    ds_put_char(ds, ',');
 1388|  8.31k|}
nx-match.c:nxm_field_bytes:
  282|   411k|{
  283|   411k|    unsigned int length = nxm_payload_len(header);
  284|   411k|    return nxm_hasmask(header) ? length / 2 : length;
  ------------------
  |  Branch (284:12): [True: 241k, False: 170k]
  ------------------
  285|   411k|}
nx-match.c:nxm_class:
  100|  13.0M|static int nxm_class(uint64_t header) { return header >> 48; }
nx-match.c:nxm_field:
  101|  10.0M|static int nxm_field(uint64_t header) { return (header >> 41) & 0x7f; }
nx-match.c:nxm_field_by_header:
 2286|  11.3M|{
 2287|  11.3M|    const struct nxm_field_index *nfi;
 2288|  11.3M|    uint64_t header_no_len;
 2289|       |
 2290|  11.3M|    nxm_init();
 2291|  11.3M|    if (nxm_hasmask(header)) {
  ------------------
  |  Branch (2291:9): [True: 157k, False: 11.1M]
  ------------------
 2292|   157k|        header = nxm_make_exact_header(header);
 2293|   157k|    }
 2294|       |
 2295|  11.3M|    header_no_len = nxm_no_len(header);
 2296|       |
 2297|  11.3M|    HMAP_FOR_EACH_IN_BUCKET (nfi, header_node, hash_uint64(header_no_len),
  ------------------
  |  |  144|  11.3M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_in_bucket(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  11.3M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  11.3M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  145|  11.3M|                       struct hmap_node);                                     \
  |  |  146|  21.7M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  21.7M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 21.6M, False: 110k]
  |  |  |  |  |  Branch (185:6): [True: 21.6M, False: 110k]
  |  |  |  |  ------------------
  |  |  |  |  186|  21.7M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  21.6M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  21.6M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  21.6M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  21.7M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  147|  11.3M|         UPDATE_MULTIVAR(NODE, hmap_next_in_bucket(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|  10.4M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  10.4M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2298|  21.6M|                             &nxm_header_map) {
 2299|  21.6M|        if (is_action && nxm_length(header) > 0) {
  ------------------
  |  Branch (2299:13): [True: 34.9k, False: 21.6M]
  |  Branch (2299:26): [True: 12.4k, False: 22.4k]
  ------------------
 2300|  12.4k|            if (nxm_length(header) != nxm_length(nfi->nf.header) && h_error ) {
  ------------------
  |  Branch (2300:17): [True: 4.74k, False: 7.68k]
  |  Branch (2300:69): [True: 4.74k, False: 0]
  ------------------
 2301|  4.74k|               *h_error = OFPERR_OFPBAC_BAD_SET_LEN;
 2302|  4.74k|            }
 2303|  12.4k|        }
 2304|  21.6M|        if (header_no_len == nxm_no_len(nfi->nf.header)) {
  ------------------
  |  Branch (2304:13): [True: 11.2M, False: 10.4M]
  ------------------
 2305|  11.2M|            if (nxm_length(header) == nxm_length(nfi->nf.header) ||
  ------------------
  |  Branch (2305:17): [True: 11.0M, False: 155k]
  ------------------
 2306|  11.1M|                mf_from_id(nfi->nf.id)->variable_len) {
  ------------------
  |  Branch (2306:17): [True: 120k, False: 35.0k]
  ------------------
 2307|  11.1M|                return &nfi->nf;
 2308|  11.1M|            } else {
 2309|  35.0k|                return NULL;
 2310|  35.0k|            }
 2311|  11.2M|        }
 2312|  21.6M|    }
 2313|   110k|    return NULL;
 2314|  11.3M|}
nx-match.c:nxm_init:
 2263|  22.5M|{
 2264|  22.5M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  22.5M|    {                                           \
  |  |  135|  22.5M|        false,                                  \
  |  |  136|  22.5M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  22.5M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  22.5M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  22.5M|    }
  ------------------
 2265|  22.5M|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (2265:9): [True: 1, False: 22.5M]
  ------------------
 2266|      1|        hmap_init(&nxm_header_map);
 2267|      1|        hmap_init(&nxm_name_map);
 2268|    212|        for (int i = 0; i < MFF_N_IDS; i++) {
  ------------------
  |  Branch (2268:25): [True: 211, False: 1]
  ------------------
 2269|    211|            ovs_list_init(&nxm_mf_map[i]);
 2270|    211|        }
 2271|      1|        for (struct nxm_field_index *nfi = all_nxm_fields;
 2272|    238|             nfi < &all_nxm_fields[ARRAY_SIZE(all_nxm_fields)]; nfi++) {
  ------------------
  |  |  297|    238|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|    238|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    238|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|    238|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    238|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    238|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2272:14): [True: 237, False: 1]
  ------------------
 2273|    237|            hmap_insert(&nxm_header_map, &nfi->header_node,
  ------------------
  |  |  101|    237|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    237|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    237|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    237|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2274|    237|                        hash_uint64(nxm_no_len(nfi->nf.header)));
 2275|    237|            hmap_insert(&nxm_name_map, &nfi->name_node,
  ------------------
  |  |  101|    237|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    237|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    237|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    237|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|    237|                        hash_string(nfi->nf.name, 0));
 2277|    237|            ovs_list_push_back(&nxm_mf_map[nfi->nf.id], &nfi->mf_node);
 2278|    237|        }
 2279|      1|        ovsthread_once_done(&once);
 2280|      1|    }
 2281|  22.5M|}
nx-match.c:nxm_make_exact_header:
  165|   157k|{
  166|   157k|    unsigned int new_len = nxm_payload_len(header)
  167|   157k|                           / 2 + nxm_experimenter_len(header);
  168|   157k|    return NXM_HEADER(nxm_vendor(header), nxm_class(header),
  ------------------
  |  |  150|   157k|    (((uint64_t) (CLASS) << 48) |                               \
  |  |  151|   157k|     ((uint64_t) (FIELD) << 41) |                               \
  |  |  152|   157k|     ((uint64_t) (HASMASK) << 40) |                             \
  |  |  153|   157k|     ((uint64_t) (LENGTH) << 32) |                              \
  |  |  154|   157k|     (VENDOR))
  ------------------
  169|   157k|                      nxm_field(header), 0, new_len);
  170|   157k|}
nx-match.c:nxm_field_by_mf_id:
 2333|  11.1M|{
 2334|  11.1M|    const struct nxm_field_index *nfi;
 2335|  11.1M|    const struct nxm_field *f;
 2336|       |
 2337|  11.1M|    nxm_init();
 2338|       |
 2339|  11.1M|    f = NULL;
 2340|  12.5M|    LIST_FOR_EACH (nfi, mf_node, &nxm_mf_map[id]) {
  ------------------
  |  |   76|  11.1M|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  11.1M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  11.1M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  23.7M|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  23.7M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 12.5M, False: 11.1M]
  |  |  |  |  |  Branch (185:6): [True: 12.5M, False: 11.1M]
  |  |  |  |  ------------------
  |  |  |  |  186|  23.7M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  12.5M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  12.5M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  12.5M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  23.7M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  12.5M|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  12.5M|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  12.5M|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2341|  12.5M|        if (!f || version >= nfi->nf.version) {
  ------------------
  |  Branch (2341:13): [True: 10.9M, False: 1.64M]
  |  Branch (2341:19): [True: 1.42M, False: 215k]
  ------------------
 2342|  12.3M|            f = &nfi->nf;
 2343|  12.3M|        }
 2344|  12.5M|    }
 2345|  11.1M|    return f;
 2346|  11.1M|}

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

ofpact_put_set_field:
 3385|  14.3k|{
 3386|       |    /* Ensure there's enough space for:
 3387|       |     * - value (8-byte aligned)
 3388|       |     * - mask  (8-byte aligned)
 3389|       |     * - padding (to make the whole ofpact_set_field 8-byte aligned)
 3390|       |     */
 3391|  14.3k|    size_t total_size = 2 * ROUND_UP(field->n_bytes, OFPACT_ALIGNTO);
  ------------------
  |  |  303|  14.3k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  14.3k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 3392|  14.3k|    struct ofpact_set_field *sf = ofpact_put_SET_FIELD(ofpacts);
 3393|  14.3k|    sf->field = field;
 3394|       |
 3395|       |    /* Fill with all zeroes to make sure the padding is initialized. */
 3396|  14.3k|    ofpbuf_put_zeros(ofpacts, total_size);
 3397|  14.3k|    sf = ofpacts->header;
 3398|       |
 3399|       |    /* Fill in the value and mask if given, otherwise keep the zeroes
 3400|       |     * so that the caller may fill in the value and mask itself. */
 3401|  14.3k|    if (value) {
  ------------------
  |  Branch (3401:9): [True: 11.6k, False: 2.65k]
  ------------------
 3402|  11.6k|        memcpy(sf->value, value, field->n_bytes);
 3403|  11.6k|        if (mask) {
  ------------------
  |  Branch (3403:13): [True: 11.6k, False: 0]
  ------------------
 3404|  11.6k|            memcpy(ofpact_set_field_mask(sf), mask, field->n_bytes);
  ------------------
  |  |  563|  11.6k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  11.6k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  11.6k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  11.6k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3405|  11.6k|        } else {
 3406|      0|            memset(ofpact_set_field_mask(sf), 0xff, field->n_bytes);
  ------------------
  |  |  563|      0|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|      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))
  ------------------
 3407|      0|        }
 3408|  11.6k|    }
 3409|       |
 3410|       |    /* Update length. */
 3411|  14.3k|    ofpact_finish_SET_FIELD(ofpacts, &sf);
 3412|       |
 3413|  14.3k|    return sf;
 3414|  14.3k|}
ofpact_put_reg_load:
 3424|  2.65k|{
 3425|  2.65k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3426|  2.65k|                                                       mask);
 3427|  2.65k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD;
 3428|       |
 3429|  2.65k|    return sf;
 3430|  2.65k|}
ofpact_put_reg_load2:
 3435|  3.25k|{
 3436|  3.25k|    struct ofpact_set_field *sf = ofpact_put_set_field(ofpacts, field, value,
 3437|  3.25k|                                                       mask);
 3438|  3.25k|    sf->ofpact.raw = NXAST_RAW_REG_LOAD2;
 3439|       |
 3440|  3.25k|    return sf;
 3441|  3.25k|}
ofpacts_pull_openflow_actions:
 8121|   145k|{
 8122|   145k|    return ofpacts_pull_openflow_actions__(
 8123|   145k|        openflow, actions_len, version,
 8124|   145k|        (1u << OVSINST_OFPIT11_APPLY_ACTIONS) | (1u << OVSINST_OFPIT13_METER),
 8125|   145k|        ofpacts, 0, vl_mff_map, ofpacts_tlv_bitmap);
 8126|   145k|}
ovs_instruction_name_from_type:
 8363|  29.6k|{
 8364|  29.6k|    return type < ARRAY_SIZE(inst_info) ? inst_info[type].name : NULL;
  ------------------
  |  |  297|  29.6k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  29.6k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  29.6k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  29.6k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  29.6k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  29.6k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (8364:12): [True: 29.6k, False: 0]
  ------------------
 8365|  29.6k|}
ovs_instruction_type_from_ofpact_type:
 8382|   137k|{
 8383|   137k|    switch (type) {
 8384|    227|    case OFPACT_METER:
  ------------------
  |  Branch (8384:5): [True: 227, False: 137k]
  ------------------
 8385|    227|        return (version >= OFP15_VERSION
  ------------------
  |  Branch (8385:17): [True: 20, False: 207]
  ------------------
 8386|    227|                ? OVSINST_OFPIT11_APPLY_ACTIONS
 8387|    227|                : OVSINST_OFPIT13_METER);
 8388|    176|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8388:5): [True: 176, False: 137k]
  ------------------
 8389|    176|        return OVSINST_OFPIT11_CLEAR_ACTIONS;
 8390|  11.7k|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8390:5): [True: 11.7k, False: 125k]
  ------------------
 8391|  11.7k|        return OVSINST_OFPIT11_WRITE_ACTIONS;
 8392|  1.17k|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8392:5): [True: 1.17k, False: 136k]
  ------------------
 8393|  1.17k|        return OVSINST_OFPIT11_WRITE_METADATA;
 8394|    351|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8394:5): [True: 351, False: 137k]
  ------------------
 8395|    351|        return OVSINST_OFPIT11_GOTO_TABLE;
 8396|  13.7k|    case OFPACT_OUTPUT:
  ------------------
  |  Branch (8396:5): [True: 13.7k, False: 123k]
  ------------------
 8397|  13.8k|    case OFPACT_GROUP:
  ------------------
  |  Branch (8397:5): [True: 104, False: 137k]
  ------------------
 8398|  15.1k|    case OFPACT_CLONE:
  ------------------
  |  Branch (8398:5): [True: 1.30k, False: 136k]
  ------------------
 8399|  18.9k|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8399:5): [True: 3.82k, False: 133k]
  ------------------
 8400|  19.1k|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8400:5): [True: 177, False: 137k]
  ------------------
 8401|  19.4k|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8401:5): [True: 307, False: 137k]
  ------------------
 8402|  20.6k|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8402:5): [True: 1.16k, False: 136k]
  ------------------
 8403|  21.7k|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8403:5): [True: 1.07k, False: 136k]
  ------------------
 8404|  27.0k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8404:5): [True: 5.32k, False: 132k]
  ------------------
 8405|  29.5k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8405:5): [True: 2.49k, False: 135k]
  ------------------
 8406|  32.5k|    case OFPACT_STRIP_VLAN:
  ------------------
  |  Branch (8406:5): [True: 3.00k, False: 134k]
  ------------------
 8407|  32.6k|    case OFPACT_PUSH_VLAN:
  ------------------
  |  Branch (8407:5): [True: 90, False: 137k]
  ------------------
 8408|  32.6k|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8408:5): [True: 24, False: 137k]
  ------------------
 8409|  32.8k|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8409:5): [True: 166, False: 137k]
  ------------------
 8410|  35.6k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8410:5): [True: 2.82k, False: 134k]
  ------------------
 8411|  40.4k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8411:5): [True: 4.86k, False: 132k]
  ------------------
 8412|  45.7k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8412:5): [True: 5.28k, False: 132k]
  ------------------
 8413|  46.0k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8413:5): [True: 252, False: 137k]
  ------------------
 8414|  46.0k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8414:5): [True: 18, False: 137k]
  ------------------
 8415|  53.2k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8415:5): [True: 7.14k, False: 130k]
  ------------------
 8416|  60.2k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8416:5): [True: 7.00k, False: 130k]
  ------------------
 8417|  60.3k|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8417:5): [True: 137, False: 137k]
  ------------------
 8418|  69.2k|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8418:5): [True: 8.94k, False: 128k]
  ------------------
 8419|  69.5k|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8419:5): [True: 302, False: 137k]
  ------------------
 8420|  70.3k|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8420:5): [True: 737, False: 136k]
  ------------------
 8421|  71.3k|    case OFPACT_DEC_TTL:
  ------------------
  |  Branch (8421:5): [True: 990, False: 136k]
  ------------------
 8422|  72.3k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8422:5): [True: 1.02k, False: 136k]
  ------------------
 8423|  72.3k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8423:5): [True: 14, False: 137k]
  ------------------
 8424|  72.7k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8424:5): [True: 429, False: 137k]
  ------------------
 8425|  72.8k|    case OFPACT_DEC_MPLS_TTL:
  ------------------
  |  Branch (8425:5): [True: 25, False: 137k]
  ------------------
 8426|  72.8k|    case OFPACT_PUSH_MPLS:
  ------------------
  |  Branch (8426:5): [True: 0, False: 137k]
  ------------------
 8427|  72.8k|    case OFPACT_POP_MPLS:
  ------------------
  |  Branch (8427:5): [True: 32, False: 137k]
  ------------------
 8428|  73.5k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8428:5): [True: 673, False: 136k]
  ------------------
 8429|  73.6k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8429:5): [True: 111, False: 137k]
  ------------------
 8430|  75.2k|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8430:5): [True: 1.64k, False: 135k]
  ------------------
 8431|  75.9k|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8431:5): [True: 658, False: 136k]
  ------------------
 8432|  78.6k|    case OFPACT_RESUBMIT:
  ------------------
  |  Branch (8432:5): [True: 2.68k, False: 134k]
  ------------------
 8433|  94.5k|    case OFPACT_LEARN:
  ------------------
  |  Branch (8433:5): [True: 15.8k, False: 121k]
  ------------------
 8434|  94.5k|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8434:5): [True: 0, False: 137k]
  ------------------
 8435|  97.1k|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8435:5): [True: 2.61k, False: 134k]
  ------------------
 8436|   102k|    case OFPACT_NOTE:
  ------------------
  |  Branch (8436:5): [True: 5.48k, False: 132k]
  ------------------
 8437|   105k|    case OFPACT_EXIT:
  ------------------
  |  Branch (8437:5): [True: 2.68k, False: 134k]
  ------------------
 8438|   112k|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8438:5): [True: 6.78k, False: 130k]
  ------------------
 8439|   113k|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8439:5): [True: 1.41k, False: 136k]
  ------------------
 8440|   113k|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8440:5): [True: 0, False: 137k]
  ------------------
 8441|   113k|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8441:5): [True: 0, False: 137k]
  ------------------
 8442|   118k|    case OFPACT_CT:
  ------------------
  |  Branch (8442:5): [True: 4.74k, False: 132k]
  ------------------
 8443|   118k|    case OFPACT_CT_CLEAR:
  ------------------
  |  Branch (8443:5): [True: 85, False: 137k]
  ------------------
 8444|   120k|    case OFPACT_NAT:
  ------------------
  |  Branch (8444:5): [True: 2.61k, False: 134k]
  ------------------
 8445|   121k|    case OFPACT_ENCAP:
  ------------------
  |  Branch (8445:5): [True: 316, False: 137k]
  ------------------
 8446|   123k|    case OFPACT_DECAP:
  ------------------
  |  Branch (8446:5): [True: 1.98k, False: 135k]
  ------------------
 8447|   123k|    case OFPACT_DEC_NSH_TTL:
  ------------------
  |  Branch (8447:5): [True: 6, False: 137k]
  ------------------
 8448|   123k|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8448:5): [True: 595, False: 136k]
  ------------------
 8449|   123k|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8449:5): [True: 58, False: 137k]
  ------------------
 8450|   123k|    default:
  ------------------
  |  Branch (8450:5): [True: 0, False: 137k]
  ------------------
 8451|   123k|        return OVSINST_OFPIT11_APPLY_ACTIONS;
 8452|   137k|    }
 8453|   137k|}
ovs_instruction_type_from_inst_type:
 8458|  1.71k|{
 8459|  1.71k|    switch (inst_type) {
 8460|       |
 8461|      0|#define DEFINE_INST(ENUM, STRUCT, EXTENSIBLE, NAME) \
 8462|      0|    case ENUM:                                      \
 8463|      0|        *instruction_type = OVSINST_##ENUM;         \
 8464|      0|        return 0;
 8465|      0|OVS_INSTRUCTIONS
  ------------------
  |  | 1344|      9|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8462|      9|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 9, False: 1.70k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      9|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      9|        return 0;
  |  |  ------------------
  |  | 1345|      9|                ofp13_instruction_meter,          false,    \
  |  | 1346|      9|                "meter")                                    \
  |  | 1347|      9|                                                            \
  |  | 1348|      9|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      1|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 1, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      1|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      1|        return 0;
  |  |  ------------------
  |  | 1349|      1|                ofp11_instruction_actions,        true,     \
  |  | 1350|      1|                "apply_actions")                            \
  |  | 1351|      1|                                                            \
  |  | 1352|     10|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|     10|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 10, False: 1.70k]
  |  |  |  |  ------------------
  |  |  |  | 8463|     10|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|     10|        return 0;
  |  |  ------------------
  |  | 1353|     10|                ofp11_instruction,                false,    \
  |  | 1354|     10|                "clear_actions")                            \
  |  | 1355|     10|                                                            \
  |  | 1356|     10|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8462|      2|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 2, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      2|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      2|        return 0;
  |  |  ------------------
  |  | 1357|      2|                ofp11_instruction_actions,        true,     \
  |  | 1358|      2|                "write_actions")                            \
  |  | 1359|      2|                                                            \
  |  | 1360|      4|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8462|      4|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 4, False: 1.71k]
  |  |  |  |  ------------------
  |  |  |  | 8463|      4|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|      4|        return 0;
  |  |  ------------------
  |  | 1361|      4|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|      4|                "write_metadata")                           \
  |  | 1363|      4|                                                            \
  |  | 1364|    251|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8462|    251|    case ENUM:                                      \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8462:5): [True: 251, False: 1.46k]
  |  |  |  |  ------------------
  |  |  |  | 8463|    251|        *instruction_type = OVSINST_##ENUM;         \
  |  |  |  | 8464|    251|        return 0;
  |  |  ------------------
  |  | 1365|    251|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    251|                "goto_table")
  ------------------
 8466|      0|#undef DEFINE_INST
 8467|       |
 8468|  1.43k|    default:
  ------------------
  |  Branch (8468:5): [True: 1.43k, False: 277]
  ------------------
 8469|  1.43k|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8470|  1.71k|    }
 8471|  1.71k|}
ovsinst_bitmap_from_openflow:
 8529|  20.9k|{
 8530|  20.9k|    uint32_t ovsinst_bitmap = 0;
 8531|  20.9k|    const struct ovsinst_map *x;
 8532|       |
 8533|   125k|    for (x = get_ovsinst_map(version); x->ofpit >= 0; x++) {
  ------------------
  |  Branch (8533:40): [True: 104k, False: 20.9k]
  ------------------
 8534|   104k|        if (ofpit_bitmap & htonl(1u << x->ofpit)) {
  ------------------
  |  Branch (8534:13): [True: 38.4k, False: 66.0k]
  ------------------
 8535|  38.4k|            ovsinst_bitmap |= 1u << x->ovsinst;
 8536|  38.4k|        }
 8537|   104k|    }
 8538|  20.9k|    return ovsinst_bitmap;
 8539|  20.9k|}
ofpacts_pull_openflow_instructions:
 8647|  79.3k|{
 8648|  79.3k|    const struct ofp11_instruction *instructions;
 8649|  79.3k|    const struct ofp11_instruction *insts[N_OVS_INSTRUCTIONS];
 8650|  79.3k|    enum ofperr error;
 8651|       |
 8652|  79.3k|    ofpbuf_clear(ofpacts);
 8653|  79.3k|    if (version == OFP10_VERSION) {
  ------------------
  |  Branch (8653:9): [True: 44.9k, False: 34.4k]
  ------------------
 8654|  44.9k|        return ofpacts_pull_openflow_actions__(openflow, instructions_len,
 8655|  44.9k|                                               version,
 8656|  44.9k|                                               (1u << N_OVS_INSTRUCTIONS) - 1,
 8657|  44.9k|                                               ofpacts, 0, vl_mff_map,
 8658|  44.9k|                                               ofpacts_tlv_bitmap);
 8659|  44.9k|    }
 8660|       |
 8661|  34.4k|    if (instructions_len % OFP11_INSTRUCTION_ALIGN != 0) {
  ------------------
  |  |  262|  34.4k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8661:9): [True: 664, False: 33.7k]
  ------------------
 8662|    664|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u is not a "
  ------------------
  |  |  224|    664|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    664|    do {                                                                \
  |  |  |  |  288|    664|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    664|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 664]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    664|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 664]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8663|    664|                     "multiple of %d",
 8664|    664|                     instructions_len, OFP11_INSTRUCTION_ALIGN);
 8665|    664|        error = OFPERR_OFPBIC_BAD_LEN;
 8666|    664|        goto exit;
 8667|    664|    }
 8668|       |
 8669|  33.7k|    instructions = ofpbuf_try_pull(openflow, instructions_len);
 8670|  33.7k|    if (instructions == NULL) {
  ------------------
  |  Branch (8670:9): [True: 135, False: 33.6k]
  ------------------
 8671|    135|        VLOG_WARN_RL(&rl, "OpenFlow message instructions length %u exceeds "
  ------------------
  |  |  224|    135|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    135|    do {                                                                \
  |  |  |  |  288|    135|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    135|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 135]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    135|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 135]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8672|    135|                     "remaining message length (%"PRIu32")",
 8673|    135|                     instructions_len, openflow->size);
 8674|    135|        error = OFPERR_OFPBIC_BAD_LEN;
 8675|    135|        goto exit;
 8676|    135|    }
 8677|       |
 8678|  33.6k|    error = decode_openflow11_instructions(
 8679|  33.6k|        instructions, instructions_len / OFP11_INSTRUCTION_ALIGN, version,
  ------------------
  |  |  262|  33.6k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
 8680|  33.6k|        insts);
 8681|  33.6k|    if (error) {
  ------------------
  |  Branch (8681:9): [True: 3.79k, False: 29.8k]
  ------------------
 8682|  3.79k|        goto exit;
 8683|  3.79k|    }
 8684|       |
 8685|  29.8k|    if (insts[OVSINST_OFPIT13_METER]) {
  ------------------
  |  Branch (8685:9): [True: 221, False: 29.5k]
  ------------------
 8686|    221|        const struct ofp13_instruction_meter *oim;
 8687|    221|        struct ofpact_meter *om;
 8688|       |
 8689|    221|        oim = ALIGNED_CAST(const struct ofp13_instruction_meter *,
  ------------------
  |  |  434|    221|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8690|    221|                           insts[OVSINST_OFPIT13_METER]);
 8691|       |
 8692|    221|        om = ofpact_put_METER(ofpacts);
 8693|    221|        om->meter_id = ntohl(oim->meter_id);
 8694|    221|        om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 8695|    221|    }
 8696|  29.8k|    if (insts[OVSINST_OFPIT11_APPLY_ACTIONS]) {
  ------------------
  |  Branch (8696:9): [True: 2.92k, False: 26.8k]
  ------------------
 8697|  2.92k|        const struct ofp_action_header *actions;
 8698|  2.92k|        size_t actions_len;
 8699|       |
 8700|  2.92k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_APPLY_ACTIONS],
 8701|  2.92k|                                     &actions, &actions_len);
 8702|  2.92k|        error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8703|  2.92k|                               ofpacts_tlv_bitmap, ofpacts);
 8704|  2.92k|        if (error) {
  ------------------
  |  Branch (8704:13): [True: 250, False: 2.67k]
  ------------------
 8705|    250|            goto exit;
 8706|    250|        }
 8707|  2.92k|    }
 8708|  29.5k|    if (insts[OVSINST_OFPIT11_CLEAR_ACTIONS]) {
  ------------------
  |  Branch (8708:9): [True: 176, False: 29.3k]
  ------------------
 8709|    176|        instruction_get_OFPIT11_CLEAR_ACTIONS(
 8710|    176|            insts[OVSINST_OFPIT11_CLEAR_ACTIONS]);
 8711|    176|        ofpact_put_CLEAR_ACTIONS(ofpacts);
 8712|    176|    }
 8713|  29.5k|    if (insts[OVSINST_OFPIT11_WRITE_ACTIONS]) {
  ------------------
  |  Branch (8713:9): [True: 16.8k, False: 12.7k]
  ------------------
 8714|  16.8k|        struct ofpact_nest *on;
 8715|  16.8k|        const struct ofp_action_header *actions;
 8716|  16.8k|        size_t actions_len;
 8717|  16.8k|        size_t start = ofpacts->size;
 8718|  16.8k|        ofpact_put(ofpacts, OFPACT_WRITE_ACTIONS,
 8719|  16.8k|                   offsetof(struct ofpact_nest, actions));
 8720|  16.8k|        get_actions_from_instruction(insts[OVSINST_OFPIT11_WRITE_ACTIONS],
 8721|  16.8k|                                     &actions, &actions_len);
 8722|  16.8k|        error = ofpacts_decode_for_action_set(actions, actions_len,
 8723|  16.8k|                                              version, vl_mff_map,
 8724|  16.8k|                                              ofpacts_tlv_bitmap, ofpacts);
 8725|  16.8k|        if (error) {
  ------------------
  |  Branch (8725:13): [True: 5.07k, False: 11.7k]
  ------------------
 8726|  5.07k|            goto exit;
 8727|  5.07k|        }
 8728|  11.7k|        on = ofpbuf_at_assert(ofpacts, start, sizeof *on);
 8729|  11.7k|        on->ofpact.len = ofpacts->size - start;
 8730|  11.7k|    }
 8731|  24.4k|    if (insts[OVSINST_OFPIT11_WRITE_METADATA]) {
  ------------------
  |  Branch (8731:9): [True: 824, False: 23.6k]
  ------------------
 8732|    824|        const struct ofp11_instruction_write_metadata *oiwm;
 8733|    824|        struct ofpact_metadata *om;
 8734|       |
 8735|    824|        oiwm = ALIGNED_CAST(const struct ofp11_instruction_write_metadata *,
  ------------------
  |  |  434|    824|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8736|    824|                            insts[OVSINST_OFPIT11_WRITE_METADATA]);
 8737|       |
 8738|    824|        om = ofpact_put_WRITE_METADATA(ofpacts);
 8739|    824|        om->metadata = oiwm->metadata;
 8740|    824|        om->mask = oiwm->metadata_mask;
 8741|    824|    }
 8742|  24.4k|    if (insts[OVSINST_OFPIT11_GOTO_TABLE]) {
  ------------------
  |  Branch (8742:9): [True: 351, False: 24.1k]
  ------------------
 8743|    351|        const struct ofp11_instruction_goto_table *oigt;
 8744|    351|        struct ofpact_goto_table *ogt;
 8745|       |
 8746|    351|        oigt = instruction_get_OFPIT11_GOTO_TABLE(
 8747|    351|            insts[OVSINST_OFPIT11_GOTO_TABLE]);
 8748|    351|        ogt = ofpact_put_GOTO_TABLE(ofpacts);
 8749|    351|        ogt->table_id = oigt->table_id;
 8750|    351|    }
 8751|       |
 8752|  24.4k|    error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8753|  24.4k|                           (1u << N_OVS_INSTRUCTIONS) - 1, 0, NULL);
 8754|  34.4k|exit:
 8755|  34.4k|    if (error) {
  ------------------
  |  Branch (8755:9): [True: 9.93k, False: 24.4k]
  ------------------
 8756|  9.93k|        ofpbuf_clear(ofpacts);
 8757|  9.93k|    }
 8758|  34.4k|    return error;
 8759|  24.4k|}
ofpact_check_output_port:
 8782|  38.7k|{
 8783|  38.7k|    switch (port) {
 8784|  2.64k|    case OFPP_IN_PORT:
  ------------------
  |  |   39|  2.64k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.64k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8784:5): [True: 2.64k, False: 36.0k]
  ------------------
 8785|  5.47k|    case OFPP_TABLE:
  ------------------
  |  |   40|  5.47k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  ------------------
  |  |  |  |  157|  5.47k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8785:5): [True: 2.83k, False: 35.8k]
  ------------------
 8786|  6.73k|    case OFPP_NORMAL:
  ------------------
  |  |   41|  6.73k|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  ------------------
  |  |  |  |  157|  6.73k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8786:5): [True: 1.26k, False: 37.4k]
  ------------------
 8787|  8.26k|    case OFPP_FLOOD:
  ------------------
  |  |   42|  8.26k|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  ------------------
  |  |  |  |  157|  8.26k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8787:5): [True: 1.53k, False: 37.1k]
  ------------------
 8788|  9.51k|    case OFPP_ALL:
  ------------------
  |  |   44|  9.51k|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|  9.51k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8788:5): [True: 1.24k, False: 37.4k]
  ------------------
 8789|  15.5k|    case OFPP_CONTROLLER:
  ------------------
  |  |   45|  15.5k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  15.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8789:5): [True: 6.03k, False: 32.6k]
  ------------------
 8790|  16.5k|    case OFPP_LOCAL:
  ------------------
  |  |   46|  16.5k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  16.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8790:5): [True: 952, False: 37.7k]
  ------------------
 8791|  16.5k|        return 0;
 8792|       |
 8793|      8|    case OFPP_NONE:
  ------------------
  |  |   47|      8|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|      8|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (8793:5): [True: 8, False: 38.7k]
  ------------------
 8794|      8|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8795|       |
 8796|  22.2k|    default:
  ------------------
  |  Branch (8796:5): [True: 22.2k, False: 16.5k]
  ------------------
 8797|  22.2k|        if (ofp_to_u16(port) < ofp_to_u16(max_ports)) {
  ------------------
  |  Branch (8797:13): [True: 21.7k, False: 503]
  ------------------
 8798|  21.7k|            return 0;
 8799|  21.7k|        }
 8800|    503|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 8801|  38.7k|    }
 8802|  38.7k|}
ofpacts_check:
 8851|  55.1k|{
 8852|       |    /* Save fields that might temporarily be modified. */
 8853|  55.1k|    struct flow *flow = &cp->match->flow;
 8854|  55.1k|    ovs_be32 packet_type = flow->packet_type;
 8855|  55.1k|    ovs_be16 dl_type = flow->dl_type;
 8856|  55.1k|    uint8_t nw_proto = flow->nw_proto;
 8857|  55.1k|    union flow_vlan_hdr vlans[FLOW_MAX_VLAN_HEADERS];
 8858|  55.1k|    memcpy(vlans, flow->vlans, sizeof vlans);
 8859|       |
 8860|       |    /* Check all the actions. */
 8861|  55.1k|    cp->usable_protocols = OFPUTIL_P_ANY;
  ------------------
  |  |  100|  55.1k|#define OFPUTIL_P_ANY ((1 << 9) - 1)
  ------------------
 8862|  55.1k|    enum ofperr error = 0;
 8863|  55.1k|    struct ofpact *a;
 8864|   123k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   174k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 123k, False: 50.7k]
  |  |  ------------------
  |  |  262|   119k|         (POS) = ofpact_next(POS))
  ------------------
 8865|   123k|        error = ofpact_check__(a, cp);
 8866|   123k|        if (error) {
  ------------------
  |  Branch (8866:13): [True: 4.36k, False: 119k]
  ------------------
 8867|  4.36k|            break;
 8868|  4.36k|        }
 8869|   123k|    }
 8870|       |
 8871|       |    /* Restore fields that may have been modified. */
 8872|  55.1k|    flow->packet_type = packet_type;
 8873|  55.1k|    flow->dl_type = dl_type;
 8874|  55.1k|    memcpy(flow->vlans, vlans, sizeof vlans);
 8875|  55.1k|    flow->nw_proto = nw_proto;
 8876|       |
 8877|  55.1k|    return error;
 8878|  55.1k|}
ofpacts_check_consistency:
 8886|  41.7k|{
 8887|  41.7k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, cp);
 8888|  41.7k|    if (!error && needed_protocols & ~cp->usable_protocols) {
  ------------------
  |  Branch (8888:9): [True: 38.6k, False: 3.11k]
  |  Branch (8888:19): [True: 1.06k, False: 37.5k]
  ------------------
 8889|  1.06k|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 8890|  1.06k|    }
 8891|  40.6k|    return error;
 8892|  41.7k|}
ofpact_get_mf_dst:
 8898|   144k|{
 8899|   144k|    if (ofpact->type == OFPACT_SET_FIELD) {
  ------------------
  |  Branch (8899:9): [True: 9.08k, False: 135k]
  ------------------
 8900|  9.08k|        const struct ofpact_set_field *orl;
 8901|       |
 8902|  9.08k|        orl = CONTAINER_OF(ofpact, struct ofpact_set_field, ofpact);
  ------------------
  |  |  124|  9.08k|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8903|  9.08k|        return orl->field;
 8904|   135k|    } else if (ofpact->type == OFPACT_REG_MOVE) {
  ------------------
  |  Branch (8904:16): [True: 137, False: 135k]
  ------------------
 8905|    137|        const struct ofpact_reg_move *orm;
 8906|       |
 8907|    137|        orm = CONTAINER_OF(ofpact, struct ofpact_reg_move, ofpact);
  ------------------
  |  |  124|    137|        ((STRUCT *) (void *) ((char *) (POINTER) - offsetof (STRUCT, MEMBER)))
  ------------------
 8908|    137|        return orm->dst.field;
 8909|    137|    }
 8910|       |
 8911|   135k|    return NULL;
 8912|   144k|}
ofpact_bitmap_from_openflow:
 9265|  48.9k|{
 9266|  48.9k|    uint64_t ofpact_bitmap = 0;
 9267|  48.9k|    const struct ofpact_map *x;
 9268|       |
 9269|   804k|    for (x = get_ofpact_map(version); x->ofpat >= 0; x++) {
  ------------------
  |  Branch (9269:39): [True: 755k, False: 48.9k]
  ------------------
 9270|   755k|        if (ofpat_bitmap & htonl(1u << x->ofpat)) {
  ------------------
  |  Branch (9270:13): [True: 272k, False: 482k]
  ------------------
 9271|       |            ofpact_bitmap |= UINT64_C(1) << x->ofpact;
 9272|   272k|        }
 9273|   755k|    }
 9274|  48.9k|    return ofpact_bitmap;
 9275|  48.9k|}
ofpact_bitmap_format:
 9281|  26.1k|{
 9282|  26.1k|    if (!ofpacts_bitmap) {
  ------------------
  |  Branch (9282:9): [True: 614, False: 25.5k]
  ------------------
 9283|    614|        ds_put_cstr(s, "<none>");
 9284|  25.5k|    } else {
 9285|   171k|        while (ofpacts_bitmap) {
  ------------------
  |  Branch (9285:16): [True: 145k, False: 25.5k]
  ------------------
 9286|   145k|            ds_put_format(s, "%s ",
 9287|   145k|                          ofpact_name(rightmost_1bit_idx(ofpacts_bitmap)));
 9288|   145k|            ofpacts_bitmap = zero_rightmost_1bit(ofpacts_bitmap);
 9289|   145k|        }
 9290|  25.5k|        ds_chomp(s, ' ');
 9291|  25.5k|    }
 9292|  26.1k|}
ofpacts_format:
 9484|  93.2k|{
 9485|  93.2k|    if (!ofpacts_len) {
  ------------------
  |  Branch (9485:9): [True: 18.7k, False: 74.4k]
  ------------------
 9486|  18.7k|        ds_put_format(fp->s, "%sdrop%s", colors.drop, colors.end);
 9487|  74.4k|    } else {
 9488|  74.4k|        const struct ofpact *a;
 9489|       |
 9490|   157k|        OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   231k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 157k, False: 74.4k]
  |  |  ------------------
  |  |  262|   157k|         (POS) = ofpact_next(POS))
  ------------------
 9491|   157k|            if (a != ofpacts) {
  ------------------
  |  Branch (9491:17): [True: 82.6k, False: 74.4k]
  ------------------
 9492|  82.6k|                ds_put_char(fp->s, ',');
 9493|  82.6k|            }
 9494|       |
 9495|   157k|            ofpact_format(a, fp);
 9496|   157k|        }
 9497|  74.4k|    }
 9498|  93.2k|}
ofpact_put:
 9505|   293k|{
 9506|   293k|    struct ofpact *ofpact;
 9507|       |
 9508|   293k|    ofpacts->header = ofpbuf_put_uninit(ofpacts, len);
 9509|   293k|    ofpact = ofpacts->header;
 9510|   293k|    ofpact_init(ofpact, type, len);
 9511|   293k|    return ofpact;
 9512|   293k|}
ofpact_init:
 9517|   293k|{
 9518|   293k|    memset(ofpact, 0, len);
 9519|   293k|    ofpact->type = type;
 9520|   293k|    ofpact->raw = -1;
 9521|   293k|    ofpact->len = len;
 9522|   293k|}
ofpact_finish:
 9535|  62.9k|{
 9536|  62.9k|    ptrdiff_t len;
 9537|       |
 9538|  62.9k|    ovs_assert(ofpact == ofpacts->header);
  ------------------
  |  |   62|  62.9k|#define ovs_assert ovs_ignore
  ------------------
 9539|  62.9k|    len = (char *) ofpbuf_tail(ofpacts) - (char *) ofpact;
 9540|  62.9k|    ovs_assert(len > 0 && len <= UINT16_MAX);
  ------------------
  |  |   62|  62.9k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (9540:16): [True: 62.9k, False: 0]
  |  Branch (9540:27): [True: 62.9k, False: 0]
  ------------------
 9541|  62.9k|    ofpact->len = len;
 9542|  62.9k|    ofpbuf_padto(ofpacts, OFPACT_ALIGN(ofpacts->size));
  ------------------
  |  |  205|  62.9k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  62.9k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  62.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9543|       |
 9544|  62.9k|    return ofpacts->header;
 9545|  62.9k|}
ofpact_name:
 9713|   147k|{
 9714|   147k|    switch (type) {
  ------------------
  |  Branch (9714:13): [True: 147k, False: 0]
  ------------------
 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
 9716|   147k|        OFPACTS
  ------------------
  |  |   64|  10.8k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9715|  10.8k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.8k, False: 137k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   65|  10.8k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9715|  7.96k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.96k, False: 139k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   66|  7.96k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9715|     41|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 41, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   67|    116|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9715|    116|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 116, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   68|    116|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9715|      2|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 2, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   69|      2|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   70|      0|                                                                        \
  |  |   71|      0|    /* Header changes. */                                               \
  |  |   72|  4.41k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9715|  4.41k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.41k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   73|  5.83k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9715|  5.83k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 5.83k, False: 142k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   74|  5.83k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9715|  4.04k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.04k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   75|  8.15k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9715|  8.15k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 8.15k, False: 139k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   76|  8.15k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9715|  7.79k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.79k, False: 140k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  7.79k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.82k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.82k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   78|  3.82k|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.52k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.52k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   79|  3.61k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9715|  3.61k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.61k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   80|  3.87k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  3.87k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.87k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   81|  3.87k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9715|  3.78k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.78k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   82|  3.97k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9715|  3.97k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.97k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   83|  6.88k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9715|  6.88k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.88k, False: 140k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   84|  6.88k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9715|  4.22k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.22k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   85|  4.26k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9715|  4.26k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4.26k, False: 143k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   86|  4.26k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|      7|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   88|      9|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9715|      9|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   89|  10.8k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9715|  10.8k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 10.8k, False: 137k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   90|  10.8k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9715|  3.55k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.55k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   91|  3.79k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9715|  3.79k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3.79k, False: 144k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   92|  6.28k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  6.28k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6.28k, False: 141k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   93|  9.82k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9715|  9.82k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.82k, False: 138k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   94|  9.82k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9715|  9.14k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9.14k, False: 138k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   95|  9.14k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9715|  7.48k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.48k, False: 140k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   96|  7.48k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9715|      4|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 4, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   97|      4|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   98|      0|                                                                        \
  |  |   99|      0|    /* Generic encap & decap */                                         \
  |  |  100|     93|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9715|     93|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 93, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  101|     93|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9715|      9|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 9, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  102|      9|                                                                        \
  |  |  103|      9|    /* Metadata. */                                                     \
  |  |  104|    595|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9715|    595|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 595, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  105|  7.50k|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  7.50k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7.50k, False: 140k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  106|  7.50k|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9715|  1.18k|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1.18k, False: 146k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  107|  1.18k|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9715|     11|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 11, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  108|     11|                                                                        \
  |  |  109|     11|    /* Flow table interaction. */                                       \
  |  |  110|     70|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9715|     70|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 70, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  111|     70|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|      1|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  113|      0|                                                                        \
  |  |  114|      0|    /* Arithmetic. */                                                   \
  |  |  115|      1|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9715|      1|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 1, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  116|      1|                                                                        \
  |  |  117|      1|    /* Other. */                                                        \
  |  |  118|     12|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9715|     12|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 12, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  119|     12|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9715|      3|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 3, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|      6|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9715|      6|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 6, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|      6|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    180|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9715|    180|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 180, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    180|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9715|     21|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 21, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|     21|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9715|      7|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 7, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|     27|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9715|     27|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 27, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|     27|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9715|     11|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 11, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|     11|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|      0|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|      0|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  140|      0|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  141|      0|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|      0|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9715|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME) case OFPACT_##ENUM: return NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9715:44): [True: 0, False: 147k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9717|   147k|#undef OFPACT
 9718|   147k|    }
 9719|      0|    return "<unknown>";
 9720|   147k|}
ofp-actions.c:ofpacts_pull_openflow_actions__:
 8060|   198k|{
 8061|   198k|    const struct ofp_action_header *actions;
 8062|   198k|    enum ofperr error;
 8063|       |
 8064|   198k|    if (actions_len % OFP_ACTION_ALIGN != 0) {
  ------------------
  |  |  384|   198k|#define OFP_ACTION_ALIGN 8
  ------------------
  |  Branch (8064:9): [True: 9.95k, False: 188k]
  ------------------
 8065|  9.95k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u is not a "
  ------------------
  |  |  224|  9.95k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  9.95k|    do {                                                                \
  |  |  |  |  288|  9.95k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  9.95k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 9.95k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  9.95k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 9.95k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8066|  9.95k|                     "multiple of %d", actions_len, OFP_ACTION_ALIGN);
 8067|  9.95k|        return OFPERR_OFPBRC_BAD_LEN;
 8068|  9.95k|    }
 8069|       |
 8070|   188k|    actions = ofpbuf_try_pull(openflow, actions_len);
 8071|   188k|    if (actions == NULL) {
  ------------------
  |  Branch (8071:9): [True: 2.21k, False: 185k]
  ------------------
 8072|  2.21k|        VLOG_WARN_RL(&rl, "OpenFlow message actions length %u exceeds "
  ------------------
  |  |  224|  2.21k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.21k|    do {                                                                \
  |  |  |  |  288|  2.21k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.21k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.21k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8073|  2.21k|                     "remaining message length (%"PRIu32")",
 8074|  2.21k|                     actions_len, openflow->size);
 8075|  2.21k|        return OFPERR_OFPBRC_BAD_LEN;
 8076|  2.21k|    }
 8077|       |
 8078|   185k|    error = ofpacts_decode(actions, actions_len, version, vl_mff_map,
 8079|   185k|                           ofpacts_tlv_bitmap, ofpacts);
 8080|   185k|    if (!error) {
  ------------------
  |  Branch (8080:9): [True: 94.3k, False: 91.5k]
  ------------------
 8081|  94.3k|        error = ofpacts_verify(ofpacts->data, ofpacts->size, version,
 8082|  94.3k|                               allowed_ovsinsts, outer_action, NULL);
 8083|  94.3k|    }
 8084|   185k|    if (error) {
  ------------------
  |  Branch (8084:9): [True: 100k, False: 85.0k]
  ------------------
 8085|   100k|        ofpbuf_clear(ofpacts);
 8086|   100k|    }
 8087|   185k|    return error;
 8088|   188k|}
ofp-actions.c:action_set_classify:
 8189|  45.8k|{
 8190|  45.8k|    switch (a->type) {
 8191|      0|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8192|      0|        ACTION_SET_ORDER
  ------------------
  |  | 8140|  3.49k|    SLOT(OFPACT_STRIP_VLAN)                     \
  |  |  ------------------
  |  |  |  | 8191|  3.49k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.49k, False: 42.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8141|  3.86k|    SLOT(OFPACT_POP_MPLS)                       \
  |  |  ------------------
  |  |  |  | 8191|  3.86k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 3.86k, False: 41.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8142|  7.49k|    SLOT(OFPACT_DECAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  7.49k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 7.49k, False: 38.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8143|  7.49k|    SLOT(OFPACT_ENCAP)                          \
  |  |  ------------------
  |  |  |  | 8191|  2.55k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 2.55k, False: 43.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8144|  5.50k|    SLOT(OFPACT_PUSH_MPLS)                      \
  |  |  ------------------
  |  |  |  | 8191|  5.50k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 5.50k, False: 40.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8145|  5.50k|    SLOT(OFPACT_PUSH_VLAN)                      \
  |  |  ------------------
  |  |  |  | 8191|  2.50k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 2.50k, False: 43.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8146|  2.50k|    SLOT(OFPACT_DEC_TTL)                        \
  |  |  ------------------
  |  |  |  | 8191|  1.14k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.14k, False: 44.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8147|  4.79k|    SLOT(OFPACT_DEC_MPLS_TTL)                   \
  |  |  ------------------
  |  |  |  | 8191|  4.79k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 4.79k, False: 41.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8148|  4.79k|    SLOT(OFPACT_DEC_NSH_TTL)
  |  |  ------------------
  |  |  |  | 8191|  1.46k|#define SLOT(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8191:22): [True: 1.46k, False: 44.3k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8193|      0|#undef SLOT
 8194|       |
 8195|      0|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
 8196|  1.46k|        ACTION_SET_FINAL_PRIORITY
  ------------------
  |  | 8155|    196|    FINAL(OFPACT_CT)                            \
  |  |  ------------------
  |  |  |  | 8195|    196|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 196, False: 45.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8156|    196|    FINAL(OFPACT_CT_CLEAR)                      \
  |  |  ------------------
  |  |  |  | 8195|      9|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 9, False: 45.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8157|     19|    FINAL(OFPACT_RESUBMIT)                      \
  |  |  ------------------
  |  |  |  | 8195|     19|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 19, False: 45.8k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8158|    558|    FINAL(OFPACT_OUTPUT)                        \
  |  |  ------------------
  |  |  |  | 8195|    558|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 558, False: 45.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  | 8159|    864|    FINAL(OFPACT_GROUP)
  |  |  ------------------
  |  |  |  | 8195|    864|#define FINAL(OFPACT) case OFPACT: return ACTION_SLOT_##OFPACT;
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8195:23): [True: 864, False: 44.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8197|      0|#undef FINAL
 8198|       |
 8199|    224|    case OFPACT_SET_FIELD:
  ------------------
  |  Branch (8199:5): [True: 224, False: 45.6k]
  ------------------
 8200|    541|    case OFPACT_REG_MOVE:
  ------------------
  |  Branch (8200:5): [True: 317, False: 45.5k]
  ------------------
 8201|    549|    case OFPACT_SET_ETH_DST:
  ------------------
  |  Branch (8201:5): [True: 8, False: 45.8k]
  ------------------
 8202|    750|    case OFPACT_SET_ETH_SRC:
  ------------------
  |  Branch (8202:5): [True: 201, False: 45.6k]
  ------------------
 8203|  1.87k|    case OFPACT_SET_IP_DSCP:
  ------------------
  |  Branch (8203:5): [True: 1.12k, False: 44.7k]
  ------------------
 8204|  3.57k|    case OFPACT_SET_IP_ECN:
  ------------------
  |  Branch (8204:5): [True: 1.70k, False: 44.1k]
  ------------------
 8205|  4.97k|    case OFPACT_SET_IP_TTL:
  ------------------
  |  Branch (8205:5): [True: 1.40k, False: 44.4k]
  ------------------
 8206|  5.17k|    case OFPACT_SET_IPV4_DST:
  ------------------
  |  Branch (8206:5): [True: 195, False: 45.6k]
  ------------------
 8207|  5.49k|    case OFPACT_SET_IPV4_SRC:
  ------------------
  |  Branch (8207:5): [True: 324, False: 45.5k]
  ------------------
 8208|  5.82k|    case OFPACT_SET_L4_DST_PORT:
  ------------------
  |  Branch (8208:5): [True: 326, False: 45.5k]
  ------------------
 8209|  6.36k|    case OFPACT_SET_L4_SRC_PORT:
  ------------------
  |  Branch (8209:5): [True: 549, False: 45.2k]
  ------------------
 8210|  6.77k|    case OFPACT_SET_MPLS_LABEL:
  ------------------
  |  Branch (8210:5): [True: 408, False: 45.4k]
  ------------------
 8211|  7.43k|    case OFPACT_SET_MPLS_TC:
  ------------------
  |  Branch (8211:5): [True: 661, False: 45.1k]
  ------------------
 8212|  8.76k|    case OFPACT_SET_MPLS_TTL:
  ------------------
  |  Branch (8212:5): [True: 1.33k, False: 44.5k]
  ------------------
 8213|  8.90k|    case OFPACT_SET_QUEUE:
  ------------------
  |  Branch (8213:5): [True: 136, False: 45.6k]
  ------------------
 8214|  8.91k|    case OFPACT_SET_TUNNEL:
  ------------------
  |  Branch (8214:5): [True: 9, False: 45.8k]
  ------------------
 8215|  10.4k|    case OFPACT_SET_VLAN_PCP:
  ------------------
  |  Branch (8215:5): [True: 1.50k, False: 44.3k]
  ------------------
 8216|  10.5k|    case OFPACT_SET_VLAN_VID:
  ------------------
  |  Branch (8216:5): [True: 152, False: 45.6k]
  ------------------
 8217|  10.5k|        return ACTION_SLOT_SET_OR_MOVE;
 8218|       |
 8219|      2|    case OFPACT_BUNDLE:
  ------------------
  |  Branch (8219:5): [True: 2, False: 45.8k]
  ------------------
 8220|      2|    case OFPACT_CLEAR_ACTIONS:
  ------------------
  |  Branch (8220:5): [True: 0, False: 45.8k]
  ------------------
 8221|      4|    case OFPACT_CLONE:
  ------------------
  |  Branch (8221:5): [True: 2, False: 45.8k]
  ------------------
 8222|     10|    case OFPACT_NAT:
  ------------------
  |  Branch (8222:5): [True: 6, False: 45.8k]
  ------------------
 8223|     12|    case OFPACT_CONTROLLER:
  ------------------
  |  Branch (8223:5): [True: 2, False: 45.8k]
  ------------------
 8224|     12|    case OFPACT_ENQUEUE:
  ------------------
  |  Branch (8224:5): [True: 0, False: 45.8k]
  ------------------
 8225|     49|    case OFPACT_EXIT:
  ------------------
  |  Branch (8225:5): [True: 37, False: 45.7k]
  ------------------
 8226|     49|    case OFPACT_UNROLL_XLATE:
  ------------------
  |  Branch (8226:5): [True: 0, False: 45.8k]
  ------------------
 8227|     59|    case OFPACT_FIN_TIMEOUT:
  ------------------
  |  Branch (8227:5): [True: 10, False: 45.8k]
  ------------------
 8228|     59|    case OFPACT_GOTO_TABLE:
  ------------------
  |  Branch (8228:5): [True: 0, False: 45.8k]
  ------------------
 8229|     66|    case OFPACT_LEARN:
  ------------------
  |  Branch (8229:5): [True: 7, False: 45.8k]
  ------------------
 8230|     66|    case OFPACT_CONJUNCTION:
  ------------------
  |  Branch (8230:5): [True: 0, False: 45.8k]
  ------------------
 8231|    777|    case OFPACT_METER:
  ------------------
  |  Branch (8231:5): [True: 711, False: 45.1k]
  ------------------
 8232|    787|    case OFPACT_MULTIPATH:
  ------------------
  |  Branch (8232:5): [True: 10, False: 45.8k]
  ------------------
 8233|    787|    case OFPACT_NOTE:
  ------------------
  |  Branch (8233:5): [True: 0, False: 45.8k]
  ------------------
 8234|    787|    case OFPACT_OUTPUT_REG:
  ------------------
  |  Branch (8234:5): [True: 0, False: 45.8k]
  ------------------
 8235|    814|    case OFPACT_OUTPUT_TRUNC:
  ------------------
  |  Branch (8235:5): [True: 27, False: 45.8k]
  ------------------
 8236|    814|    case OFPACT_POP_QUEUE:
  ------------------
  |  Branch (8236:5): [True: 0, False: 45.8k]
  ------------------
 8237|    814|    case OFPACT_SAMPLE:
  ------------------
  |  Branch (8237:5): [True: 0, False: 45.8k]
  ------------------
 8238|    814|    case OFPACT_STACK_POP:
  ------------------
  |  Branch (8238:5): [True: 0, False: 45.8k]
  ------------------
 8239|    814|    case OFPACT_STACK_PUSH:
  ------------------
  |  Branch (8239:5): [True: 0, False: 45.8k]
  ------------------
 8240|    814|    case OFPACT_WRITE_ACTIONS:
  ------------------
  |  Branch (8240:5): [True: 0, False: 45.8k]
  ------------------
 8241|    815|    case OFPACT_WRITE_METADATA:
  ------------------
  |  Branch (8241:5): [True: 1, False: 45.8k]
  ------------------
 8242|    815|    case OFPACT_DEBUG_RECIRC:
  ------------------
  |  Branch (8242:5): [True: 0, False: 45.8k]
  ------------------
 8243|    815|    case OFPACT_DEBUG_SLOW:
  ------------------
  |  Branch (8243:5): [True: 0, False: 45.8k]
  ------------------
 8244|    815|    case OFPACT_CHECK_PKT_LARGER:
  ------------------
  |  Branch (8244:5): [True: 0, False: 45.8k]
  ------------------
 8245|    815|    case OFPACT_DELETE_FIELD:
  ------------------
  |  Branch (8245:5): [True: 0, False: 45.8k]
  ------------------
 8246|    815|        return ACTION_SLOT_INVALID;
 8247|       |
 8248|      0|    default:
  ------------------
  |  Branch (8248:5): [True: 0, False: 45.8k]
  ------------------
 8249|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8250|  45.8k|    }
 8251|  45.8k|}
ofp-actions.c:get_ovsinst_map:
 8482|  20.9k|{
 8483|       |    /* OpenFlow 1.1, 1.2, and 1.5 instructions. */
 8484|  20.9k|    static const struct ovsinst_map of11[] = {
 8485|  20.9k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8486|  20.9k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8487|  20.9k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8488|  20.9k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8489|  20.9k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8490|  20.9k|        { 0, -1 },
 8491|  20.9k|    };
 8492|       |
 8493|       |    /* OpenFlow 1.3 and 1.4 instructions. */
 8494|  20.9k|    static const struct ovsinst_map of13[] = {
 8495|  20.9k|        { OVSINST_OFPIT11_GOTO_TABLE, 1 },
 8496|  20.9k|        { OVSINST_OFPIT11_WRITE_METADATA, 2 },
 8497|  20.9k|        { OVSINST_OFPIT11_WRITE_ACTIONS, 3 },
 8498|  20.9k|        { OVSINST_OFPIT11_APPLY_ACTIONS, 4 },
 8499|  20.9k|        { OVSINST_OFPIT11_CLEAR_ACTIONS, 5 },
 8500|  20.9k|        { OVSINST_OFPIT13_METER, 6 },
 8501|  20.9k|        { 0, -1 },
 8502|  20.9k|    };
 8503|       |
 8504|  20.9k|    return version == OFP13_VERSION || version == OFP14_VERSION ? of13 : of11;
  ------------------
  |  Branch (8504:12): [True: 0, False: 20.9k]
  |  Branch (8504:40): [True: 0, False: 20.9k]
  ------------------
 8505|  20.9k|}
ofp-actions.c:decode_openflow11_instructions:
 8598|  33.6k|{
 8599|  33.6k|    const struct ofp11_instruction *inst;
 8600|  33.6k|    size_t left;
 8601|       |
 8602|  33.6k|    memset(out, 0, N_OVS_INSTRUCTIONS * sizeof *out);
 8603|  33.6k|    INSTRUCTION_FOR_EACH (inst, left, insts, n_insts) {
  ------------------
  |  | 8560|  33.6k|    for ((ITER) = (INSTRUCTIONS), (LEFT) = (N_INSTRUCTIONS);            \
  |  | 8561|  55.0k|         (LEFT) > 0 && instruction_is_valid(ITER, LEFT);                \
  |  |  ------------------
  |  |  |  Branch (8561:10): [True: 25.2k, False: 29.8k]
  |  |  |  Branch (8561:24): [True: 22.9k, False: 2.33k]
  |  |  ------------------
  |  | 8562|  33.6k|         ((LEFT) -= (ntohs((ITER)->len)                                 \
  |  | 8563|  21.4k|                     / sizeof(struct ofp11_instruction)),               \
  |  | 8564|  21.4k|          (ITER) = instruction_next(ITER)))
  ------------------
 8604|  22.9k|        enum ovs_instruction_type type;
 8605|  22.9k|        enum ofperr error;
 8606|       |
 8607|  22.9k|        error = decode_openflow11_instruction(inst, &type);
 8608|  22.9k|        if (error) {
  ------------------
  |  Branch (8608:13): [True: 1.26k, False: 21.6k]
  ------------------
 8609|  1.26k|            return error;
 8610|  1.26k|        }
 8611|       |
 8612|  21.6k|        if (type == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (8612:13): [True: 351, False: 21.3k]
  |  Branch (8612:46): [True: 124, False: 227]
  ------------------
 8613|       |            /* "meter" is an action, not an instruction, in OpenFlow 1.5. */
 8614|    124|            return OFPERR_OFPBIC_UNKNOWN_INST;
 8615|    124|        }
 8616|       |
 8617|  21.5k|        if (out[type]) {
  ------------------
  |  Branch (8617:13): [True: 80, False: 21.4k]
  ------------------
 8618|     80|            return OFPERR_OFPBIC_DUP_INST;
 8619|     80|        }
 8620|  21.4k|        out[type] = inst;
 8621|  21.4k|    }
 8622|       |
 8623|  32.1k|    if (left) {
  ------------------
  |  Branch (8623:9): [True: 2.33k, False: 29.8k]
  ------------------
 8624|  2.33k|        VLOG_WARN_RL(&rl, "bad instruction format at offset %"PRIuSIZE,
  ------------------
  |  |  224|  2.33k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.33k|    do {                                                                \
  |  |  |  |  288|  2.33k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.33k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.33k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.33k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.33k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8625|  2.33k|                     (n_insts - left) * sizeof *inst);
 8626|  2.33k|        return OFPERR_OFPBIC_BAD_LEN;
 8627|  2.33k|    }
 8628|  29.8k|    return 0;
 8629|  32.1k|}
ofp-actions.c:instruction_is_valid:
 8551|  25.2k|{
 8552|  25.2k|    uint16_t len = ntohs(inst->len);
 8553|  25.2k|    return (!(len % OFP11_INSTRUCTION_ALIGN)
  ------------------
  |  |  262|  25.2k|#define OFP11_INSTRUCTION_ALIGN 8
  ------------------
  |  Branch (8553:13): [True: 23.3k, False: 1.93k]
  ------------------
 8554|  23.3k|            && len >= sizeof *inst
  ------------------
  |  Branch (8554:16): [True: 23.1k, False: 206]
  ------------------
 8555|  23.1k|            && len / sizeof *inst <= n_instructions);
  ------------------
  |  Branch (8555:16): [True: 22.9k, False: 195]
  ------------------
 8556|  25.2k|}
ofp-actions.c:decode_openflow11_instruction:
 8569|  22.9k|{
 8570|  22.9k|    uint16_t len = ntohs(inst->len);
 8571|       |
 8572|  22.9k|    switch (inst->type) {
 8573|     73|    case CONSTANT_HTONS(OFPIT11_EXPERIMENTER):
  ------------------
  |  |   84|     73|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |   85|     73|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  ------------------
  |  Branch (8573:5): [True: 73, False: 22.8k]
  ------------------
 8574|     73|        return OFPERR_OFPBIC_BAD_EXPERIMENTER;
 8575|       |
 8576|      0|#define DEFINE_INST(ENUM, STRUCT, EXTENSIBLE, NAME)     \
 8577|      0|        case CONSTANT_HTONS(ENUM):                      \
 8578|      0|            if (EXTENSIBLE                              \
 8579|      0|                ? len >= sizeof(struct STRUCT)          \
 8580|      0|                : len == sizeof(struct STRUCT)) {       \
 8581|      0|                *type = OVSINST_##ENUM;                 \
 8582|      0|                return 0;                               \
 8583|      0|            } else {                                    \
 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
 8585|      0|            }
 8586|     73|OVS_INSTRUCTIONS
  ------------------
  |  | 1344|    385|    DEFINE_INST(OFPIT13_METER,                              \
  |  |  ------------------
  |  |  |  | 8577|    385|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    385|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    385|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 385, False: 22.5k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    385|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 385]
  |  |  |  |  |  Branch (8578:17): [True: 351, False: 34]
  |  |  |  |  ------------------
  |  |  |  | 8579|    385|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    385|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    351|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    351|                return 0;                               \
  |  |  |  | 8583|    351|            } else {                                    \
  |  |  |  | 8584|     34|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     34|            }
  |  |  ------------------
  |  | 1345|    385|                ofp13_instruction_meter,          false,    \
  |  | 1346|    385|                "meter")                                    \
  |  | 1347|    385|                                                            \
  |  | 1348|  2.92k|    DEFINE_INST(OFPIT11_APPLY_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  2.92k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  2.92k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  2.92k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 2.92k, False: 19.9k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  2.92k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 2.92k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 2.92k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  2.92k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  2.92k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  2.92k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  2.92k|                return 0;                               \
  |  |  |  | 8583|  2.92k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1349|  2.92k|                ofp11_instruction_actions,        true,     \
  |  | 1350|  2.92k|                "apply_actions")                            \
  |  | 1351|  2.92k|                                                            \
  |  | 1352|  2.92k|    DEFINE_INST(OFPIT11_CLEAR_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|    322|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    322|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    322|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 322, False: 22.6k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    322|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 322]
  |  |  |  |  |  Branch (8578:17): [True: 312, False: 10]
  |  |  |  |  ------------------
  |  |  |  | 8579|    322|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    322|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    312|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    312|                return 0;                               \
  |  |  |  | 8583|    312|            } else {                                    \
  |  |  |  | 8584|     10|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     10|            }
  |  |  ------------------
  |  | 1353|    322|                ofp11_instruction,                false,    \
  |  | 1354|    322|                "clear_actions")                            \
  |  | 1355|    322|                                                            \
  |  | 1356|  16.8k|    DEFINE_INST(OFPIT11_WRITE_ACTIONS,                      \
  |  |  ------------------
  |  |  |  | 8577|  16.8k|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|  16.8k|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|  16.8k|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 16.8k, False: 6.04k]
  |  |  |  |  ------------------
  |  |  |  | 8578|  16.8k|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [True: 16.8k, Folded]
  |  |  |  |  |  Branch (8578:17): [True: 16.8k, False: 0]
  |  |  |  |  ------------------
  |  |  |  | 8579|  16.8k|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|  16.8k|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|  16.8k|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|  16.8k|                return 0;                               \
  |  |  |  | 8583|  16.8k|            } else {                                    \
  |  |  |  | 8584|      0|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|      0|            }
  |  |  ------------------
  |  | 1357|  16.8k|                ofp11_instruction_actions,        true,     \
  |  | 1358|  16.8k|                "write_actions")                            \
  |  | 1359|  16.8k|                                                            \
  |  | 1360|  16.8k|    DEFINE_INST(OFPIT11_WRITE_METADATA,                     \
  |  |  ------------------
  |  |  |  | 8577|    897|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    897|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    897|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 897, False: 22.0k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    897|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 897]
  |  |  |  |  |  Branch (8578:17): [True: 824, False: 73]
  |  |  |  |  ------------------
  |  |  |  | 8579|    897|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    897|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    824|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    824|                return 0;                               \
  |  |  |  | 8583|    824|            } else {                                    \
  |  |  |  | 8584|     73|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|     73|            }
  |  |  ------------------
  |  | 1361|    897|                ofp11_instruction_write_metadata, false,    \
  |  | 1362|    897|                "write_metadata")                           \
  |  | 1363|    897|                                                            \
  |  | 1364|    897|    DEFINE_INST(OFPIT11_GOTO_TABLE,                         \
  |  |  ------------------
  |  |  |  | 8577|    491|        case CONSTANT_HTONS(ENUM):                      \
  |  |  |  |  ------------------
  |  |  |  |  |  |   84|    491|        (((((ovs_be16) (VALUE)) & 0xff00) >> 8) |   \
  |  |  |  |  |  |   85|    491|         ((((ovs_be16) (VALUE)) & 0x00ff) << 8))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8577:9): [True: 491, False: 22.4k]
  |  |  |  |  ------------------
  |  |  |  | 8578|    491|            if (EXTENSIBLE                              \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8578:17): [Folded, False: 491]
  |  |  |  |  |  Branch (8578:17): [True: 374, False: 117]
  |  |  |  |  ------------------
  |  |  |  | 8579|    491|                ? len >= sizeof(struct STRUCT)          \
  |  |  |  | 8580|    491|                : len == sizeof(struct STRUCT)) {       \
  |  |  |  | 8581|    374|                *type = OVSINST_##ENUM;                 \
  |  |  |  | 8582|    374|                return 0;                               \
  |  |  |  | 8583|    374|            } else {                                    \
  |  |  |  | 8584|    117|                return OFPERR_OFPBIC_BAD_LEN;           \
  |  |  |  | 8585|    117|            }
  |  |  ------------------
  |  | 1365|    491|                ofp11_instruction_goto_table,     false,    \
  |  | 1366|    491|                "goto_table")
  ------------------
 8587|      0|#undef DEFINE_INST
 8588|       |
 8589|    953|    default:
  ------------------
  |  Branch (8589:5): [True: 953, False: 21.9k]
  ------------------
 8590|    953|        return OFPERR_OFPBIC_UNKNOWN_INST;
 8591|  22.9k|    }
 8592|  22.9k|}
ofp-actions.c:instruction_next:
 8543|  21.4k|{
 8544|  21.4k|    return ((struct ofp11_instruction *) (void *)
 8545|       |            ((uint8_t *) inst + ntohs(inst->len)));
 8546|  21.4k|}
ofp-actions.c:get_actions_from_instruction:
 8635|  19.7k|{
 8636|  19.7k|    *actions = ALIGNED_CAST(const struct ofp_action_header *, inst + 1);
  ------------------
  |  |  434|  19.7k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 8637|       |    *actions_len = ntohs(inst->len) - sizeof *inst;
 8638|  19.7k|}
ofp-actions.c:ofpacts_decode:
 8029|   205k|{
 8030|   205k|    size_t bad_action_offset = 0;
 8031|   205k|    struct ofpbuf aligned_buf;
 8032|       |
 8033|   205k|    if (!OFPACT_IS_ALIGNED(actions)) {
  ------------------
  |  |  206|   205k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   205k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (8033:9): [True: 117k, False: 88.4k]
  ------------------
 8034|   117k|        ofpbuf_init(&aligned_buf, actions_len);
 8035|   117k|        ofpbuf_put(&aligned_buf, actions, actions_len);
 8036|   117k|    } else {
 8037|  88.4k|        ofpbuf_use_data(&aligned_buf, actions, actions_len);
 8038|  88.4k|    }
 8039|       |
 8040|   205k|    enum ofperr error
 8041|   205k|        = ofpacts_decode_aligned(&aligned_buf, ofp_version, vl_mff_map,
 8042|   205k|                                 ofpacts_tlv_bitmap, ofpacts,
 8043|   205k|                                 &bad_action_offset);
 8044|   205k|    if (error) {
  ------------------
  |  Branch (8044:9): [True: 96.0k, False: 109k]
  ------------------
 8045|  96.0k|        log_bad_action(actions, actions_len, bad_action_offset, error);
 8046|  96.0k|    }
 8047|   205k|    ofpbuf_uninit(&aligned_buf);
 8048|   205k|    return error;
 8049|   205k|}
ofp-actions.c:ofpacts_decode_aligned:
 7986|   205k|{
 7987|   205k|    size_t decoded_len = 0;
 7988|   205k|    enum ofperr error = 0;
 7989|       |
 7990|   205k|    ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |   62|   205k|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(OFPACT_IS_ALIGNED(openflow->data));
  ------------------
  |  |  206|   205k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   205k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
 7991|   422k|    while (openflow->size) {
  ------------------
  |  Branch (7991:12): [True: 312k, False: 109k]
  ------------------
 7992|       |        /* Ensure the next action data is properly aligned before decoding it.
 7993|       |         * Some times it's valid to have to decode actions that are not
 7994|       |         * properly aligned (e.g., when processing OF 1.0 statistics reply
 7995|       |         * messages which have a header of 12 bytes - struct ofp10_stats_msg).
 7996|       |         * In other cases the encoder might be buggy.
 7997|       |         */
 7998|   312k|        if (!OFPACT_IS_ALIGNED(openflow->data)) {
  ------------------
  |  |  206|   312k|#define OFPACT_IS_ALIGNED(ADDR) ((uintptr_t) (ADDR) % OFPACT_ALIGNTO == 0)
  |  |  ------------------
  |  |  |  |  204|   312k|#define OFPACT_ALIGNTO 8
  |  |  ------------------
  ------------------
  |  Branch (7998:13): [True: 0, False: 312k]
  ------------------
 7999|      0|            ofpbuf_align(openflow);
 8000|      0|        }
 8001|       |
 8002|   312k|        const struct ofp_action_header *action = openflow->data;
 8003|   312k|        enum ofp_raw_action_type raw;
 8004|   312k|        size_t act_len = 0;
 8005|   312k|        uint64_t arg;
 8006|       |
 8007|   312k|        error = ofpact_pull_raw(openflow, ofp_version, &raw, &arg, &act_len);
 8008|   312k|        if (!error) {
  ------------------
  |  Branch (8008:13): [True: 281k, False: 31.2k]
  ------------------
 8009|   281k|            error = ofpact_decode(action, raw, ofp_version, arg, vl_mff_map,
 8010|   281k|                                  ofpacts_tlv_bitmap, ofpacts);
 8011|   281k|        }
 8012|       |
 8013|   312k|        if (error) {
  ------------------
  |  Branch (8013:13): [True: 96.0k, False: 216k]
  ------------------
 8014|  96.0k|            *bad_action_offset = decoded_len;
 8015|  96.0k|            goto done;
 8016|  96.0k|        }
 8017|   216k|        decoded_len += act_len;
 8018|   216k|    }
 8019|       |
 8020|   205k|done:
 8021|   205k|    return error;
 8022|   205k|}
ofp-actions.c:ofpact_pull_raw:
 9903|   312k|{
 9904|   312k|    const struct ofp_action_header *oah = buf->data;
 9905|   312k|    const struct ofpact_raw_instance *action;
 9906|   312k|    unsigned int length;
 9907|   312k|    enum ofperr error;
 9908|       |
 9909|   312k|    *raw = *arg = *raw_len = 0;
 9910|   312k|    error = ofpact_decode_raw(ofp_version, oah, buf->size, &action);
 9911|   312k|    if (error) {
  ------------------
  |  Branch (9911:9): [True: 21.7k, False: 291k]
  ------------------
 9912|  21.7k|        return error;
 9913|  21.7k|    }
 9914|       |
 9915|   291k|    if (action->deprecation) {
  ------------------
  |  Branch (9915:9): [True: 13.6k, False: 277k]
  ------------------
 9916|  13.6k|        VLOG_INFO_RL(&rl, "%s is deprecated in %s (%s)",
  ------------------
  |  |  225|  13.6k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  13.6k|    do {                                                                \
  |  |  |  |  288|  13.6k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  13.6k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 13.6k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  13.6k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 13.6k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9917|  13.6k|                     action->name, ofputil_version_to_string(ofp_version),
 9918|  13.6k|                     action->deprecation);
 9919|  13.6k|    }
 9920|       |
 9921|   291k|    length = ntohs(oah->len);
 9922|   291k|    if (length > buf->size) {
  ------------------
  |  Branch (9922:9): [True: 4.28k, False: 286k]
  ------------------
 9923|  4.28k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u exceeds action buffer "
  ------------------
  |  |  224|  4.28k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  4.28k|    do {                                                                \
  |  |  |  |  288|  4.28k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  4.28k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 4.28k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  4.28k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 4.28k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9924|  4.28k|                     "length %"PRIu32, action->name, length, buf->size);
 9925|  4.28k|        return OFPERR_OFPBAC_BAD_LEN;
 9926|  4.28k|    }
 9927|   286k|    if (length < action->min_length || length > action->max_length) {
  ------------------
  |  Branch (9927:9): [True: 2.44k, False: 284k]
  |  Branch (9927:40): [True: 1.22k, False: 283k]
  ------------------
 9928|  3.66k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u not in valid range "
  ------------------
  |  |  224|  3.66k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.66k|    do {                                                                \
  |  |  |  |  288|  3.66k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.66k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.66k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.66k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.66k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9929|  3.66k|                     "[%hu,%hu]", action->name, length,
 9930|  3.66k|                     action->min_length, action->max_length);
 9931|  3.66k|        return OFPERR_OFPBAC_BAD_LEN;
 9932|  3.66k|    }
 9933|   283k|    if (length % 8) {
  ------------------
  |  Branch (9933:9): [True: 1.58k, False: 281k]
  ------------------
 9934|  1.58k|        VLOG_WARN_RL(&rl, "OpenFlow action %s length %u is not a multiple "
  ------------------
  |  |  224|  1.58k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.58k|    do {                                                                \
  |  |  |  |  288|  1.58k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.58k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.58k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.58k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.58k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9935|  1.58k|                     "of 8", action->name, length);
 9936|  1.58k|        return OFPERR_OFPBAC_BAD_LEN;
 9937|  1.58k|    }
 9938|       |
 9939|   281k|    *raw = action->raw;
 9940|   281k|    *arg = 0;
 9941|   281k|    if (action->arg_len) {
  ------------------
  |  Branch (9941:9): [True: 83.1k, False: 198k]
  ------------------
 9942|  83.1k|        const uint8_t *p;
 9943|  83.1k|        int i;
 9944|       |
 9945|  83.1k|        p = ofpbuf_at_assert(buf, action->arg_ofs, action->arg_len);
 9946|   260k|        for (i = 0; i < action->arg_len; i++) {
  ------------------
  |  Branch (9946:21): [True: 177k, False: 83.1k]
  ------------------
 9947|   177k|            *arg = (*arg << 8) | p[i];
 9948|   177k|        }
 9949|  83.1k|    }
 9950|       |
 9951|   281k|    ofpbuf_pull(buf, length);
 9952|   281k|    *raw_len = length;
 9953|       |
 9954|   281k|    return 0;
 9955|   283k|}
ofp-actions.c:ofpact_decode_raw:
 9850|   312k|{
 9851|   312k|    const struct ofpact_raw_instance *inst;
 9852|   312k|    struct ofpact_hdrs hdrs;
 9853|       |
 9854|   312k|    *instp = NULL;
 9855|   312k|    if (length < sizeof *oah) {
  ------------------
  |  Branch (9855:9): [True: 0, False: 312k]
  ------------------
 9856|      0|        return OFPERR_OFPBAC_BAD_LEN;
 9857|      0|    }
 9858|       |
 9859|       |    /* Get base action type. */
 9860|   312k|    if (oah->type == htons(OFPAT_VENDOR)) {
  ------------------
  |  Branch (9860:9): [True: 164k, False: 148k]
  ------------------
 9861|       |        /* Get vendor. */
 9862|   164k|        hdrs.vendor = ntohl(oah->vendor);
 9863|   164k|        if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   329k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs.vendor == NX_VENDOR_ID || hdrs.vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  8.85k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (9863:13): [True: 155k, False: 8.85k]
  |  Branch (9863:44): [True: 62, False: 8.79k]
  ------------------
 9864|       |            /* Get extension subtype. */
 9865|   155k|            const struct ext_action_header *nah;
 9866|       |
 9867|   155k|            nah = ALIGNED_CAST(const struct ext_action_header *, oah);
  ------------------
  |  |  434|   155k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 9868|   155k|            if (length < sizeof *nah) {
  ------------------
  |  Branch (9868:17): [True: 390, False: 155k]
  ------------------
 9869|    390|                return OFPERR_OFPBAC_BAD_LEN;
 9870|    390|            }
 9871|   155k|            hdrs.type = ntohs(nah->subtype);
 9872|   155k|        } else {
 9873|  8.79k|            VLOG_WARN_RL(&rl, "OpenFlow action has unknown vendor %#"PRIx32,
  ------------------
  |  |  224|  8.79k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  8.79k|    do {                                                                \
  |  |  |  |  288|  8.79k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  8.79k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 8.79k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  8.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 8.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9874|  8.79k|                         hdrs.vendor);
 9875|  8.79k|            return OFPERR_OFPBAC_BAD_VENDOR;
 9876|  8.79k|        }
 9877|   164k|    } else {
 9878|   148k|        hdrs.vendor = 0;
 9879|   148k|        hdrs.type = ntohs(oah->type);
 9880|   148k|    }
 9881|       |
 9882|   303k|    hdrs.ofp_version = ofp_version;
 9883|   303k|    HMAP_FOR_EACH_WITH_HASH (inst, decode_node, ofpact_hdrs_hash(&hdrs),
  ------------------
  |  |  138|   303k|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|   303k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|   303k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|   303k|                       struct hmap_node);                                     \
  |  |  140|   303k|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|   303k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 291k, False: 12.5k]
  |  |  |  |  |  Branch (185:6): [True: 291k, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |  186|   303k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|   291k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|   291k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|   291k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|   303k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|   303k|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|      0|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|      0|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9884|   303k|                             ofpact_decode_hmap()) {
 9885|   291k|        if (ofpact_hdrs_equal(&hdrs, &inst->hdrs)) {
  ------------------
  |  Branch (9885:13): [True: 291k, False: 0]
  ------------------
 9886|   291k|            *instp = inst;
 9887|   291k|            return 0;
 9888|   291k|        }
 9889|   291k|    }
 9890|       |
 9891|  12.5k|    VLOG_WARN_RL(&rl, "unknown %s action for vendor %#"PRIx32" and "
  ------------------
  |  |  224|  12.5k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  12.5k|    do {                                                                \
  |  |  |  |  288|  12.5k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  12.5k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 12.5k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  12.5k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 12.5k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9892|  12.5k|                 "type %"PRIu16, ofputil_version_to_string(ofp_version),
 9893|  12.5k|                 hdrs.vendor, hdrs.type);
 9894|  12.5k|    return (hdrs.vendor
  ------------------
  |  Branch (9894:13): [True: 2.53k, False: 10.0k]
  ------------------
 9895|  12.5k|            ? OFPERR_OFPBAC_BAD_VENDOR_TYPE
 9896|  12.5k|            : OFPERR_OFPBAC_BAD_TYPE);
 9897|   303k|}
ofp-actions.c:ofpact_decode_hmap:
 9806|   303k|{
 9807|   303k|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|   303k|    {                                           \
  |  |  135|   303k|        false,                                  \
  |  |  136|   303k|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|   303k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|   303k|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|   303k|    }
  ------------------
 9808|   303k|    static struct hmap hmap;
 9809|       |
 9810|   303k|    if (ovsthread_once_start(&once)) {
  ------------------
  |  Branch (9810:9): [True: 1, False: 303k]
  ------------------
 9811|      1|        struct ofpact_raw_instance *inst;
 9812|       |
 9813|      1|        hmap_init(&hmap);
 9814|      1|        for (inst = all_raw_instances;
 9815|    385|             inst < &all_raw_instances[ARRAY_SIZE(all_raw_instances)];
  ------------------
  |  |  297|    385|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|    385|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    385|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|    385|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    385|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    385|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (9815:14): [True: 384, False: 1]
  ------------------
 9816|    384|             inst++) {
 9817|    384|            hmap_insert(&hmap, &inst->decode_node,
  ------------------
  |  |  101|    384|    hmap_insert_at(HMAP, NODE, HASH, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    384|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    384|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    384|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 9818|    384|                        ofpact_hdrs_hash(&inst->hdrs));
 9819|    384|        }
 9820|      1|        ovsthread_once_done(&once);
 9821|      1|    }
 9822|   303k|    return &hmap;
 9823|   303k|}
ofp-actions.c:ofpact_hdrs_hash:
 9797|   304k|{
 9798|   304k|    return hash_2words(hdrs->vendor,
 9799|   304k|                       ((uint32_t) hdrs->type << 16) | hdrs->ofp_version);
 9800|   304k|}
ofp-actions.c:ofpact_hdrs_equal:
 9789|   291k|{
 9790|   291k|    return (a->vendor == b->vendor
  ------------------
  |  Branch (9790:13): [True: 291k, False: 0]
  ------------------
 9791|   291k|            && a->type == b->type
  ------------------
  |  Branch (9791:16): [True: 291k, False: 0]
  ------------------
 9792|   291k|            && a->ofp_version == b->ofp_version);
  ------------------
  |  Branch (9792:16): [True: 291k, False: 0]
  ------------------
 9793|   291k|}
ofp-actions.c:decode_OFPAT_RAW10_OUTPUT:
  578|  18.2k|{
  579|  18.2k|    struct ofpact_output *output;
  580|       |
  581|  18.2k|    output = ofpact_put_OUTPUT(out);
  582|  18.2k|    output->port = u16_to_ofp(ntohs(oao->port));
  583|  18.2k|    output->max_len = ntohs(oao->max_len);
  584|       |
  585|  18.2k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  18.2k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  18.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  586|  18.2k|}
ofp-actions.c:decode_OFPAT_RAW11_OUTPUT:
  592|  2.06k|{
  593|  2.06k|    struct ofpact_output *output;
  594|  2.06k|    enum ofperr error;
  595|       |
  596|  2.06k|    output = ofpact_put_OUTPUT(out);
  597|  2.06k|    output->max_len = ntohs(oao->max_len);
  598|       |
  599|  2.06k|    error = ofputil_port_from_ofp11(oao->port, &output->port);
  600|  2.06k|    if (error) {
  ------------------
  |  Branch (600:9): [True: 615, False: 1.44k]
  ------------------
  601|    615|        return error;
  602|    615|    }
  603|       |
  604|  1.44k|    return ofpact_check_output_port(output->port, OFPP_MAX);
  ------------------
  |  |   33|  1.44k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.44k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  605|  2.06k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_VID:
 1575|  9.79k|{
 1576|       |    return decode_set_vlan_vid(vid, true, out);
 1577|  9.79k|}
ofp-actions.c:decode_set_vlan_vid:
 1560|  10.9k|{
 1561|  10.9k|    if (vid & ~0xfff) {
  ------------------
  |  Branch (1561:9): [True: 226, False: 10.7k]
  ------------------
 1562|    226|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1563|  10.7k|    } else {
 1564|  10.7k|        struct ofpact_vlan_vid *vlan_vid = ofpact_put_SET_VLAN_VID(out);
 1565|  10.7k|        vlan_vid->vlan_vid = vid;
 1566|  10.7k|        vlan_vid->push_vlan_if_needed = push_vlan_if_needed;
 1567|  10.7k|        return 0;
 1568|  10.7k|    }
 1569|  10.9k|}
ofp-actions.c:decode_OFPAT_RAW10_SET_VLAN_PCP:
 1683|  3.30k|{
 1684|       |    return decode_set_vlan_pcp(pcp, true, out);
 1685|  3.30k|}
ofp-actions.c:decode_set_vlan_pcp:
 1668|  5.00k|{
 1669|  5.00k|    if (pcp & ~7) {
  ------------------
  |  Branch (1669:9): [True: 203, False: 4.79k]
  ------------------
 1670|    203|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1671|  4.79k|    } else {
 1672|  4.79k|        struct ofpact_vlan_pcp *vlan_pcp = ofpact_put_SET_VLAN_PCP(out);
 1673|  4.79k|        vlan_pcp->vlan_pcp = pcp;
 1674|  4.79k|        vlan_pcp->push_vlan_if_needed = push_vlan_if_needed;
 1675|  4.79k|        return 0;
 1676|  4.79k|    }
 1677|  5.00k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_VID:
 1583|  1.19k|{
 1584|       |    return decode_set_vlan_vid(vid, false, out);
 1585|  1.19k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_VLAN_PCP:
 1691|  1.69k|{
 1692|       |    return decode_set_vlan_pcp(pcp, false, out);
 1693|  1.69k|}
ofp-actions.c:decode_OFPAT_RAW11_PUSH_VLAN:
 1840|  3.36k|{
 1841|  3.36k|    struct ofpact_push_vlan *push_vlan;
 1842|  3.36k|    if (!eth_type_vlan(eth_type)) {
  ------------------
  |  Branch (1842:9): [True: 607, False: 2.76k]
  ------------------
 1843|    607|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1844|    607|    }
 1845|  2.76k|    push_vlan = ofpact_put_PUSH_VLAN(out);
 1846|  2.76k|    push_vlan->ethertype = eth_type;
 1847|  2.76k|    return 0;
 1848|  3.36k|}
ofp-actions.c:decode_OFPAT_RAW10_STRIP_VLAN:
 1776|  4.54k|{
 1777|  4.54k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW10_STRIP_VLAN;
 1778|  4.54k|    return 0;
 1779|  4.54k|}
ofp-actions.c:decode_OFPAT_RAW11_POP_VLAN:
 1783|  3.96k|{
 1784|  3.96k|    ofpact_put_STRIP_VLAN(out)->ofpact.raw = OFPAT_RAW11_POP_VLAN;
 1785|  3.96k|    return 0;
 1786|  3.96k|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_SRC:
 1919|    241|{
 1920|    241|    ofpact_put_SET_ETH_SRC(out)->mac = a->dl_addr;
 1921|    241|    return 0;
 1922|    241|}
ofp-actions.c:decode_OFPAT_RAW_SET_DL_DST:
 1928|    181|{
 1929|    181|    ofpact_put_SET_ETH_DST(out)->mac = a->dl_addr;
 1930|    181|    return 0;
 1931|    181|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_SRC:
 2015|  4.28k|{
 2016|  4.28k|    ofpact_put_SET_IPV4_SRC(out)->ipv4 = ipv4;
 2017|  4.28k|    return 0;
 2018|  4.28k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_DST:
 2024|  6.46k|{
 2025|  6.46k|    ofpact_put_SET_IPV4_DST(out)->ipv4 = ipv4;
 2026|  6.46k|    return 0;
 2027|  6.46k|}
ofp-actions.c:decode_OFPAT_RAW_SET_NW_TOS:
 2117|  9.28k|{
 2118|  9.28k|    if (dscp & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  9.28k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (2118:9): [True: 318, False: 8.96k]
  ------------------
 2119|    318|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2120|  8.96k|    } else {
 2121|  8.96k|        ofpact_put_SET_IP_DSCP(out)->dscp = dscp;
 2122|  8.96k|        return 0;
 2123|  8.96k|    }
 2124|  9.28k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_ECN:
 2186|  3.46k|{
 2187|  3.46k|    if (ecn & ~IP_ECN_MASK) {
  ------------------
  |  |  722|  3.46k|#define IP_ECN_MASK 0x03
  ------------------
  |  Branch (2187:9): [True: 1.23k, False: 2.22k]
  ------------------
 2188|  1.23k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2189|  2.22k|    } else {
 2190|  2.22k|        ofpact_put_SET_IP_ECN(out)->ecn = ecn;
 2191|  2.22k|        return 0;
 2192|  2.22k|    }
 2193|  3.46k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_SRC:
 2305|  9.30k|{
 2306|       |    ofpact_put_SET_L4_SRC_PORT(out)->port = ntohs(port);
 2307|  9.30k|    return 0;
 2308|  9.30k|}
ofp-actions.c:decode_OFPAT_RAW_SET_TP_DST:
 2314|  10.2k|{
 2315|       |    ofpact_put_SET_L4_DST_PORT(out)->port = ntohs(port);
 2316|  10.2k|    return 0;
 2317|  10.2k|}
ofp-actions.c:decode_OFPAT_RAW10_ENQUEUE:
 1094|    187|{
 1095|    187|    struct ofpact_enqueue *enqueue;
 1096|       |
 1097|    187|    enqueue = ofpact_put_ENQUEUE(out);
 1098|    187|    enqueue->port = u16_to_ofp(ntohs(oae->port));
 1099|    187|    enqueue->queue = ntohl(oae->queue_id);
 1100|    187|    if (ofp_to_u16(enqueue->port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    187|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    187|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1100:9): [True: 139, False: 48]
  ------------------
 1101|    187|        && enqueue->port != OFPP_IN_PORT
  ------------------
  |  |   39|    139|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    326|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1101:12): [True: 47, False: 92]
  ------------------
 1102|     47|        && enqueue->port != OFPP_LOCAL) {
  ------------------
  |  |   46|     47|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|     47|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1102:12): [True: 10, False: 37]
  ------------------
 1103|     10|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1104|     10|    }
 1105|    177|    return 0;
 1106|    187|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_LABEL:
 3765|  1.44k|{
 3766|  1.44k|    ofpact_put_SET_MPLS_LABEL(out)->label = label;
 3767|  1.44k|    return 0;
 3768|  1.44k|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TC:
 3838|    693|{
 3839|    693|    ofpact_put_SET_MPLS_TC(out)->tc = tc;
 3840|    693|    return 0;
 3841|    693|}
ofp-actions.c:decode_OFPAT_RAW_SET_MPLS_TTL:
 3899|  2.00k|{
 3900|  2.00k|    ofpact_put_SET_MPLS_TTL(out)->ttl = ttl;
 3901|  2.00k|    return 0;
 3902|  2.00k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_MPLS_TTL:
 3955|  5.23k|{
 3956|  5.23k|    ofpact_put_DEC_MPLS_TTL(out);
 3957|  5.23k|    return 0;
 3958|  5.23k|}
ofp-actions.c:decode_OFPAT_RAW_PUSH_MPLS:
 3994|  5.78k|{
 3995|  5.78k|    struct ofpact_push_mpls *oam;
 3996|       |
 3997|  5.78k|    if (!eth_type_mpls(ethertype)) {
  ------------------
  |  Branch (3997:9): [True: 126, False: 5.66k]
  ------------------
 3998|    126|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 3999|    126|    }
 4000|  5.66k|    oam = ofpact_put_PUSH_MPLS(out);
 4001|  5.66k|    oam->ethertype = ethertype;
 4002|       |
 4003|  5.66k|    return 0;
 4004|  5.78k|}
ofp-actions.c:decode_OFPAT_RAW_POP_MPLS:
 4059|  4.79k|{
 4060|  4.79k|    ofpact_put_POP_MPLS(out)->ethertype = ethertype;
 4061|  4.79k|    return 0;
 4062|  4.79k|}
ofp-actions.c:decode_OFPAT_RAW_SET_QUEUE:
 4270|    256|{
 4271|    256|    ofpact_put_SET_QUEUE(out)->queue_id = queue_id;
 4272|    256|    return 0;
 4273|    256|}
ofp-actions.c:decode_OFPAT_RAW_GROUP:
  727|  1.06k|{
  728|  1.06k|    ofpact_put_GROUP(out)->group_id = group_id;
  729|  1.06k|    return 0;
  730|  1.06k|}
ofp-actions.c:decode_OFPAT_RAW11_SET_NW_TTL:
 2250|  1.43k|{
 2251|  1.43k|    ofpact_put_SET_IP_TTL(out)->ttl = ttl;
 2252|  1.43k|    return 0;
 2253|  1.43k|}
ofp-actions.c:decode_OFPAT_RAW_DEC_NW_TTL:
 3612|  1.29k|{
 3613|  1.29k|    uint16_t id = 0;
 3614|  1.29k|    struct ofpact_cnt_ids *ids;
 3615|  1.29k|    enum ofperr error = 0;
 3616|       |
 3617|  1.29k|    ids = ofpact_put_DEC_TTL(out);
 3618|  1.29k|    ids->n_controllers = 1;
 3619|  1.29k|    ofpbuf_put(out, &id, sizeof id);
 3620|  1.29k|    ids = out->header;
 3621|  1.29k|    ofpact_finish_DEC_TTL(out, &ids);
 3622|  1.29k|    return error;
 3623|  1.29k|}
ofp-actions.c:decode_NXAST_RAW_DEC_TTL_CNT_IDS:
 3629|  2.50k|{
 3630|  2.50k|    struct ofpact_cnt_ids *ids;
 3631|  2.50k|    size_t ids_size;
 3632|  2.50k|    int i;
 3633|       |
 3634|  2.50k|    ids = ofpact_put_DEC_TTL(out);
 3635|  2.50k|    ids->ofpact.raw = NXAST_RAW_DEC_TTL_CNT_IDS;
 3636|  2.50k|    ids->n_controllers = ntohs(nac_ids->n_controllers);
 3637|  2.50k|    ids_size = ntohs(nac_ids->len) - sizeof *nac_ids;
 3638|       |
 3639|  2.50k|    if (!is_all_zeros(nac_ids->zeros, sizeof nac_ids->zeros)) {
  ------------------
  |  Branch (3639:9): [True: 271, False: 2.23k]
  ------------------
 3640|    271|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3641|    271|    }
 3642|       |
 3643|  2.23k|    if (ids_size < ids->n_controllers * sizeof(ovs_be16)) {
  ------------------
  |  Branch (3643:9): [True: 189, False: 2.04k]
  ------------------
 3644|    189|        VLOG_WARN_RL(&rl, "Nicira action dec_ttl_cnt_ids only has %"PRIuSIZE" "
  ------------------
  |  |  224|    189|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    189|    do {                                                                \
  |  |  |  |  288|    189|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    189|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 189]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    189|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 189]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3645|    189|                     "bytes allocated for controller ids.  %"PRIuSIZE" bytes "
 3646|    189|                     "are required for %u controllers.",
 3647|    189|                     ids_size, ids->n_controllers * sizeof(ovs_be16),
 3648|    189|                     ids->n_controllers);
 3649|    189|        return OFPERR_OFPBAC_BAD_LEN;
 3650|    189|    }
 3651|       |
 3652|  6.34k|    for (i = 0; i < ids->n_controllers; i++) {
  ------------------
  |  Branch (3652:17): [True: 4.30k, False: 2.04k]
  ------------------
 3653|  4.30k|        uint16_t id = ntohs(((ovs_be16 *)(nac_ids + 1))[i]);
 3654|  4.30k|        ofpbuf_put(out, &id, sizeof id);
 3655|  4.30k|        ids = out->header;
 3656|  4.30k|    }
 3657|       |
 3658|  2.04k|    ofpact_finish_DEC_TTL(out, &ids);
 3659|       |
 3660|  2.04k|    return 0;
 3661|  2.23k|}
ofp-actions.c:decode_OFPAT_RAW12_SET_FIELD:
 2850|  6.96k|{
 2851|       |    return decode_ofpat_set_field(oasf, false, vl_mff_map, tlv_bitmap,
 2852|  6.96k|                                  ofpacts);
 2853|  6.96k|}
ofp-actions.c:decode_ofpat_set_field:
 2789|  11.3k|{
 2790|  11.3k|    struct ofpbuf b = ofpbuf_const_initializer(oasf, ntohs(oasf->len));
 2791|  11.3k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(oasf, pad));
  ------------------
  |  |  108|  11.3k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2792|       |
 2793|  11.3k|    union mf_value value, mask;
 2794|  11.3k|    const struct mf_field *field;
 2795|  11.3k|    enum ofperr error;
 2796|  11.3k|    error  = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value,
 2797|  11.3k|                                     may_mask ? &mask : NULL, tlv_bitmap);
  ------------------
  |  Branch (2797:38): [True: 4.39k, False: 6.96k]
  ------------------
 2798|  11.3k|    if (error) {
  ------------------
  |  Branch (2798:9): [True: 1.59k, False: 9.75k]
  ------------------
 2799|  1.59k|        return (error == OFPERR_OFPBMC_BAD_MASK
  ------------------
  |  Branch (2799:17): [True: 721, False: 877]
  ------------------
 2800|  1.59k|                ? OFPERR_OFPBAC_BAD_SET_MASK
 2801|  1.59k|                : error);
 2802|  1.59k|    }
 2803|       |
 2804|  9.75k|    if (!may_mask) {
  ------------------
  |  Branch (2804:9): [True: 5.60k, False: 4.14k]
  ------------------
 2805|  5.60k|        memset(&mask, 0xff, field->n_bytes);
 2806|  5.60k|    }
 2807|       |
 2808|  9.75k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2808:9): [True: 397, False: 9.35k]
  ------------------
 2809|    397|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2810|    397|    }
 2811|       |
 2812|       |    /* OpenFlow says specifically that one may not set OXM_OF_IN_PORT via
 2813|       |     * Set-Field. */
 2814|  9.35k|    if (field->id == MFF_IN_PORT_OXM) {
  ------------------
  |  Branch (2814:9): [True: 66, False: 9.29k]
  ------------------
 2815|     66|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2816|     66|    }
 2817|       |
 2818|       |    /* oxm_length is now validated to be compatible with mf_value. */
 2819|  9.29k|    if (!field->writable) {
  ------------------
  |  Branch (2819:9): [True: 196, False: 9.09k]
  ------------------
 2820|    196|        VLOG_WARN_RL(&rl, "destination field %s is not writable",
  ------------------
  |  |  224|    196|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    196|    do {                                                                \
  |  |  |  |  288|    196|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    196|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 196]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    196|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2821|    196|                     field->name);
 2822|    196|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2823|    196|    }
 2824|       |
 2825|       |    /* The value must be valid for match.  OpenFlow 1.5 also says,
 2826|       |     * "In an OXM_OF_VLAN_VID set-field action, the OFPVID_PRESENT bit must be
 2827|       |     * a 1-bit in oxm_value and in oxm_mask." */
 2828|  9.09k|    if (!mf_is_value_valid(field, &value)
  ------------------
  |  Branch (2828:9): [True: 56, False: 9.03k]
  ------------------
 2829|  9.03k|        || (field->id == MFF_VLAN_VID
  ------------------
  |  Branch (2829:13): [True: 667, False: 8.37k]
  ------------------
 2830|    667|            && (!(mask.be16 & htons(OFPVID12_PRESENT))
  ------------------
  |  Branch (2830:17): [True: 68, False: 599]
  ------------------
 2831|    654|                || !(value.be16 & htons(OFPVID12_PRESENT))))) {
  ------------------
  |  Branch (2831:20): [True: 530, False: 69]
  ------------------
 2832|    654|        struct ds ds = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|    654|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 2833|    654|        mf_format(field, &value, NULL, NULL, &ds);
 2834|    654|        VLOG_WARN_RL(&rl, "Invalid value for set field %s: %s",
  ------------------
  |  |  224|    654|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    654|    do {                                                                \
  |  |  |  |  288|    654|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    654|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 654]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    654|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 654]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2835|    654|                     field->name, ds_cstr(&ds));
 2836|    654|        ds_destroy(&ds);
 2837|       |
 2838|    654|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2839|    654|    }
 2840|       |
 2841|  8.44k|    ofpact_put_set_field(ofpacts, field, &value, &mask);
 2842|  8.44k|    return 0;
 2843|  9.09k|}
ofp-actions.c:decode_OFPAT_RAW15_SET_FIELD:
 2860|  4.39k|{
 2861|       |    return decode_ofpat_set_field(oasf, true, vl_mff_map, tlv_bitmap, ofpacts);
 2862|  4.39k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD:
 2869|  3.43k|{
 2870|  3.43k|    struct mf_subfield dst;
 2871|  3.43k|    enum ofperr error;
 2872|       |
 2873|  3.43k|    dst.ofs = nxm_decode_ofs(narl->ofs_nbits);
 2874|  3.43k|    dst.n_bits = nxm_decode_n_bits(narl->ofs_nbits);
 2875|  3.43k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(narl->dst), vl_mff_map,
 2876|  3.43k|                                         &dst.field, tlv_bitmap);
 2877|  3.43k|    if (error) {
  ------------------
  |  Branch (2877:9): [True: 123, False: 3.31k]
  ------------------
 2878|    123|        return error;
 2879|    123|    }
 2880|       |
 2881|  3.31k|    error = mf_check_dst(&dst, NULL);
 2882|  3.31k|    if (error) {
  ------------------
  |  Branch (2882:9): [True: 159, False: 3.15k]
  ------------------
 2883|    159|        return error;
 2884|    159|    }
 2885|       |
 2886|       |    /* Reject 'narl' if a bit numbered 'n_bits' or higher is set to 1 in
 2887|       |     * narl->value. */
 2888|  3.15k|    if (dst.n_bits < 64 && ntohll(narl->value) >> dst.n_bits) {
  ------------------
  |  Branch (2888:9): [True: 2.69k, False: 463]
  |  Branch (2888:28): [True: 499, False: 2.19k]
  ------------------
 2889|    499|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 2890|    499|    }
 2891|       |
 2892|  2.65k|    struct ofpact_set_field *sf = ofpact_put_reg_load(out, dst.field, NULL,
 2893|  2.65k|                                                      NULL);
 2894|  2.65k|    bitwise_put(ntohll(narl->value),
 2895|  2.65k|                sf->value, dst.field->n_bytes, dst.ofs,
 2896|  2.65k|                dst.n_bits);
 2897|  2.65k|    bitwise_put(UINT64_MAX,
 2898|  2.65k|                ofpact_set_field_mask(sf), dst.field->n_bytes, dst.ofs,
  ------------------
  |  |  563|  2.65k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  2.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  2.65k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  2.65k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2899|  2.65k|                dst.n_bits);
 2900|  2.65k|    return 0;
 2901|  3.15k|}
ofp-actions.c:decode_NXAST_RAW_REG_LOAD2:
 2908|  4.79k|{
 2909|  4.79k|    struct ofpbuf b = ofpbuf_const_initializer(eah, ntohs(eah->len));
 2910|  4.79k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(eah, pad));
  ------------------
  |  |  108|  4.79k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2911|       |
 2912|  4.79k|    union mf_value value, mask;
 2913|  4.79k|    const struct mf_field *field;
 2914|  4.79k|    enum ofperr error;
 2915|  4.79k|    error = mf_vl_mff_nx_pull_entry(&b, vl_mff_map, &field, &value, &mask,
 2916|  4.79k|                                    tlv_bitmap);
 2917|  4.79k|    if (error) {
  ------------------
  |  Branch (2917:9): [True: 242, False: 4.55k]
  ------------------
 2918|    242|        return error;
 2919|    242|    }
 2920|       |
 2921|  4.55k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2921:9): [True: 67, False: 4.48k]
  ------------------
 2922|     67|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2923|     67|    }
 2924|       |
 2925|  4.48k|    if (!field->writable) {
  ------------------
  |  Branch (2925:9): [True: 1.23k, False: 3.25k]
  ------------------
 2926|  1.23k|        VLOG_WARN_RL(&rl, "destination field %s is not writable", field->name);
  ------------------
  |  |  224|  1.23k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.23k|    do {                                                                \
  |  |  |  |  288|  1.23k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.23k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.23k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.23k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.23k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2927|  1.23k|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 2928|  1.23k|    }
 2929|       |
 2930|       |    /* Put value and mask. */
 2931|  3.25k|    ofpact_put_reg_load2(out, field, &value, &mask);
 2932|  3.25k|    return 0;
 2933|  4.48k|}
ofp-actions.c:decode_OFPAT_RAW15_COPY_FIELD:
 2610|  3.06k|{
 2611|  3.06k|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2612|  3.06k|                               oacf->n_bits, oacf, oacf->len,
 2613|       |                               OBJECT_OFFSETOF(oacf, pad2), vl_mff_map,
  ------------------
  |  |  108|  3.06k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2614|  3.06k|                               tlv_bitmap, ofpacts);
 2615|  3.06k|}
ofp-actions.c:decode_copy_field__:
 2574|  3.10k|{
 2575|  3.10k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2576|  3.10k|    enum ofperr error;
 2577|       |
 2578|  3.10k|    move->ofpact.raw = ONFACT_RAW13_COPY_FIELD;
 2579|  3.10k|    move->src.ofs = ntohs(src_offset);
 2580|  3.10k|    move->src.n_bits = ntohs(n_bits);
 2581|  3.10k|    move->dst.ofs = ntohs(dst_offset);
 2582|  3.10k|    move->dst.n_bits = ntohs(n_bits);
 2583|       |
 2584|  3.10k|    struct ofpbuf b = ofpbuf_const_initializer(action, ntohs(action_len));
 2585|  3.10k|    ofpbuf_pull(&b, oxm_offset);
 2586|       |
 2587|  3.10k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2588|  3.10k|                                     tlv_bitmap);
 2589|  3.10k|    if (error) {
  ------------------
  |  Branch (2589:9): [True: 590, False: 2.51k]
  ------------------
 2590|    590|        return error;
 2591|    590|    }
 2592|  2.51k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2593|  2.51k|                                     tlv_bitmap);
 2594|  2.51k|    if (error) {
  ------------------
  |  Branch (2594:9): [True: 294, False: 2.21k]
  ------------------
 2595|    294|        return error;
 2596|    294|    }
 2597|       |
 2598|  2.21k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2598:9): [True: 576, False: 1.64k]
  ------------------
 2599|    576|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2600|    576|    }
 2601|       |
 2602|  1.64k|    return nxm_reg_move_check(move, NULL);
 2603|  2.21k|}
ofp-actions.c:decode_ONFACT_RAW13_COPY_FIELD:
 2622|     34|{
 2623|     34|    return decode_copy_field__(oacf->src_offset, oacf->dst_offset,
 2624|     34|                               oacf->n_bits, oacf, oacf->len,
 2625|       |                               OBJECT_OFFSETOF(oacf, pad3), vl_mff_map,
  ------------------
  |  |  108|     34|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 2626|     34|                               tlv_bitmap, ofpacts);
 2627|     34|}
ofp-actions.c:decode_NXAST_RAW_REG_MOVE:
 2634|  6.62k|{
 2635|  6.62k|    struct ofpact_reg_move *move = ofpact_put_REG_MOVE(ofpacts);
 2636|  6.62k|    enum ofperr error;
 2637|       |
 2638|  6.62k|    move->ofpact.raw = NXAST_RAW_REG_MOVE;
 2639|  6.62k|    move->src.ofs = ntohs(narm->src_ofs);
 2640|  6.62k|    move->src.n_bits = ntohs(narm->n_bits);
 2641|  6.62k|    move->dst.ofs = ntohs(narm->dst_ofs);
 2642|  6.62k|    move->dst.n_bits = ntohs(narm->n_bits);
 2643|       |
 2644|  6.62k|    struct ofpbuf b = ofpbuf_const_initializer(narm, ntohs(narm->len));
 2645|  6.62k|    ofpbuf_pull(&b, sizeof *narm);
 2646|       |
 2647|  6.62k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->src.field, NULL,
 2648|  6.62k|                                     tlv_bitmap);
 2649|  6.62k|    if (error) {
  ------------------
  |  Branch (2649:9): [True: 569, False: 6.05k]
  ------------------
 2650|    569|        return error;
 2651|    569|    }
 2652|       |
 2653|  6.05k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &move->dst.field, NULL,
 2654|  6.05k|                                     tlv_bitmap);
 2655|  6.05k|    if (error) {
  ------------------
  |  Branch (2655:9): [True: 274, False: 5.77k]
  ------------------
 2656|    274|        return error;
 2657|    274|    }
 2658|       |
 2659|  5.77k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (2659:9): [True: 18, False: 5.75k]
  ------------------
 2660|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 2661|     18|    }
 2662|       |
 2663|  5.75k|    return nxm_reg_move_check(move, NULL);
 2664|  5.77k|}
ofp-actions.c:decode_OFPAT_RAW15_METER:
 7565|  1.42k|{
 7566|  1.42k|    struct ofpact_meter *om = ofpact_put_METER(out);
 7567|  1.42k|    om->meter_id = meter_id;
 7568|       |    om->provider_meter_id = UINT32_MAX; /* No provider meter ID. */
 7569|  1.42k|    return 0;
 7570|  1.42k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT:
 4919|    579|{
 4920|    579|    struct ofpact_resubmit *resubmit;
 4921|       |
 4922|    579|    resubmit = ofpact_put_RESUBMIT(out);
 4923|    579|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT;
 4924|    579|    resubmit->in_port = u16_to_ofp(port);
 4925|    579|    resubmit->table_id = 0xff;
 4926|    579|    return 0;
 4927|    579|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE:
 4933|  4.01k|{
 4934|  4.01k|    struct ofpact_resubmit *resubmit;
 4935|       |
 4936|  4.01k|    if (nar->pad[0] || nar->pad[1] || nar->pad[2]) {
  ------------------
  |  Branch (4936:9): [True: 159, False: 3.85k]
  |  Branch (4936:24): [True: 100, False: 3.75k]
  |  Branch (4936:39): [True: 1.06k, False: 2.69k]
  ------------------
 4937|  1.32k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4938|  1.32k|    }
 4939|       |
 4940|  2.69k|    resubmit = ofpact_put_RESUBMIT(out);
 4941|  2.69k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE;
 4942|       |    resubmit->in_port = u16_to_ofp(ntohs(nar->in_port));
 4943|  2.69k|    resubmit->table_id = nar->table;
 4944|  2.69k|    return 0;
 4945|  4.01k|}
ofp-actions.c:decode_NXAST_RAW_RESUBMIT_TABLE_CT:
 4951|  3.70k|{
 4952|  3.70k|    enum ofperr error = decode_NXAST_RAW_RESUBMIT_TABLE(nar, ofp_version, out);
 4953|  3.70k|    if (error) {
  ------------------
  |  Branch (4953:9): [True: 1.03k, False: 2.66k]
  ------------------
 4954|  1.03k|        return error;
 4955|  1.03k|    }
 4956|  2.66k|    struct ofpact_resubmit *resubmit = out->header;
 4957|  2.66k|    resubmit->ofpact.raw = NXAST_RAW_RESUBMIT_TABLE_CT;
 4958|       |    resubmit->with_ct_orig = true;
 4959|  2.66k|    return 0;
 4960|  3.70k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL:
 4111|  1.09k|{
 4112|  1.09k|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4113|  1.09k|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL;
 4114|  1.09k|    tunnel->tun_id = tun_id;
 4115|  1.09k|    return 0;
 4116|  1.09k|}
ofp-actions.c:decode_NXAST_RAW_SET_TUNNEL64:
 4122|    113|{
 4123|    113|    struct ofpact_tunnel *tunnel = ofpact_put_SET_TUNNEL(out);
 4124|    113|    tunnel->ofpact.raw = NXAST_RAW_SET_TUNNEL64;
 4125|    113|    tunnel->tun_id = tun_id;
 4126|    113|    return 0;
 4127|    113|}
ofp-actions.c:decode_NXAST_RAW_POP_QUEUE:
 4307|  1.68k|{
 4308|  1.68k|    ofpact_put_POP_QUEUE(out);
 4309|  1.68k|    return 0;
 4310|  1.68k|}
ofp-actions.c:decode_NXAST_RAW_NOTE:
 5899|  11.0k|{
 5900|  11.0k|    struct ofpact_note *note;
 5901|  11.0k|    unsigned int length;
 5902|       |
 5903|  11.0k|    length = ntohs(nan->len) - offsetof(struct nx_action_note, note);
 5904|  11.0k|    note = ofpact_put_NOTE(out);
 5905|  11.0k|    note->length = length;
 5906|  11.0k|    ofpbuf_put(out, nan->note, length);
 5907|  11.0k|    note = out->header;
 5908|  11.0k|    ofpact_finish_NOTE(out, &note);
 5909|       |
 5910|  11.0k|    return 0;
 5911|  11.0k|}
ofp-actions.c:decode_NXAST_RAW_MULTIPATH:
 5804|  5.37k|{
 5805|  5.37k|    uint32_t n_links = ntohs(nam->max_link) + 1;
 5806|  5.37k|    size_t min_n_bits = log_2_ceil(n_links);
 5807|  5.37k|    struct ofpact_multipath *mp;
 5808|  5.37k|    enum ofperr error;
 5809|       |
 5810|  5.37k|    mp = ofpact_put_MULTIPATH(out);
 5811|  5.37k|    mp->fields = ntohs(nam->fields);
 5812|  5.37k|    mp->basis = ntohs(nam->basis);
 5813|  5.37k|    mp->algorithm = ntohs(nam->algorithm);
 5814|  5.37k|    mp->max_link = ntohs(nam->max_link);
 5815|  5.37k|    mp->arg = ntohl(nam->arg);
 5816|  5.37k|    mp->dst.ofs = nxm_decode_ofs(nam->ofs_nbits);
 5817|  5.37k|    mp->dst.n_bits = nxm_decode_n_bits(nam->ofs_nbits);
 5818|  5.37k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(nam->dst), vl_mff_map,
 5819|  5.37k|                                         &mp->dst.field, tlv_bitmap);
 5820|  5.37k|    if (error) {
  ------------------
  |  Branch (5820:9): [True: 386, False: 4.98k]
  ------------------
 5821|    386|        return error;
 5822|    386|    }
 5823|       |
 5824|  4.98k|    if (!flow_hash_fields_valid(mp->fields)) {
  ------------------
  |  Branch (5824:9): [True: 341, False: 4.64k]
  ------------------
 5825|    341|        VLOG_WARN_RL(&rl, "unsupported fields %d", (int) mp->fields);
  ------------------
  |  |  224|    341|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    341|    do {                                                                \
  |  |  |  |  288|    341|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    341|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 341]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    341|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 341]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5826|    341|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5827|  4.64k|    } else if (mp->algorithm != NX_MP_ALG_MODULO_N
  ------------------
  |  Branch (5827:16): [True: 4.41k, False: 229]
  ------------------
 5828|  4.41k|               && mp->algorithm != NX_MP_ALG_HASH_THRESHOLD
  ------------------
  |  Branch (5828:19): [True: 4.40k, False: 10]
  ------------------
 5829|  4.40k|               && mp->algorithm != NX_MP_ALG_HRW
  ------------------
  |  Branch (5829:19): [True: 3.92k, False: 488]
  ------------------
 5830|  3.92k|               && mp->algorithm != NX_MP_ALG_ITER_HASH) {
  ------------------
  |  Branch (5830:19): [True: 1.21k, False: 2.70k]
  ------------------
 5831|  1.21k|        VLOG_WARN_RL(&rl, "unsupported algorithm %d", (int) mp->algorithm);
  ------------------
  |  |  224|  1.21k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.21k|    do {                                                                \
  |  |  |  |  288|  1.21k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.21k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.21k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.21k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.21k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5832|  1.21k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5833|  3.43k|    } else if (mp->dst.n_bits < min_n_bits) {
  ------------------
  |  Branch (5833:16): [True: 18, False: 3.41k]
  ------------------
 5834|     18|        VLOG_WARN_RL(&rl, "multipath action requires at least %"PRIuSIZE" bits for "
  ------------------
  |  |  224|     18|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     18|    do {                                                                \
  |  |  |  |  288|     18|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     18|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 18]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     18|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 18]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5835|     18|                     "%"PRIu32" links", min_n_bits, n_links);
 5836|     18|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5837|     18|    }
 5838|       |
 5839|  3.41k|    return multipath_check(mp, NULL);
 5840|  4.98k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE:
 1486|  1.51k|{
 1487|  1.51k|    return decode_bundle(false, nab, NULL, NULL, out);
 1488|  1.51k|}
ofp-actions.c:decode_bundle:
 1403|  3.46k|{
 1404|  3.46k|    static struct vlog_rate_limit rll = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  3.46k|        {                                                                 \
  |  |  111|  3.46k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  13.8k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 3.46k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  3.46k|            0,                              /* first_dropped */           \
  |  |  113|  3.46k|            0,                              /* last_dropped */            \
  |  |  114|  3.46k|            0,                              /* n_dropped */               \
  |  |  115|  3.46k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  3.46k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  3.46k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  3.46k|        }
  ------------------
 1405|  3.46k|    struct ofpact_bundle *bundle;
 1406|  3.46k|    uint32_t member_type;
 1407|  3.46k|    size_t members_size, i;
 1408|  3.46k|    enum ofperr error;
 1409|       |
 1410|  3.46k|    bundle = ofpact_put_BUNDLE(ofpacts);
 1411|       |
 1412|  3.46k|    bundle->n_members = ntohs(nab->n_members);
 1413|  3.46k|    bundle->basis = ntohs(nab->basis);
 1414|  3.46k|    bundle->fields = ntohs(nab->fields);
 1415|  3.46k|    bundle->algorithm = ntohs(nab->algorithm);
 1416|  3.46k|    member_type = ntohl(nab->member_type);
 1417|  3.46k|    members_size = ntohs(nab->len) - sizeof *nab;
 1418|       |
 1419|  3.46k|    error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1420|  3.46k|    if (!flow_hash_fields_valid(bundle->fields)) {
  ------------------
  |  Branch (1420:9): [True: 1.82k, False: 1.63k]
  ------------------
 1421|  1.82k|        VLOG_WARN_RL(&rll, "unsupported fields %d", (int) bundle->fields);
  ------------------
  |  |  224|  1.82k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.82k|    do {                                                                \
  |  |  |  |  288|  1.82k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.82k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.82k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.82k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.82k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  1.82k|    } else if (bundle->n_members > BUNDLE_MAX_MEMBERS) {
  ------------------
  |  |   43|  1.63k|#define BUNDLE_MAX_MEMBERS 2048
  ------------------
  |  Branch (1422:16): [True: 301, False: 1.33k]
  ------------------
 1423|    301|        VLOG_WARN_RL(&rll, "too many members");
  ------------------
  |  |  224|    301|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    301|    do {                                                                \
  |  |  |  |  288|    301|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    301|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 301]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    301|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 301]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1424|  1.33k|    } else if (bundle->algorithm != NX_BD_ALG_HRW
  ------------------
  |  Branch (1424:16): [True: 658, False: 678]
  ------------------
 1425|    658|               && bundle->algorithm != NX_BD_ALG_ACTIVE_BACKUP) {
  ------------------
  |  Branch (1425:19): [True: 145, False: 513]
  ------------------
 1426|    145|        VLOG_WARN_RL(&rll, "unsupported algorithm %d", (int) bundle->algorithm);
  ------------------
  |  |  224|    145|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    145|    do {                                                                \
  |  |  |  |  288|    145|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    145|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 145]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    145|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 145]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1427|  1.19k|    } else if (member_type != mf_nxm_header(MFF_IN_PORT)) {
  ------------------
  |  Branch (1427:16): [True: 681, False: 510]
  ------------------
 1428|    681|        VLOG_WARN_RL(&rll, "unsupported member type %"PRIu32, member_type);
  ------------------
  |  |  224|    681|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    681|    do {                                                                \
  |  |  |  |  288|    681|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    681|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 681]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    681|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 681]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1429|    681|    } else {
 1430|    510|        error = 0;
 1431|    510|    }
 1432|       |
 1433|  3.46k|    if (!is_all_zeros(nab->zero, sizeof nab->zero)) {
  ------------------
  |  Branch (1433:9): [True: 2.49k, False: 965]
  ------------------
 1434|  2.49k|        VLOG_WARN_RL(&rll, "reserved field is nonzero");
  ------------------
  |  |  224|  2.49k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.49k|    do {                                                                \
  |  |  |  |  288|  2.49k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.49k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.49k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.49k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.49k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1435|  2.49k|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1436|  2.49k|    }
 1437|       |
 1438|  3.46k|    if (load) {
  ------------------
  |  Branch (1438:9): [True: 1.94k, False: 1.51k]
  ------------------
 1439|  1.94k|        bundle->dst.ofs = nxm_decode_ofs(nab->ofs_nbits);
 1440|  1.94k|        bundle->dst.n_bits = nxm_decode_n_bits(nab->ofs_nbits);
 1441|  1.94k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nab->dst), vl_mff_map,
 1442|  1.94k|                                             &bundle->dst.field, tlv_bitmap);
 1443|  1.94k|        if (error) {
  ------------------
  |  Branch (1443:13): [True: 201, False: 1.74k]
  ------------------
 1444|    201|            return error;
 1445|    201|        }
 1446|       |
 1447|  1.74k|        if (bundle->dst.n_bits < 16) {
  ------------------
  |  Branch (1447:13): [True: 250, False: 1.49k]
  ------------------
 1448|    250|            VLOG_WARN_RL(&rll, "bundle_load action requires at least 16 bit "
  ------------------
  |  |  224|    250|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    250|    do {                                                                \
  |  |  |  |  288|    250|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    250|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 250]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    250|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 250]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1449|    250|                         "destination.");
 1450|    250|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1451|    250|        }
 1452|  1.74k|    } else {
 1453|  1.51k|        if (nab->ofs_nbits || nab->dst) {
  ------------------
  |  Branch (1453:13): [True: 823, False: 691]
  |  Branch (1453:31): [True: 131, False: 560]
  ------------------
 1454|    954|            VLOG_WARN_RL(&rll, "bundle action has nonzero reserved fields");
  ------------------
  |  |  224|    954|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    954|    do {                                                                \
  |  |  |  |  288|    954|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    954|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 954]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    954|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 954]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1455|    954|            error = OFPERR_OFPBAC_BAD_ARGUMENT;
 1456|    954|        }
 1457|  1.51k|    }
 1458|       |
 1459|  3.26k|    if (members_size < bundle->n_members * sizeof(ovs_be16)) {
  ------------------
  |  Branch (1459:9): [True: 920, False: 2.34k]
  ------------------
 1460|    920|        VLOG_WARN_RL(&rll, "Nicira action %s only has %"PRIuSIZE" bytes "
  ------------------
  |  |  224|    920|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    920|    do {                                                                \
  |  |  |  |  288|    920|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    920|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 920]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    920|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 920]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1461|    920|                     "allocated for members.  %"PRIuSIZE" bytes are "
 1462|    920|                     "required for %u members.",
 1463|    920|                     load ? "bundle_load" : "bundle", members_size,
 1464|    920|                     bundle->n_members * sizeof(ovs_be16), bundle->n_members);
 1465|    920|        error = OFPERR_OFPBAC_BAD_LEN;
 1466|  2.34k|    } else {
 1467|  12.2k|        for (i = 0; i < bundle->n_members; i++) {
  ------------------
  |  Branch (1467:21): [True: 9.89k, False: 2.34k]
  ------------------
 1468|  9.89k|            ofp_port_t ofp_port
 1469|  9.89k|                = u16_to_ofp(ntohs(((ovs_be16 *)(nab + 1))[i]));
 1470|  9.89k|            ofpbuf_put(ofpacts, &ofp_port, sizeof ofp_port);
 1471|  9.89k|            bundle = ofpacts->header;
 1472|  9.89k|        }
 1473|  2.34k|    }
 1474|       |
 1475|  3.26k|    ofpact_finish_BUNDLE(ofpacts, &bundle);
 1476|  3.26k|    if (!error) {
  ------------------
  |  Branch (1476:9): [True: 1.97k, False: 1.28k]
  ------------------
 1477|  1.97k|        error = bundle_check(bundle, OFPP_MAX, NULL);
  ------------------
  |  |   33|  1.97k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  1.97k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 1478|  1.97k|    }
 1479|  3.26k|    return error;
 1480|  3.46k|}
ofp-actions.c:decode_NXAST_RAW_BUNDLE_LOAD:
 1495|  1.94k|{
 1496|       |    return decode_bundle(true, nab, vl_mff_map, tlv_bitmap, out);
 1497|  1.94k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG:
 1226|    734|{
 1227|    734|    struct ofpact_output_reg *output_reg;
 1228|    734|    enum ofperr error;
 1229|       |
 1230|    734|    if (!is_all_zeros(naor->zero, sizeof naor->zero)) {
  ------------------
  |  Branch (1230:9): [True: 362, False: 372]
  ------------------
 1231|    362|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 1232|    362|    }
 1233|       |
 1234|    372|    output_reg = ofpact_put_OUTPUT_REG(out);
 1235|    372|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG;
 1236|    372|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1237|    372|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1238|    372|    output_reg->max_len = ntohs(naor->max_len);
 1239|    372|    error = mf_vl_mff_mf_from_nxm_header(ntohl(naor->src), vl_mff_map,
 1240|    372|                                         &output_reg->src.field, tlv_bitmap);
 1241|    372|    if (error) {
  ------------------
  |  Branch (1241:9): [True: 60, False: 312]
  ------------------
 1242|     60|        return error;
 1243|     60|    }
 1244|       |
 1245|    312|    return mf_check_src(&output_reg->src, NULL);
 1246|    372|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_REG2:
 1253|    106|{
 1254|    106|    struct ofpact_output_reg *output_reg;
 1255|    106|    enum ofperr error;
 1256|       |
 1257|    106|    output_reg = ofpact_put_OUTPUT_REG(out);
 1258|    106|    output_reg->ofpact.raw = NXAST_RAW_OUTPUT_REG2;
 1259|    106|    output_reg->src.ofs = nxm_decode_ofs(naor->ofs_nbits);
 1260|    106|    output_reg->src.n_bits = nxm_decode_n_bits(naor->ofs_nbits);
 1261|    106|    output_reg->max_len = ntohs(naor->max_len);
 1262|       |
 1263|    106|    struct ofpbuf b = ofpbuf_const_initializer(naor, ntohs(naor->len));
 1264|    106|    ofpbuf_pull(&b, OBJECT_OFFSETOF(naor, pad));
  ------------------
  |  |  108|    106|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 1265|       |
 1266|    106|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &output_reg->src.field,
 1267|    106|                                     NULL, tlv_bitmap);
 1268|    106|    if (error) {
  ------------------
  |  Branch (1268:9): [True: 73, False: 33]
  ------------------
 1269|     73|        return error;
 1270|     73|    }
 1271|       |
 1272|     33|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (1272:9): [True: 18, False: 15]
  ------------------
 1273|     18|        return OFPERR_NXBRC_MUST_BE_ZERO;
 1274|     18|    }
 1275|       |
 1276|     15|    return mf_check_src(&output_reg->src, NULL);
 1277|     33|}
ofp-actions.c:decode_NXAST_RAW_LEARN:
 5476|  19.5k|{
 5477|  19.5k|    struct ofpact_learn *learn;
 5478|  19.5k|    enum ofperr error;
 5479|       |
 5480|  19.5k|    learn = ofpact_put_LEARN(ofpacts);
 5481|       |
 5482|  19.5k|    error = decode_LEARN_common(nal, NXAST_RAW_LEARN, learn);
 5483|  19.5k|    if (error) {
  ------------------
  |  Branch (5483:9): [True: 1.37k, False: 18.2k]
  ------------------
 5484|  1.37k|        return error;
 5485|  1.37k|    }
 5486|       |
 5487|  18.2k|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5487:9): [True: 269, False: 17.9k]
  ------------------
 5488|  18.2k|                         NX_LEARN_F_DELETE_LEARNED)) {
 5489|    269|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5490|    269|    }
 5491|       |
 5492|  17.9k|    return decode_LEARN_specs(nal + 1, (char *) nal + ntohs(nal->len),
 5493|  17.9k|                              vl_mff_map, tlv_bitmap, ofpacts);
 5494|  18.2k|}
ofp-actions.c:decode_LEARN_common:
 5365|  21.7k|{
 5366|  21.7k|    if (nal->pad) {
  ------------------
  |  Branch (5366:9): [True: 2.76k, False: 19.0k]
  ------------------
 5367|  2.76k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5368|  2.76k|    }
 5369|       |
 5370|  19.0k|    learn->ofpact.raw = raw;
 5371|  19.0k|    learn->idle_timeout = ntohs(nal->idle_timeout);
 5372|  19.0k|    learn->hard_timeout = ntohs(nal->hard_timeout);
 5373|  19.0k|    learn->priority = ntohs(nal->priority);
 5374|  19.0k|    learn->cookie = nal->cookie;
 5375|  19.0k|    learn->table_id = nal->table_id;
 5376|  19.0k|    learn->fin_idle_timeout = ntohs(nal->fin_idle_timeout);
 5377|  19.0k|    learn->fin_hard_timeout = ntohs(nal->fin_hard_timeout);
 5378|  19.0k|    learn->flags = ntohs(nal->flags);
 5379|       |
 5380|  19.0k|    if (learn->table_id == 0xff) {
  ------------------
  |  Branch (5380:9): [True: 412, False: 18.6k]
  ------------------
 5381|    412|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5382|    412|    }
 5383|       |
 5384|  18.6k|    return 0;
 5385|  19.0k|}
ofp-actions.c:decode_LEARN_specs:
 5391|  18.1k|{
 5392|  18.1k|    struct ofpact_learn *learn = ofpacts->header;
 5393|       |
 5394|  50.6k|    while (p != end) {
  ------------------
  |  Branch (5394:12): [True: 43.1k, False: 7.49k]
  ------------------
 5395|  43.1k|        struct ofpact_learn_spec *spec;
 5396|  43.1k|        uint16_t header = ntohs(get_be16(&p));
 5397|       |
 5398|  43.1k|        if (!header) {
  ------------------
  |  Branch (5398:13): [True: 8.63k, False: 34.4k]
  ------------------
 5399|  8.63k|            break;
 5400|  8.63k|        }
 5401|       |
 5402|  34.4k|        spec = ofpbuf_put_zeros(ofpacts, sizeof *spec);
 5403|  34.4k|        learn = ofpacts->header;
 5404|       |
 5405|  34.4k|        spec->src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  34.4k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5406|  34.4k|        spec->dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  34.4k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5407|  34.4k|        spec->n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  34.4k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5408|       |
 5409|       |        /* Check for valid src and dst type combination. */
 5410|  34.4k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  68.9k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5410:13): [True: 31.7k, False: 2.72k]
  ------------------
 5411|  2.72k|            spec->dst_type == NX_LEARN_DST_LOAD ||
  ------------------
  |  |  826|  37.1k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5411:13): [True: 1.56k, False: 1.16k]
  ------------------
 5412|  1.16k|            (spec->dst_type == NX_LEARN_DST_OUTPUT &&
  ------------------
  |  |  827|  2.32k|#define NX_LEARN_DST_OUTPUT    (2 << 11) /* Add OFPAT_OUTPUT action. */
  ------------------
  |  Branch (5412:14): [True: 911, False: 251]
  ------------------
 5413|  34.1k|             spec->src_type == NX_LEARN_SRC_FIELD)) {
  ------------------
  |  |  821|    911|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5413:14): [True: 884, False: 27]
  ------------------
 5414|       |            /* OK. */
 5415|  34.1k|        } else {
 5416|    278|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 5417|    278|        }
 5418|       |
 5419|       |        /* Check that the arguments don't overrun the end of the action. */
 5420|  34.1k|        if ((char *) end - (char *) p < learn_min_len(header)) {
  ------------------
  |  Branch (5420:13): [True: 417, False: 33.7k]
  ------------------
 5421|    417|            return OFPERR_OFPBAC_BAD_LEN;
 5422|    417|        }
 5423|       |
 5424|       |        /* Get the source. */
 5425|  33.7k|        const uint8_t *imm = NULL;
 5426|  33.7k|        unsigned int imm_bytes = 0;
 5427|  33.7k|        enum ofperr error;
 5428|  33.7k|        if (spec->src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  33.7k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5428:13): [True: 1.17k, False: 32.6k]
  ------------------
 5429|  1.17k|            error = get_subfield(spec->n_bits, &p, &spec->src, vl_mff_map,
 5430|  1.17k|                                 tlv_bitmap);
 5431|  1.17k|            if (error) {
  ------------------
  |  Branch (5431:17): [True: 168, False: 1.00k]
  ------------------
 5432|    168|                return error;
 5433|    168|            }
 5434|  32.6k|        } else {
 5435|  32.6k|            int p_bytes = 2 * DIV_ROUND_UP(spec->n_bits, 16);
  ------------------
  |  |  300|  32.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5436|  32.6k|            p = (const uint8_t *) p + p_bytes;
 5437|       |
 5438|  32.6k|            imm_bytes = DIV_ROUND_UP(spec->n_bits, 8);
  ------------------
  |  |  300|  32.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5439|  32.6k|            imm = (const uint8_t *) p - imm_bytes;
 5440|  32.6k|        }
 5441|       |
 5442|       |        /* Get the destination. */
 5443|  33.6k|        if (spec->dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  67.2k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5443:13): [True: 31.3k, False: 2.29k]
  ------------------
 5444|  32.8k|            spec->dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  2.29k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5444:13): [True: 1.50k, False: 793]
  ------------------
 5445|  32.8k|            error = get_subfield(spec->n_bits, &p, &spec->dst, vl_mff_map,
 5446|  32.8k|                                 tlv_bitmap);
 5447|  32.8k|            if (error) {
  ------------------
  |  Branch (5447:17): [True: 1.16k, False: 31.6k]
  ------------------
 5448|  1.16k|                return error;
 5449|  1.16k|            }
 5450|  32.8k|        }
 5451|       |
 5452|  32.4k|        if (imm) {
  ------------------
  |  Branch (5452:13): [True: 31.4k, False: 991]
  ------------------
 5453|  31.4k|            uint8_t *src_imm = ofpbuf_put_zeros(ofpacts,
 5454|  31.4k|                                                OFPACT_ALIGN(imm_bytes));
  ------------------
  |  |  205|  31.4k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  31.4k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  31.4k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 5455|  31.4k|            memcpy(src_imm, imm, imm_bytes);
 5456|       |
 5457|  31.4k|            learn = ofpacts->header;
 5458|  31.4k|        }
 5459|  32.4k|    }
 5460|  16.1k|    ofpact_finish_LEARN(ofpacts, &learn);
 5461|       |
 5462|  16.1k|    if (!is_all_zeros(p, (char *) end - (char *) p)) {
  ------------------
  |  Branch (5462:9): [True: 234, False: 15.9k]
  ------------------
 5463|    234|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5464|    234|    }
 5465|       |
 5466|  15.9k|    return 0;
 5467|  16.1k|}
ofp-actions.c:get_be16:
 5309|  77.0k|{
 5310|  77.0k|    const ovs_be16 *p = *pp;
 5311|  77.0k|    ovs_be16 value = *p;
 5312|  77.0k|    *pp = p + 1;
 5313|  77.0k|    return value;
 5314|  77.0k|}
ofp-actions.c:learn_min_len:
 5340|  34.1k|{
 5341|  34.1k|    int n_bits = header & NX_LEARN_N_BITS_MASK;
  ------------------
  |  |  819|  34.1k|#define NX_LEARN_N_BITS_MASK    0x3ff
  ------------------
 5342|  34.1k|    int src_type = header & NX_LEARN_SRC_MASK;
  ------------------
  |  |  823|  34.1k|#define NX_LEARN_SRC_MASK      (1 << 13)
  ------------------
 5343|  34.1k|    int dst_type = header & NX_LEARN_DST_MASK;
  ------------------
  |  |  829|  34.1k|#define NX_LEARN_DST_MASK      (3 << 11)
  ------------------
 5344|  34.1k|    unsigned int min_len;
 5345|       |
 5346|  34.1k|    min_len = 0;
 5347|  34.1k|    if (src_type == NX_LEARN_SRC_FIELD) {
  ------------------
  |  |  821|  34.1k|#define NX_LEARN_SRC_FIELD     (0 << 13) /* Copy from field. */
  ------------------
  |  Branch (5347:9): [True: 1.47k, False: 32.7k]
  ------------------
 5348|  1.47k|        min_len += sizeof(ovs_be32); /* src_field */
 5349|  1.47k|        min_len += sizeof(ovs_be16); /* src_ofs */
 5350|  32.7k|    } else {
 5351|  32.7k|        min_len += 2 * DIV_ROUND_UP(n_bits, 16);
  ------------------
  |  |  300|  32.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  ------------------
 5352|  32.7k|    }
 5353|  34.1k|    if (dst_type == NX_LEARN_DST_MATCH ||
  ------------------
  |  |  825|  68.3k|#define NX_LEARN_DST_MATCH     (0 << 11) /* Add match criterion. */
  ------------------
  |  Branch (5353:9): [True: 31.7k, False: 2.45k]
  ------------------
 5354|  33.3k|        dst_type == NX_LEARN_DST_LOAD) {
  ------------------
  |  |  826|  2.45k|#define NX_LEARN_DST_LOAD      (1 << 11) /* Add NXAST_REG_LOAD action. */
  ------------------
  |  Branch (5354:9): [True: 1.56k, False: 884]
  ------------------
 5355|  33.3k|        min_len += sizeof(ovs_be32); /* dst_field */
 5356|  33.3k|        min_len += sizeof(ovs_be16); /* dst_ofs */
 5357|  33.3k|    }
 5358|  34.1k|    return min_len;
 5359|  34.1k|}
ofp-actions.c:get_subfield:
 5328|  33.9k|{
 5329|  33.9k|    enum ofperr error;
 5330|       |
 5331|  33.9k|    error = mf_vl_mff_mf_from_nxm_header(ntohl(get_be32(p)), vl_mff_map,
 5332|  33.9k|                                         &sf->field, tlv_bitmap);
 5333|       |    sf->ofs = ntohs(get_be16(p));
 5334|  33.9k|    sf->n_bits = n_bits;
 5335|  33.9k|    return error;
 5336|  33.9k|}
ofp-actions.c:get_be32:
 5318|  33.9k|{
 5319|  33.9k|    const ovs_be32 *p = *pp;
 5320|  33.9k|    ovs_be32 value = get_unaligned_be32(p);
 5321|  33.9k|    *pp = p + 1;
 5322|  33.9k|    return value;
 5323|  33.9k|}
ofp-actions.c:decode_NXAST_RAW_LEARN2:
 5503|  2.98k|{
 5504|  2.98k|    struct ofpbuf b = ofpbuf_const_initializer(nal, ntohs(nal->up.len));
 5505|  2.98k|    struct ofpact_learn *learn;
 5506|  2.98k|    enum ofperr error;
 5507|       |
 5508|  2.98k|    if (nal->pad2) {
  ------------------
  |  Branch (5508:9): [True: 779, False: 2.20k]
  ------------------
 5509|    779|        return OFPERR_NXBAC_MUST_BE_ZERO;
 5510|    779|    }
 5511|       |
 5512|  2.20k|    learn = ofpact_put_LEARN(ofpacts);
 5513|  2.20k|    error = decode_LEARN_common(&nal->up, NXAST_RAW_LEARN2, learn);
 5514|  2.20k|    if (error) {
  ------------------
  |  Branch (5514:9): [True: 1.79k, False: 408]
  ------------------
 5515|  1.79k|        return error;
 5516|  1.79k|    }
 5517|       |
 5518|    408|    learn->limit = ntohl(nal->limit);
 5519|       |
 5520|    408|    if (learn->flags & ~(NX_LEARN_F_SEND_FLOW_REM |
  ------------------
  |  Branch (5520:9): [True: 43, False: 365]
  ------------------
 5521|    408|                         NX_LEARN_F_DELETE_LEARNED |
 5522|    408|                         NX_LEARN_F_WRITE_RESULT)) {
 5523|     43|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5524|     43|    }
 5525|       |
 5526|    365|    ofpbuf_pull(&b, sizeof *nal);
 5527|       |
 5528|    365|    if (learn->flags & NX_LEARN_F_WRITE_RESULT) {
  ------------------
  |  Branch (5528:9): [True: 262, False: 103]
  ------------------
 5529|    262|        error = nx_pull_header(&b, vl_mff_map, &learn->result_dst.field, NULL);
 5530|    262|        if (error) {
  ------------------
  |  Branch (5530:13): [True: 122, False: 140]
  ------------------
 5531|    122|            return error;
 5532|    122|        }
 5533|    140|        if (!learn->result_dst.field->writable) {
  ------------------
  |  Branch (5533:13): [True: 18, False: 122]
  ------------------
 5534|     18|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 5535|     18|        }
 5536|    122|        learn->result_dst.ofs = ntohs(nal->result_dst_ofs);
 5537|    122|        learn->result_dst.n_bits = 1;
 5538|    122|    } else if (nal->result_dst_ofs) {
  ------------------
  |  Branch (5538:16): [True: 10, False: 93]
  ------------------
 5539|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 5540|     10|    }
 5541|       |
 5542|    215|    return decode_LEARN_specs(b.data, (char *) nal + ntohs(nal->up.len),
 5543|    215|                              vl_mff_map, tlv_bitmap, ofpacts);
 5544|    365|}
ofp-actions.c:decode_NXAST_RAW_EXIT:
 5967|  2.72k|{
 5968|  2.72k|    ofpact_put_EXIT(out);
 5969|  2.72k|    return 0;
 5970|  2.72k|}
ofp-actions.c:decode_NXAST_RAW_FIN_TIMEOUT:
 4379|    679|{
 4380|    679|    struct ofpact_fin_timeout *oft;
 4381|       |
 4382|    679|    oft = ofpact_put_FIN_TIMEOUT(out);
 4383|    679|    oft->fin_idle_timeout = ntohs(naft->fin_idle_timeout);
 4384|       |    oft->fin_hard_timeout = ntohs(naft->fin_hard_timeout);
 4385|    679|    return 0;
 4386|    679|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER:
  804|  3.18k|{
  805|  3.18k|    struct ofpact_controller *oc;
  806|       |
  807|  3.18k|    oc = ofpact_put_CONTROLLER(out);
  808|  3.18k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER;
  809|  3.18k|    oc->max_len = ntohs(nac->max_len);
  810|  3.18k|    oc->controller_id = ntohs(nac->controller_id);
  811|  3.18k|    oc->reason = nac->reason;
  812|  3.18k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  3.18k|#define NX_CTLR_NO_METER 0
  ------------------
  813|  3.18k|    ofpact_finish_CONTROLLER(out, &oc);
  814|       |
  815|  3.18k|    return 0;
  816|  3.18k|}
ofp-actions.c:decode_NXAST_RAW_CONTROLLER2:
  822|  1.58k|{
  823|  1.58k|    if (!is_all_zeros(eah->pad, sizeof eah->pad)) {
  ------------------
  |  Branch (823:9): [True: 102, False: 1.47k]
  ------------------
  824|    102|        return OFPERR_NXBRC_MUST_BE_ZERO;
  825|    102|    }
  826|       |
  827|  1.47k|    size_t start_ofs = out->size;
  828|  1.47k|    struct ofpact_controller *oc = ofpact_put_CONTROLLER(out);
  829|  1.47k|    oc->ofpact.raw = NXAST_RAW_CONTROLLER2;
  830|  1.47k|    oc->max_len = UINT16_MAX;
  831|  1.47k|    oc->reason = OFPR_ACTION;
  832|  1.47k|    oc->meter_id = NX_CTLR_NO_METER;
  ------------------
  |  |  307|  1.47k|#define NX_CTLR_NO_METER 0
  ------------------
  833|       |
  834|  1.47k|    struct ofpbuf properties;
  835|  1.47k|    ofpbuf_use_const(&properties, eah, ntohs(eah->len));
  836|  1.47k|    ofpbuf_pull(&properties, sizeof *eah);
  837|       |
  838|  3.29k|    while (properties.size > 0) {
  ------------------
  |  Branch (838:12): [True: 2.26k, False: 1.03k]
  ------------------
  839|  2.26k|        struct ofpbuf payload;
  840|  2.26k|        uint64_t type;
  841|       |
  842|  2.26k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  843|  2.26k|        if (error) {
  ------------------
  |  Branch (843:13): [True: 131, False: 2.13k]
  ------------------
  844|    131|            return error;
  845|    131|        }
  846|       |
  847|  2.13k|        switch (type) {
  848|    704|        case NXAC2PT_MAX_LEN:
  ------------------
  |  Branch (848:9): [True: 704, False: 1.43k]
  ------------------
  849|    704|            error = ofpprop_parse_u16(&payload, &oc->max_len);
  850|    704|            break;
  851|       |
  852|    127|        case NXAC2PT_CONTROLLER_ID:
  ------------------
  |  Branch (852:9): [True: 127, False: 2.00k]
  ------------------
  853|    127|            error = ofpprop_parse_u16(&payload, &oc->controller_id);
  854|    127|            break;
  855|       |
  856|    423|        case NXAC2PT_REASON: {
  ------------------
  |  Branch (856:9): [True: 423, False: 1.71k]
  ------------------
  857|    423|            uint8_t u8;
  858|    423|            error = ofpprop_parse_u8(&payload, &u8);
  859|    423|            if (!error) {
  ------------------
  |  Branch (859:17): [True: 225, False: 198]
  ------------------
  860|    225|                oc->reason = u8;
  861|    225|            }
  862|    423|            break;
  863|      0|        }
  864|       |
  865|     51|        case NXAC2PT_USERDATA:
  ------------------
  |  Branch (865:9): [True: 51, False: 2.08k]
  ------------------
  866|     51|            out->size = start_ofs + sizeof(struct ofpact_controller);
  867|     51|            ofpbuf_put(out, payload.msg, ofpbuf_msgsize(&payload));
  868|     51|            oc = ofpbuf_at_assert(out, start_ofs, sizeof *oc);
  869|     51|            oc->userdata_len = ofpbuf_msgsize(&payload);
  870|     51|            break;
  871|       |
  872|    680|        case NXAC2PT_PAUSE:
  ------------------
  |  Branch (872:9): [True: 680, False: 1.45k]
  ------------------
  873|    680|            oc->pause = true;
  874|    680|            break;
  875|       |
  876|    108|        case NXAC2PT_METER_ID:
  ------------------
  |  Branch (876:9): [True: 108, False: 2.02k]
  ------------------
  877|    108|            error = ofpprop_parse_u32(&payload, &oc->meter_id);
  878|    108|            break;
  879|       |
  880|     41|        default:
  ------------------
  |  Branch (880:9): [True: 41, False: 2.09k]
  ------------------
  881|     41|            error = OFPPROP_UNKNOWN(false, "NXAST_RAW_CONTROLLER2", type);
  ------------------
  |  |  144|     41|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  882|     41|            break;
  883|  2.13k|        }
  884|  2.13k|        if (error) {
  ------------------
  |  Branch (884:13): [True: 313, False: 1.82k]
  ------------------
  885|    313|            return error;
  886|    313|        }
  887|  2.13k|    }
  888|       |
  889|  1.03k|    ofpact_finish_CONTROLLER(out, &oc);
  890|       |
  891|  1.03k|    return 0;
  892|  1.47k|}
ofp-actions.c:decode_NXAST_RAW_WRITE_METADATA:
 7723|    785|{
 7724|    785|    struct ofpact_metadata *om;
 7725|       |
 7726|    785|    if (!is_all_zeros(nawm->zeros, sizeof nawm->zeros)) {
  ------------------
  |  Branch (7726:9): [True: 24, False: 761]
  ------------------
 7727|     24|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7728|     24|    }
 7729|       |
 7730|    761|    om = ofpact_put_WRITE_METADATA(out);
 7731|    761|    om->metadata = nawm->metadata;
 7732|    761|    om->mask = nawm->mask;
 7733|       |
 7734|    761|    return 0;
 7735|    785|}
ofp-actions.c:decode_NXAST_RAW_STACK_PUSH:
 3494|    873|{
 3495|    873|    struct ofpact_stack *push = ofpact_put_STACK_PUSH(ofpacts);
 3496|    873|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3497|    873|                                            push);
 3498|    873|    return error ? error : nxm_stack_push_check(push, NULL);
  ------------------
  |  Branch (3498:12): [True: 141, False: 732]
  ------------------
 3499|    873|}
ofp-actions.c:decode_stack_action:
 3467|  2.26k|{
 3468|  2.26k|    enum ofperr error;
 3469|  2.26k|    stack_action->subfield.ofs = ntohs(nasp->offset);
 3470|       |
 3471|  2.26k|    struct ofpbuf b = ofpbuf_const_initializer(nasp, sizeof *nasp);
 3472|  2.26k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nasp, pad));
  ------------------
  |  |  108|  2.26k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 3473|  2.26k|    error  = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 3474|  2.26k|                                      &stack_action->subfield.field, NULL,
 3475|  2.26k|                                      tlv_bitmap);
 3476|  2.26k|    if (error) {
  ------------------
  |  Branch (3476:9): [True: 305, False: 1.95k]
  ------------------
 3477|    305|        return error;
 3478|    305|    }
 3479|       |
 3480|  1.95k|    stack_action->subfield.n_bits = ntohs(*(const ovs_be16 *) b.data);
 3481|  1.95k|    ofpbuf_pull(&b, 2);
 3482|  1.95k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (3482:9): [True: 236, False: 1.71k]
  ------------------
 3483|    236|        return OFPERR_NXBRC_MUST_BE_ZERO;
 3484|    236|    }
 3485|       |
 3486|  1.71k|    return 0;
 3487|  1.95k|}
ofp-actions.c:decode_NXAST_RAW_STACK_POP:
 3506|  1.38k|{
 3507|  1.38k|    struct ofpact_stack *pop = ofpact_put_STACK_POP(ofpacts);
 3508|  1.38k|    enum ofperr error = decode_stack_action(nasp, vl_mff_map, tlv_bitmap,
 3509|  1.38k|                                            pop);
 3510|  1.38k|    return error ? error : nxm_stack_pop_check(pop, NULL);
  ------------------
  |  Branch (3510:12): [True: 400, False: 987]
  ------------------
 3511|  1.38k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE:
 6215|    123|{
 6216|    123|    struct ofpact_sample *sample;
 6217|       |
 6218|    123|    sample = ofpact_put_SAMPLE(out);
 6219|    123|    sample->ofpact.raw = NXAST_RAW_SAMPLE;
 6220|    123|    sample->probability = ntohs(nas->probability);
 6221|    123|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6222|    123|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6223|    123|    sample->obs_domain_src.field = NULL;
 6224|    123|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6225|    123|    sample->obs_point_src.field = NULL;
 6226|    123|    sample->sampling_port = OFPP_NONE;
  ------------------
  |  |   47|    123|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|    123|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
 6227|    123|    sample->direction = NX_ACTION_SAMPLE_DEFAULT;
 6228|    123|    sample->obs_domain_src.field = NULL;
 6229|    123|    sample->obs_point_src.field = NULL;
 6230|    123|    if (sample->probability == 0) {
  ------------------
  |  Branch (6230:9): [True: 10, False: 113]
  ------------------
 6231|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6232|     10|    }
 6233|       |
 6234|    113|    return 0;
 6235|    123|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE2:
 6264|    228|{
 6265|    228|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE2, NX_ACTION_SAMPLE_DEFAULT,
 6266|    228|                          ofpact_put_SAMPLE(out));
 6267|    228|}
ofp-actions.c:decode_SAMPLE2:
 6242|    763|{
 6243|    763|    sample->ofpact.raw = raw;
 6244|    763|    sample->probability = ntohs(nas->probability);
 6245|    763|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6246|    763|    sample->obs_domain_imm = ntohl(nas->obs_domain_id);
 6247|    763|    sample->obs_domain_src.field = NULL;
 6248|    763|    sample->obs_point_imm = ntohl(nas->obs_point_id);
 6249|    763|    sample->obs_point_src.field = NULL;
 6250|    763|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6251|    763|    sample->direction = direction;
 6252|       |
 6253|    763|    if (sample->probability == 0) {
  ------------------
  |  Branch (6253:9): [True: 137, False: 626]
  ------------------
 6254|    137|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6255|    137|    }
 6256|       |
 6257|    626|    return 0;
 6258|    763|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE3:
 6285|    774|{
 6286|    774|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6287|    774|    int err;
 6288|       |
 6289|    774|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6289:9): [True: 171, False: 603]
  ------------------
 6290|    171|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6291|    171|    }
 6292|    603|    err = check_sample_direction(nas->direction);
 6293|    603|    if (err) {
  ------------------
  |  Branch (6293:9): [True: 68, False: 535]
  ------------------
 6294|     68|        return err;
 6295|     68|    }
 6296|    535|    return decode_SAMPLE2(nas, NXAST_RAW_SAMPLE3, nas->direction, sample);
 6297|    603|}
ofp-actions.c:check_sample_direction:
 6271|  2.34k|{
 6272|  2.34k|    if (direction != NX_ACTION_SAMPLE_DEFAULT &&
  ------------------
  |  Branch (6272:9): [True: 920, False: 1.42k]
  ------------------
 6273|    920|        direction != NX_ACTION_SAMPLE_INGRESS &&
  ------------------
  |  Branch (6273:9): [True: 463, False: 457]
  ------------------
 6274|    463|        direction != NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6274:9): [True: 183, False: 280]
  ------------------
 6275|    183|        VLOG_WARN_RL(&rl, "invalid sample direction %"PRIu8, direction);
  ------------------
  |  |  224|    183|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    183|    do {                                                                \
  |  |  |  |  288|    183|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    183|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 183]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    183|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 183]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6276|    183|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6277|    183|    }
 6278|  2.16k|    return 0;
 6279|  2.34k|}
ofp-actions.c:decode_NXAST_RAW_SAMPLE4:
 6340|  2.04k|{
 6341|  2.04k|    struct ofpact_sample *sample = ofpact_put_SAMPLE(out);
 6342|  2.04k|    int err;
 6343|       |
 6344|  2.04k|    if (!is_all_zeros(nas->zeros, sizeof nas->zeros)) {
  ------------------
  |  Branch (6344:9): [True: 301, False: 1.74k]
  ------------------
 6345|    301|        return OFPERR_NXBRC_MUST_BE_ZERO;
 6346|    301|    }
 6347|       |
 6348|  1.74k|    err = check_sample_direction(nas->direction);
 6349|  1.74k|    if (err) {
  ------------------
  |  Branch (6349:9): [True: 115, False: 1.62k]
  ------------------
 6350|    115|        return err;
 6351|    115|    }
 6352|       |
 6353|  1.62k|    sample->ofpact.raw = NXAST_RAW_SAMPLE4;
 6354|  1.62k|    sample->probability = ntohs(nas->probability);
 6355|  1.62k|    sample->collector_set_id = ntohl(nas->collector_set_id);
 6356|  1.62k|    sample->sampling_port = u16_to_ofp(ntohs(nas->sampling_port));
 6357|  1.62k|    sample->direction = nas->direction;
 6358|       |
 6359|  1.62k|    if (sample->probability == 0) {
  ------------------
  |  Branch (6359:9): [True: 10, False: 1.61k]
  ------------------
 6360|     10|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 6361|     10|    }
 6362|       |
 6363|  1.61k|    err = decode_sample_obs_id(nas->obs_domain_src,
 6364|  1.61k|                               nas->obs_domain_ofs_nbits,
 6365|  1.61k|                               nas->obs_domain_imm,
 6366|  1.61k|                               vl_mff_map, tlv_bitmap,
 6367|  1.61k|                               &sample->obs_domain_src,
 6368|  1.61k|                               &sample->obs_domain_imm);
 6369|  1.61k|    if (err) {
  ------------------
  |  Branch (6369:9): [True: 253, False: 1.36k]
  ------------------
 6370|    253|        return err;
 6371|    253|    }
 6372|       |
 6373|  1.36k|    return decode_sample_obs_id(nas->obs_point_src,
 6374|  1.36k|                                nas->obs_point_ofs_nbits,
 6375|  1.36k|                                nas->obs_point_imm,
 6376|  1.36k|                                vl_mff_map, tlv_bitmap,
 6377|  1.36k|                                &sample->obs_point_src,
 6378|  1.36k|                                &sample->obs_point_imm);
 6379|  1.61k|}
ofp-actions.c:decode_sample_obs_id:
 6303|  2.98k|{
 6304|  2.98k|    if (src) {
  ------------------
  |  Branch (6304:9): [True: 2.26k, False: 719]
  ------------------
 6305|  2.26k|        enum ofperr error;
 6306|       |
 6307|  2.26k|        src_out->ofs = nxm_decode_ofs(ofs_nbits);
 6308|  2.26k|        src_out->n_bits = nxm_decode_n_bits(ofs_nbits);
 6309|  2.26k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(src),
 6310|  2.26k|                                             vl_mff_map, &src_out->field,
 6311|  2.26k|                                             tlv_bitmap);
 6312|  2.26k|        if (error) {
  ------------------
  |  Branch (6312:13): [True: 573, False: 1.69k]
  ------------------
 6313|    573|            return error;
 6314|    573|        }
 6315|       |
 6316|  1.69k|        error = mf_check_src(src_out, NULL);
 6317|  1.69k|        if (error) {
  ------------------
  |  Branch (6317:13): [True: 108, False: 1.58k]
  ------------------
 6318|    108|            return error;
 6319|    108|        }
 6320|       |
 6321|  1.58k|        if (src_out->n_bits > 32) {
  ------------------
  |  Branch (6321:13): [True: 245, False: 1.34k]
  ------------------
 6322|    245|            VLOG_WARN_RL(&rl, "size of field used in observation_id (%d) "
  ------------------
  |  |  224|    245|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    245|    do {                                                                \
  |  |  |  |  288|    245|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    245|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 245]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    245|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 245]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6323|    245|                               "exceeds maximum (32)", src_out->n_bits);
 6324|    245|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 6325|    245|        }
 6326|  1.58k|    } else {
 6327|    719|        src_out->field = NULL;
 6328|    719|        *imm_out = ntohl(imm);
 6329|    719|    }
 6330|       |
 6331|  2.05k|    return 0;
 6332|  2.98k|}
ofp-actions.c:decode_NXAST_RAW_CONJUNCTION:
 5678|  4.98k|{
 5679|  4.98k|    if (nac->n_clauses < 2 || nac->n_clauses > 64
  ------------------
  |  Branch (5679:9): [True: 1.12k, False: 3.85k]
  |  Branch (5679:31): [True: 20, False: 3.83k]
  ------------------
 5680|  3.83k|        || nac->clause >= nac->n_clauses) {
  ------------------
  |  Branch (5680:12): [True: 353, False: 3.48k]
  ------------------
 5681|  1.49k|        return OFPERR_NXBAC_BAD_CONJUNCTION;
 5682|  3.48k|    } else {
 5683|       |        add_conjunction(out, ntohl(nac->id), nac->clause, nac->n_clauses);
 5684|  3.48k|        return 0;
 5685|  3.48k|    }
 5686|  4.98k|}
ofp-actions.c:add_conjunction:
 5665|  3.48k|{
 5666|  3.48k|    struct ofpact_conjunction *oc;
 5667|       |
 5668|  3.48k|    oc = ofpact_put_CONJUNCTION(out);
 5669|  3.48k|    oc->id = id;
 5670|  3.48k|    oc->clause = clause;
 5671|  3.48k|    oc->n_clauses = n_clauses;
 5672|  3.48k|}
ofp-actions.c:decode_NXAST_RAW_CT:
 6828|  8.34k|{
 6829|  8.34k|    const size_t ct_offset = ofpacts_pull(out);
 6830|  8.34k|    struct ofpact_conntrack *conntrack = ofpact_put_CT(out);
 6831|  8.34k|    int error;
 6832|       |
 6833|  8.34k|    conntrack->flags = ntohs(nac->flags);
 6834|  8.34k|    if (conntrack->flags & NX_CT_F_FORCE &&
  ------------------
  |  Branch (6834:9): [True: 2.34k, False: 5.99k]
  ------------------
 6835|  2.34k|        !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6835:9): [True: 251, False: 2.09k]
  ------------------
 6836|    251|        error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6837|    251|        goto out;
 6838|    251|    }
 6839|       |
 6840|  8.08k|    error = decode_ct_zone(nac, conntrack, vl_mff_map, tlv_bitmap);
 6841|  8.08k|    if (error) {
  ------------------
  |  Branch (6841:9): [True: 1.81k, False: 6.27k]
  ------------------
 6842|  1.81k|        goto out;
 6843|  1.81k|    }
 6844|  6.27k|    conntrack->recirc_table = nac->recirc_table;
 6845|  6.27k|    conntrack->alg = ntohs(nac->alg);
 6846|       |
 6847|  6.27k|    ofpbuf_pull(out, sizeof(*conntrack));
 6848|       |
 6849|  6.27k|    struct ofpbuf openflow = ofpbuf_const_initializer(
 6850|  6.27k|        nac + 1, ntohs(nac->len) - sizeof(*nac));
 6851|  6.27k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6852|  6.27k|                                            ofp_version,
 6853|  6.27k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6854|  6.27k|                                            out, OFPACT_CT, vl_mff_map,
 6855|  6.27k|                                            tlv_bitmap);
 6856|  6.27k|    if (error) {
  ------------------
  |  Branch (6856:9): [True: 899, False: 5.38k]
  ------------------
 6857|    899|        return error;
 6858|    899|    }
 6859|       |
 6860|  5.38k|    conntrack = ofpbuf_push_uninit(out, sizeof(*conntrack));
 6861|  5.38k|    out->header = &conntrack->ofpact;
 6862|  5.38k|    ofpact_finish_CT(out, &conntrack);
 6863|       |
 6864|  5.38k|    if (conntrack->ofpact.len > sizeof(*conntrack)
  ------------------
  |  Branch (6864:9): [True: 3.64k, False: 1.74k]
  ------------------
 6865|  3.64k|        && !(conntrack->flags & NX_CT_F_COMMIT)) {
  ------------------
  |  Branch (6865:12): [True: 512, False: 3.12k]
  ------------------
 6866|    512|        const struct ofpact *a;
 6867|    512|        size_t ofpacts_len = conntrack->ofpact.len - sizeof(*conntrack);
 6868|       |
 6869|    512|        OFPACT_FOR_EACH (a, conntrack->actions, ofpacts_len) {
  ------------------
  |  |  261|    597|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 512, False: 85]
  |  |  ------------------
  |  |  262|    512|         (POS) = ofpact_next(POS))
  ------------------
 6870|    512|            if (a->type != OFPACT_NAT || ofpact_get_NAT(a)->flags
  ------------------
  |  Branch (6870:17): [True: 359, False: 153]
  |  Branch (6870:42): [True: 50, False: 103]
  ------------------
 6871|    427|                || ofpact_get_NAT(a)->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (6871:20): [True: 18, False: 85]
  ------------------
 6872|    427|                VLOG_WARN_RL(&rl, "CT action requires commit flag if actions "
  ------------------
  |  |  224|    427|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    427|    do {                                                                \
  |  |  |  |  288|    427|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    427|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 427]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    427|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 427]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6873|    427|                             "other than NAT without arguments are specified.");
 6874|    427|                error = OFPERR_OFPBAC_BAD_ARGUMENT;
 6875|    427|                goto out;
 6876|    427|            }
 6877|    512|        }
 6878|    512|    }
 6879|       |
 6880|  7.44k|out:
 6881|  7.44k|    ofpbuf_push_uninit(out, ct_offset);
 6882|  7.44k|    return error;
 6883|  5.38k|}
ofp-actions.c:ofpacts_pull:
  536|  10.1k|{
  537|  10.1k|    size_t ofs;
  538|       |
  539|  10.1k|    ofs = ofpacts->size;
  540|  10.1k|    ofpbuf_pull(ofpacts, ofs);
  541|       |
  542|  10.1k|    return ofs;
  543|  10.1k|}
ofp-actions.c:decode_ct_zone:
 6792|  8.08k|{
 6793|  8.08k|    if (nac->zone_src) {
  ------------------
  |  Branch (6793:9): [True: 2.93k, False: 5.15k]
  ------------------
 6794|  2.93k|        enum ofperr error;
 6795|       |
 6796|  2.93k|        out->zone_src.ofs = nxm_decode_ofs(nac->zone_ofs_nbits);
 6797|  2.93k|        out->zone_src.n_bits = nxm_decode_n_bits(nac->zone_ofs_nbits);
 6798|  2.93k|        error = mf_vl_mff_mf_from_nxm_header(ntohl(nac->zone_src),
 6799|  2.93k|                                             vl_mff_map, &out->zone_src.field,
 6800|  2.93k|                                             tlv_bitmap);
 6801|  2.93k|        if (error) {
  ------------------
  |  Branch (6801:13): [True: 1.16k, False: 1.76k]
  ------------------
 6802|  1.16k|            return error;
 6803|  1.16k|        }
 6804|       |
 6805|  1.76k|        error = mf_check_src(&out->zone_src, NULL);
 6806|  1.76k|        if (error) {
  ------------------
  |  Branch (6806:13): [True: 445, False: 1.31k]
  ------------------
 6807|    445|            return error;
 6808|    445|        }
 6809|       |
 6810|  1.31k|        if (out->zone_src.n_bits != 16) {
  ------------------
  |  Branch (6810:13): [True: 196, False: 1.12k]
  ------------------
 6811|    196|            VLOG_WARN_RL(&rl, "zone n_bits %d not within valid range [16..16]",
  ------------------
  |  |  224|    196|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    196|    do {                                                                \
  |  |  |  |  288|    196|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    196|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 196]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    196|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 6812|    196|                         out->zone_src.n_bits);
 6813|    196|            return OFPERR_OFPBAC_BAD_SET_LEN;
 6814|    196|        }
 6815|  5.15k|    } else {
 6816|  5.15k|        out->zone_src.field = NULL;
 6817|  5.15k|        out->zone_imm = ntohs(nac->zone_imm);
 6818|  5.15k|    }
 6819|       |
 6820|  6.27k|    return 0;
 6821|  8.08k|}
ofp-actions.c:decode_NXAST_RAW_NAT:
 7207|  29.5k|{
 7208|  29.5k|    struct ofpact_nat *nat;
 7209|  29.5k|    uint16_t range_present = ntohs(nan->range_present);
 7210|  29.5k|    const char *opts = (char *)(nan + 1);
 7211|  29.5k|    uint16_t len = ntohs(nan->len) - sizeof *nan;
 7212|       |
 7213|  29.5k|    nat = ofpact_put_NAT(out);
 7214|  29.5k|    nat->flags = ntohs(nan->flags);
 7215|       |
 7216|       |    /* Check for unknown or mutually exclusive flags. */
 7217|  29.5k|    if ((nat->flags & ~NX_NAT_F_MASK)
  ------------------
  |  Branch (7217:9): [True: 7.33k, False: 22.1k]
  ------------------
 7218|  22.1k|        || (nat->flags & NX_NAT_F_SRC && nat->flags & NX_NAT_F_DST)
  ------------------
  |  Branch (7218:13): [True: 2.24k, False: 19.9k]
  |  Branch (7218:42): [True: 302, False: 1.94k]
  ------------------
 7219|  21.8k|        || (nat->flags & NX_NAT_F_PROTO_HASH
  ------------------
  |  Branch (7219:13): [True: 486, False: 21.3k]
  ------------------
 7220|  7.67k|            && nat->flags & NX_NAT_F_PROTO_RANDOM)) {
  ------------------
  |  Branch (7220:16): [True: 35, False: 451]
  ------------------
 7221|  7.67k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7222|  7.67k|    }
 7223|       |
 7224|  21.8k|#define NX_NAT_GET_OPT(DST, SRC, LEN, TYPE)                     \
 7225|  21.8k|    (LEN >= sizeof(TYPE)                                        \
 7226|  21.8k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
 7227|  21.8k|        SRC += sizeof(TYPE))                                    \
 7228|  21.8k|     : NULL)
 7229|       |
 7230|  21.8k|    nat->range_af = AF_UNSPEC;
 7231|  21.8k|    if (range_present & NX_NAT_RANGE_IPV4_MIN) {
  ------------------
  |  Branch (7231:9): [True: 14.4k, False: 7.34k]
  ------------------
 7232|  14.4k|        if (range_present & (NX_NAT_RANGE_IPV6_MIN | NX_NAT_RANGE_IPV6_MAX)) {
  ------------------
  |  Branch (7232:13): [True: 2.43k, False: 12.0k]
  ------------------
 7233|  2.43k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7234|  2.43k|        }
 7235|       |
 7236|  12.0k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.min, opts, len, ovs_be32)
  ------------------
  |  | 7225|  24.1k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 12.0k, False: 8]
  |  |  ------------------
  |  | 7226|  24.1k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  12.0k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  24.1k|     : NULL)
  ------------------
  |  Branch (7236:13): [True: 8, False: 12.0k]
  ------------------
 7237|  12.0k|            || !nat->range.addr.ipv4.min) {
  ------------------
  |  Branch (7237:16): [True: 81, False: 11.9k]
  ------------------
 7238|     89|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7239|     89|        }
 7240|       |
 7241|  11.9k|        nat->range_af = AF_INET;
 7242|       |
 7243|  11.9k|        if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7243:13): [True: 2.69k, False: 9.27k]
  ------------------
 7244|  2.69k|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv4.max, opts, len,
  ------------------
  |  | 7225|  2.69k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 2.69k, False: 0]
  |  |  ------------------
  |  | 7226|  2.69k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  2.69k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  2.69k|     : NULL)
  ------------------
  |  Branch (7244:17): [True: 0, False: 2.69k]
  ------------------
 7245|  2.69k|                                ovs_be32)) {
 7246|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7247|      0|            }
 7248|  2.69k|            if (ntohl(nat->range.addr.ipv4.max)
  ------------------
  |  Branch (7248:17): [True: 1.40k, False: 1.29k]
  ------------------
 7249|  2.69k|                < ntohl(nat->range.addr.ipv4.min)) {
 7250|  1.40k|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7251|  1.40k|            }
 7252|  2.69k|        }
 7253|  11.9k|    } else if (range_present & NX_NAT_RANGE_IPV4_MAX) {
  ------------------
  |  Branch (7253:16): [True: 609, False: 6.73k]
  ------------------
 7254|    609|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7255|  6.73k|    } else if (range_present & NX_NAT_RANGE_IPV6_MIN) {
  ------------------
  |  Branch (7255:16): [True: 4.23k, False: 2.50k]
  ------------------
 7256|  4.23k|        if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.min, opts, len,
  ------------------
  |  | 7225|  8.47k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 925, False: 3.31k]
  |  |  ------------------
  |  | 7226|  8.47k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    925|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  8.47k|     : NULL)
  ------------------
  |  Branch (7256:13): [True: 3.31k, False: 925]
  ------------------
 7257|  4.23k|                            struct in6_addr)
 7258|  3.35k|            || ipv6_mask_is_any(&nat->range.addr.ipv6.min)) {
  ------------------
  |  Branch (7258:16): [True: 40, False: 885]
  ------------------
 7259|  3.35k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7260|  3.35k|        }
 7261|       |
 7262|    885|        nat->range_af = AF_INET6;
 7263|       |
 7264|    885|        if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7264:13): [True: 704, False: 181]
  ------------------
 7265|    704|            if (!NX_NAT_GET_OPT(&nat->range.addr.ipv6.max, opts, len,
  ------------------
  |  | 7225|    704|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 646, False: 58]
  |  |  ------------------
  |  | 7226|    704|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|    646|        SRC += sizeof(TYPE))                                    \
  |  | 7228|    704|     : NULL)
  ------------------
  |  Branch (7265:17): [True: 58, False: 646]
  ------------------
 7266|    704|                                struct in6_addr)) {
 7267|     58|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7268|     58|            }
 7269|    646|            if (memcmp(&nat->range.addr.ipv6.max, &nat->range.addr.ipv6.min,
  ------------------
  |  Branch (7269:17): [True: 121, False: 525]
  ------------------
 7270|    646|                       sizeof(struct in6_addr)) < 0) {
 7271|    121|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7272|    121|            }
 7273|    646|        }
 7274|  2.50k|    } else if (range_present & NX_NAT_RANGE_IPV6_MAX) {
  ------------------
  |  Branch (7274:16): [True: 1.03k, False: 1.46k]
  ------------------
 7275|  1.03k|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7276|  1.03k|    }
 7277|       |
 7278|  12.7k|    if (range_present & NX_NAT_RANGE_PROTO_MIN) {
  ------------------
  |  Branch (7278:9): [True: 4.37k, False: 8.36k]
  ------------------
 7279|  4.37k|        ovs_be16 proto;
 7280|       |
 7281|  4.37k|        if (nat->range_af == AF_UNSPEC) {
  ------------------
  |  Branch (7281:13): [True: 841, False: 3.53k]
  ------------------
 7282|    841|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7283|    841|        }
 7284|  3.53k|        if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16) || proto == 0) {
  ------------------
  |  | 7225|  7.07k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 2.42k, False: 1.11k]
  |  |  ------------------
  |  | 7226|  7.07k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  2.42k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  7.07k|     : NULL)
  ------------------
  |  Branch (7284:13): [True: 1.11k, False: 2.42k]
  |  Branch (7284:61): [True: 158, False: 2.26k]
  ------------------
 7285|  1.27k|            return OFPERR_OFPBAC_BAD_ARGUMENT;
 7286|  1.27k|        }
 7287|  2.26k|        nat->range.proto.min = ntohs(proto);
 7288|  2.26k|        if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7288:13): [True: 1.43k, False: 827]
  ------------------
 7289|  1.43k|            if (!NX_NAT_GET_OPT(&proto, opts, len, ovs_be16)) {
  ------------------
  |  | 7225|  1.43k|    (LEN >= sizeof(TYPE)                                        \
  |  |  ------------------
  |  |  |  Branch (7225:6): [True: 1.43k, False: 0]
  |  |  ------------------
  |  | 7226|  1.43k|     ? (memcpy(DST, SRC, sizeof(TYPE)), LEN -= sizeof(TYPE),    \
  |  | 7227|  1.43k|        SRC += sizeof(TYPE))                                    \
  |  | 7228|  1.43k|     : NULL)
  ------------------
  |  Branch (7289:17): [True: 0, False: 1.43k]
  ------------------
 7290|      0|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7291|      0|            }
 7292|  1.43k|            nat->range.proto.max = ntohs(proto);
 7293|  1.43k|            if (nat->range.proto.max < nat->range.proto.min) {
  ------------------
  |  Branch (7293:17): [True: 696, False: 742]
  ------------------
 7294|    696|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 7295|    696|            }
 7296|  1.43k|        }
 7297|  8.36k|    } else if (range_present & NX_NAT_RANGE_PROTO_MAX) {
  ------------------
  |  Branch (7297:16): [True: 496, False: 7.86k]
  ------------------
 7298|    496|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7299|    496|    }
 7300|       |
 7301|  9.43k|    return 0;
 7302|  12.7k|}
ofp-actions.c:decode_NXAST_RAW_OUTPUT_TRUNC:
 7505|  1.25k|{
 7506|  1.25k|    struct ofpact_output_trunc *output_trunc;
 7507|       |
 7508|  1.25k|    output_trunc = ofpact_put_OUTPUT_TRUNC(out);
 7509|  1.25k|    output_trunc->max_len = ntohl(natrc->max_len);
 7510|  1.25k|    output_trunc->port = u16_to_ofp(ntohs(natrc->port));
 7511|       |
 7512|  1.25k|    if (output_trunc->max_len < ETH_HEADER_LEN) {
  ------------------
  |  |  439|  1.25k|#define ETH_HEADER_LEN 14
  ------------------
  |  Branch (7512:9): [True: 20, False: 1.23k]
  ------------------
 7513|     20|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 7514|     20|    }
 7515|  1.23k|    return 0;
 7516|  1.25k|}
ofp-actions.c:decode_NXAST_RAW_CLONE:
 6047|  1.82k|{
 6048|  1.82k|    int error;
 6049|  1.82k|    struct ofpbuf openflow;
 6050|  1.82k|    const size_t clone_offset = ofpacts_pull(out);
 6051|  1.82k|    struct ofpact_nest *clone = ofpact_put_CLONE(out);
 6052|       |
 6053|       |    /* decode action list */
 6054|  1.82k|    ofpbuf_pull(out, sizeof(*clone));
 6055|  1.82k|    openflow = ofpbuf_const_initializer(
 6056|  1.82k|                    eah + 1, ntohs(eah->len) - sizeof *eah);
 6057|  1.82k|    error = ofpacts_pull_openflow_actions__(&openflow, openflow.size,
 6058|  1.82k|                                            ofp_version,
 6059|  1.82k|                                            1u << OVSINST_OFPIT11_APPLY_ACTIONS,
 6060|  1.82k|                                            out, 0, vl_mff_map, tlv_bitmap);
 6061|  1.82k|    if (error) {
  ------------------
  |  Branch (6061:9): [True: 46, False: 1.78k]
  ------------------
 6062|     46|        return error;
 6063|     46|    }
 6064|  1.78k|    clone = ofpbuf_push_uninit(out, sizeof *clone);
 6065|  1.78k|    out->header = &clone->ofpact;
 6066|  1.78k|    ofpact_finish_CLONE(out, &clone);
 6067|  1.78k|    ofpbuf_push_uninit(out, clone_offset);
 6068|  1.78k|    return error;
 6069|  1.82k|}
ofp-actions.c:decode_NXAST_RAW_CT_CLEAR:
 7092|    254|{
 7093|    254|    ofpact_put_CT_CLEAR(out);
 7094|    254|    return 0;
 7095|    254|}
ofp-actions.c:decode_NXAST_RAW_ENCAP:
 4467|  5.30k|{
 4468|  5.30k|    struct ofpact_encap *encap;
 4469|  5.30k|    const struct ofp_ed_prop_header *ofp_prop;
 4470|  5.30k|    const size_t encap_ofs = out->size;
 4471|  5.30k|    size_t props_len;
 4472|  5.30k|    uint16_t n_props = 0;
 4473|  5.30k|    int err;
 4474|       |
 4475|  5.30k|    encap = ofpact_put_ENCAP(out);
 4476|  5.30k|    encap->ofpact.raw = NXAST_RAW_ENCAP;
 4477|  5.30k|    switch (ntohl(nae->new_pkt_type)) {
 4478|  2.32k|    case PT_ETH:
  ------------------
  |  Branch (4478:5): [True: 2.32k, False: 2.97k]
  ------------------
 4479|  3.47k|    case PT_NSH:
  ------------------
  |  Branch (4479:5): [True: 1.15k, False: 4.15k]
  ------------------
 4480|  4.17k|    case PT_MPLS:
  ------------------
  |  Branch (4480:5): [True: 701, False: 4.60k]
  ------------------
 4481|  4.90k|    case PT_MPLS_MC:
  ------------------
  |  Branch (4481:5): [True: 731, False: 4.57k]
  ------------------
 4482|       |        /* Add supported encap header types here. */
 4483|  4.90k|        break;
 4484|    397|    default:
  ------------------
  |  Branch (4484:5): [True: 397, False: 4.90k]
  ------------------
 4485|    397|        return OFPERR_NXBAC_BAD_HEADER_TYPE;
 4486|  5.30k|    }
 4487|  4.90k|    encap->new_pkt_type = nae->new_pkt_type;
 4488|  4.90k|    encap->hdr_size = ntohs(nae->hdr_size);
 4489|       |
 4490|  4.90k|    ofp_prop = nae->props;
 4491|  4.90k|    props_len = ntohs(nae->len) - offsetof(struct nx_action_encap, props);
 4492|  4.90k|    n_props = 0;
 4493|  8.04k|    while (props_len > 0) {
  ------------------
  |  Branch (4493:12): [True: 4.63k, False: 3.41k]
  ------------------
 4494|  4.63k|        err = decode_ed_prop(&ofp_prop, out, &props_len);
 4495|  4.63k|        if (err) {
  ------------------
  |  Branch (4495:13): [True: 1.49k, False: 3.13k]
  ------------------
 4496|  1.49k|            return err;
 4497|  1.49k|        }
 4498|  3.13k|        n_props++;
 4499|  3.13k|    }
 4500|  3.41k|    encap = ofpbuf_at_assert(out, encap_ofs, sizeof *encap);
 4501|  3.41k|    encap->n_props = n_props;
 4502|  3.41k|    out->header = &encap->ofpact;
 4503|  3.41k|    ofpact_finish_ENCAP(out, &encap);
 4504|       |
 4505|  3.41k|    return 0;
 4506|  4.90k|}
ofp-actions.c:decode_NXAST_RAW_DECAP:
 4698|  10.8k|{
 4699|  10.8k|    struct ofpact_decap * decap;
 4700|       |
 4701|  10.8k|    if (ntohs(nad->len) > sizeof *nad) {
  ------------------
  |  Branch (4701:9): [True: 83, False: 10.7k]
  ------------------
 4702|       |        /* No properties supported yet. */
 4703|     83|        return OFPERR_NXBAC_UNKNOWN_ED_PROP;
 4704|     83|    }
 4705|       |
 4706|  10.7k|    decap = ofpact_put_DECAP(ofpacts);
 4707|  10.7k|    decap->ofpact.raw = NXAST_RAW_DECAP;
 4708|  10.7k|    decap->new_pkt_type = nad->new_pkt_type;
 4709|  10.7k|    return 0;
 4710|  10.8k|}
ofp-actions.c:decode_NXAST_RAW_DEC_NSH_TTL:
 4800|  1.47k|{
 4801|  1.47k|    ofpact_put_DEC_NSH_TTL(out);
 4802|  1.47k|    return 0;
 4803|  1.47k|}
ofp-actions.c:decode_NXAST_RAW_CHECK_PKT_LARGER:
 7821|  2.37k|{
 7822|  2.37k|    struct ofpact_check_pkt_larger *check_pkt_larger;
 7823|  2.37k|    enum ofperr error;
 7824|       |
 7825|  2.37k|    check_pkt_larger = ofpact_put_CHECK_PKT_LARGER(out);
 7826|  2.37k|    check_pkt_larger->pkt_len = ntohs(ncpl->pkt_len);
 7827|  2.37k|    check_pkt_larger->dst.ofs = ntohs(ncpl->offset);
 7828|  2.37k|    check_pkt_larger->dst.n_bits = 1;
 7829|       |
 7830|  2.37k|    struct ofpbuf b = ofpbuf_const_initializer(ncpl, ntohs(ncpl->len));
 7831|  2.37k|    ofpbuf_pull(&b, OBJECT_OFFSETOF(ncpl, pad));
  ------------------
  |  |  108|  2.37k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 7832|       |
 7833|  2.37k|    error = mf_vl_mff_nx_pull_header(&b, vl_mff_map,
 7834|  2.37k|                                     &check_pkt_larger->dst.field,
 7835|  2.37k|                                     NULL, tlv_bitmap);
 7836|  2.37k|    if (error) {
  ------------------
  |  Branch (7836:9): [True: 572, False: 1.80k]
  ------------------
 7837|    572|        return error;
 7838|    572|    }
 7839|       |
 7840|  1.80k|    if (!is_all_zeros(b.data, b.size)) {
  ------------------
  |  Branch (7840:9): [True: 1.20k, False: 595]
  ------------------
 7841|  1.20k|        return OFPERR_NXBRC_MUST_BE_ZERO;
 7842|  1.20k|    }
 7843|       |
 7844|    595|    return mf_check_dst(&check_pkt_larger->dst, NULL);
 7845|  1.80k|}
ofp-actions.c:decode_NXAST_RAW_DELETE_FIELD:
 4201|    661|{
 4202|    661|    struct ofpact_delete_field *delete_field;
 4203|    661|    enum ofperr err;
 4204|       |
 4205|    661|    delete_field = ofpact_put_DELETE_FIELD(out);
 4206|    661|    delete_field->ofpact.raw = NXAST_RAW_DELETE_FIELD;
 4207|       |
 4208|    661|    struct ofpbuf b = ofpbuf_const_initializer(nadf, ntohs(nadf->len));
 4209|    661|    ofpbuf_pull(&b, OBJECT_OFFSETOF(nadf, pad));
  ------------------
  |  |  108|    661|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  ------------------
 4210|       |
 4211|    661|    err = mf_vl_mff_nx_pull_header(&b, vl_mff_map, &delete_field->field,
 4212|    661|                                   NULL, tlv_bitmap);
 4213|    661|    if (err) {
  ------------------
  |  Branch (4213:9): [True: 603, False: 58]
  ------------------
 4214|    603|        return err;
 4215|    603|    }
 4216|       |
 4217|     58|    return 0;
 4218|    661|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_SLOW:
 6617|    345|{
 6618|    345|    if (!enable_debug) {
  ------------------
  |  Branch (6618:9): [True: 345, False: 0]
  ------------------
 6619|    345|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6620|    345|    }
 6621|       |
 6622|      0|    ofpact_put_DEBUG_SLOW(out);
 6623|      0|    return 0;
 6624|    345|}
ofp-actions.c:decode_NXAST_RAW_DEBUG_RECIRC:
 6577|    113|{
 6578|    113|    if (!enable_debug) {
  ------------------
  |  Branch (6578:9): [True: 113, False: 0]
  ------------------
 6579|    113|        return OFPERR_OFPBAC_BAD_VENDOR_TYPE;
 6580|    113|    }
 6581|       |
 6582|      0|    ofpact_put_DEBUG_RECIRC(out);
 6583|      0|    return 0;
 6584|    113|}
ofp-actions.c:log_bad_action:
 7969|  96.0k|{
 7970|  96.0k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|  96.0k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (7970:9): [True: 0, False: 96.0k]
  ------------------
 7971|      0|        struct ds s;
 7972|       |
 7973|      0|        ds_init(&s);
 7974|      0|        ds_put_hex_dump(&s, actions, actions_len, 0, false);
 7975|      0|        VLOG_WARN("bad action at offset %"PRIuSIZE" (%s):\n%s", action_offset,
  ------------------
  |  |  209|      0|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7976|      0|                  ofperr_get_name(error), ds_cstr(&s));
 7977|      0|        ds_destroy(&s);
 7978|      0|    }
 7979|  96.0k|}
ofp-actions.c:ofpacts_decode_for_action_set:
 8326|  16.8k|{
 8327|  16.8k|    enum ofperr error;
 8328|  16.8k|    struct ofpact *a;
 8329|  16.8k|    size_t start = out->size;
 8330|       |
 8331|  16.8k|    error = ofpacts_decode(in, n_in, version, vl_mff_map, ofpacts_tlv_bitmap,
 8332|  16.8k|                           out);
 8333|       |
 8334|  16.8k|    if (error) {
  ------------------
  |  Branch (8334:9): [True: 4.26k, False: 12.5k]
  ------------------
 8335|  4.26k|        return error;
 8336|  4.26k|    }
 8337|       |
 8338|  45.8k|    OFPACT_FOR_EACH (a, ofpact_end(out->data, start), out->size - start) {
  ------------------
  |  |  261|  57.5k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 45.8k, False: 11.7k]
  |  |  ------------------
  |  |  262|  45.0k|         (POS) = ofpact_next(POS))
  ------------------
 8339|  45.8k|        if (!ofpact_is_allowed_in_actions_set(a)) {
  ------------------
  |  Branch (8339:13): [True: 815, False: 45.0k]
  ------------------
 8340|    815|            VLOG_WARN_RL(&rl, "disallowed action in action set");
  ------------------
  |  |  224|    815|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    815|    do {                                                                \
  |  |  |  |  288|    815|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    815|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 815]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    815|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 815]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8341|    815|            return OFPERR_OFPBAC_BAD_TYPE;
 8342|    815|        }
 8343|  45.8k|    }
 8344|       |
 8345|  11.7k|    return 0;
 8346|  12.5k|}
ofp-actions.c:ofpact_is_allowed_in_actions_set:
 8257|  45.8k|{
 8258|  45.8k|    return action_set_classify(a) != ACTION_SLOT_INVALID;
 8259|  45.8k|}
ofp-actions.c:ofpact_check__:
 8823|   123k|{
 8824|   123k|    switch (a->type) {
 8825|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME)                  \
 8826|      0|        case OFPACT_##ENUM:                                 \
 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
 8828|      0|        OFPACTS
  ------------------
  |  |   64|  7.28k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 8826|  7.28k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7.28k, False: 116k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  7.28k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   65|  7.28k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 8826|    919|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 919, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    919|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   66|    919|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 8826|     74|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 74, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     74|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   67|    115|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 8826|    115|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 115, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    115|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   68|    115|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 8826|     83|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 83, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     83|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   69|    737|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 8826|    737|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 737, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    737|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   70|    737|                                                                        \
  |  |   71|    737|    /* Header changes. */                                               \
  |  |   72|  2.49k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 8826|  2.49k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.49k, False: 121k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.49k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   73|  5.35k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 8826|  5.35k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.35k, False: 118k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.35k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   74|  5.35k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 8826|  3.53k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.53k, False: 120k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.53k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   75|  5.56k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 8826|  5.56k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.56k, False: 118k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.56k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   76|  5.56k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 8826|  2.36k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.36k, False: 121k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.36k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   77|  2.36k|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 8826|    212|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 212, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    212|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   78|    212|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 8826|    111|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 111, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    111|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   79|  2.98k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 8826|  2.98k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.98k, False: 120k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.98k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   80|  4.73k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  4.73k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.73k, False: 118k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.73k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   81|  6.14k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 8826|  6.14k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 6.14k, False: 117k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  6.14k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   82|  6.14k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 8826|  1.69k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.69k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.69k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   83|  1.69k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 8826|  1.40k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.40k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.40k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   84|  4.00k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 8826|  4.00k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.00k, False: 119k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.00k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   85|  7.29k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 8826|  7.29k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 7.29k, False: 116k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  7.29k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   86|  7.29k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 8826|    318|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 318, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    318|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   87|    318|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 8826|    101|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 101, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    101|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   88|    644|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 8826|    644|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 644, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    644|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   89|  1.15k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 8826|  1.15k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.15k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.15k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   90|  1.41k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 8826|  1.41k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.41k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.41k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   91|  1.41k|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 8826|    666|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 666, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    666|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   92|  1.33k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  1.33k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.33k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.33k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   93|  4.80k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 8826|  4.80k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 4.80k, False: 118k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  4.80k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   94|  5.49k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 8826|  5.49k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 5.49k, False: 118k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  5.49k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   95|  5.49k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 8826|  3.87k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 3.87k, False: 119k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  3.87k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   96|  3.87k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 8826|  1.46k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.46k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.46k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   97|  1.46k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 8826|     49|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 49, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     49|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |   98|     49|                                                                        \
  |  |   99|     49|    /* Generic encap & decap */                                         \
  |  |  100|  2.22k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 8826|  2.22k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 2.22k, False: 121k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  2.22k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  101|  9.45k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 8826|  9.45k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 9.45k, False: 114k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  9.45k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  102|  9.45k|                                                                        \
  |  |  103|  9.45k|    /* Metadata. */                                                     \
  |  |  104|  9.45k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 8826|     15|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 15, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     15|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  105|    143|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 8826|    143|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 143, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    143|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  106|    143|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 8826|    118|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 118, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    118|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  107|    118|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 8826|    105|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 105, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    105|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  108|    105|                                                                        \
  |  |  109|    105|    /* Flow table interaction. */                                       \
  |  |  110|    105|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 8826|    105|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 105, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    105|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  111|  15.2k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 8826|  15.2k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 15.2k, False: 108k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  15.2k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  112|  15.2k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 8826|     78|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 78, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     78|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  113|     78|                                                                        \
  |  |  114|     78|    /* Arithmetic. */                                                   \
  |  |  115|    348|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 8826|    348|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 348, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    348|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  116|    348|                                                                        \
  |  |  117|    348|    /* Other. */                                                        \
  |  |  118|    348|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 8826|    109|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 109, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    109|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  119|    309|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 8826|    309|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 309, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    309|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  120|    309|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 8826|     40|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 40, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     40|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  121|     40|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  122|  1.73k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 8826|  1.73k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.73k, False: 121k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.73k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  123|  1.73k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 8826|     60|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 60, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     60|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  124|  1.18k|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 8826|  1.18k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.18k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.18k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  125|  1.18k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 8826|  1.13k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 1.13k, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  1.13k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  126|  1.13k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 8826|    854|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 854, False: 122k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    854|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  127|    854|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 8826|     10|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 10, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     10|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  128|     10|           "check_pkt_larger")                                          \
  |  |  129|     10|                                                                        \
  |  |  130|     10|    /* Debugging actions.                                               \
  |  |  131|     10|     *                                                                  \
  |  |  132|     10|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|     10|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|     10|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 8826|      0|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 0, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|      0|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    204|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 8826|    204|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 204, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    204|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  139|    204|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 8826|    173|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 173, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    173|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  140|  11.3k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 8826|  11.3k|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 11.3k, False: 112k]
  |  |  |  |  ------------------
  |  |  |  | 8827|  11.3k|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  141|  11.3k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 8826|     66|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 66, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|     66|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  |  |  142|    234|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 8826|    234|        case OFPACT_##ENUM:                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (8826:9): [True: 234, False: 123k]
  |  |  |  |  ------------------
  |  |  |  | 8827|    234|            return check_##ENUM(ofpact_get_##ENUM(a), cp);
  |  |  ------------------
  ------------------
 8829|      0|#undef OFPACT
 8830|      0|    default:
  ------------------
  |  Branch (8830:5): [True: 0, False: 123k]
  ------------------
 8831|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 8832|   123k|    }
 8833|   123k|}
ofp-actions.c:check_OUTPUT:
  717|  7.28k|{
  718|  7.28k|    return ofpact_check_output_port(a->port, cp->max_ports);
  719|  7.28k|}
ofp-actions.c:check_GROUP:
  756|    919|{
  757|    919|    return 0;
  758|    919|}
ofp-actions.c:check_CONTROLLER:
 1074|     74|{
 1075|     74|    return 0;
 1076|     74|}
ofp-actions.c:check_ENQUEUE:
 1161|    115|{
 1162|    115|    if (ofp_to_u16(a->port) >= ofp_to_u16(cp->max_ports)
  ------------------
  |  Branch (1162:9): [True: 77, False: 38]
  ------------------
 1163|    115|        && a->port != OFPP_IN_PORT
  ------------------
  |  |   39|     77|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|    192|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1163:12): [True: 10, False: 67]
  ------------------
 1164|     10|        && 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 (1164:12): [True: 0, False: 10]
  ------------------
 1165|      0|        return OFPERR_OFPBAC_BAD_OUT_PORT;
 1166|      0|    }
 1167|    115|    return 0;
 1168|    115|}
ofp-actions.c:check_OUTPUT_REG:
 1326|     83|{
 1327|     83|    return mf_check_src(&a->src, cp->match);
 1328|     83|}
ofp-actions.c:check_BUNDLE:
 1552|    737|{
 1553|    737|    return bundle_check(a, cp->max_ports, cp->match);
 1554|    737|}
ofp-actions.c:check_SET_FIELD:
 3352|  2.49k|{
 3353|  2.49k|    const struct mf_field *mf = a->field;
 3354|  2.49k|    struct flow *flow = &cp->match->flow;
 3355|  2.49k|    ovs_be16 *tci = &flow->vlans[0].tci;
 3356|       |
 3357|       |    /* Require OXM_OF_VLAN_VID to have an existing VLAN header. */
 3358|  2.49k|    if (!mf_are_prereqs_ok(mf, flow, NULL)
  ------------------
  |  Branch (3358:9): [True: 627, False: 1.86k]
  ------------------
 3359|  1.86k|        || (mf->id == MFF_VLAN_VID && !(*tci & htons(VLAN_CFI)))) {
  ------------------
  |  Branch (3359:13): [True: 329, False: 1.53k]
  |  Branch (3359:39): [True: 20, False: 309]
  ------------------
 3360|    647|        VLOG_WARN_RL(&rl, "set_field %s lacks correct prerequisites",
  ------------------
  |  |  224|    647|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    647|    do {                                                                \
  |  |  |  |  288|    647|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    647|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 647]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    647|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 647]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 3361|    647|                     mf->name);
 3362|    647|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 3363|    647|    }
 3364|       |
 3365|       |    /* Remember if we saw a VLAN tag in the flow, to aid translating to
 3366|       |     * OpenFlow 1.1 if need be. */
 3367|  1.84k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 3368|  1.84k|    if (mf->id == MFF_VLAN_TCI) {
  ------------------
  |  Branch (3368:9): [True: 18, False: 1.82k]
  ------------------
 3369|       |        /* The set field may add or remove the VLAN tag,
 3370|       |         * Mark the status temporarily. */
 3371|     18|        *tci = a->value->be16;
 3372|     18|    }
 3373|       |
 3374|  1.84k|    return 0;
 3375|  2.49k|}
ofp-actions.c:check_SET_VLAN_VID:
 1649|  5.35k|{
 1650|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1651|       |     * 1.1+ if need be. */
 1652|  5.35k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1653|  5.35k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1654|  5.35k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1654:9): [True: 720, False: 4.63k]
  |  Branch (1654:30): [True: 165, False: 555]
  ------------------
 1655|    165|        inconsistent_match(&cp->usable_protocols);
 1656|    165|    }
 1657|       |
 1658|       |    /* Temporarily mark that we have a vlan tag. */
 1659|  5.35k|    *tci |= htons(VLAN_CFI);
 1660|       |
 1661|  5.35k|    return 0;
 1662|  5.35k|}
ofp-actions.c:inconsistent_match:
 8812|  30.3k|{
 8813|  30.3k|    *usable_protocols &= OFPUTIL_P_OF10_ANY;
  ------------------
  |  |   60|  30.3k|#define OFPUTIL_P_OF10_ANY (OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY)
  |  |  ------------------
  |  |  |  |   58|  30.3k|#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|  30.3k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  |  |  ------------------
  ------------------
 8814|  30.3k|}
ofp-actions.c:check_SET_VLAN_PCP:
 1757|  3.53k|{
 1758|       |    /* Remember if we saw a vlan tag in the flow to aid translating to OpenFlow
 1759|       |     * 1.1+ if need be. */
 1760|  3.53k|    ovs_be16 *tci = &cp->match->flow.vlans[0].tci;
 1761|  3.53k|    a->flow_has_vlan = (*tci & htons(VLAN_CFI)) != 0;
 1762|  3.53k|    if (!a->flow_has_vlan && !a->push_vlan_if_needed) {
  ------------------
  |  Branch (1762:9): [True: 2.22k, False: 1.30k]
  |  Branch (1762:30): [True: 708, False: 1.51k]
  ------------------
 1763|    708|        inconsistent_match(&cp->usable_protocols);
 1764|    708|    }
 1765|       |
 1766|       |    /* Temporarily mark that we have a vlan tag. */
 1767|  3.53k|    *tci |= htons(VLAN_CFI);
 1768|       |
 1769|  3.53k|    return 0;
 1770|  3.53k|}
ofp-actions.c:check_STRIP_VLAN:
 1826|  5.56k|{
 1827|  5.56k|    if (!(cp->match->flow.vlans[0].tci & htons(VLAN_CFI))) {
  ------------------
  |  Branch (1827:9): [True: 2.40k, False: 3.15k]
  ------------------
 1828|  2.40k|        inconsistent_match(&cp->usable_protocols);
 1829|  2.40k|    }
 1830|       |    flow_pop_vlan(&cp->match->flow, NULL);
 1831|  5.56k|    return 0;
 1832|  5.56k|}
ofp-actions.c:check_PUSH_VLAN:
 1894|  2.36k|{
 1895|  2.36k|    struct flow *flow = &cp->match->flow;
 1896|  2.36k|    if (flow->vlans[FLOW_MAX_VLAN_HEADERS - 1].tci & htons(VLAN_CFI)) {
  ------------------
  |  |   75|  2.36k|#define FLOW_MAX_VLAN_HEADERS 2
  ------------------
  |  Branch (1896:9): [True: 487, False: 1.87k]
  ------------------
 1897|       |        /* Support maximum (FLOW_MAX_VLAN_HEADERS) VLAN headers. */
 1898|    487|        return OFPERR_OFPBAC_BAD_TAG;
 1899|    487|    }
 1900|       |    /* Temporary mark that we have a vlan tag. */
 1901|  1.87k|    flow_push_vlan_uninit(flow, NULL);
 1902|       |    flow->vlans[0].tci |= htons(VLAN_CFI);
 1903|  1.87k|    return 0;
 1904|  2.36k|}
ofp-actions.c:check_SET_ETH_SRC:
 1998|    212|{
 1999|    212|    return 0;
 2000|    212|}
ofp-actions.c:check_SET_ETH_DST:
 2005|    111|{
 2006|    111|    return 0;
 2007|    111|}
ofp-actions.c:check_SET_IPV4_SRC:
 2100|  2.98k|{
 2101|  2.98k|    return check_set_ipv4(cp);
 2102|  2.98k|}
ofp-actions.c:check_set_ipv4:
 2089|  7.71k|{
 2090|  7.71k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 2091|  7.71k|    if (dl_type != htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (2091:9): [True: 2.93k, False: 4.78k]
  ------------------
 2092|  2.93k|        inconsistent_match(&cp->usable_protocols);
 2093|  2.93k|    }
 2094|  7.71k|    return 0;
 2095|  7.71k|}
ofp-actions.c:check_SET_IPV4_DST:
 2107|  4.73k|{
 2108|  4.73k|    return check_set_ipv4(cp);
 2109|  4.73k|}
ofp-actions.c:check_SET_IP_DSCP:
 2176|  6.14k|{
 2177|  6.14k|    return check_set_ip(cp);
 2178|  6.14k|}
ofp-actions.c:check_set_ip:
 2166|  10.3k|{
 2167|  10.3k|    if (!is_ip_any(&cp->match->flow)) {
  ------------------
  |  Branch (2167:9): [True: 5.37k, False: 5.02k]
  ------------------
 2168|  5.37k|        inconsistent_match(&cp->usable_protocols);
 2169|  5.37k|    }
 2170|  10.3k|    return 0;
 2171|  10.3k|}
ofp-actions.c:check_SET_IP_ECN:
 2240|  1.69k|{
 2241|  1.69k|    return check_set_ip(cp);
 2242|  1.69k|}
ofp-actions.c:check_SET_IP_TTL:
 2295|  1.40k|{
 2296|  1.40k|    return check_set_ip(cp);
 2297|  1.40k|}
ofp-actions.c:check_SET_L4_SRC_PORT:
 2411|  4.00k|{
 2412|  4.00k|    return check_set_l4_port(a, cp);
 2413|  4.00k|}
ofp-actions.c:check_set_l4_port:
 2392|  11.3k|{
 2393|  11.3k|    const struct flow *flow = &cp->match->flow;
 2394|  11.3k|    if (!is_ip_any(flow)
  ------------------
  |  Branch (2394:9): [True: 5.04k, False: 6.26k]
  ------------------
 2395|  6.26k|        || flow->nw_frag & FLOW_NW_FRAG_LATER
  ------------------
  |  |   55|  17.5k|#define FLOW_NW_FRAG_LATER (1 << 1) /* Set for IP frag with nonzero offset. */
  ------------------
  |  Branch (2395:12): [True: 0, False: 6.26k]
  ------------------
 2396|  6.26k|        || (flow->nw_proto != IPPROTO_TCP &&
  ------------------
  |  Branch (2396:13): [True: 5.31k, False: 950]
  ------------------
 2397|  5.31k|            flow->nw_proto != IPPROTO_UDP &&
  ------------------
  |  Branch (2397:13): [True: 4.68k, False: 621]
  ------------------
 2398|  9.05k|            flow->nw_proto != IPPROTO_SCTP)) {
  ------------------
  |  Branch (2398:13): [True: 4.01k, False: 675]
  ------------------
 2399|  9.05k|        inconsistent_match(&cp->usable_protocols);
 2400|  9.05k|    }
 2401|       |
 2402|       |    /* Note the transport protocol in use, to allow this action to be converted
 2403|       |     * to an OF1.2 set_field action later if necessary. */
 2404|  11.3k|    a->flow_ip_proto = flow->nw_proto;
 2405|       |
 2406|  11.3k|    return 0;
 2407|  11.3k|}
ofp-actions.c:check_SET_L4_DST_PORT:
 2417|  7.29k|{
 2418|  7.29k|    return check_set_l4_port(a, cp);
 2419|  7.29k|}
ofp-actions.c:check_REG_MOVE:
 2722|    318|{
 2723|    318|    return nxm_reg_move_check(a, cp->match);
 2724|    318|}
ofp-actions.c:check_STACK_PUSH:
 3572|    101|{
 3573|    101|    return nxm_stack_push_check(a, cp->match);
 3574|    101|}
ofp-actions.c:check_STACK_POP:
 3579|    644|{
 3580|    644|    return nxm_stack_pop_check(a, cp->match);
 3581|    644|}
ofp-actions.c:check_DEC_TTL:
 3755|  1.15k|{
 3756|  1.15k|    return check_set_ip(cp);
 3757|  1.15k|}
ofp-actions.c:check_SET_MPLS_LABEL:
 3828|  1.41k|{
 3829|  1.41k|    return check_set_mpls(cp);
 3830|  1.41k|}
ofp-actions.c:check_set_mpls:
 3817|  8.21k|{
 3818|  8.21k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 3819|  8.21k|    if (!eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (3819:9): [True: 6.21k, False: 2.00k]
  ------------------
 3820|  6.21k|        inconsistent_match(&cp->usable_protocols);
 3821|  6.21k|    }
 3822|  8.21k|    return 0;
 3823|  8.21k|}
ofp-actions.c:check_SET_MPLS_TC:
 3889|    666|{
 3890|    666|    return check_set_mpls(cp);
 3891|    666|}
ofp-actions.c:check_SET_MPLS_TTL:
 3947|  1.33k|{
 3948|  1.33k|    return check_set_mpls(cp);
 3949|  1.33k|}
ofp-actions.c:check_DEC_MPLS_TTL:
 3984|  4.80k|{
 3985|  4.80k|    return check_set_mpls(cp);
 3986|  4.80k|}
ofp-actions.c:check_PUSH_MPLS:
 4037|  5.49k|{
 4038|  5.49k|    struct flow *flow = &cp->match->flow;
 4039|       |
 4040|  5.49k|    if (flow->packet_type != htonl(PT_ETH)) {
  ------------------
  |  Branch (4040:9): [True: 10, False: 5.48k]
  ------------------
 4041|     10|        inconsistent_match(&cp->usable_protocols);
 4042|     10|    }
 4043|  5.49k|    flow->dl_type = a->ethertype;
 4044|       |
 4045|       |    /* The packet is now MPLS and the MPLS payload is opaque.
 4046|       |     * Thus nothing can be assumed about the network protocol.
 4047|       |     * Temporarily mark that we have no nw_proto. */
 4048|  5.49k|    flow->nw_proto = 0;
 4049|       |
 4050|  5.49k|    return 0;
 4051|  5.49k|}
ofp-actions.c:check_POP_MPLS:
 4094|  3.87k|{
 4095|  3.87k|    struct flow *flow = &cp->match->flow;
 4096|  3.87k|    ovs_be16 dl_type = get_dl_type(flow);
 4097|       |
 4098|  3.87k|    if (flow->packet_type != htonl(PT_ETH) || !eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (4098:9): [True: 466, False: 3.40k]
  |  Branch (4098:47): [True: 2.84k, False: 563]
  ------------------
 4099|  3.31k|        inconsistent_match(&cp->usable_protocols);
 4100|  3.31k|    }
 4101|  3.87k|    flow->dl_type = a->ethertype;
 4102|  3.87k|    return 0;
 4103|  3.87k|}
ofp-actions.c:check_DEC_NSH_TTL:
 4829|  1.46k|{
 4830|  1.46k|    struct flow *flow = &cp->match->flow;
 4831|  1.46k|    if (flow->packet_type != htonl(PT_NSH) &&
  ------------------
  |  Branch (4831:9): [True: 675, False: 785]
  ------------------
 4832|    675|        flow->dl_type != htons(ETH_TYPE_NSH)) {
  ------------------
  |  Branch (4832:9): [True: 181, False: 494]
  ------------------
 4833|    181|        inconsistent_match(&cp->usable_protocols);
 4834|    181|    }
 4835|  1.46k|    return 0;
 4836|  1.46k|}
ofp-actions.c:check_DELETE_FIELD:
 4256|     49|{
 4257|     49|    if (odf->field->id < MFF_TUN_METADATA0 ||
  ------------------
  |  Branch (4257:9): [True: 18, False: 31]
  ------------------
 4258|     31|        odf->field->id > MFF_TUN_METADATA63) {
  ------------------
  |  Branch (4258:9): [True: 6, False: 25]
  ------------------
 4259|     24|        return OFPERR_OFPBAC_BAD_ARGUMENT;
 4260|     24|    }
 4261|     25|    return 0;
 4262|     49|}
ofp-actions.c:check_ENCAP:
 4664|  2.22k|{
 4665|  2.22k|    struct flow *flow = &cp->match->flow;
 4666|  2.22k|    flow->packet_type = a->new_pkt_type;
 4667|  2.22k|    if (pt_ns(flow->packet_type) == OFPHTN_ETHERTYPE) {
  ------------------
  |  Branch (4667:9): [True: 1.81k, False: 413]
  ------------------
 4668|  1.81k|        flow->dl_type = htons(pt_ns_type(flow->packet_type));
 4669|  1.81k|    }
 4670|  2.22k|    if (!is_ip_any(flow)) {
  ------------------
  |  Branch (4670:9): [True: 2.15k, False: 73]
  ------------------
 4671|  2.15k|        flow->nw_proto = 0;
 4672|  2.15k|    }
 4673|  2.22k|    return 0;
 4674|  2.22k|}
ofp-actions.c:check_DECAP:
 4781|  9.45k|{
 4782|  9.45k|    struct flow *flow = &cp->match->flow;
 4783|  9.45k|    if (flow->packet_type == htonl(PT_ETH)) {
  ------------------
  |  Branch (4783:9): [True: 6.20k, False: 3.24k]
  ------------------
 4784|       |        /* Adjust the packet_type to allow subsequent actions. */
 4785|  6.20k|        flow->packet_type = PACKET_TYPE_BE(OFPHTN_ETHERTYPE,
  ------------------
  |  | 1565|  6.20k|#define PACKET_TYPE_BE(NS, NS_TYPE) (htonl((NS) << 16 | (NS_TYPE)))
  ------------------
 4786|  6.20k|                                           ntohs(flow->dl_type));
 4787|  6.20k|    } else {
 4788|       |        /* The actual packet_type is only known after decapsulation.
 4789|       |         * Do not allow subsequent actions that depend on packet headers. */
 4790|  3.24k|        flow->packet_type = htonl(PT_UNKNOWN);
 4791|  3.24k|        flow->dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  3.24k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
 4792|  3.24k|    }
 4793|  9.45k|    return 0;
 4794|  9.45k|}
ofp-actions.c:check_SET_TUNNEL:
 4177|     15|{
 4178|     15|    return 0;
 4179|     15|}
ofp-actions.c:check_SET_QUEUE:
 4299|    143|{
 4300|    143|    return 0;
 4301|    143|}
ofp-actions.c:check_POP_QUEUE:
 4337|    118|{
 4338|    118|    return 0;
 4339|    118|}
ofp-actions.c:check_FIN_TIMEOUT:
 4444|    105|{
 4445|    105|    if (cp->match->flow.nw_proto != IPPROTO_TCP) {
  ------------------
  |  Branch (4445:9): [True: 39, False: 66]
  ------------------
 4446|     39|        inconsistent_match(&cp->usable_protocols);
 4447|     39|    }
 4448|    105|    return 0;
 4449|    105|}
ofp-actions.c:check_RESUBMIT:
 5051|    105|{
 5052|    105|    if (a->with_ct_orig && !is_ct_valid(&cp->match->flow, &cp->match->wc,
  ------------------
  |  Branch (5052:9): [True: 10, False: 95]
  |  Branch (5052:28): [True: 10, False: 0]
  ------------------
 5053|     10|                                        NULL)) {
 5054|     10|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 5055|     10|    }
 5056|     95|    return 0;
 5057|    105|}
ofp-actions.c:check_LEARN:
 5646|  15.2k|{
 5647|  15.2k|    return learn_check(a, cp->match);
 5648|  15.2k|}
ofp-actions.c:check_CONJUNCTION:
 5739|     78|{
 5740|     78|    return 0;
 5741|     78|}
ofp-actions.c:check_MULTIPATH:
 5873|    348|{
 5874|    348|    return multipath_check(a, cp->match);
 5875|    348|}
ofp-actions.c:check_NOTE:
 5959|    109|{
 5960|    109|    return 0;
 5961|    109|}
ofp-actions.c:check_EXIT:
 5996|    309|{
 5997|    309|    return 0;
 5998|    309|}
ofp-actions.c:check_SAMPLE:
 6561|     40|{
 6562|     40|    return 0;
 6563|     40|}
ofp-actions.c:check_CT:
 7068|  1.73k|{
 7069|  1.73k|    struct flow *flow = &cp->match->flow;
 7070|       |
 7071|  1.73k|    if (!dl_type_is_ip_any(get_dl_type(flow))
  ------------------
  |  Branch (7071:9): [True: 203, False: 1.52k]
  ------------------
 7072|  1.52k|        || (flow->ct_state & CS_INVALID && a->flags & NX_CT_F_COMMIT)
  ------------------
  |  Branch (7072:13): [True: 0, False: 1.52k]
  |  Branch (7072:44): [True: 0, False: 0]
  ------------------
 7073|  1.52k|        || (a->alg == IPPORT_FTP && flow->nw_proto != IPPROTO_TCP)
  ------------------
  |  |  695|  3.05k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7073:13): [True: 45, False: 1.48k]
  |  Branch (7073:37): [True: 34, False: 11]
  ------------------
 7074|  1.49k|        || (a->alg == IPPORT_TFTP && flow->nw_proto != IPPROTO_UDP)) {
  ------------------
  |  |  699|  2.98k|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7074:13): [True: 20, False: 1.47k]
  |  Branch (7074:38): [True: 10, False: 10]
  ------------------
 7075|       |        /* We can't downgrade to OF1.0 and expect inconsistent CT actions
 7076|       |         * be silently discarded.  Instead, datapath flow install fails, so
 7077|       |         * it is better to flag inconsistent CT actions as hard errors. */
 7078|    247|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7079|    247|    }
 7080|       |
 7081|  1.48k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7081:9): [True: 295, False: 1.18k]
  ------------------
 7082|    295|        return mf_check_src(&a->zone_src, cp->match);
 7083|    295|    }
 7084|       |
 7085|  1.18k|    return check_subactions(a->actions, ofpact_ct_get_action_len(a), cp);
 7086|  1.48k|}
ofp-actions.c:check_subactions:
 6123|  2.04k|{
 6124|  2.04k|    struct ofpact_check_params sub = *cp;
 6125|  2.04k|    enum ofperr error = ofpacts_check(ofpacts, ofpacts_len, &sub);
 6126|  2.04k|    cp->usable_protocols &= sub.usable_protocols;
 6127|  2.04k|    return error;
 6128|  2.04k|}
ofp-actions.c:check_CT_CLEAR:
 7122|     60|{
 7123|     60|    return 0;
 7124|     60|}
ofp-actions.c:check_NAT:
 7480|  1.18k|{
 7481|  1.18k|    ovs_be16 dl_type = get_dl_type(&cp->match->flow);
 7482|  1.18k|    if (!dl_type_is_ip_any(dl_type) ||
  ------------------
  |  Branch (7482:9): [True: 0, False: 1.18k]
  ------------------
 7483|  1.18k|        (a->range_af == AF_INET && dl_type != htons(ETH_TYPE_IP)) ||
  ------------------
  |  Branch (7483:10): [True: 848, False: 336]
  |  Branch (7483:36): [True: 34, False: 814]
  ------------------
 7484|  1.15k|        (a->range_af == AF_INET6 && dl_type != htons(ETH_TYPE_IPV6))) {
  ------------------
  |  Branch (7484:10): [True: 0, False: 1.15k]
  |  Branch (7484:37): [True: 0, False: 0]
  ------------------
 7485|     34|        return OFPERR_OFPBAC_MATCH_INCONSISTENT;
 7486|     34|    }
 7487|  1.15k|    return 0;
 7488|  1.18k|}
ofp-actions.c:check_OUTPUT_TRUNC:
 7550|  1.13k|{
 7551|  1.13k|    return ofpact_check_output_port(a->port, cp->max_ports);
 7552|  1.13k|}
ofp-actions.c:check_CLONE:
 6132|    854|{
 6133|    854|    return check_subactions(a->actions, ofpact_nest_get_action_len(a), cp);
 6134|    854|}
ofp-actions.c:check_CHECK_PKT_LARGER:
 7911|     10|{
 7912|     10|    return 0;
 7913|     10|}
ofp-actions.c:check_METER:
 7601|    204|{
 7602|    204|    uint32_t mid = a->meter_id;
 7603|    204|    return mid == 0 || mid > OFPM13_MAX ? OFPERR_OFPMMFC_INVALID_METER : 0;
  ------------------
  |  Branch (7603:12): [True: 18, False: 186]
  |  Branch (7603:24): [True: 0, False: 186]
  ------------------
 7604|    204|}
ofp-actions.c:check_CLEAR_ACTIONS:
 7635|    173|{
 7636|    173|    return 0;
 7637|    173|}
ofp-actions.c:check_WRITE_ACTIONS:
 7698|  11.3k|{
 7699|       |    /* Use a temporary copy of 'cp' to avoid updating 'cp->usable_protocols',
 7700|       |     * since we can't check consistency of an action set. */
 7701|  11.3k|    struct ofpact_check_params tmp = *cp;
 7702|  11.3k|    return ofpacts_check(a->actions, ofpact_nest_get_action_len(a), &tmp);
 7703|  11.3k|}
ofp-actions.c:check_WRITE_METADATA:
 7794|     66|{
 7795|     66|    return 0;
 7796|     66|}
ofp-actions.c:check_GOTO_TABLE:
 7958|    234|{
 7959|    234|    if ((cp->table_id != 255 && a->table_id <= cp->table_id)
  ------------------
  |  Branch (7959:10): [True: 76, False: 158]
  |  Branch (7959:33): [True: 35, False: 41]
  ------------------
 7960|    199|        || (cp->n_tables != 255 && a->table_id >= cp->n_tables)) {
  ------------------
  |  Branch (7960:13): [True: 0, False: 199]
  |  Branch (7960:36): [True: 0, False: 0]
  ------------------
 7961|     35|        return OFPERR_OFPBIC_BAD_TABLE_ID;
 7962|     35|    }
 7963|    199|    return 0;
 7964|    234|}
ofp-actions.c:ofpacts_verify:
 9006|   118k|{
 9007|   118k|    const struct ofpact *a;
 9008|   118k|    enum ovs_instruction_type inst;
 9009|       |
 9010|   118k|    inst = OVSINST_OFPIT13_METER;
 9011|   148k|    OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|   256k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 148k, False: 108k]
  |  |  ------------------
  |  |  262|   137k|         (POS) = ofpact_next(POS))
  ------------------
 9012|   148k|        enum ovs_instruction_type next;
 9013|   148k|        enum ofperr error;
 9014|       |
 9015|   148k|        if (a->type == OFPACT_CONJUNCTION) {
  ------------------
  |  Branch (9015:13): [True: 3.42k, False: 144k]
  ------------------
 9016|  7.39k|            OFPACT_FOR_EACH (a, ofpacts, ofpacts_len) {
  ------------------
  |  |  261|  8.84k|    for ((POS) = (OFPACTS); (POS) < ofpact_end(OFPACTS, OFPACTS_LEN);  \
  |  |  ------------------
  |  |  |  Branch (261:29): [True: 7.39k, False: 1.44k]
  |  |  ------------------
  |  |  262|  5.42k|         (POS) = ofpact_next(POS))
  ------------------
 9017|  7.39k|                if (a->type != OFPACT_CONJUNCTION && a->type != OFPACT_NOTE) {
  ------------------
  |  Branch (9017:21): [True: 5.81k, False: 1.58k]
  |  Branch (9017:54): [True: 1.97k, False: 3.83k]
  ------------------
 9018|  1.97k|                    verify_error(errorp, "\"conjunction\" actions may be used "
 9019|  1.97k|                                 "along with \"note\" but not any other kind "
 9020|  1.97k|                                 "of action (such as the \"%s\" action used "
 9021|  1.97k|                                 "here)", ofpact_name(a->type));
 9022|  1.97k|                    return OFPERR_NXBAC_BAD_CONJUNCTION;
 9023|  1.97k|                }
 9024|  7.39k|            }
 9025|  1.44k|            return 0;
 9026|  3.42k|        }
 9027|       |
 9028|   144k|        error = ofpacts_verify_nested(a, outer_action, errorp);
 9029|   144k|        if (error) {
  ------------------
  |  Branch (9029:13): [True: 7.08k, False: 137k]
  ------------------
 9030|  7.08k|            return error;
 9031|  7.08k|        }
 9032|       |
 9033|   137k|        next = ovs_instruction_type_from_ofpact_type(a->type, version);
 9034|   137k|        if (a > ofpacts
  ------------------
  |  Branch (9034:13): [True: 60.0k, False: 77.4k]
  ------------------
 9035|  60.0k|            && (inst == OVSINST_OFPIT11_APPLY_ACTIONS
  ------------------
  |  Branch (9035:16): [True: 225, False: 59.8k]
  |  Branch (9035:17): [True: 59.6k, False: 409]
  ------------------
 9036|  60.0k|                ? next < inst
 9037|  60.0k|                : next <= inst)) {
 9038|    225|            const char *name = ovs_instruction_name_from_type(inst);
 9039|    225|            const char *next_name = ovs_instruction_name_from_type(next);
 9040|       |
 9041|    225|            if (next == inst) {
  ------------------
  |  Branch (9041:17): [True: 115, False: 110]
  ------------------
 9042|    115|                verify_error(errorp, "duplicate %s instruction not allowed, "
 9043|    115|                             "for OpenFlow 1.1+ compatibility", name);
 9044|    115|            } else {
 9045|    110|                verify_error(errorp, "invalid instruction ordering: "
 9046|    110|                             "%s must appear before %s, "
 9047|    110|                             "for OpenFlow 1.1+ compatibility",
 9048|    110|                             next_name, name);
 9049|    110|            }
 9050|    225|            return OFPERR_OFPBAC_UNSUPPORTED_ORDER;
 9051|    225|        }
 9052|   137k|        if (!((1u << next) & allowed_ovsinsts)) {
  ------------------
  |  Branch (9052:13): [True: 12, False: 137k]
  ------------------
 9053|     12|            const char *name = ovs_instruction_name_from_type(next);
 9054|       |
 9055|     12|            if (next == OVSINST_OFPIT13_METER && version >= OFP15_VERSION) {
  ------------------
  |  Branch (9055:17): [True: 0, False: 12]
  |  Branch (9055:50): [True: 0, False: 0]
  ------------------
 9056|      0|                verify_error(errorp, "%s action not allowed here", name);
 9057|      0|                return OFPERR_OFPBAC_BAD_TYPE;
 9058|     12|            } else {
 9059|     12|                verify_error(errorp, "%s instruction not allowed here", name);
 9060|     12|                return OFPERR_OFPBIC_UNSUP_INST;
 9061|     12|            }
 9062|     12|        }
 9063|       |
 9064|   137k|        inst = next;
 9065|   137k|    }
 9066|       |
 9067|   108k|    return 0;
 9068|   118k|}
ofp-actions.c:verify_error:
 8916|  9.29k|{
 8917|  9.29k|    va_list args;
 8918|  9.29k|    va_start(args, format);
 8919|  9.29k|    char *error = xvasprintf(format, args);
 8920|  9.29k|    va_end(args);
 8921|       |
 8922|  9.29k|    if (errorp) {
  ------------------
  |  Branch (8922:9): [True: 0, False: 9.29k]
  ------------------
 8923|      0|        *errorp = error;
 8924|  9.29k|    } else {
 8925|  9.29k|        VLOG_WARN("%s", error);
  ------------------
  |  |  209|  9.29k|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|  9.29k|    do {                                                \
  |  |  |  |  281|  9.29k|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|  9.29k|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 9.29k]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|  9.29k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 9.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 8926|  9.29k|        free(error);
 8927|  9.29k|    }
 8928|  9.29k|}
ofp-actions.c:ofpacts_verify_nested:
 8949|   144k|{
 8950|   144k|    const struct mf_field *field = ofpact_get_mf_dst(a);
 8951|       |
 8952|   144k|    if (field && field_requires_ct(field->id) && outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8952:9): [True: 9.22k, False: 135k]
  |  Branch (8952:18): [True: 1.12k, False: 8.09k]
  |  Branch (8952:50): [True: 99, False: 1.02k]
  ------------------
 8953|     99|        verify_error(errorp, "cannot set CT fields outside of ct action");
 8954|     99|        return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8955|     99|    }
 8956|   144k|    if (a->type == OFPACT_NAT) {
  ------------------
  |  Branch (8956:9): [True: 9.41k, False: 135k]
  ------------------
 8957|  9.41k|        if (outer_action != OFPACT_CT) {
  ------------------
  |  Branch (8957:13): [True: 6.80k, False: 2.61k]
  ------------------
 8958|  6.80k|            verify_error(errorp,
 8959|  6.80k|                         "Cannot have NAT action outside of \"ct\" action");
 8960|  6.80k|            return OFPERR_OFPBAC_BAD_SET_ARGUMENT;
 8961|  6.80k|        }
 8962|  2.61k|        return 0;
 8963|  9.41k|    }
 8964|       |
 8965|   135k|    if (outer_action) {
  ------------------
  |  Branch (8965:9): [True: 1.20k, False: 133k]
  ------------------
 8966|  1.20k|        ovs_assert(outer_action == OFPACT_WRITE_ACTIONS
  ------------------
  |  |   62|  1.20k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (8966:20): [True: 0, False: 1.20k]
  ------------------
 8967|  1.20k|                   || outer_action == OFPACT_CT
  ------------------
  |  Branch (8967:23): [True: 1.20k, False: 0]
  ------------------
 8968|      0|                   || outer_action == OFPACT_CLONE);
  ------------------
  |  Branch (8968:23): [True: 0, False: 0]
  ------------------
 8969|       |
 8970|  1.20k|        if (outer_action == OFPACT_CT) {
  ------------------
  |  Branch (8970:13): [True: 1.20k, False: 0]
  ------------------
 8971|  1.20k|            if (!field) {
  ------------------
  |  Branch (8971:17): [True: 143, False: 1.06k]
  ------------------
 8972|    143|                return unsupported_nesting(a->type, outer_action, errorp);
 8973|  1.06k|            } else if (!field_requires_ct(field->id)) {
  ------------------
  |  Branch (8973:24): [True: 35, False: 1.02k]
  ------------------
 8974|     35|                verify_error(errorp,
 8975|     35|                             "%s action doesn't support nested modification "
 8976|     35|                             "of %s", ofpact_name(outer_action), field->name);
 8977|     35|                return OFPERR_OFPBAC_BAD_ARGUMENT;
 8978|     35|            }
 8979|  1.20k|        }
 8980|       |
 8981|  1.02k|        if (a->type == OFPACT_METER) {
  ------------------
  |  Branch (8981:13): [True: 0, False: 1.02k]
  ------------------
 8982|      0|            return unsupported_nesting(a->type, outer_action, errorp);
 8983|      0|        }
 8984|  1.02k|    }
 8985|       |
 8986|   134k|    return 0;
 8987|   135k|}
ofp-actions.c:field_requires_ct:
 8941|  10.2k|{
 8942|  10.2k|    return field == MFF_CT_MARK || field == MFF_CT_LABEL;
  ------------------
  |  Branch (8942:12): [True: 2.15k, False: 8.12k]
  |  Branch (8942:36): [True: 0, False: 8.12k]
  ------------------
 8943|  10.2k|}
ofp-actions.c:unsupported_nesting:
 8933|    143|{
 8934|    143|    verify_error(errorp, "%s action doesn't support nested action %s",
 8935|    143|                 ofpact_name(outer_action), ofpact_name(action));
 8936|    143|    return OFPERR_OFPBAC_BAD_ARGUMENT;
 8937|    143|}
ofp-actions.c:next_load_segment:
 2967|  4.20k|{
 2968|  4.20k|    int n_bits = sf->field->n_bits;
 2969|  4.20k|    int n_bytes = sf->field->n_bytes;
 2970|  4.20k|    int start = dst->ofs + dst->n_bits;
 2971|       |
 2972|  4.20k|    if (start < n_bits) {
  ------------------
  |  Branch (2972:9): [True: 3.45k, False: 749]
  ------------------
 2973|  3.45k|        dst->field = sf->field;
 2974|  3.45k|        dst->ofs = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 1, start,
  ------------------
  |  |  563|  3.45k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  3.45k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  3.45k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  3.45k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2975|  3.45k|                                n_bits);
 2976|  3.45k|        if (dst->ofs < n_bits) {
  ------------------
  |  Branch (2976:13): [True: 2.10k, False: 1.35k]
  ------------------
 2977|  2.10k|            dst->n_bits = bitwise_scan(ofpact_set_field_mask(sf), n_bytes, 0,
  ------------------
  |  |  563|  2.10k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  2.10k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  2.10k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  2.10k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 2978|  2.10k|                                       dst->ofs + 1,
 2979|  2.10k|                                       MIN(dst->ofs + 64, n_bits)) - dst->ofs;
  ------------------
  |  |   91|  2.10k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 1.17k, False: 921]
  |  |  ------------------
  ------------------
 2980|  2.10k|            *value = bitwise_get(sf->value, n_bytes, dst->ofs, dst->n_bits);
 2981|  2.10k|            return true;
 2982|  2.10k|        }
 2983|  3.45k|    }
 2984|  2.10k|    return false;
 2985|  4.20k|}
ofp-actions.c:get_ofpact_map:
 9158|  48.9k|{
 9159|       |    /* OpenFlow 1.0 actions. */
 9160|  48.9k|    static const struct ofpact_map of10[] = {
 9161|  48.9k|        { OFPACT_OUTPUT, 0 },
 9162|  48.9k|        { OFPACT_SET_VLAN_VID, 1 },
 9163|  48.9k|        { OFPACT_SET_VLAN_PCP, 2 },
 9164|  48.9k|        { OFPACT_STRIP_VLAN, 3 },
 9165|  48.9k|        { OFPACT_SET_ETH_SRC, 4 },
 9166|  48.9k|        { OFPACT_SET_ETH_DST, 5 },
 9167|  48.9k|        { OFPACT_SET_IPV4_SRC, 6 },
 9168|  48.9k|        { OFPACT_SET_IPV4_DST, 7 },
 9169|  48.9k|        { OFPACT_SET_IP_DSCP, 8 },
 9170|  48.9k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9171|  48.9k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9172|  48.9k|        { OFPACT_ENQUEUE, 11 },
 9173|  48.9k|        { 0, -1 },
 9174|  48.9k|    };
 9175|       |
 9176|       |    /* OpenFlow 1.1 actions. */
 9177|  48.9k|    static const struct ofpact_map of11[] = {
 9178|  48.9k|        { OFPACT_OUTPUT, 0 },
 9179|  48.9k|        { OFPACT_SET_VLAN_VID, 1 },
 9180|  48.9k|        { OFPACT_SET_VLAN_PCP, 2 },
 9181|  48.9k|        { OFPACT_SET_ETH_SRC, 3 },
 9182|  48.9k|        { OFPACT_SET_ETH_DST, 4 },
 9183|  48.9k|        { OFPACT_SET_IPV4_SRC, 5 },
 9184|  48.9k|        { OFPACT_SET_IPV4_DST, 6 },
 9185|  48.9k|        { OFPACT_SET_IP_DSCP, 7 },
 9186|  48.9k|        { OFPACT_SET_IP_ECN, 8 },
 9187|  48.9k|        { OFPACT_SET_L4_SRC_PORT, 9 },
 9188|  48.9k|        { OFPACT_SET_L4_DST_PORT, 10 },
 9189|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9190|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9191|  48.9k|        { OFPACT_SET_MPLS_LABEL, 13 },
 9192|  48.9k|        { OFPACT_SET_MPLS_TC, 14 },
 9193|  48.9k|        { OFPACT_SET_MPLS_TTL, 15 },
 9194|  48.9k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9195|  48.9k|        { OFPACT_PUSH_VLAN, 17 },
 9196|  48.9k|        { OFPACT_STRIP_VLAN, 18 },
 9197|  48.9k|        { OFPACT_PUSH_MPLS, 19 },
 9198|  48.9k|        { OFPACT_POP_MPLS, 20 },
 9199|  48.9k|        { OFPACT_SET_QUEUE, 21 },
 9200|  48.9k|        { OFPACT_GROUP, 22 },
 9201|  48.9k|        { OFPACT_SET_IP_TTL, 23 },
 9202|  48.9k|        { OFPACT_DEC_TTL, 24 },
 9203|  48.9k|        { 0, -1 },
 9204|  48.9k|    };
 9205|       |
 9206|       |    /* OpenFlow 1.2, 1.3, and 1.4 actions. */
 9207|  48.9k|    static const struct ofpact_map of12[] = {
 9208|  48.9k|        { OFPACT_OUTPUT, 0 },
 9209|       |        /* OFPAT_COPY_TTL_OUT (11) not supported. */
 9210|       |        /* OFPAT_COPY_TTL_IN (12) not supported. */
 9211|  48.9k|        { OFPACT_SET_MPLS_TTL, 15 },
 9212|  48.9k|        { OFPACT_DEC_MPLS_TTL, 16 },
 9213|  48.9k|        { OFPACT_PUSH_VLAN, 17 },
 9214|  48.9k|        { OFPACT_STRIP_VLAN, 18 },
 9215|  48.9k|        { OFPACT_PUSH_MPLS, 19 },
 9216|  48.9k|        { OFPACT_POP_MPLS, 20 },
 9217|  48.9k|        { OFPACT_SET_QUEUE, 21 },
 9218|  48.9k|        { OFPACT_GROUP, 22 },
 9219|  48.9k|        { OFPACT_SET_IP_TTL, 23 },
 9220|  48.9k|        { OFPACT_DEC_TTL, 24 },
 9221|  48.9k|        { OFPACT_SET_FIELD, 25 },
 9222|       |        /* OF1.3+ OFPAT_PUSH_PBB (26) not supported. */
 9223|       |        /* OF1.3+ OFPAT_POP_PBB (27) not supported. */
 9224|  48.9k|        { 0, -1 },
 9225|  48.9k|    };
 9226|       |
 9227|  48.9k|    switch (version) {
 9228|  1.92k|    case OFP10_VERSION:
  ------------------
  |  Branch (9228:5): [True: 1.92k, False: 46.9k]
  ------------------
 9229|  1.92k|        return of10;
 9230|       |
 9231|  15.3k|    case OFP11_VERSION:
  ------------------
  |  Branch (9231:5): [True: 15.3k, False: 33.5k]
  ------------------
 9232|  15.3k|        return of11;
 9233|       |
 9234|  26.4k|    case OFP12_VERSION:
  ------------------
  |  Branch (9234:5): [True: 26.4k, False: 22.4k]
  ------------------
 9235|  26.4k|    case OFP13_VERSION:
  ------------------
  |  Branch (9235:5): [True: 8, False: 48.8k]
  ------------------
 9236|  30.3k|    case OFP14_VERSION:
  ------------------
  |  Branch (9236:5): [True: 3.93k, False: 44.9k]
  ------------------
 9237|  31.6k|    case OFP15_VERSION:
  ------------------
  |  Branch (9237:5): [True: 1.23k, False: 47.6k]
  ------------------
 9238|  31.6k|    default:
  ------------------
  |  Branch (9238:5): [True: 0, False: 48.9k]
  ------------------
 9239|  31.6k|        return of12;
 9240|  48.9k|    }
 9241|  48.9k|}
ofp-actions.c:ofpact_format:
 9465|   157k|{
 9466|   157k|    switch (a->type) {
 9467|      0|#define OFPACT(ENUM, STRUCT, MEMBER, NAME)                              \
 9468|      0|        case OFPACT_##ENUM:                                             \
 9469|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
 9470|      0|            break;
 9471|      0|        OFPACTS
  ------------------
  |  |   64|  14.1k|    OFPACT(OUTPUT,          ofpact_output,      ofpact, "output")       \
  |  |  ------------------
  |  |  |  | 9468|  14.1k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 14.1k, False: 143k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  14.1k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  14.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  14.1k|            break;
  |  |  ------------------
  |  |   65|  14.1k|    OFPACT(GROUP,           ofpact_group,       ofpact, "group")        \
  |  |  ------------------
  |  |  |  | 9468|    437|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 437, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    437|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    437|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    437|            break;
  |  |  ------------------
  |  |   66|  3.78k|    OFPACT(CONTROLLER,      ofpact_controller,  userdata, "controller") \
  |  |  ------------------
  |  |  |  | 9468|  3.78k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.78k, False: 153k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.78k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.78k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.78k|            break;
  |  |  ------------------
  |  |   67|  3.78k|    OFPACT(ENQUEUE,         ofpact_enqueue,     ofpact, "enqueue")      \
  |  |  ------------------
  |  |  |  | 9468|    177|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 177, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    177|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    177|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    177|            break;
  |  |  ------------------
  |  |   68|    244|    OFPACT(OUTPUT_REG,      ofpact_output_reg,  ofpact, "output_reg")   \
  |  |  ------------------
  |  |  |  | 9468|    244|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 244, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    244|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    244|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    244|            break;
  |  |  ------------------
  |  |   69|  1.06k|    OFPACT(BUNDLE,          ofpact_bundle,      members, "bundle")      \
  |  |  ------------------
  |  |  |  | 9468|  1.06k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.06k, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.06k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.06k|            break;
  |  |  ------------------
  |  |   70|  1.06k|                                                                        \
  |  |   71|  1.06k|    /* Header changes. */                                               \
  |  |   72|  6.58k|    OFPACT(SET_FIELD,       ofpact_set_field,   ofpact, "set_field")    \
  |  |  ------------------
  |  |  |  | 9468|  6.58k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.58k, False: 150k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.58k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.58k|            break;
  |  |  ------------------
  |  |   73|  6.58k|    OFPACT(SET_VLAN_VID,    ofpact_vlan_vid,    ofpact, "set_vlan_vid") \
  |  |  ------------------
  |  |  |  | 9468|  5.41k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.41k, False: 151k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.41k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.41k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.41k|            break;
  |  |  ------------------
  |  |   74|  5.41k|    OFPACT(SET_VLAN_PCP,    ofpact_vlan_pcp,    ofpact, "set_vlan_pcp") \
  |  |  ------------------
  |  |  |  | 9468|  3.07k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.07k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.07k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.07k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.07k|            break;
  |  |  ------------------
  |  |   75|  5.57k|    OFPACT(STRIP_VLAN,      ofpact_null,        ofpact, "strip_vlan")   \
  |  |  ------------------
  |  |  |  | 9468|  5.57k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.57k, False: 151k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.57k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.57k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.57k|            break;
  |  |  ------------------
  |  |   76|  5.57k|    OFPACT(PUSH_VLAN,       ofpact_push_vlan,   ofpact, "push_vlan")    \
  |  |  ------------------
  |  |  |  | 9468|    989|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 989, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    989|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    989|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    989|            break;
  |  |  ------------------
  |  |   77|    989|    OFPACT(SET_ETH_SRC,     ofpact_mac,         ofpact, "mod_dl_src")   \
  |  |  ------------------
  |  |  |  | 9468|    224|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 224, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    224|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    224|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    224|            break;
  |  |  ------------------
  |  |   78|    224|    OFPACT(SET_ETH_DST,     ofpact_mac,         ofpact, "mod_dl_dst")   \
  |  |  ------------------
  |  |  |  | 9468|    168|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 168, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    168|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    168|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    168|            break;
  |  |  ------------------
  |  |   79|  2.35k|    OFPACT(SET_IPV4_SRC,    ofpact_ipv4,        ofpact, "mod_nw_src")   \
  |  |  ------------------
  |  |  |  | 9468|  2.35k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.35k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.35k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.35k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.35k|            break;
  |  |  ------------------
  |  |   80|  4.39k|    OFPACT(SET_IPV4_DST,    ofpact_ipv4,        ofpact, "mod_nw_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  4.39k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.39k, False: 152k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.39k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.39k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.39k|            break;
  |  |  ------------------
  |  |   81|  6.15k|    OFPACT(SET_IP_DSCP,     ofpact_dscp,        ofpact, "mod_nw_tos")   \
  |  |  ------------------
  |  |  |  | 9468|  6.15k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.15k, False: 150k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.15k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.15k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.15k|            break;
  |  |  ------------------
  |  |   82|  6.15k|    OFPACT(SET_IP_ECN,      ofpact_ecn,         ofpact, "mod_nw_ecn")   \
  |  |  ------------------
  |  |  |  | 9468|  1.94k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.94k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.94k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.94k|            break;
  |  |  ------------------
  |  |   83|  1.94k|    OFPACT(SET_IP_TTL,      ofpact_ip_ttl,      ofpact, "mod_nw_ttl")   \
  |  |  ------------------
  |  |  |  | 9468|  1.40k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.40k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.40k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.40k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.40k|            break;
  |  |  ------------------
  |  |   84|  6.89k|    OFPACT(SET_L4_SRC_PORT, ofpact_l4_port,     ofpact, "mod_tp_src")   \
  |  |  ------------------
  |  |  |  | 9468|  6.89k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.89k, False: 150k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.89k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.89k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.89k|            break;
  |  |  ------------------
  |  |   85|  7.30k|    OFPACT(SET_L4_DST_PORT, ofpact_l4_port,     ofpact, "mod_tp_dst")   \
  |  |  ------------------
  |  |  |  | 9468|  7.30k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 7.30k, False: 149k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  7.30k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  7.30k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  7.30k|            break;
  |  |  ------------------
  |  |   86|  7.30k|    OFPACT(REG_MOVE,        ofpact_reg_move,    ofpact, "move")         \
  |  |  ------------------
  |  |  |  | 9468|    136|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 136, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    136|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    136|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    136|            break;
  |  |  ------------------
  |  |   87|    205|    OFPACT(STACK_PUSH,      ofpact_stack,       ofpact, "push")         \
  |  |  ------------------
  |  |  |  | 9468|    205|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 205, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    205|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    205|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    205|            break;
  |  |  ------------------
  |  |   88|    492|    OFPACT(STACK_POP,       ofpact_stack,       ofpact, "pop")          \
  |  |  ------------------
  |  |  |  | 9468|    492|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 492, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    492|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    492|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    492|            break;
  |  |  ------------------
  |  |   89|  2.13k|    OFPACT(DEC_TTL,         ofpact_cnt_ids,     cnt_ids, "dec_ttl")     \
  |  |  ------------------
  |  |  |  | 9468|  2.13k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.13k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.13k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.13k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.13k|            break;
  |  |  ------------------
  |  |   90|  2.13k|    OFPACT(SET_MPLS_LABEL,  ofpact_mpls_label,  ofpact, "set_mpls_label") \
  |  |  ------------------
  |  |  |  | 9468|    343|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 343, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    343|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    343|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    343|            break;
  |  |  ------------------
  |  |   91|    671|    OFPACT(SET_MPLS_TC,     ofpact_mpls_tc,     ofpact, "set_mpls_tc")  \
  |  |  ------------------
  |  |  |  | 9468|    671|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 671, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    671|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    671|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    671|            break;
  |  |  ------------------
  |  |   92|  1.63k|    OFPACT(SET_MPLS_TTL,    ofpact_mpls_ttl,    ofpact, "set_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  1.63k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.63k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.63k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.63k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.63k|            break;
  |  |  ------------------
  |  |   93|  4.81k|    OFPACT(DEC_MPLS_TTL,    ofpact_null,        ofpact, "dec_mpls_ttl") \
  |  |  ------------------
  |  |  |  | 9468|  4.81k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.81k, False: 152k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.81k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.81k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.81k|            break;
  |  |  ------------------
  |  |   94|  5.49k|    OFPACT(PUSH_MPLS,       ofpact_push_mpls,   ofpact, "push_mpls")    \
  |  |  ------------------
  |  |  |  | 9468|  5.49k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 5.49k, False: 151k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  5.49k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  5.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  5.49k|            break;
  |  |  ------------------
  |  |   95|  5.49k|    OFPACT(POP_MPLS,        ofpact_pop_mpls,    ofpact, "pop_mpls")     \
  |  |  ------------------
  |  |  |  | 9468|  3.88k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.88k, False: 153k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.88k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.88k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.88k|            break;
  |  |  ------------------
  |  |   96|  3.88k|    OFPACT(DEC_NSH_TTL,     ofpact_null,        ofpact, "dec_nsh_ttl")  \
  |  |  ------------------
  |  |  |  | 9468|  1.46k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.46k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.46k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.46k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.46k|            break;
  |  |  ------------------
  |  |   97|  1.46k|    OFPACT(DELETE_FIELD,    ofpact_delete_field, ofpact, "delete_field") \
  |  |  ------------------
  |  |  |  | 9468|     34|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 34, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     34|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     34|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     34|            break;
  |  |  ------------------
  |  |   98|     34|                                                                        \
  |  |   99|     34|    /* Generic encap & decap */                                         \
  |  |  100|  2.54k|    OFPACT(ENCAP,           ofpact_encap,       props, "encap")         \
  |  |  ------------------
  |  |  |  | 9468|  2.54k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.54k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.54k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.54k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.54k|            break;
  |  |  ------------------
  |  |  101|  6.58k|    OFPACT(DECAP,           ofpact_decap,       ofpact, "decap")        \
  |  |  ------------------
  |  |  |  | 9468|  6.58k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 6.58k, False: 150k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  6.58k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  6.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  6.58k|            break;
  |  |  ------------------
  |  |  102|  6.58k|                                                                        \
  |  |  103|  6.58k|    /* Metadata. */                                                     \
  |  |  104|  6.58k|    OFPACT(SET_TUNNEL,      ofpact_tunnel,      ofpact, "set_tunnel")   \
  |  |  ------------------
  |  |  |  | 9468|     86|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 86, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     86|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     86|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     86|            break;
  |  |  ------------------
  |  |  105|    244|    OFPACT(SET_QUEUE,       ofpact_queue,       ofpact, "set_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    244|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 244, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    244|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    244|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    244|            break;
  |  |  ------------------
  |  |  106|    422|    OFPACT(POP_QUEUE,       ofpact_null,        ofpact, "pop_queue")    \
  |  |  ------------------
  |  |  |  | 9468|    422|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 422, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    422|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    422|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    422|            break;
  |  |  ------------------
  |  |  107|    655|    OFPACT(FIN_TIMEOUT,     ofpact_fin_timeout, ofpact, "fin_timeout")  \
  |  |  ------------------
  |  |  |  | 9468|    655|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 655, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    655|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    655|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    655|            break;
  |  |  ------------------
  |  |  108|    655|                                                                        \
  |  |  109|    655|    /* Flow table interaction. */                                       \
  |  |  110|  2.62k|    OFPACT(RESUBMIT,        ofpact_resubmit,    ofpact, "resubmit")     \
  |  |  ------------------
  |  |  |  | 9468|  2.62k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.62k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.62k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.62k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.62k|            break;
  |  |  ------------------
  |  |  111|  14.8k|    OFPACT(LEARN,           ofpact_learn,       specs, "learn")         \
  |  |  ------------------
  |  |  |  | 9468|  14.8k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 14.8k, False: 142k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  14.8k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  14.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  14.8k|            break;
  |  |  ------------------
  |  |  112|  14.8k|    OFPACT(CONJUNCTION,     ofpact_conjunction, ofpact, "conjunction")  \
  |  |  ------------------
  |  |  |  | 9468|  1.49k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.49k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.49k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.49k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.49k|            break;
  |  |  ------------------
  |  |  113|  1.49k|                                                                        \
  |  |  114|  1.49k|    /* Arithmetic. */                                                   \
  |  |  115|  2.61k|    OFPACT(MULTIPATH,       ofpact_multipath,   ofpact, "multipath")    \
  |  |  ------------------
  |  |  |  | 9468|  2.61k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.61k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.61k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.61k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.61k|            break;
  |  |  ------------------
  |  |  116|  2.61k|                                                                        \
  |  |  117|  2.61k|    /* Other. */                                                        \
  |  |  118|  3.47k|    OFPACT(NOTE,            ofpact_note,        data, "note")           \
  |  |  ------------------
  |  |  |  | 9468|  3.47k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 3.47k, False: 153k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  3.47k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  3.47k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  3.47k|            break;
  |  |  ------------------
  |  |  119|  3.47k|    OFPACT(EXIT,            ofpact_null,        ofpact, "exit")         \
  |  |  ------------------
  |  |  |  | 9468|  2.68k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 2.68k, False: 154k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  2.68k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  2.68k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  2.68k|            break;
  |  |  ------------------
  |  |  120|  2.68k|    OFPACT(SAMPLE,          ofpact_sample,      ofpact, "sample")       \
  |  |  ------------------
  |  |  |  | 9468|  1.38k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.38k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.38k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.38k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.38k|            break;
  |  |  ------------------
  |  |  121|  4.58k|    OFPACT(UNROLL_XLATE,    ofpact_unroll_xlate, ofpact, "unroll_xlate") \
  |  |  ------------------
  |  |  |  | 9468|  4.58k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.58k, False: 152k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.58k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.58k|            break;
  |  |  ------------------
  |  |  122|  4.65k|    OFPACT(CT,              ofpact_conntrack,   ofpact, "ct")           \
  |  |  ------------------
  |  |  |  | 9468|  4.65k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 4.65k, False: 152k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  4.65k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  4.65k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  4.65k|            break;
  |  |  ------------------
  |  |  123|  4.65k|    OFPACT(CT_CLEAR,        ofpact_null,        ofpact, "ct_clear")     \
  |  |  ------------------
  |  |  |  | 9468|     44|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 44, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|     44|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|     44|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|     44|            break;
  |  |  ------------------
  |  |  124|     44|    OFPACT(NAT,             ofpact_nat,         ofpact, "nat")          \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      0|            break;
  |  |  ------------------
  |  |  125|  1.14k|    OFPACT(OUTPUT_TRUNC,    ofpact_output_trunc,ofpact, "output_trunc") \
  |  |  ------------------
  |  |  |  | 9468|  1.14k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.14k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.14k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.14k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.14k|            break;
  |  |  ------------------
  |  |  126|  1.29k|    OFPACT(CLONE,           ofpact_nest,        actions, "clone")       \
  |  |  ------------------
  |  |  |  | 9468|  1.29k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 1.29k, False: 155k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  1.29k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  1.29k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  1.29k|            break;
  |  |  ------------------
  |  |  127|  1.29k|    OFPACT(CHECK_PKT_LARGER, ofpact_check_pkt_larger, ofpact,           \
  |  |  ------------------
  |  |  |  | 9468|    595|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 595, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    595|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    595|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    595|            break;
  |  |  ------------------
  |  |  128|    595|           "check_pkt_larger")                                          \
  |  |  129|    595|                                                                        \
  |  |  130|    595|    /* Debugging actions.                                               \
  |  |  131|    595|     *                                                                  \
  |  |  132|    595|     * These are intentionally undocumented, subject to change, and     \
  |  |  133|    595|     * only accepted if ovs-vswitchd is started with --enable-dummy. */ \
  |  |  134|    595|    OFPACT(DEBUG_RECIRC, ofpact_null,           ofpact, "debug_recirc") \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      0|            break;
  |  |  ------------------
  |  |  135|      0|    OFPACT(DEBUG_SLOW,   ofpact_null,           ofpact, "debug_slow")   \
  |  |  ------------------
  |  |  |  | 9468|      0|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 0, False: 157k]
  |  |  |  |  ------------------
  |  |  |  | 9469|      0|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|      0|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|      0|            break;
  |  |  ------------------
  |  |  136|      0|                                                                        \
  |  |  137|      0|    /* Instructions ("meter" is an action in OF1.5+). */                \
  |  |  138|    205|    OFPACT(METER,           ofpact_meter,       ofpact, "meter")        \
  |  |  ------------------
  |  |  |  | 9468|    205|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 205, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    205|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    205|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    205|            break;
  |  |  ------------------
  |  |  139|    205|    OFPACT(CLEAR_ACTIONS,   ofpact_null,        ofpact, "clear_actions") \
  |  |  ------------------
  |  |  |  | 9468|    173|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 173, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    173|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    173|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    173|            break;
  |  |  ------------------
  |  |  140|  10.1k|    OFPACT(WRITE_ACTIONS,   ofpact_nest,        actions, "write_actions") \
  |  |  ------------------
  |  |  |  | 9468|  10.1k|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 10.1k, False: 146k]
  |  |  |  |  ------------------
  |  |  |  | 9469|  10.1k|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|  10.1k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|  10.1k|            break;
  |  |  ------------------
  |  |  141|  10.1k|    OFPACT(WRITE_METADATA,  ofpact_metadata,    ofpact, "write_metadata") \
  |  |  ------------------
  |  |  |  | 9468|    824|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 824, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    824|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    824|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    824|            break;
  |  |  ------------------
  |  |  142|    824|    OFPACT(GOTO_TABLE,      ofpact_goto_table,  ofpact, "goto_table")
  |  |  ------------------
  |  |  |  | 9468|    199|        case OFPACT_##ENUM:                                             \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (9468:9): [True: 199, False: 156k]
  |  |  |  |  ------------------
  |  |  |  | 9469|    199|            format_##ENUM(ALIGNED_CAST(const struct STRUCT *, a), fp);  \
  |  |  |  |  ------------------
  |  |  |  |  |  |  434|    199|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  |  |  ------------------
  |  |  |  | 9470|    199|            break;
  |  |  ------------------
  ------------------
 9472|      0|#undef OFPACT
 9473|      0|    default:
  ------------------
  |  Branch (9473:5): [True: 0, False: 157k]
  ------------------
 9474|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 9475|   157k|    }
 9476|   157k|}
ofp-actions.c:format_OUTPUT:
  704|  14.1k|{
  705|  14.1k|    if (ofp_to_u16(a->port) < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|  14.1k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  14.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (705:9): [True: 5.87k, False: 8.22k]
  ------------------
  706|  5.87k|        ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
  707|  5.87k|    }
  708|  14.1k|    ofputil_format_port(a->port, fp->port_map, fp->s);
  709|  14.1k|    if (a->port == OFPP_CONTROLLER) {
  ------------------
  |  |   45|  14.1k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  14.1k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (709:9): [True: 5.39k, False: 8.71k]
  ------------------
  710|       |        ds_put_format(fp->s, ":%"PRIu16, a->max_len);
  711|  5.39k|    }
  712|  14.1k|}
ofp-actions.c:format_GROUP:
  748|    437|{
  749|       |    ds_put_format(fp->s, "%sgroup:%s%"PRIu32,
  750|    437|                  colors.special, colors.end, a->group_id);
  751|    437|}
ofp-actions.c:format_CONTROLLER:
 1029|  3.78k|{
 1030|  3.78k|    if (a->reason == OFPR_ACTION && !a->controller_id && !a->userdata_len
  ------------------
  |  Branch (1030:9): [True: 1.03k, False: 2.75k]
  |  Branch (1030:37): [True: 913, False: 118]
  |  Branch (1030:58): [True: 864, False: 49]
  ------------------
 1031|    864|        && !a->pause && a->meter_id == NX_CTLR_NO_METER) {
  ------------------
  |  |  307|    392|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1031:12): [True: 392, False: 472]
  |  Branch (1031:25): [True: 286, False: 106]
  ------------------
 1032|    286|        ds_put_format(fp->s, "%sCONTROLLER:%s%"PRIu16,
 1033|    286|                      colors.special, colors.end, a->max_len);
 1034|  3.49k|    } else {
 1035|  3.49k|        enum ofp_packet_in_reason reason = a->reason;
 1036|       |
 1037|  3.49k|        ds_put_format(fp->s, "%scontroller(%s", colors.paren, colors.end);
 1038|  3.49k|        if (reason != OFPR_ACTION) {
  ------------------
  |  Branch (1038:13): [True: 2.75k, False: 745]
  ------------------
 1039|  2.75k|            char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
 1040|       |
 1041|  2.75k|            ds_put_format(fp->s, "%sreason=%s%s,", colors.param, colors.end,
 1042|  2.75k|                          ofputil_packet_in_reason_to_string(
 1043|  2.75k|                              reason, reasonbuf, sizeof reasonbuf));
 1044|  2.75k|        }
 1045|  3.49k|        if (a->max_len != UINT16_MAX) {
  ------------------
  |  Branch (1045:13): [True: 3.15k, False: 343]
  ------------------
 1046|  3.15k|            ds_put_format(fp->s, "%smax_len=%s%"PRIu16",",
 1047|  3.15k|                          colors.param, colors.end, a->max_len);
 1048|  3.15k|        }
 1049|  3.49k|        if (a->controller_id != 0) {
  ------------------
  |  Branch (1049:13): [True: 2.60k, False: 899]
  ------------------
 1050|  2.60k|            ds_put_format(fp->s, "%sid=%s%"PRIu16",",
 1051|  2.60k|                          colors.param, colors.end, a->controller_id);
 1052|  2.60k|        }
 1053|  3.49k|        if (a->userdata_len) {
  ------------------
  |  Branch (1053:13): [True: 49, False: 3.45k]
  ------------------
 1054|     49|            ds_put_format(fp->s, "%suserdata=%s", colors.param, colors.end);
 1055|     49|            ds_put_hex_with_delimiter(fp->s, a->userdata, a->userdata_len,
 1056|     49|                                      ".");
 1057|     49|            ds_put_char(fp->s, ',');
 1058|     49|        }
 1059|  3.49k|        if (a->pause) {
  ------------------
  |  Branch (1059:13): [True: 498, False: 3.00k]
  ------------------
 1060|    498|            ds_put_format(fp->s, "%spause%s,", colors.value, colors.end);
 1061|    498|        }
 1062|  3.49k|        if (a->meter_id != NX_CTLR_NO_METER) {
  ------------------
  |  |  307|  3.49k|#define NX_CTLR_NO_METER 0
  ------------------
  |  Branch (1062:13): [True: 106, False: 3.39k]
  ------------------
 1063|    106|            ds_put_format(fp->s, "%smeter_id=%s%"PRIu32",",
 1064|    106|                          colors.param, colors.end, a->meter_id);
 1065|    106|        }
 1066|  3.49k|        ds_chomp(fp->s, ',');
 1067|  3.49k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 1068|  3.49k|    }
 1069|  3.78k|}
ofp-actions.c:format_ENQUEUE:
 1152|    177|{
 1153|    177|    ds_put_format(fp->s, "%senqueue:%s", colors.param, colors.end);
 1154|    177|    ofputil_format_port(a->port, fp->port_map, fp->s);
 1155|       |    ds_put_format(fp->s, ":%"PRIu32, a->queue);
 1156|    177|}
ofp-actions.c:format_OUTPUT_REG:
 1318|    244|{
 1319|    244|    ds_put_format(fp->s, "%soutput:%s", colors.special, colors.end);
 1320|    244|    mf_format_subfield(&a->src, fp->s);
 1321|    244|}
ofp-actions.c:format_BUNDLE:
 1545|  1.06k|{
 1546|  1.06k|    bundle_format(a, fp->port_map, fp->s);
 1547|  1.06k|}
ofp-actions.c:format_SET_FIELD:
 3326|  6.58k|{
 3327|  6.58k|    if (a->ofpact.raw == NXAST_RAW_REG_LOAD) {
  ------------------
  |  Branch (3327:9): [True: 2.10k, False: 4.48k]
  ------------------
 3328|  2.10k|        struct mf_subfield dst;
 3329|  2.10k|        uint64_t value;
 3330|       |
 3331|  2.10k|        dst.ofs = dst.n_bits = 0;
 3332|  4.20k|        while (next_load_segment(a, &dst, &value)) {
  ------------------
  |  Branch (3332:16): [True: 2.10k, False: 2.10k]
  ------------------
 3333|  2.10k|            ds_put_format(fp->s, "%sload:%s%#"PRIx64"%s->%s",
 3334|  2.10k|                          colors.special, colors.end, value,
 3335|  2.10k|                          colors.special, colors.end);
 3336|  2.10k|            mf_format_subfield(&dst, fp->s);
 3337|  2.10k|            ds_put_char(fp->s, ',');
 3338|  2.10k|        }
 3339|  2.10k|        ds_chomp(fp->s, ',');
 3340|  4.48k|    } else {
 3341|  4.48k|        ds_put_format(fp->s, "%sset_field:%s", colors.special, colors.end);
 3342|  4.48k|        mf_format(a->field, a->value, ofpact_set_field_mask(a),
  ------------------
  |  |  563|  4.48k|    ALIGNED_CAST(union mf_value *,                                          \
  |  |  ------------------
  |  |  |  |  434|  4.48k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  |  |  ------------------
  |  |  564|  4.48k|                 (uint8_t *)(SF)->value +                                   \
  |  |  565|  4.48k|                            ROUND_UP((SF)->field->n_bytes, OFPACT_ALIGNTO))
  ------------------
 3343|  4.48k|                  fp->port_map, fp->s);
 3344|  4.48k|        ds_put_format(fp->s, "%s->%s%s",
 3345|  4.48k|                      colors.special, colors.end, a->field->name);
 3346|  4.48k|    }
 3347|  6.58k|}
ofp-actions.c:format_SET_VLAN_VID:
 1641|  5.41k|{
 1642|  5.41k|    ds_put_format(fp->s, "%s%s:%s%"PRIu16, colors.param,
 1643|  5.41k|                  a->push_vlan_if_needed ? "mod_vlan_vid" : "set_vlan_vid",
  ------------------
  |  Branch (1643:19): [True: 5.16k, False: 248]
  ------------------
 1644|  5.41k|                  colors.end, a->vlan_vid);
 1645|  5.41k|}
ofp-actions.c:format_SET_VLAN_PCP:
 1749|  3.07k|{
 1750|  3.07k|    ds_put_format(fp->s, "%s%s:%s%"PRIu8, colors.param,
 1751|  3.07k|                  a->push_vlan_if_needed ? "mod_vlan_pcp" : "set_vlan_pcp",
  ------------------
  |  Branch (1751:19): [True: 2.23k, False: 839]
  ------------------
 1752|  3.07k|                  colors.end, a->vlan_pcp);
 1753|  3.07k|}
ofp-actions.c:format_STRIP_VLAN:
 1816|  5.57k|{
 1817|  5.57k|    ds_put_format(fp->s, (a->ofpact.raw == OFPAT_RAW11_POP_VLAN
  ------------------
  |  Branch (1817:27): [True: 2.98k, False: 2.59k]
  ------------------
 1818|  5.57k|                    ? "%spop_vlan%s"
 1819|  5.57k|                    : "%sstrip_vlan%s"),
 1820|  5.57k|                  colors.value, colors.end);
 1821|  5.57k|}
ofp-actions.c:format_PUSH_VLAN:
 1886|    989|{
 1887|    989|    ds_put_format(fp->s, "%spush_vlan:%s%#"PRIx16,
 1888|       |                  colors.param, colors.end, ntohs(push_vlan->ethertype));
 1889|    989|}
ofp-actions.c:format_SET_ETH_SRC:
 1982|    224|{
 1983|    224|    ds_put_format(fp->s, "%smod_dl_src:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|    224|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1984|    224|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|    224|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|    224|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1985|    224|}
ofp-actions.c:format_SET_ETH_DST:
 1990|    168|{
 1991|    168|    ds_put_format(fp->s, "%smod_dl_dst:%s"ETH_ADDR_FMT,
  ------------------
  |  |  370|    168|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
 1992|    168|                  colors.param, colors.end, ETH_ADDR_ARGS(a->mac));
  ------------------
  |  |  371|    168|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|    168|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1993|    168|}
ofp-actions.c:format_SET_IPV4_SRC:
 2074|  2.35k|{
 2075|  2.35k|    ds_put_format(fp->s, "%smod_nw_src:%s"IP_FMT,
  ------------------
  |  |  628|  2.35k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2076|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  2.35k|    ntohl(ip) >> 24,                            \
  |  |  631|  2.35k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  2.35k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  2.35k|    ntohl(ip) & 0xff
  ------------------
 2077|  2.35k|}
ofp-actions.c:format_SET_IPV4_DST:
 2082|  4.39k|{
 2083|  4.39k|    ds_put_format(fp->s, "%smod_nw_dst:%s"IP_FMT,
  ------------------
  |  |  628|  4.39k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 2084|       |                  colors.param, colors.end, IP_ARGS(a->ipv4));
  ------------------
  |  |  630|  4.39k|    ntohl(ip) >> 24,                            \
  |  |  631|  4.39k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  4.39k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  4.39k|    ntohl(ip) & 0xff
  ------------------
 2085|  4.39k|}
ofp-actions.c:format_SET_IP_DSCP:
 2159|  6.15k|{
 2160|  6.15k|    ds_put_format(fp->s, "%smod_nw_tos:%s%d",
 2161|  6.15k|                  colors.param, colors.end, a->dscp);
 2162|  6.15k|}
ofp-actions.c:format_SET_IP_ECN:
 2232|  1.94k|{
 2233|  1.94k|    ds_put_format(fp->s, "%smod_nw_ecn:%s%d",
 2234|  1.94k|                  colors.param, colors.end, a->ecn);
 2235|  1.94k|}
ofp-actions.c:format_SET_IP_TTL:
 2287|  1.40k|{
 2288|  1.40k|    ds_put_format(fp->s, "%smod_nw_ttl:%s%d",
 2289|  1.40k|                  colors.param, colors.end, a->ttl);
 2290|  1.40k|}
ofp-actions.c:format_SET_L4_SRC_PORT:
 2377|  6.89k|{
 2378|  6.89k|    ds_put_format(fp->s, "%smod_tp_src:%s%d",
 2379|  6.89k|                  colors.param, colors.end, a->port);
 2380|  6.89k|}
ofp-actions.c:format_SET_L4_DST_PORT:
 2385|  7.30k|{
 2386|  7.30k|    ds_put_format(fp->s, "%smod_tp_dst:%s%d",
 2387|  7.30k|                  colors.param, colors.end, a->port);
 2388|  7.30k|}
ofp-actions.c:format_REG_MOVE:
 2715|    136|{
 2716|    136|    nxm_format_reg_move(a, fp->s);
 2717|    136|}
ofp-actions.c:format_STACK_PUSH:
 3558|    205|{
 3559|    205|    nxm_format_stack_push(a, fp->s);
 3560|    205|}
ofp-actions.c:format_STACK_POP:
 3565|    492|{
 3566|    492|    nxm_format_stack_pop(a, fp->s);
 3567|    492|}
ofp-actions.c:format_DEC_TTL:
 3736|  2.13k|{
 3737|  2.13k|    size_t i;
 3738|       |
 3739|  2.13k|    ds_put_format(fp->s, "%sdec_ttl%s", colors.paren, colors.end);
 3740|  2.13k|    if (a->ofpact.raw == NXAST_RAW_DEC_TTL_CNT_IDS) {
  ------------------
  |  Branch (3740:9): [True: 971, False: 1.16k]
  ------------------
 3741|    971|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 3742|  3.18k|        for (i = 0; i < a->n_controllers; i++) {
  ------------------
  |  Branch (3742:21): [True: 2.21k, False: 971]
  ------------------
 3743|  2.21k|            if (i) {
  ------------------
  |  Branch (3743:17): [True: 1.48k, False: 734]
  ------------------
 3744|  1.48k|                ds_put_cstr(fp->s, ",");
 3745|  1.48k|            }
 3746|       |            ds_put_format(fp->s, "%"PRIu16, a->cnt_ids[i]);
 3747|  2.21k|        }
 3748|    971|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 3749|    971|    }
 3750|  2.13k|}
ofp-actions.c:format_SET_MPLS_LABEL:
 3809|    343|{
 3810|    343|    ds_put_format(fp->s, "%sset_mpls_label(%s%"PRIu32"%s)%s",
 3811|       |                  colors.paren, colors.end, ntohl(a->label),
 3812|    343|                  colors.paren, colors.end);
 3813|    343|}
ofp-actions.c:format_SET_MPLS_TC:
 3880|    671|{
 3881|    671|    ds_put_format(fp->s, "%sset_mpls_tc(%s%"PRIu8"%s)%s",
 3882|    671|                  colors.paren, colors.end, a->tc,
 3883|    671|                  colors.paren, colors.end);
 3884|    671|}
ofp-actions.c:format_SET_MPLS_TTL:
 3938|  1.63k|{
 3939|  1.63k|    ds_put_format(fp->s, "%sset_mpls_ttl(%s%"PRIu8"%s)%s",
 3940|  1.63k|                  colors.paren, colors.end, a->ttl,
 3941|  1.63k|                  colors.paren, colors.end);
 3942|  1.63k|}
ofp-actions.c:format_DEC_MPLS_TTL:
 3977|  4.81k|{
 3978|  4.81k|    ds_put_format(fp->s, "%sdec_mpls_ttl%s", colors.value, colors.end);
 3979|  4.81k|}
ofp-actions.c:format_PUSH_MPLS:
 4029|  5.49k|{
 4030|  5.49k|    ds_put_format(fp->s, "%spush_mpls:%s0x%04"PRIx16,
 4031|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4032|  5.49k|}
ofp-actions.c:format_POP_MPLS:
 4087|  3.88k|{
 4088|  3.88k|    ds_put_format(fp->s, "%spop_mpls:%s0x%04"PRIx16,
 4089|       |                  colors.param, colors.end, ntohs(a->ethertype));
 4090|  3.88k|}
ofp-actions.c:format_DEC_NSH_TTL:
 4822|  1.46k|{
 4823|  1.46k|    ds_put_format(fp->s, "%sdec_nsh_ttl%s", colors.special, colors.end);
 4824|  1.46k|}
ofp-actions.c:format_DELETE_FIELD:
 4247|     34|{
 4248|     34|    ds_put_format(fp->s, "%sdelete_field:%s", colors.param,
 4249|     34|                  colors.end);
 4250|     34|    ds_put_format(fp->s, "%s", odf->field->name);
 4251|     34|}
ofp-actions.c:format_ENCAP:
 4651|  2.54k|{
 4652|  2.54k|    ds_put_format(fp->s, "%sencap(%s", colors.paren, colors.end);
 4653|  2.54k|    ds_put_format(fp->s, "%s", format_encap_pkt_type(a->new_pkt_type));
 4654|  2.54k|    if (a->n_props > 0) {
  ------------------
  |  Branch (4654:9): [True: 311, False: 2.22k]
  ------------------
 4655|    311|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 4656|    311|        format_ed_props(fp->s, a->n_props, a->props);
 4657|    311|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4658|    311|    }
 4659|  2.54k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4660|  2.54k|}
ofp-actions.c:format_encap_pkt_type:
 4612|  2.54k|{
 4613|  2.54k|    switch (ntohl(pkt_type)) {
 4614|    725|    case PT_ETH:
  ------------------
  |  Branch (4614:5): [True: 725, False: 1.81k]
  ------------------
 4615|    725|        return "ethernet";
 4616|    986|    case PT_NSH:
  ------------------
  |  Branch (4616:5): [True: 986, False: 1.55k]
  ------------------
 4617|    986|        return "nsh";
 4618|    527|    case PT_MPLS:
  ------------------
  |  Branch (4618:5): [True: 527, False: 2.01k]
  ------------------
 4619|    527|        return "mpls";
 4620|    302|    case PT_MPLS_MC:
  ------------------
  |  Branch (4620:5): [True: 302, False: 2.23k]
  ------------------
 4621|    302|        return "mpls_mc";
 4622|      0|    default:
  ------------------
  |  Branch (4622:5): [True: 0, False: 2.54k]
  ------------------
 4623|      0|        return "UNKNOWN";
 4624|  2.54k|    }
 4625|  2.54k|}
ofp-actions.c:format_ed_props:
 4630|    311|{
 4631|    311|    const uint8_t *p = (uint8_t *) prop;
 4632|    311|    int i;
 4633|       |
 4634|    311|    if (n_props == 0) {
  ------------------
  |  Branch (4634:9): [True: 0, False: 311]
  ------------------
 4635|      0|        return;
 4636|      0|    }
 4637|    734|    for (i = 0; i < n_props; i++) {
  ------------------
  |  Branch (4637:17): [True: 423, False: 311]
  ------------------
 4638|    423|        format_ed_prop(s, prop);
 4639|    423|        ds_put_char(s, ',');
 4640|    423|        p += ROUND_UP(prop->len, 8);
  ------------------
  |  |  303|    423|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    423|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 4641|    423|        prop = ALIGNED_CAST(const struct ofpact_ed_prop *, p);
  ------------------
  |  |  434|    423|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4642|    423|    }
 4643|    311|    if (n_props > 0) {
  ------------------
  |  Branch (4643:9): [True: 311, False: 0]
  ------------------
 4644|    311|        ds_chomp(s, ',');
 4645|    311|    }
 4646|    311|}
ofp-actions.c:format_DECAP:
 4768|  6.58k|{
 4769|  6.58k|    ds_put_format(fp->s, "%sdecap(%s", colors.paren, colors.end);
 4770|  6.58k|    if (a->new_pkt_type != htonl(PT_USE_NEXT_PROTO)) {
  ------------------
  |  Branch (4770:9): [True: 6.26k, False: 326]
  ------------------
 4771|  6.26k|        ds_put_format(fp->s, "packet_type(ns=%"PRIu16",type=%#"PRIx16")",
 4772|  6.26k|                      pt_ns(a->new_pkt_type),
 4773|  6.26k|                      pt_ns_type(a->new_pkt_type));
 4774|  6.26k|    }
 4775|  6.58k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4776|  6.58k|}
ofp-actions.c:format_SET_TUNNEL:
 4167|     86|{
 4168|     86|    ds_put_format(fp->s, "%sset_tunnel%s:%s%#"PRIx64, colors.param,
 4169|     86|                  (a->tun_id > UINT32_MAX
  ------------------
  |  Branch (4169:20): [True: 56, False: 30]
  ------------------
 4170|     58|                   || a->ofpact.raw == NXAST_RAW_SET_TUNNEL64 ? "64" : ""),
  ------------------
  |  Branch (4170:23): [True: 2, False: 28]
  ------------------
 4171|     86|                  colors.end, a->tun_id);
 4172|     86|}
ofp-actions.c:format_SET_QUEUE:
 4291|    244|{
 4292|       |    ds_put_format(fp->s, "%sset_queue:%s%"PRIu32,
 4293|    244|                  colors.param, colors.end, a->queue_id);
 4294|    244|}
ofp-actions.c:format_POP_QUEUE:
 4330|    422|{
 4331|    422|    ds_put_format(fp->s, "%spop_queue%s", colors.value, colors.end);
 4332|    422|}
ofp-actions.c:format_FIN_TIMEOUT:
 4426|    655|{
 4427|    655|    ds_put_format(fp->s, "%sfin_timeout(%s", colors.paren, colors.end);
 4428|    655|    if (a->fin_idle_timeout) {
  ------------------
  |  Branch (4428:9): [True: 498, False: 157]
  ------------------
 4429|    498|        ds_put_format(fp->s, "%sidle_timeout=%s%"PRIu16",",
 4430|    498|                      colors.param, colors.end, a->fin_idle_timeout);
 4431|    498|    }
 4432|    655|    if (a->fin_hard_timeout) {
  ------------------
  |  Branch (4432:9): [True: 585, False: 70]
  ------------------
 4433|    585|        ds_put_format(fp->s, "%shard_timeout=%s%"PRIu16",",
 4434|    585|                      colors.param, colors.end, a->fin_hard_timeout);
 4435|    585|    }
 4436|    655|    ds_chomp(fp->s, ',');
 4437|    655|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 4438|    655|}
ofp-actions.c:format_RESUBMIT:
 5028|  2.62k|{
 5029|  2.62k|    if (a->in_port != OFPP_IN_PORT && a->table_id == 255) {
  ------------------
  |  |   39|  2.62k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  5.25k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5029:9): [True: 2.58k, False: 39]
  |  Branch (5029:39): [True: 187, False: 2.40k]
  ------------------
 5030|    187|        ds_put_format(fp->s, "%sresubmit:%s", colors.special, colors.end);
 5031|    187|        ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5032|  2.43k|    } else {
 5033|  2.43k|        ds_put_format(fp->s, "%sresubmit(%s", colors.paren, colors.end);
 5034|  2.43k|        if (a->in_port != OFPP_IN_PORT) {
  ------------------
  |  |   39|  2.43k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  ------------------
  |  |  |  |  157|  2.43k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (5034:13): [True: 2.40k, False: 39]
  ------------------
 5035|  2.40k|            ofputil_format_port(a->in_port, fp->port_map, fp->s);
 5036|  2.40k|        }
 5037|  2.43k|        ds_put_char(fp->s, ',');
 5038|  2.43k|        if (a->table_id != 255) {
  ------------------
  |  Branch (5038:13): [True: 2.41k, False: 25]
  ------------------
 5039|  2.41k|            ofputil_format_table(a->table_id, fp->table_map, fp->s);
 5040|  2.41k|        }
 5041|  2.43k|        if (a->with_ct_orig) {
  ------------------
  |  Branch (5041:13): [True: 2.38k, False: 50]
  ------------------
 5042|  2.38k|            ds_put_cstr(fp->s, ",ct");
 5043|  2.38k|        }
 5044|  2.43k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 5045|  2.43k|    }
 5046|  2.62k|}
ofp-actions.c:format_LEARN:
 5639|  14.8k|{
 5640|  14.8k|    learn_format(a, fp->port_map, fp->table_map, fp->s);
 5641|  14.8k|}
ofp-actions.c:format_CONJUNCTION:
 5701|  1.49k|{
 5702|  1.49k|    ds_put_format(fp->s, "%sconjunction(%s%"PRIu32",%d/%"PRIu8"%s)%s",
 5703|  1.49k|                  colors.paren, colors.end,
 5704|  1.49k|                  oc->id, oc->clause + 1, oc->n_clauses,
 5705|  1.49k|                  colors.paren, colors.end);
 5706|  1.49k|}
ofp-actions.c:format_MULTIPATH:
 5866|  2.61k|{
 5867|  2.61k|    multipath_format(a, fp->s);
 5868|  2.61k|}
ofp-actions.c:format_NOTE:
 5951|  3.47k|{
 5952|  3.47k|    ds_put_format(fp->s, "%snote:%s", colors.param, colors.end);
 5953|  3.47k|    ds_put_hex_with_delimiter(fp->s, a->data, a->length, ".");
 5954|  3.47k|}
ofp-actions.c:format_EXIT:
 5989|  2.68k|{
 5990|  2.68k|    ds_put_format(fp->s, "%sexit%s", colors.special, colors.end);
 5991|  2.68k|}
ofp-actions.c:format_SAMPLE:
 6527|  1.38k|{
 6528|  1.38k|    ds_put_format(fp->s, "%ssample(%s%sprobability=%s%"PRIu16
 6529|  1.38k|                  ",%scollector_set_id=%s%"PRIu32,
 6530|  1.38k|                  colors.paren, colors.end,
 6531|  1.38k|                  colors.param, colors.end, a->probability,
 6532|  1.38k|                  colors.param, colors.end, a->collector_set_id);
 6533|       |
 6534|  1.38k|    ds_put_format(fp->s, ",%sobs_domain_id=%s", colors.param, colors.end);
 6535|  1.38k|    if (a->obs_domain_src.field) {
  ------------------
  |  Branch (6535:9): [True: 570, False: 816]
  ------------------
 6536|    570|        mf_format_subfield(&a->obs_domain_src, fp->s);
 6537|    816|    } else {
 6538|    816|        ds_put_format(fp->s, "%"PRIu32, a->obs_domain_imm);
 6539|    816|    }
 6540|  1.38k|    ds_put_format(fp->s, ",%sobs_point_id=%s", colors.param, colors.end);
 6541|  1.38k|    if (a->obs_point_src.field) {
  ------------------
  |  Branch (6541:9): [True: 655, False: 731]
  ------------------
 6542|    655|        mf_format_subfield(&a->obs_point_src, fp->s);
 6543|    731|    } else {
 6544|    731|        ds_put_format(fp->s, "%"PRIu32, a->obs_point_imm);
 6545|    731|    }
 6546|  1.38k|    if (a->sampling_port != OFPP_NONE) {
  ------------------
  |  |   47|  1.38k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  1.38k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (6546:9): [True: 1.28k, False: 101]
  ------------------
 6547|  1.28k|        ds_put_format(fp->s, ",%ssampling_port=%s", colors.param, colors.end);
 6548|  1.28k|        ofputil_format_port(a->sampling_port, fp->port_map, fp->s);
 6549|  1.28k|    }
 6550|  1.38k|    if (a->direction == NX_ACTION_SAMPLE_INGRESS) {
  ------------------
  |  Branch (6550:9): [True: 98, False: 1.28k]
  ------------------
 6551|     98|        ds_put_format(fp->s, ",%singress%s", colors.param, colors.end);
 6552|  1.28k|    } else if (a->direction == NX_ACTION_SAMPLE_EGRESS) {
  ------------------
  |  Branch (6552:16): [True: 183, False: 1.10k]
  ------------------
 6553|    183|        ds_put_format(fp->s, ",%segress%s", colors.param, colors.end);
 6554|    183|    }
 6555|  1.38k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6556|  1.38k|}
ofp-actions.c:format_UNROLL_XLATE:
 6021|  4.58k|{
 6022|  4.58k|    ds_put_format(fp->s, "%sunroll_xlate(%s%stable=%s",
 6023|  4.58k|                  colors.paren,   colors.end,
 6024|  4.58k|                  colors.special, colors.end);
 6025|  4.58k|    ofputil_format_table(a->rule_table_id, fp->table_map, fp->s);
 6026|  4.58k|    ds_put_format(fp->s, ", %scookie=%s%"PRIu64"%s)%s",
 6027|  4.58k|                  colors.param,   colors.end, ntohll(a->rule_cookie),
 6028|  4.58k|                  colors.paren,   colors.end);
 6029|  4.58k|}
ofp-actions.c:format_CT:
 7025|  4.65k|{
 7026|  4.65k|    ds_put_format(fp->s, "%sct(%s", colors.paren, colors.end);
 7027|  4.65k|    if (a->flags & NX_CT_F_COMMIT) {
  ------------------
  |  Branch (7027:9): [True: 3.37k, False: 1.28k]
  ------------------
 7028|  3.37k|        ds_put_format(fp->s, "%scommit%s,", colors.value, colors.end);
 7029|  3.37k|    }
 7030|  4.65k|    if (a->flags & NX_CT_F_FORCE) {
  ------------------
  |  Branch (7030:9): [True: 727, False: 3.93k]
  ------------------
 7031|    727|        ds_put_format(fp->s, "%sforce%s,", colors.value, colors.end);
 7032|    727|    }
 7033|  4.65k|    if (a->recirc_table != NX_CT_RECIRC_NONE) {
  ------------------
  |  |  692|  4.65k|#define NX_CT_RECIRC_NONE OFPTT_ALL
  ------------------
  |  Branch (7033:9): [True: 4.13k, False: 528]
  ------------------
 7034|  4.13k|        ds_put_format(fp->s, "%stable=%s", colors.special, colors.end);
 7035|  4.13k|        ofputil_format_table(a->recirc_table, fp->table_map, fp->s);
 7036|  4.13k|        ds_put_char(fp->s, ',');
 7037|  4.13k|    }
 7038|  4.65k|    if (a->zone_src.field) {
  ------------------
  |  Branch (7038:9): [True: 1.07k, False: 3.58k]
  ------------------
 7039|  1.07k|        ds_put_format(fp->s, "%szone=%s", colors.param, colors.end);
 7040|  1.07k|        mf_format_subfield(&a->zone_src, fp->s);
 7041|  1.07k|        ds_put_char(fp->s, ',');
 7042|  3.58k|    } else if (a->zone_imm) {
  ------------------
  |  Branch (7042:16): [True: 2.23k, False: 1.35k]
  ------------------
 7043|  2.23k|        ds_put_format(fp->s, "%szone=%s%"PRIu16",",
 7044|  2.23k|                      colors.param, colors.end, a->zone_imm);
 7045|  2.23k|    }
 7046|       |    /* If the first action is a NAT action, format it outside of the 'exec'
 7047|       |     * envelope. */
 7048|  4.65k|    const struct ofpact *action = a->actions;
 7049|  4.65k|    size_t actions_len = ofpact_ct_get_action_len(a);
 7050|  4.65k|    if (actions_len && action->type == OFPACT_NAT) {
  ------------------
  |  Branch (7050:9): [True: 3.17k, False: 1.48k]
  |  Branch (7050:24): [True: 2.50k, False: 668]
  ------------------
 7051|  2.50k|        format_NAT(ofpact_get_NAT(action), fp);
 7052|  2.50k|        ds_put_char(fp->s, ',');
 7053|  2.50k|        actions_len -= OFPACT_ALIGN(action->len);
  ------------------
  |  |  205|  2.50k|#define OFPACT_ALIGN(SIZE) ROUND_UP(SIZE, OFPACT_ALIGNTO)
  |  |  ------------------
  |  |  |  |  303|  2.50k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  |  300|  2.50k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 7054|  2.50k|        action = ofpact_next(action);
 7055|  2.50k|    }
 7056|  4.65k|    if (actions_len) {
  ------------------
  |  Branch (7056:9): [True: 668, False: 3.99k]
  ------------------
 7057|    668|        ds_put_format(fp->s, "%sexec(%s", colors.paren, colors.end);
 7058|    668|        ofpacts_format(action, actions_len, fp);
 7059|    668|        ds_put_format(fp->s, "%s),%s", colors.paren, colors.end);
 7060|    668|    }
 7061|  4.65k|    format_alg(a->alg, fp->s);
 7062|  4.65k|    ds_chomp(fp->s, ',');
 7063|  4.65k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7064|  4.65k|}
ofp-actions.c:format_alg:
 7002|  4.65k|{
 7003|  4.65k|    switch(port) {
 7004|  1.05k|    case IPPORT_FTP:
  ------------------
  |  |  695|  1.05k|#define IPPORT_FTP  21
  ------------------
  |  Branch (7004:5): [True: 1.05k, False: 3.60k]
  ------------------
 7005|  1.05k|        ds_put_format(s, "%salg=%sftp,", colors.param, colors.end);
 7006|  1.05k|        break;
 7007|    720|    case IPPORT_TFTP:
  ------------------
  |  |  699|    720|#define IPPORT_TFTP  69
  ------------------
  |  Branch (7007:5): [True: 720, False: 3.93k]
  ------------------
 7008|    720|        ds_put_format(s, "%salg=%stftp,", colors.param, colors.end);
 7009|    720|        break;
 7010|    434|    case 0:
  ------------------
  |  Branch (7010:5): [True: 434, False: 4.22k]
  ------------------
 7011|       |        /* Don't print. */
 7012|    434|        break;
 7013|  2.45k|    default:
  ------------------
  |  Branch (7013:5): [True: 2.45k, False: 2.20k]
  ------------------
 7014|  2.45k|        ds_put_format(s, "%salg=%s%d,", colors.param, colors.end, port);
 7015|  2.45k|        break;
 7016|  4.65k|    }
 7017|  4.65k|}
ofp-actions.c:format_CT_CLEAR:
 7115|     44|{
 7116|     44|    ds_put_format(fp->s, "%sct_clear%s", colors.value, colors.end);
 7117|     44|}
ofp-actions.c:format_NAT:
 7306|  2.50k|{
 7307|  2.50k|    ds_put_format(fp->s, "%snat%s", colors.paren, colors.end);
 7308|       |
 7309|  2.50k|    if (a->flags & (NX_NAT_F_SRC | NX_NAT_F_DST)) {
  ------------------
  |  Branch (7309:9): [True: 2.18k, False: 324]
  ------------------
 7310|  2.18k|        ds_put_format(fp->s, "%s(%s", colors.paren, colors.end);
 7311|  2.18k|        ds_put_format(fp->s, a->flags & NX_NAT_F_SRC ? "%ssrc%s" : "%sdst%s",
  ------------------
  |  Branch (7311:30): [True: 1.17k, False: 1.00k]
  ------------------
 7312|  2.18k|                      colors.param, colors.end);
 7313|       |
 7314|  2.18k|        if (a->range_af != AF_UNSPEC) {
  ------------------
  |  Branch (7314:13): [True: 1.84k, False: 340]
  ------------------
 7315|  1.84k|            ds_put_format(fp->s, "%s=%s", colors.param, colors.end);
 7316|       |
 7317|  1.84k|            if (a->range_af == AF_INET) {
  ------------------
  |  Branch (7317:17): [True: 1.84k, False: 0]
  ------------------
 7318|  1.84k|                ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  628|  1.84k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                              ds_put_format(fp->s, IP_FMT, IP_ARGS(a->range.addr.ipv4.min));
  ------------------
  |  |  630|  1.84k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.84k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.84k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.84k|    ntohl(ip) & 0xff
  ------------------
 7319|       |
 7320|  1.84k|                if (a->range.addr.ipv4.max
  ------------------
  |  Branch (7320:21): [True: 166, False: 1.67k]
  ------------------
 7321|    166|                    && a->range.addr.ipv4.max != a->range.addr.ipv4.min) {
  ------------------
  |  Branch (7321:24): [True: 71, False: 95]
  ------------------
 7322|     71|                    ds_put_format(fp->s, "-"IP_FMT,
  ------------------
  |  |  628|     71|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
 7323|     71|                                  IP_ARGS(a->range.addr.ipv4.max));
  ------------------
  |  |  630|     71|    ntohl(ip) >> 24,                            \
  |  |  631|     71|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|     71|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|     71|    ntohl(ip) & 0xff
  ------------------
 7324|     71|                }
 7325|  1.84k|            } else if (a->range_af == AF_INET6) {
  ------------------
  |  Branch (7325:24): [True: 0, False: 0]
  ------------------
 7326|      0|                ipv6_format_addr_bracket(&a->range.addr.ipv6.min, fp->s,
 7327|      0|                                        a->range.proto.min);
 7328|       |
 7329|      0|                if (!ipv6_mask_is_any(&a->range.addr.ipv6.max)
  ------------------
  |  Branch (7329:21): [True: 0, False: 0]
  ------------------
 7330|      0|                    && memcmp(&a->range.addr.ipv6.max, &a->range.addr.ipv6.min,
  ------------------
  |  Branch (7330:24): [True: 0, False: 0]
  ------------------
 7331|      0|                              sizeof(struct in6_addr)) != 0) {
 7332|      0|                    ds_put_char(fp->s, '-');
 7333|      0|                    ipv6_format_addr_bracket(&a->range.addr.ipv6.max, fp->s,
 7334|      0|                                            a->range.proto.min);
 7335|      0|                }
 7336|      0|            }
 7337|  1.84k|            if (a->range.proto.min) {
  ------------------
  |  Branch (7337:17): [True: 1.35k, False: 488]
  ------------------
 7338|  1.35k|                ds_put_char(fp->s, ':');
 7339|  1.35k|                ds_put_format(fp->s, "%"PRIu16, a->range.proto.min);
 7340|       |
 7341|  1.35k|                if (a->range.proto.max
  ------------------
  |  Branch (7341:21): [True: 543, False: 814]
  ------------------
 7342|    543|                    && a->range.proto.max != a->range.proto.min) {
  ------------------
  |  Branch (7342:24): [True: 436, False: 107]
  ------------------
 7343|    436|                    ds_put_format(fp->s, "-%"PRIu16, a->range.proto.max);
 7344|    436|                }
 7345|  1.35k|            }
 7346|  1.84k|            ds_put_char(fp->s, ',');
 7347|       |
 7348|  1.84k|            if (a->flags & NX_NAT_F_PERSISTENT) {
  ------------------
  |  Branch (7348:17): [True: 1.15k, False: 688]
  ------------------
 7349|  1.15k|                ds_put_format(fp->s, "%spersistent%s,",
 7350|  1.15k|                              colors.value, colors.end);
 7351|  1.15k|            }
 7352|  1.84k|            if (a->flags & NX_NAT_F_PROTO_HASH) {
  ------------------
  |  Branch (7352:17): [True: 403, False: 1.44k]
  ------------------
 7353|    403|                ds_put_format(fp->s, "%shash%s,", colors.value, colors.end);
 7354|    403|            }
 7355|  1.84k|            if (a->flags & NX_NAT_F_PROTO_RANDOM) {
  ------------------
  |  Branch (7355:17): [True: 812, False: 1.03k]
  ------------------
 7356|    812|                ds_put_format(fp->s, "%srandom%s,", colors.value, colors.end);
 7357|    812|            }
 7358|  1.84k|        }
 7359|  2.18k|        ds_chomp(fp->s, ',');
 7360|  2.18k|        ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7361|  2.18k|    }
 7362|  2.50k|}
ofp-actions.c:format_OUTPUT_TRUNC:
 7541|  1.14k|{
 7542|  1.14k|    ds_put_format(fp->s, "%soutput%s(port=", colors.special, colors.end);
 7543|  1.14k|    ofputil_format_port(a->port, fp->port_map, fp->s);
 7544|  1.14k|    ds_put_format(fp->s, ",max_len=%"PRIu32")", a->max_len);
 7545|  1.14k|}
ofp-actions.c:format_CLONE:
 6114|  1.29k|{
 6115|  1.29k|    ds_put_format(fp->s, "%sclone(%s", colors.paren, colors.end);
 6116|  1.29k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 6117|  1.29k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 6118|  1.29k|}
ofp-actions.c:format_CHECK_PKT_LARGER:
 7902|    595|{
 7903|    595|    ds_put_format(fp->s, "%scheck_pkt_larger(%s%"PRIu32")->",
 7904|    595|                  colors.param, colors.end, a->pkt_len);
 7905|    595|    mf_format_subfield(&a->dst, fp->s);
 7906|    595|}
ofp-actions.c:format_METER:
 7593|    205|{
 7594|       |    ds_put_format(fp->s, "%smeter:%s%"PRIu32,
 7595|    205|                  colors.param, colors.end, a->meter_id);
 7596|    205|}
ofp-actions.c:format_CLEAR_ACTIONS:
 7628|    173|{
 7629|    173|    ds_put_format(fp->s, "%sclear_actions%s", colors.value, colors.end);
 7630|    173|}
ofp-actions.c:format_WRITE_ACTIONS:
 7689|  10.1k|{
 7690|  10.1k|    ds_put_format(fp->s, "%swrite_actions(%s", colors.paren, colors.end);
 7691|  10.1k|    ofpacts_format(a->actions, ofpact_nest_get_action_len(a), fp);
 7692|  10.1k|    ds_put_format(fp->s, "%s)%s", colors.paren, colors.end);
 7693|  10.1k|}
ofp-actions.c:format_WRITE_METADATA:
 7783|    824|{
 7784|    824|    ds_put_format(fp->s, "%swrite_metadata:%s%#"PRIx64,
 7785|    824|                  colors.param, colors.end, ntohll(a->metadata));
 7786|    824|    if (a->mask != OVS_BE64_MAX) {
  ------------------
  |  |   44|    824|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (7786:9): [True: 797, False: 27]
  ------------------
 7787|       |        ds_put_format(fp->s, "/%#"PRIx64, ntohll(a->mask));
 7788|    797|    }
 7789|    824|}
ofp-actions.c:format_GOTO_TABLE:
 7950|    199|{
 7951|    199|    ds_put_format(fp->s, "%sgoto_table:%s", colors.param, colors.end);
 7952|    199|    ofputil_format_table(a->table_id, fp->table_map, fp->s);
 7953|    199|}

ofp-actions.c:ofpact_decode:
 4645|   281k|{
 4646|   281k|    switch (raw) {
 4647|  18.2k|    case OFPAT_RAW10_OUTPUT:
  ------------------
  |  Branch (4647:5): [True: 18.2k, False: 263k]
  ------------------
 4648|  18.2k|        return decode_OFPAT_RAW10_OUTPUT(ALIGNED_CAST(const struct ofp10_action_output *, a), version, out);
  ------------------
  |  |  434|  18.2k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4649|       |
 4650|  2.06k|    case OFPAT_RAW11_OUTPUT:
  ------------------
  |  Branch (4650:5): [True: 2.06k, False: 279k]
  ------------------
 4651|  2.06k|        return decode_OFPAT_RAW11_OUTPUT(ALIGNED_CAST(const struct ofp11_action_output *, a), version, out);
  ------------------
  |  |  434|  2.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4652|       |
 4653|  9.79k|    case OFPAT_RAW10_SET_VLAN_VID:
  ------------------
  |  Branch (4653:5): [True: 9.79k, False: 271k]
  ------------------
 4654|  9.79k|        return decode_OFPAT_RAW10_SET_VLAN_VID(arg, version, out);
 4655|       |
 4656|  3.30k|    case OFPAT_RAW10_SET_VLAN_PCP:
  ------------------
  |  Branch (4656:5): [True: 3.30k, False: 278k]
  ------------------
 4657|  3.30k|        return decode_OFPAT_RAW10_SET_VLAN_PCP(arg, version, out);
 4658|       |
 4659|  1.19k|    case OFPAT_RAW11_SET_VLAN_VID:
  ------------------
  |  Branch (4659:5): [True: 1.19k, False: 280k]
  ------------------
 4660|  1.19k|        return decode_OFPAT_RAW11_SET_VLAN_VID(arg, version, out);
 4661|       |
 4662|  1.69k|    case OFPAT_RAW11_SET_VLAN_PCP:
  ------------------
  |  Branch (4662:5): [True: 1.69k, False: 279k]
  ------------------
 4663|  1.69k|        return decode_OFPAT_RAW11_SET_VLAN_PCP(arg, version, out);
 4664|       |
 4665|  3.36k|    case OFPAT_RAW11_PUSH_VLAN:
  ------------------
  |  Branch (4665:5): [True: 3.36k, False: 278k]
  ------------------
 4666|  3.36k|        return decode_OFPAT_RAW11_PUSH_VLAN(htons(arg), version, out);
 4667|       |
 4668|  4.54k|    case OFPAT_RAW10_STRIP_VLAN:
  ------------------
  |  Branch (4668:5): [True: 4.54k, False: 277k]
  ------------------
 4669|  4.54k|        return decode_OFPAT_RAW10_STRIP_VLAN(out);
 4670|       |
 4671|  3.96k|    case OFPAT_RAW11_POP_VLAN:
  ------------------
  |  Branch (4671:5): [True: 3.96k, False: 277k]
  ------------------
 4672|  3.96k|        return decode_OFPAT_RAW11_POP_VLAN(out);
 4673|       |
 4674|    241|    case OFPAT_RAW_SET_DL_SRC:
  ------------------
  |  Branch (4674:5): [True: 241, False: 281k]
  ------------------
 4675|    241|        return decode_OFPAT_RAW_SET_DL_SRC(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    241|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4676|       |
 4677|    181|    case OFPAT_RAW_SET_DL_DST:
  ------------------
  |  Branch (4677:5): [True: 181, False: 281k]
  ------------------
 4678|    181|        return decode_OFPAT_RAW_SET_DL_DST(ALIGNED_CAST(const struct ofp_action_dl_addr *, a), version, out);
  ------------------
  |  |  434|    181|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4679|       |
 4680|  4.28k|    case OFPAT_RAW_SET_NW_SRC:
  ------------------
  |  Branch (4680:5): [True: 4.28k, False: 277k]
  ------------------
 4681|  4.28k|        return decode_OFPAT_RAW_SET_NW_SRC(htonl(arg), version, out);
 4682|       |
 4683|  6.46k|    case OFPAT_RAW_SET_NW_DST:
  ------------------
  |  Branch (4683:5): [True: 6.46k, False: 275k]
  ------------------
 4684|  6.46k|        return decode_OFPAT_RAW_SET_NW_DST(htonl(arg), version, out);
 4685|       |
 4686|  9.28k|    case OFPAT_RAW_SET_NW_TOS:
  ------------------
  |  Branch (4686:5): [True: 9.28k, False: 272k]
  ------------------
 4687|  9.28k|        return decode_OFPAT_RAW_SET_NW_TOS(arg, version, out);
 4688|       |
 4689|  3.46k|    case OFPAT_RAW11_SET_NW_ECN:
  ------------------
  |  Branch (4689:5): [True: 3.46k, False: 278k]
  ------------------
 4690|  3.46k|        return decode_OFPAT_RAW11_SET_NW_ECN(arg, version, out);
 4691|       |
 4692|  9.30k|    case OFPAT_RAW_SET_TP_SRC:
  ------------------
  |  Branch (4692:5): [True: 9.30k, False: 272k]
  ------------------
 4693|  9.30k|        return decode_OFPAT_RAW_SET_TP_SRC(htons(arg), version, out);
 4694|       |
 4695|  10.2k|    case OFPAT_RAW_SET_TP_DST:
  ------------------
  |  Branch (4695:5): [True: 10.2k, False: 271k]
  ------------------
 4696|  10.2k|        return decode_OFPAT_RAW_SET_TP_DST(htons(arg), version, out);
 4697|       |
 4698|    187|    case OFPAT_RAW10_ENQUEUE:
  ------------------
  |  Branch (4698:5): [True: 187, False: 281k]
  ------------------
 4699|    187|        return decode_OFPAT_RAW10_ENQUEUE(ALIGNED_CAST(const struct ofp10_action_enqueue *, a), version, out);
  ------------------
  |  |  434|    187|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4700|       |
 4701|  1.44k|    case OFPAT_RAW_SET_MPLS_LABEL:
  ------------------
  |  Branch (4701:5): [True: 1.44k, False: 280k]
  ------------------
 4702|  1.44k|        return decode_OFPAT_RAW_SET_MPLS_LABEL(htonl(arg), version, out);
 4703|       |
 4704|    693|    case OFPAT_RAW_SET_MPLS_TC:
  ------------------
  |  Branch (4704:5): [True: 693, False: 280k]
  ------------------
 4705|    693|        return decode_OFPAT_RAW_SET_MPLS_TC(arg, version, out);
 4706|       |
 4707|  2.00k|    case OFPAT_RAW_SET_MPLS_TTL:
  ------------------
  |  Branch (4707:5): [True: 2.00k, False: 279k]
  ------------------
 4708|  2.00k|        return decode_OFPAT_RAW_SET_MPLS_TTL(arg, version, out);
 4709|       |
 4710|  5.23k|    case OFPAT_RAW_DEC_MPLS_TTL:
  ------------------
  |  Branch (4710:5): [True: 5.23k, False: 276k]
  ------------------
 4711|  5.23k|        return decode_OFPAT_RAW_DEC_MPLS_TTL(out);
 4712|       |
 4713|  5.78k|    case OFPAT_RAW_PUSH_MPLS:
  ------------------
  |  Branch (4713:5): [True: 5.78k, False: 275k]
  ------------------
 4714|  5.78k|        return decode_OFPAT_RAW_PUSH_MPLS(htons(arg), version, out);
 4715|       |
 4716|  4.79k|    case OFPAT_RAW_POP_MPLS:
  ------------------
  |  Branch (4716:5): [True: 4.79k, False: 276k]
  ------------------
 4717|  4.79k|        return decode_OFPAT_RAW_POP_MPLS(htons(arg), version, out);
 4718|       |
 4719|    256|    case OFPAT_RAW_SET_QUEUE:
  ------------------
  |  Branch (4719:5): [True: 256, False: 281k]
  ------------------
 4720|    256|        return decode_OFPAT_RAW_SET_QUEUE(arg, version, out);
 4721|       |
 4722|  1.06k|    case OFPAT_RAW_GROUP:
  ------------------
  |  Branch (4722:5): [True: 1.06k, False: 280k]
  ------------------
 4723|  1.06k|        return decode_OFPAT_RAW_GROUP(arg, version, out);
 4724|       |
 4725|  1.43k|    case OFPAT_RAW11_SET_NW_TTL:
  ------------------
  |  Branch (4725:5): [True: 1.43k, False: 280k]
  ------------------
 4726|  1.43k|        return decode_OFPAT_RAW11_SET_NW_TTL(arg, version, out);
 4727|       |
 4728|  1.29k|    case OFPAT_RAW_DEC_NW_TTL:
  ------------------
  |  Branch (4728:5): [True: 1.29k, False: 280k]
  ------------------
 4729|  1.29k|        return decode_OFPAT_RAW_DEC_NW_TTL(out);
 4730|       |
 4731|  2.50k|    case NXAST_RAW_DEC_TTL_CNT_IDS:
  ------------------
  |  Branch (4731:5): [True: 2.50k, False: 279k]
  ------------------
 4732|  2.50k|        return decode_NXAST_RAW_DEC_TTL_CNT_IDS(ALIGNED_CAST(const struct nx_action_cnt_ids *, a), version, out);
  ------------------
  |  |  434|  2.50k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4733|       |
 4734|  6.96k|    case OFPAT_RAW12_SET_FIELD:
  ------------------
  |  Branch (4734:5): [True: 6.96k, False: 274k]
  ------------------
 4735|  6.96k|        return decode_OFPAT_RAW12_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  6.96k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4736|       |
 4737|  4.39k|    case OFPAT_RAW15_SET_FIELD:
  ------------------
  |  Branch (4737:5): [True: 4.39k, False: 277k]
  ------------------
 4738|  4.39k|        return decode_OFPAT_RAW15_SET_FIELD(ALIGNED_CAST(const struct ofp12_action_set_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  4.39k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4739|       |
 4740|  3.43k|    case NXAST_RAW_REG_LOAD:
  ------------------
  |  Branch (4740:5): [True: 3.43k, False: 278k]
  ------------------
 4741|  3.43k|        return decode_NXAST_RAW_REG_LOAD(ALIGNED_CAST(const struct nx_action_reg_load *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.43k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4742|       |
 4743|  4.79k|    case NXAST_RAW_REG_LOAD2:
  ------------------
  |  Branch (4743:5): [True: 4.79k, False: 276k]
  ------------------
 4744|  4.79k|        return decode_NXAST_RAW_REG_LOAD2(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  4.79k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4745|       |
 4746|  3.06k|    case OFPAT_RAW15_COPY_FIELD:
  ------------------
  |  Branch (4746:5): [True: 3.06k, False: 278k]
  ------------------
 4747|  3.06k|        return decode_OFPAT_RAW15_COPY_FIELD(ALIGNED_CAST(const struct ofp15_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  3.06k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4748|       |
 4749|     34|    case ONFACT_RAW13_COPY_FIELD:
  ------------------
  |  Branch (4749:5): [True: 34, False: 281k]
  ------------------
 4750|     34|        return decode_ONFACT_RAW13_COPY_FIELD(ALIGNED_CAST(const struct onf_action_copy_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|     34|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4751|       |
 4752|  6.62k|    case NXAST_RAW_REG_MOVE:
  ------------------
  |  Branch (4752:5): [True: 6.62k, False: 275k]
  ------------------
 4753|  6.62k|        return decode_NXAST_RAW_REG_MOVE(ALIGNED_CAST(const struct nx_action_reg_move *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  6.62k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4754|       |
 4755|  1.42k|    case OFPAT_RAW15_METER:
  ------------------
  |  Branch (4755:5): [True: 1.42k, False: 280k]
  ------------------
 4756|  1.42k|        return decode_OFPAT_RAW15_METER(arg, version, out);
 4757|       |
 4758|    579|    case NXAST_RAW_RESUBMIT:
  ------------------
  |  Branch (4758:5): [True: 579, False: 281k]
  ------------------
 4759|    579|        return decode_NXAST_RAW_RESUBMIT(arg, version, out);
 4760|       |
 4761|    307|    case NXAST_RAW_RESUBMIT_TABLE:
  ------------------
  |  Branch (4761:5): [True: 307, False: 281k]
  ------------------
 4762|    307|        return decode_NXAST_RAW_RESUBMIT_TABLE(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|    307|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4763|       |
 4764|  3.70k|    case NXAST_RAW_RESUBMIT_TABLE_CT:
  ------------------
  |  Branch (4764:5): [True: 3.70k, False: 277k]
  ------------------
 4765|  3.70k|        return decode_NXAST_RAW_RESUBMIT_TABLE_CT(ALIGNED_CAST(const struct nx_action_resubmit *, a), version, out);
  ------------------
  |  |  434|  3.70k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4766|       |
 4767|  1.09k|    case NXAST_RAW_SET_TUNNEL:
  ------------------
  |  Branch (4767:5): [True: 1.09k, False: 280k]
  ------------------
 4768|  1.09k|        return decode_NXAST_RAW_SET_TUNNEL(arg, version, out);
 4769|       |
 4770|    113|    case NXAST_RAW_SET_TUNNEL64:
  ------------------
  |  Branch (4770:5): [True: 113, False: 281k]
  ------------------
 4771|    113|        return decode_NXAST_RAW_SET_TUNNEL64(arg, version, out);
 4772|       |
 4773|  1.68k|    case NXAST_RAW_POP_QUEUE:
  ------------------
  |  Branch (4773:5): [True: 1.68k, False: 279k]
  ------------------
 4774|  1.68k|        return decode_NXAST_RAW_POP_QUEUE(out);
 4775|       |
 4776|  11.0k|    case NXAST_RAW_NOTE:
  ------------------
  |  Branch (4776:5): [True: 11.0k, False: 270k]
  ------------------
 4777|  11.0k|        return decode_NXAST_RAW_NOTE(ALIGNED_CAST(const struct nx_action_note *, a), version, out);
  ------------------
  |  |  434|  11.0k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4778|       |
 4779|  5.37k|    case NXAST_RAW_MULTIPATH:
  ------------------
  |  Branch (4779:5): [True: 5.37k, False: 276k]
  ------------------
 4780|  5.37k|        return decode_NXAST_RAW_MULTIPATH(ALIGNED_CAST(const struct nx_action_multipath *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  5.37k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4781|       |
 4782|  1.51k|    case NXAST_RAW_BUNDLE:
  ------------------
  |  Branch (4782:5): [True: 1.51k, False: 280k]
  ------------------
 4783|  1.51k|        return decode_NXAST_RAW_BUNDLE(ALIGNED_CAST(const struct nx_action_bundle *, a), version, out);
  ------------------
  |  |  434|  1.51k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4784|       |
 4785|  1.94k|    case NXAST_RAW_BUNDLE_LOAD:
  ------------------
  |  Branch (4785:5): [True: 1.94k, False: 279k]
  ------------------
 4786|  1.94k|        return decode_NXAST_RAW_BUNDLE_LOAD(ALIGNED_CAST(const struct nx_action_bundle *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.94k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4787|       |
 4788|    734|    case NXAST_RAW_OUTPUT_REG:
  ------------------
  |  Branch (4788:5): [True: 734, False: 280k]
  ------------------
 4789|    734|        return decode_NXAST_RAW_OUTPUT_REG(ALIGNED_CAST(const struct nx_action_output_reg *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    734|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4790|       |
 4791|    106|    case NXAST_RAW_OUTPUT_REG2:
  ------------------
  |  Branch (4791:5): [True: 106, False: 281k]
  ------------------
 4792|    106|        return decode_NXAST_RAW_OUTPUT_REG2(ALIGNED_CAST(const struct nx_action_output_reg2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    106|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4793|       |
 4794|  19.5k|    case NXAST_RAW_LEARN:
  ------------------
  |  Branch (4794:5): [True: 19.5k, False: 262k]
  ------------------
 4795|  19.5k|        return decode_NXAST_RAW_LEARN(ALIGNED_CAST(const struct nx_action_learn *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  19.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4796|       |
 4797|  2.98k|    case NXAST_RAW_LEARN2:
  ------------------
  |  Branch (4797:5): [True: 2.98k, False: 278k]
  ------------------
 4798|  2.98k|        return decode_NXAST_RAW_LEARN2(ALIGNED_CAST(const struct nx_action_learn2 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.98k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4799|       |
 4800|  2.72k|    case NXAST_RAW_EXIT:
  ------------------
  |  Branch (4800:5): [True: 2.72k, False: 278k]
  ------------------
 4801|  2.72k|        return decode_NXAST_RAW_EXIT(out);
 4802|       |
 4803|    679|    case NXAST_RAW_FIN_TIMEOUT:
  ------------------
  |  Branch (4803:5): [True: 679, False: 280k]
  ------------------
 4804|    679|        return decode_NXAST_RAW_FIN_TIMEOUT(ALIGNED_CAST(const struct nx_action_fin_timeout *, a), version, out);
  ------------------
  |  |  434|    679|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4805|       |
 4806|  3.18k|    case NXAST_RAW_CONTROLLER:
  ------------------
  |  Branch (4806:5): [True: 3.18k, False: 278k]
  ------------------
 4807|  3.18k|        return decode_NXAST_RAW_CONTROLLER(ALIGNED_CAST(const struct nx_action_controller *, a), version, out);
  ------------------
  |  |  434|  3.18k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4808|       |
 4809|  1.58k|    case NXAST_RAW_CONTROLLER2:
  ------------------
  |  Branch (4809:5): [True: 1.58k, False: 280k]
  ------------------
 4810|  1.58k|        return decode_NXAST_RAW_CONTROLLER2(ALIGNED_CAST(const struct ext_action_header *, a), version, out);
  ------------------
  |  |  434|  1.58k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4811|       |
 4812|    785|    case NXAST_RAW_WRITE_METADATA:
  ------------------
  |  Branch (4812:5): [True: 785, False: 280k]
  ------------------
 4813|    785|        return decode_NXAST_RAW_WRITE_METADATA(ALIGNED_CAST(const struct nx_action_write_metadata *, a), version, out);
  ------------------
  |  |  434|    785|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4814|       |
 4815|    873|    case NXAST_RAW_STACK_PUSH:
  ------------------
  |  Branch (4815:5): [True: 873, False: 280k]
  ------------------
 4816|    873|        return decode_NXAST_RAW_STACK_PUSH(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    873|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4817|       |
 4818|  1.38k|    case NXAST_RAW_STACK_POP:
  ------------------
  |  Branch (4818:5): [True: 1.38k, False: 280k]
  ------------------
 4819|  1.38k|        return decode_NXAST_RAW_STACK_POP(ALIGNED_CAST(const struct nx_action_stack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.38k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4820|       |
 4821|    123|    case NXAST_RAW_SAMPLE:
  ------------------
  |  Branch (4821:5): [True: 123, False: 281k]
  ------------------
 4822|    123|        return decode_NXAST_RAW_SAMPLE(ALIGNED_CAST(const struct nx_action_sample *, a), version, out);
  ------------------
  |  |  434|    123|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4823|       |
 4824|    228|    case NXAST_RAW_SAMPLE2:
  ------------------
  |  Branch (4824:5): [True: 228, False: 281k]
  ------------------
 4825|    228|        return decode_NXAST_RAW_SAMPLE2(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|    228|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4826|       |
 4827|    774|    case NXAST_RAW_SAMPLE3:
  ------------------
  |  Branch (4827:5): [True: 774, False: 280k]
  ------------------
 4828|    774|        return decode_NXAST_RAW_SAMPLE3(ALIGNED_CAST(const struct nx_action_sample2 *, a), version, out);
  ------------------
  |  |  434|    774|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4829|       |
 4830|  2.04k|    case NXAST_RAW_SAMPLE4:
  ------------------
  |  Branch (4830:5): [True: 2.04k, False: 279k]
  ------------------
 4831|  2.04k|        return decode_NXAST_RAW_SAMPLE4(ALIGNED_CAST(const struct nx_action_sample4 *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.04k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4832|       |
 4833|  4.98k|    case NXAST_RAW_CONJUNCTION:
  ------------------
  |  Branch (4833:5): [True: 4.98k, False: 276k]
  ------------------
 4834|  4.98k|        return decode_NXAST_RAW_CONJUNCTION(ALIGNED_CAST(const struct nx_action_conjunction *, a), version, out);
  ------------------
  |  |  434|  4.98k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4835|       |
 4836|  8.34k|    case NXAST_RAW_CT:
  ------------------
  |  Branch (4836:5): [True: 8.34k, False: 273k]
  ------------------
 4837|  8.34k|        return decode_NXAST_RAW_CT(ALIGNED_CAST(const struct nx_action_conntrack *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  8.34k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4838|       |
 4839|  29.5k|    case NXAST_RAW_NAT:
  ------------------
  |  Branch (4839:5): [True: 29.5k, False: 252k]
  ------------------
 4840|  29.5k|        return decode_NXAST_RAW_NAT(ALIGNED_CAST(const struct nx_action_nat *, a), version, out);
  ------------------
  |  |  434|  29.5k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4841|       |
 4842|  1.25k|    case NXAST_RAW_OUTPUT_TRUNC:
  ------------------
  |  Branch (4842:5): [True: 1.25k, False: 280k]
  ------------------
 4843|  1.25k|        return decode_NXAST_RAW_OUTPUT_TRUNC(ALIGNED_CAST(const struct nx_action_output_trunc *, a), version, out);
  ------------------
  |  |  434|  1.25k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4844|       |
 4845|  1.82k|    case NXAST_RAW_CLONE:
  ------------------
  |  Branch (4845:5): [True: 1.82k, False: 279k]
  ------------------
 4846|  1.82k|        return decode_NXAST_RAW_CLONE(ALIGNED_CAST(const struct ext_action_header *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  1.82k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4847|       |
 4848|    254|    case NXAST_RAW_CT_CLEAR:
  ------------------
  |  Branch (4848:5): [True: 254, False: 281k]
  ------------------
 4849|    254|        return decode_NXAST_RAW_CT_CLEAR(out);
 4850|       |
 4851|  5.30k|    case NXAST_RAW_ENCAP:
  ------------------
  |  Branch (4851:5): [True: 5.30k, False: 276k]
  ------------------
 4852|  5.30k|        return decode_NXAST_RAW_ENCAP(ALIGNED_CAST(const struct nx_action_encap *, a), version, out);
  ------------------
  |  |  434|  5.30k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4853|       |
 4854|  10.8k|    case NXAST_RAW_DECAP:
  ------------------
  |  Branch (4854:5): [True: 10.8k, False: 270k]
  ------------------
 4855|  10.8k|        return decode_NXAST_RAW_DECAP(ALIGNED_CAST(const struct nx_action_decap *, a), version, out);
  ------------------
  |  |  434|  10.8k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4856|       |
 4857|  1.47k|    case NXAST_RAW_DEC_NSH_TTL:
  ------------------
  |  Branch (4857:5): [True: 1.47k, False: 280k]
  ------------------
 4858|  1.47k|        return decode_NXAST_RAW_DEC_NSH_TTL(out);
 4859|       |
 4860|  2.37k|    case NXAST_RAW_CHECK_PKT_LARGER:
  ------------------
  |  Branch (4860:5): [True: 2.37k, False: 279k]
  ------------------
 4861|  2.37k|        return decode_NXAST_RAW_CHECK_PKT_LARGER(ALIGNED_CAST(const struct nx_action_check_pkt_larger *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|  2.37k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4862|       |
 4863|    661|    case NXAST_RAW_DELETE_FIELD:
  ------------------
  |  Branch (4863:5): [True: 661, False: 280k]
  ------------------
 4864|    661|        return decode_NXAST_RAW_DELETE_FIELD(ALIGNED_CAST(const struct nx_action_delete_field *, a), version, vl_mff_map, tlv_bitmap, out);
  ------------------
  |  |  434|    661|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
 4865|       |
 4866|    345|    case NXAST_RAW_DEBUG_SLOW:
  ------------------
  |  Branch (4866:5): [True: 345, False: 281k]
  ------------------
 4867|    345|        return decode_NXAST_RAW_DEBUG_SLOW(out);
 4868|       |
 4869|    113|    case NXAST_RAW_DEBUG_RECIRC:
  ------------------
  |  Branch (4869:5): [True: 113, False: 281k]
  ------------------
 4870|    113|        return decode_NXAST_RAW_DEBUG_RECIRC(out);
 4871|       |
 4872|      0|    default:
  ------------------
  |  Branch (4872:5): [True: 0, False: 281k]
  ------------------
 4873|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 4874|   281k|    }
 4875|   281k|}

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

ofputil_decode_role_message:
   42|  6.21k|{
   43|  6.21k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   44|  6.21k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   45|  6.21k|    if (raw == OFPRAW_OFPT12_ROLE_REQUEST ||
  ------------------
  |  Branch (45:9): [True: 693, False: 5.52k]
  ------------------
   46|  5.65k|        raw == OFPRAW_OFPT12_ROLE_REPLY) {
  ------------------
  |  Branch (46:9): [True: 4.96k, False: 563]
  ------------------
   47|  5.65k|        const struct ofp12_role_request *orr = b.msg;
   48|       |
   49|  5.65k|        if (orr->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (49:13): [True: 5.34k, False: 314]
  ------------------
   50|  5.34k|            orr->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (50:13): [True: 1.84k, False: 3.49k]
  ------------------
   51|  1.84k|            orr->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (51:13): [True: 1.81k, False: 31]
  ------------------
   52|  1.81k|            orr->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (52:13): [True: 1.58k, False: 234]
  ------------------
   53|  1.58k|            return OFPERR_OFPRRFC_BAD_ROLE;
   54|  1.58k|        }
   55|       |
   56|  4.07k|        rr->role = ntohl(orr->role);
   57|  4.07k|        if (raw == OFPRAW_OFPT12_ROLE_REQUEST
  ------------------
  |  Branch (57:13): [True: 590, False: 3.48k]
  |  Branch (57:13): [True: 210, False: 3.86k]
  ------------------
   58|  4.07k|            ? orr->role == htonl(OFPCR12_ROLE_NOCHANGE)
   59|  4.07k|            : orr->generation_id == OVS_BE64_MAX) {
  ------------------
  |  |   44|  3.48k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
   60|    210|            rr->have_generation_id = false;
   61|    210|            rr->generation_id = 0;
   62|  3.86k|        } else {
   63|  3.86k|            rr->have_generation_id = true;
   64|  3.86k|            rr->generation_id = ntohll(orr->generation_id);
   65|  3.86k|        }
   66|  4.07k|    } else if (raw == OFPRAW_NXT_ROLE_REQUEST ||
  ------------------
  |  Branch (66:16): [True: 399, False: 164]
  ------------------
   67|    563|               raw == OFPRAW_NXT_ROLE_REPLY) {
  ------------------
  |  Branch (67:16): [True: 164, False: 0]
  ------------------
   68|    563|        const struct nx_role_request *nrr = b.msg;
   69|       |
   70|    563|        BUILD_ASSERT(NX_ROLE_OTHER + 1 == OFPCR12_ROLE_EQUAL);
  ------------------
  |  |  271|    563|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   71|    563|        BUILD_ASSERT(NX_ROLE_PRIMARY + 1 == OFPCR12_ROLE_PRIMARY);
  ------------------
  |  |  271|    563|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   72|    563|        BUILD_ASSERT(NX_ROLE_SECONDARY + 1 == OFPCR12_ROLE_SECONDARY);
  ------------------
  |  |  271|    563|#define BUILD_ASSERT(EXPR) (void) ({ _Static_assert(EXPR, #EXPR); })
  ------------------
   73|       |
   74|    563|        if (nrr->role != htonl(NX_ROLE_OTHER) &&
  ------------------
  |  Branch (74:13): [True: 496, False: 67]
  ------------------
   75|    496|            nrr->role != htonl(NX_ROLE_PRIMARY) &&
  ------------------
  |  Branch (75:13): [True: 447, False: 49]
  ------------------
   76|    447|            nrr->role != htonl(NX_ROLE_SECONDARY)) {
  ------------------
  |  Branch (76:13): [True: 194, False: 253]
  ------------------
   77|    194|            return OFPERR_OFPRRFC_BAD_ROLE;
   78|    194|        }
   79|       |
   80|    369|        rr->role = ntohl(nrr->role) + 1;
   81|    369|        rr->have_generation_id = false;
   82|    369|        rr->generation_id = 0;
   83|    369|    } else {
   84|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   85|      0|    }
   86|       |
   87|  4.44k|    return 0;
   88|  6.21k|}
ofputil_format_role_message:
  121|  4.44k|{
  122|  4.44k|    format_role_generic(string, rr->role, (rr->have_generation_id
  ------------------
  |  Branch (122:44): [True: 3.86k, False: 579]
  ------------------
  123|  4.44k|                                           ? rr->generation_id
  124|       |                                           : UINT64_MAX));
  125|  4.44k|}
ofputil_decode_role_status:
  191|  1.51k|{
  192|  1.51k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  193|  1.51k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  194|  1.51k|    ovs_assert(raw == OFPRAW_OFPT14_ROLE_STATUS ||
  ------------------
  |  |   62|  1.51k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (194:16): [True: 1.51k, False: 0]
  ------------------
  195|      0|               raw == OFPRAW_ONFT13_ROLE_STATUS);
  ------------------
  |  Branch (195:16): [True: 0, False: 0]
  ------------------
  196|       |
  197|  1.51k|    const struct ofp14_role_status *r = b.msg;
  198|  1.51k|    if (r->role != htonl(OFPCR12_ROLE_NOCHANGE) &&
  ------------------
  |  Branch (198:9): [True: 923, False: 594]
  ------------------
  199|    923|        r->role != htonl(OFPCR12_ROLE_EQUAL) &&
  ------------------
  |  Branch (199:9): [True: 845, False: 78]
  ------------------
  200|    845|        r->role != htonl(OFPCR12_ROLE_PRIMARY) &&
  ------------------
  |  Branch (200:9): [True: 765, False: 80]
  ------------------
  201|    765|        r->role != htonl(OFPCR12_ROLE_SECONDARY)) {
  ------------------
  |  Branch (201:9): [True: 567, False: 198]
  ------------------
  202|    567|        return OFPERR_OFPRRFC_BAD_ROLE;
  203|    567|    }
  204|       |
  205|    950|    rs->role = ntohl(r->role);
  206|    950|    rs->generation_id = ntohll(r->generation_id);
  207|    950|    rs->reason = r->reason;
  208|       |
  209|    950|    return 0;
  210|  1.51k|}
ofputil_format_role_status:
  215|    950|{
  216|    950|    format_role_generic(string, rs->role, rs->generation_id);
  217|       |
  218|    950|    ds_put_cstr(string, " reason=");
  219|       |
  220|    950|    switch (rs->reason) {
  221|    283|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (221:5): [True: 283, False: 667]
  ------------------
  222|    283|        ds_put_cstr(string, "primary_request");
  223|    283|        break;
  224|     38|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (224:5): [True: 38, False: 912]
  ------------------
  225|     38|        ds_put_cstr(string, "configuration_changed");
  226|     38|        break;
  227|     12|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (227:5): [True: 12, False: 938]
  ------------------
  228|     12|        ds_put_cstr(string, "experimenter_data_changed");
  229|     12|        break;
  230|    342|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (230:5): [True: 342, False: 608]
  ------------------
  231|    617|    default:
  ------------------
  |  Branch (231:5): [True: 275, False: 675]
  ------------------
  232|    617|        ds_put_cstr(string, "(unknown)");
  233|    617|        break;
  234|    950|    }
  235|    950|}
ofputil_async_msg_type_to_string:
  239|   265k|{
  240|   265k|    switch (type) {
  241|  44.3k|    case OAM_PACKET_IN:      return "PACKET_IN";
  ------------------
  |  Branch (241:5): [True: 44.3k, False: 221k]
  ------------------
  242|  44.3k|    case OAM_PORT_STATUS:    return "PORT_STATUS";
  ------------------
  |  Branch (242:5): [True: 44.3k, False: 221k]
  ------------------
  243|  44.3k|    case OAM_FLOW_REMOVED:   return "FLOW_REMOVED";
  ------------------
  |  Branch (243:5): [True: 44.3k, False: 221k]
  ------------------
  244|  44.3k|    case OAM_ROLE_STATUS:    return "ROLE_STATUS";
  ------------------
  |  Branch (244:5): [True: 44.3k, False: 221k]
  ------------------
  245|  44.3k|    case OAM_TABLE_STATUS:   return "TABLE_STATUS";
  ------------------
  |  Branch (245:5): [True: 44.3k, False: 221k]
  ------------------
  246|  44.3k|    case OAM_REQUESTFORWARD: return "REQUESTFORWARD";
  ------------------
  |  Branch (246:5): [True: 44.3k, False: 221k]
  ------------------
  247|       |
  248|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (248:5): [True: 0, False: 265k]
  ------------------
  249|      0|    default:
  ------------------
  |  Branch (249:5): [True: 0, False: 265k]
  ------------------
  250|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  251|   265k|    }
  252|   265k|}
ofputil_decode_set_async_config:
  427|  34.4k|{
  428|  34.4k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  429|  34.4k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  430|       |
  431|  34.4k|    if (raw == OFPRAW_OFPT13_SET_ASYNC ||
  ------------------
  |  Branch (431:9): [True: 523, False: 33.8k]
  ------------------
  432|  33.8k|        raw == OFPRAW_NXT_SET_ASYNC_CONFIG ||
  ------------------
  |  Branch (432:9): [True: 173, False: 33.7k]
  ------------------
  433|  33.7k|        raw == OFPRAW_OFPT13_GET_ASYNC_REPLY) {
  ------------------
  |  Branch (433:9): [True: 815, False: 32.9k]
  ------------------
  434|  1.51k|        const struct nx_async_config *msg = ofpmsg_body(oh);
  435|       |
  436|  1.51k|        *ac = OFPUTIL_ASYNC_CFG_INIT;
  ------------------
  |  |   75|  1.51k|#define OFPUTIL_ASYNC_CFG_INIT (struct ofputil_async_cfg) { .primary[0] = 0 }
  ------------------
  437|  1.51k|        decode_legacy_async_masks(msg->packet_in_mask, OAM_PACKET_IN,
  438|  1.51k|                                  oh->version, ac);
  439|  1.51k|        decode_legacy_async_masks(msg->port_status_mask, OAM_PORT_STATUS,
  440|  1.51k|                                  oh->version, ac);
  441|  1.51k|        decode_legacy_async_masks(msg->flow_removed_mask, OAM_FLOW_REMOVED,
  442|  1.51k|                                  oh->version, ac);
  443|  32.9k|    } else if (raw == OFPRAW_OFPT14_SET_ASYNC ||
  ------------------
  |  Branch (443:16): [True: 4.39k, False: 28.5k]
  ------------------
  444|  28.5k|               raw == OFPRAW_OFPT14_GET_ASYNC_REPLY ||
  ------------------
  |  Branch (444:16): [True: 28.4k, False: 97]
  ------------------
  445|  32.9k|               raw == OFPRAW_NXT_SET_ASYNC_CONFIG2) {
  ------------------
  |  Branch (445:16): [True: 97, False: 0]
  ------------------
  446|  32.9k|        *ac = *basis;
  447|  53.1k|        while (b.size > 0) {
  ------------------
  |  Branch (447:16): [True: 32.4k, False: 20.6k]
  ------------------
  448|  32.4k|            struct ofpbuf property;
  449|  32.4k|            enum ofperr error;
  450|  32.4k|            uint64_t type;
  451|       |
  452|  32.4k|            error = ofpprop_pull__(&b, &property, 8, 0xfffe, &type);
  453|  32.4k|            if (error) {
  ------------------
  |  Branch (453:17): [True: 10.9k, False: 21.5k]
  ------------------
  454|  10.9k|                return error;
  455|  10.9k|            }
  456|       |
  457|  21.5k|            const struct ofp14_async_prop *ap
  458|  21.5k|                = get_ofp14_async_config_prop_by_prop_type(type);
  459|  21.5k|            error = (ap
  ------------------
  |  Branch (459:22): [True: 15.7k, False: 5.75k]
  ------------------
  460|  21.5k|                     ? parse_async_tlv(&property, ap, ac, oh->version, loose)
  461|  21.5k|                     : OFPPROP_UNKNOWN(loose, "async config", type));
  ------------------
  |  |  144|  5.75k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  462|  21.5k|            if (error) {
  ------------------
  |  Branch (462:17): [True: 1.32k, False: 20.2k]
  ------------------
  463|       |                /* Most messages use OFPBPC_BAD_TYPE but async has its own (who
  464|       |                 * knows why, it's OpenFlow. */
  465|  1.32k|                if (error == OFPERR_OFPBPC_BAD_TYPE) {
  ------------------
  |  Branch (465:21): [True: 596, False: 729]
  ------------------
  466|    596|                    error = OFPERR_OFPACFC_UNSUPPORTED;
  467|    596|                }
  468|  1.32k|                return error;
  469|  1.32k|            }
  470|  21.5k|        }
  471|  32.9k|    } else {
  472|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  473|      0|    }
  474|  22.1k|    return 0;
  475|  34.4k|}
ofputil_format_set_async_config:
  667|  22.1k|{
  668|  66.4k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (668:21): [True: 44.3k, False: 22.1k]
  ------------------
  669|  44.3k|        ds_put_format(string, "\n %s:\n", i == 0 ? "primary" : "secondary");
  ------------------
  |  Branch (669:43): [True: 22.1k, False: 22.1k]
  ------------------
  670|   310k|        for (uint32_t type = 0; type < OAM_N_TYPES; type++) {
  ------------------
  |  Branch (670:33): [True: 265k, False: 44.3k]
  ------------------
  671|   265k|            ds_put_format(string, "%16s:",
  672|   265k|                          ofputil_async_msg_type_to_string(type));
  673|       |
  674|   265k|            uint32_t role = i == 0 ? ac->primary[type] : ac->secondary[type];
  ------------------
  |  Branch (674:29): [True: 132k, False: 132k]
  ------------------
  675|  8.77M|            for (int j = 0; j < 32; j++) {
  ------------------
  |  Branch (675:29): [True: 8.51M, False: 265k]
  ------------------
  676|  8.51M|                if (role & (1u << j)) {
  ------------------
  |  Branch (676:21): [True: 72.4k, False: 8.43M]
  ------------------
  677|  72.4k|                    char reasonbuf[INT_STRLEN(int) + 1];
  678|  72.4k|                    const char *reason;
  679|       |
  680|  72.4k|                    reason = ofp_async_config_reason_to_string(
  681|  72.4k|                        j, type, reasonbuf, sizeof reasonbuf);
  682|  72.4k|                    if (reason[0]) {
  ------------------
  |  Branch (682:25): [True: 67.0k, False: 5.32k]
  ------------------
  683|  67.0k|                        ds_put_format(string, " %s", reason);
  684|  67.0k|                    }
  685|  72.4k|                }
  686|  8.51M|            }
  687|   265k|            if (!role) {
  ------------------
  |  Branch (687:17): [True: 245k, False: 20.8k]
  ------------------
  688|   245k|                ds_put_cstr(string, " (off)");
  689|   245k|            }
  690|   265k|            ds_put_char(string, '\n');
  691|   265k|        }
  692|  44.3k|    }
  693|  22.1k|}
ofp-connection.c:format_role_generic:
   93|  5.39k|{
   94|  5.39k|    ds_put_cstr(string, " role=");
   95|       |
   96|  5.39k|    switch (role) {
   97|    908|    case OFPCR12_ROLE_NOCHANGE:
  ------------------
  |  Branch (97:5): [True: 908, False: 4.48k]
  ------------------
   98|    908|        ds_put_cstr(string, "nochange");
   99|    908|        break;
  100|  3.63k|    case OFPCR12_ROLE_EQUAL:
  ------------------
  |  Branch (100:5): [True: 3.63k, False: 1.75k]
  ------------------
  101|  3.63k|        ds_put_cstr(string, "equal"); /* OF 1.2 wording */
  102|  3.63k|        break;
  103|    160|    case OFPCR12_ROLE_PRIMARY:
  ------------------
  |  Branch (103:5): [True: 160, False: 5.23k]
  ------------------
  104|    160|        ds_put_cstr(string, "primary");
  105|    160|        break;
  106|    685|    case OFPCR12_ROLE_SECONDARY:
  ------------------
  |  Branch (106:5): [True: 685, False: 4.70k]
  ------------------
  107|    685|        ds_put_cstr(string, "secondary");
  108|    685|        break;
  109|      0|    default:
  ------------------
  |  Branch (109:5): [True: 0, False: 5.39k]
  ------------------
  110|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  111|  5.39k|    }
  112|       |
  113|  5.39k|    if (generation_id != UINT64_MAX) {
  ------------------
  |  Branch (113:9): [True: 4.81k, False: 580]
  ------------------
  114|       |        ds_put_format(string, " generation_id=%"PRIu64, generation_id);
  115|  4.81k|    }
  116|  5.39k|}
ofp-connection.c:decode_legacy_async_masks:
  393|  4.53k|{
  394|  13.5k|    for (int i = 0; i < 2; i++) {
  ------------------
  |  Branch (394:21): [True: 9.06k, False: 4.53k]
  ------------------
  395|  9.06k|        bool primary = i == 0;
  396|  9.06k|        const struct ofp14_async_prop *ap
  397|  9.06k|            = get_ofp14_async_config_prop_by_oam(oam, primary);
  398|       |        decode_async_mask(masks[i], ap, version, true, dst);
  399|  9.06k|    }
  400|  4.53k|}
ofp-connection.c:get_ofp14_async_config_prop_by_oam:
  292|  9.06k|{
  293|  31.7k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  9.06k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|  31.7k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|  31.7k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|  31.7k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|  31.7k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|  31.7k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|  31.7k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|  31.7k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 31.7k, False: 0]
  |  |  ------------------
  ------------------
  294|  31.7k|        if (ap->oam == oam && ap->primary == primary) {
  ------------------
  |  Branch (294:13): [True: 13.5k, False: 18.1k]
  |  Branch (294:31): [True: 9.06k, False: 4.53k]
  ------------------
  295|  9.06k|            return ap;
  296|  9.06k|        }
  297|  31.7k|    }
  298|      0|    return NULL;
  299|  9.06k|}
ofp-connection.c:decode_async_mask:
  323|  24.7k|{
  324|  24.7k|    uint32_t mask = ntohl(src);
  325|  24.7k|    uint32_t allowed = ofp14_async_prop_allowed(ap, version);
  326|  24.7k|    if (mask & ~allowed) {
  ------------------
  |  Branch (326:9): [True: 21.9k, False: 2.82k]
  ------------------
  327|  21.9k|        static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  21.9k|        {                                                                 \
  |  |  111|  21.9k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  87.7k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 21.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  21.9k|            0,                              /* first_dropped */           \
  |  |  113|  21.9k|            0,                              /* last_dropped */            \
  |  |  114|  21.9k|            0,                              /* n_dropped */               \
  |  |  115|  21.9k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  21.9k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  21.9k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  21.9k|        }
  ------------------
  328|  21.9k|        OFPPROP_LOG(&rl, loose,
  ------------------
  |  |  139|  21.9k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  21.9k|    do {                                                                \
  |  |  |  |  288|  43.8k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [True: 21.3k, False: 642]
  |  |  |  |  ------------------
  |  |  |  |  289|  21.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 21.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  21.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 21.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  329|  21.9k|                    "bad value %#x for %s (allowed mask %#x)",
  330|  21.9k|                    mask, ofputil_async_msg_type_to_string(ap->oam),
  331|  21.9k|                    allowed);
  332|  21.9k|        mask &= allowed;
  333|  21.9k|        if (!loose) {
  ------------------
  |  Branch (333:13): [True: 642, False: 21.3k]
  ------------------
  334|    642|            return OFPERR_OFPACFC_INVALID;
  335|    642|        }
  336|  21.9k|    }
  337|       |
  338|  24.1k|    if (ap->oam == OAM_PACKET_IN) {
  ------------------
  |  Branch (338:9): [True: 6.27k, False: 17.8k]
  ------------------
  339|  6.27k|        if (mask & (1u << OFPR_NO_MATCH)) {
  ------------------
  |  Branch (339:13): [True: 5.06k, False: 1.21k]
  ------------------
  340|  5.06k|            mask |= 1u << OFPR_EXPLICIT_MISS;
  341|  5.06k|            if (version < OFP13_VERSION) {
  ------------------
  |  Branch (341:17): [True: 270, False: 4.79k]
  ------------------
  342|    270|                mask |= 1u << OFPR_IMPLICIT_MISS;
  343|    270|            }
  344|  5.06k|        }
  345|  6.27k|    }
  346|       |
  347|  24.1k|    uint32_t *array = ap->primary ? dst->primary : dst->secondary;
  ------------------
  |  Branch (347:23): [True: 7.10k, False: 17.0k]
  ------------------
  348|  24.1k|    array[ap->oam] = mask;
  349|  24.1k|    return 0;
  350|  24.7k|}
ofp-connection.c:ofp14_async_prop_allowed:
  304|  24.7k|{
  305|  24.7k|    return version >= OFP14_VERSION ? prop->allowed14 : prop->allowed10;
  ------------------
  |  Branch (305:12): [True: 15.7k, False: 8.99k]
  ------------------
  306|  24.7k|}
ofp-connection.c:get_ofp14_async_config_prop_by_prop_type:
  280|  21.5k|{
  281|   161k|    FOR_EACH_ASYNC_PROP (ap) {
  ------------------
  |  |  275|  21.5k|    for (const struct ofp14_async_prop *VAR = async_props;      \
  |  |  276|   167k|         VAR < &async_props[ARRAY_SIZE(async_props)]; VAR++)
  |  |  ------------------
  |  |  |  |  297|   167k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|   167k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   41|   167k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |   47|   167k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   37|   167k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   44|   167k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  |  Branch (276:10): [True: 161k, False: 5.75k]
  |  |  ------------------
  ------------------
  282|   161k|        if (prop_type == ap->prop_type) {
  ------------------
  |  Branch (282:13): [True: 15.7k, False: 145k]
  ------------------
  283|  15.7k|            return ap;
  284|  15.7k|        }
  285|   161k|    }
  286|  5.75k|    return NULL;
  287|  21.5k|}
ofp-connection.c:parse_async_tlv:
  357|  15.7k|{
  358|  15.7k|    enum ofperr error;
  359|  15.7k|    ovs_be32 mask;
  360|       |
  361|  15.7k|    error  = ofpprop_parse_be32(property, &mask);
  362|  15.7k|    if (error) {
  ------------------
  |  Branch (362:9): [True: 67, False: 15.7k]
  ------------------
  363|     67|        return error;
  364|     67|    }
  365|       |
  366|  15.7k|    if (ofpprop_is_experimenter(ap->prop_type)) {
  ------------------
  |  Branch (366:9): [True: 0, False: 15.7k]
  ------------------
  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): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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" "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  |  Branch (290:56): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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|  15.7k|    return decode_async_mask(mask, ap, version, loose, ac);
  386|  15.7k|}
ofp-connection.c:ofp_async_config_reason_to_string:
  638|  72.4k|{
  639|  72.4k|    switch (type) {
  640|  29.2k|    case OAM_PACKET_IN:
  ------------------
  |  Branch (640:5): [True: 29.2k, False: 43.1k]
  ------------------
  641|  29.2k|        return ofputil_packet_in_reason_to_string(reason, reasonbuf, bufsize);
  642|       |
  643|  7.80k|    case OAM_PORT_STATUS:
  ------------------
  |  Branch (643:5): [True: 7.80k, False: 64.6k]
  ------------------
  644|  7.80k|        return ofp_port_reason_to_string(reason, reasonbuf, bufsize);
  645|       |
  646|  8.53k|    case OAM_FLOW_REMOVED:
  ------------------
  |  Branch (646:5): [True: 8.53k, False: 63.8k]
  ------------------
  647|  8.53k|        return ofp_flow_removed_reason_to_string(reason, reasonbuf, bufsize);
  648|       |
  649|  23.4k|    case OAM_ROLE_STATUS:
  ------------------
  |  Branch (649:5): [True: 23.4k, False: 48.9k]
  ------------------
  650|  23.4k|        return ofp_role_reason_to_string(reason, reasonbuf, bufsize);
  651|       |
  652|    833|    case OAM_TABLE_STATUS:
  ------------------
  |  Branch (652:5): [True: 833, False: 71.5k]
  ------------------
  653|    833|        return ofp_table_reason_to_string(reason, reasonbuf, bufsize);
  654|       |
  655|  2.56k|    case OAM_REQUESTFORWARD:
  ------------------
  |  Branch (655:5): [True: 2.56k, False: 69.8k]
  ------------------
  656|  2.56k|        return ofp_requestforward_reason_to_string(reason, reasonbuf, bufsize);
  657|       |
  658|      0|    case OAM_N_TYPES:
  ------------------
  |  Branch (658:5): [True: 0, False: 72.4k]
  ------------------
  659|      0|    default:
  ------------------
  |  Branch (659:5): [True: 0, False: 72.4k]
  ------------------
  660|      0|        return "Unknown asynchronous configuration message type";
  661|  72.4k|    }
  662|  72.4k|}
ofp-connection.c:ofp_port_reason_to_string:
  571|  7.80k|{
  572|  7.80k|    switch (reason) {
  573|  2.44k|    case OFPPR_ADD:
  ------------------
  |  Branch (573:5): [True: 2.44k, False: 5.36k]
  ------------------
  574|  2.44k|        return "add";
  575|       |
  576|  2.22k|    case OFPPR_DELETE:
  ------------------
  |  Branch (576:5): [True: 2.22k, False: 5.58k]
  ------------------
  577|  2.22k|        return "delete";
  578|       |
  579|  3.14k|    case OFPPR_MODIFY:
  ------------------
  |  Branch (579:5): [True: 3.14k, False: 4.66k]
  ------------------
  580|  3.14k|        return "modify";
  581|       |
  582|      0|    case OFPPR_N_REASONS:
  ------------------
  |  Branch (582:5): [True: 0, False: 7.80k]
  ------------------
  583|      0|    default:
  ------------------
  |  Branch (583:5): [True: 0, False: 7.80k]
  ------------------
  584|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  585|      0|        return reasonbuf;
  586|  7.80k|    }
  587|  7.80k|}
ofp-connection.c:ofp_role_reason_to_string:
  595|  23.4k|{
  596|  23.4k|    switch (reason) {
  597|  7.82k|    case OFPCRR_PRIMARY_REQUEST:
  ------------------
  |  Branch (597:5): [True: 7.82k, False: 15.6k]
  ------------------
  598|  7.82k|        return "primary_request";
  599|       |
  600|  7.78k|    case OFPCRR_CONFIG:
  ------------------
  |  Branch (600:5): [True: 7.78k, False: 15.6k]
  ------------------
  601|  7.78k|        return "configuration_changed";
  602|       |
  603|  7.82k|    case OFPCRR_EXPERIMENTER:
  ------------------
  |  Branch (603:5): [True: 7.82k, False: 15.6k]
  ------------------
  604|  7.82k|        return "experimenter_data_changed";
  605|       |
  606|      0|    case OFPCRR_N_REASONS:
  ------------------
  |  Branch (606:5): [True: 0, False: 23.4k]
  ------------------
  607|      0|    default:
  ------------------
  |  Branch (607:5): [True: 0, False: 23.4k]
  ------------------
  608|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  609|      0|        return reasonbuf;
  610|  23.4k|    }
  611|  23.4k|}
ofp-connection.c:ofp_requestforward_reason_to_string:
  619|  2.56k|{
  620|  2.56k|    switch (reason) {
  621|  1.28k|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (621:5): [True: 1.28k, False: 1.27k]
  ------------------
  622|  1.28k|        return "group_mod_request";
  623|       |
  624|  1.27k|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (624:5): [True: 1.27k, False: 1.28k]
  ------------------
  625|  1.27k|        return "meter_mod_request";
  626|       |
  627|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (627:5): [True: 0, False: 2.56k]
  ------------------
  628|      0|    default:
  ------------------
  |  Branch (628:5): [True: 0, False: 2.56k]
  ------------------
  629|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  630|      0|        return reasonbuf;
  631|  2.56k|    }
  632|  2.56k|}

ofp_ct_match_format:
  100|  5.00k|{
  101|  5.00k|    if (match->mark_mask) {
  ------------------
  |  Branch (101:9): [True: 742, False: 4.26k]
  ------------------
  102|    742|        ds_put_format(ds, "mark=%#"PRIx32, match->mark);
  103|    742|        if (match->mark_mask != UINT32_MAX) {
  ------------------
  |  Branch (103:13): [True: 447, False: 295]
  ------------------
  104|    447|            ds_put_format(ds, "/%#"PRIx32, match->mark_mask);
  105|    447|        }
  106|    742|        ds_put_char(ds, ' ');
  107|    742|    }
  108|       |
  109|  5.00k|    if (!ovs_u128_is_zero(match->labels_mask)) {
  ------------------
  |  Branch (109:9): [True: 1.51k, False: 3.49k]
  ------------------
  110|  1.51k|        ovs_be128 be_value = hton128(match->labels);
  111|  1.51k|        ovs_be128 be_mask = hton128(match->labels_mask);
  112|       |
  113|  1.51k|        ds_put_cstr(ds, "labels=");
  114|  1.51k|        ds_put_hex(ds, &be_value, sizeof be_value);
  115|       |
  116|  1.51k|        if (!ovs_u128_is_ones(match->labels_mask)) {
  ------------------
  |  Branch (116:13): [True: 1.22k, False: 288]
  ------------------
  117|  1.22k|            ds_put_char(ds, '/');
  118|  1.22k|            ds_put_hex(ds, &be_mask, sizeof be_mask);
  119|  1.22k|        }
  120|  1.51k|        ds_put_char(ds, ' ');
  121|  1.51k|    }
  122|       |
  123|  5.00k|    ds_put_cstr(ds, "'");
  124|  5.00k|    ofp_ct_tuple_format(ds, &match->tuple_orig, match->ip_proto,
  125|  5.00k|                        match->l3_type);
  126|  5.00k|    ds_put_format(ds, ",ct_nw_proto=%u' '", match->ip_proto);
  127|  5.00k|    ofp_ct_tuple_format(ds, &match->tuple_reply, match->ip_proto,
  128|  5.00k|                        match->l3_type);
  129|  5.00k|    ds_put_cstr(ds, "'");
  130|  5.00k|}
ofp_ct_match_decode:
  473|  16.1k|{
  474|  16.1k|    uint32_t tlv_flags = 0;
  475|  16.1k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  476|  16.1k|    ofpraw_pull_assert(&msg);
  477|       |
  478|  16.1k|    const struct nx_ct_flush *nx_flush = ofpbuf_pull(&msg, sizeof *nx_flush);
  479|       |
  480|  16.1k|    if (!is_all_zeros(nx_flush->pad, sizeof nx_flush->pad)) {
  ------------------
  |  Branch (480:9): [True: 1.71k, False: 14.4k]
  ------------------
  481|  1.71k|        return OFPERR_NXBRC_MUST_BE_ZERO;
  482|  1.71k|    }
  483|       |
  484|  14.4k|    match->ip_proto = nx_flush->ip_proto;
  485|       |
  486|  14.4k|    struct ofp_ct_tuple *orig = &match->tuple_orig;
  487|  14.4k|    struct ofp_ct_tuple *reply = &match->tuple_reply;
  488|       |
  489|  21.5k|    while (msg.size) {
  ------------------
  |  Branch (489:12): [True: 16.5k, False: 5.00k]
  ------------------
  490|  16.5k|        struct ofpbuf property;
  491|  16.5k|        uint64_t type;
  492|       |
  493|  16.5k|        enum ofperr error = ofpprop_pull(&msg, &property, &type);
  494|  16.5k|        if (error) {
  ------------------
  |  Branch (494:13): [True: 1.12k, False: 15.4k]
  ------------------
  495|  1.12k|            return error;
  496|  1.12k|        }
  497|       |
  498|  15.4k|        switch (type) {
  499|  9.94k|        case NXT_CT_ORIG_TUPLE:
  ------------------
  |  Branch (499:9): [True: 9.94k, False: 5.51k]
  ------------------
  500|  9.94k|            error = ofp_ct_tuple_decode_nested(&property, orig,
  501|  9.94k|                                               &match->l3_type);
  502|  9.94k|            break;
  503|       |
  504|  1.28k|        case NXT_CT_REPLY_TUPLE:
  ------------------
  |  Branch (504:9): [True: 1.28k, False: 14.1k]
  ------------------
  505|  1.28k|            error = ofp_ct_tuple_decode_nested(&property, reply,
  506|  1.28k|                                               &match->l3_type);
  507|  1.28k|            break;
  508|       |
  509|    920|        case NXT_CT_ZONE_ID:
  ------------------
  |  Branch (509:9): [True: 920, False: 14.5k]
  ------------------
  510|    920|            if (with_zone) {
  ------------------
  |  Branch (510:17): [True: 0, False: 920]
  ------------------
  511|      0|                *with_zone = true;
  512|      0|            }
  513|    920|            error = ofpprop_parse_u16(&property, zone_id);
  514|    920|            break;
  515|       |
  516|    806|        case NXT_CT_MARK:
  ------------------
  |  Branch (516:9): [True: 806, False: 14.6k]
  ------------------
  517|    806|            error = ofpprop_parse_u32(&property, &match->mark);
  518|    806|            break;
  519|       |
  520|    455|        case NXT_CT_MARK_MASK:
  ------------------
  |  Branch (520:9): [True: 455, False: 15.0k]
  ------------------
  521|    455|            error = ofpprop_parse_u32(&property, &match->mark_mask);
  522|    455|            break;
  523|       |
  524|     42|        case NXT_CT_LABELS:
  ------------------
  |  Branch (524:9): [True: 42, False: 15.4k]
  ------------------
  525|     42|            error = ofpprop_parse_u128(&property, &match->labels);
  526|     42|            break;
  527|       |
  528|  1.50k|        case NXT_CT_LABELS_MASK:
  ------------------
  |  Branch (528:9): [True: 1.50k, False: 13.9k]
  ------------------
  529|  1.50k|            error = ofpprop_parse_u128(&property, &match->labels_mask);
  530|  1.50k|            break;
  531|       |
  532|    505|        default:
  ------------------
  |  Branch (532:9): [True: 505, False: 14.9k]
  ------------------
  533|    505|            error = OFPPROP_UNKNOWN(false, "NXT_CT_FLUSH", type);
  ------------------
  |  |  144|    505|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  534|    505|            break;
  535|  15.4k|        }
  536|       |
  537|  15.4k|        if (error) {
  ------------------
  |  Branch (537:13): [True: 8.30k, False: 7.16k]
  ------------------
  538|  8.30k|            return error;
  539|  8.30k|        }
  540|       |
  541|  7.16k|        if (type < (sizeof tlv_flags * CHAR_BIT)) {
  ------------------
  |  Branch (541:13): [True: 7.16k, False: 0]
  ------------------
  542|  7.16k|            tlv_flags |= (UINT32_C(1) << type);
  543|  7.16k|        }
  544|  7.16k|    }
  545|       |
  546|       |    /* Consider the mask being all ones if it's not present but the value
  547|       |     * is specified. */
  548|  5.00k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_MARK) &&
  ------------------
  |  Branch (548:9): [True: 669, False: 4.33k]
  ------------------
  549|    669|        !(tlv_flags & (UINT32_C(1) << NXT_CT_MARK_MASK))) {
  ------------------
  |  Branch (549:9): [True: 295, False: 374]
  ------------------
  550|    295|        match->mark_mask = UINT32_MAX;
  551|    295|    }
  552|       |
  553|  5.00k|    if (tlv_flags & (UINT32_C(1) << NXT_CT_LABELS) &&
  ------------------
  |  Branch (553:9): [True: 29, False: 4.97k]
  ------------------
  554|     29|        !(tlv_flags & (UINT32_C(1) << NXT_CT_LABELS_MASK))) {
  ------------------
  |  Branch (554:9): [True: 18, False: 11]
  ------------------
  555|     18|        match->labels_mask = OVS_U128_MAX;
  556|     18|    }
  557|       |
  558|  5.00k|    return 0;
  559|  14.4k|}
ofp-ct.c:ofp_ct_tuple_format:
   41|  10.0k|{
   42|  10.0k|    ds_put_cstr(ds, l3_type == AF_INET ? "ct_nw_src=": "ct_ipv6_src=");
  ------------------
  |  Branch (42:21): [True: 874, False: 9.13k]
  ------------------
   43|  10.0k|    ipv6_format_mapped(&tuple->src, ds);
   44|  10.0k|    ds_put_cstr(ds, l3_type == AF_INET ? ",ct_nw_dst=": ",ct_ipv6_dst=");
  ------------------
  |  Branch (44:21): [True: 874, False: 9.13k]
  ------------------
   45|  10.0k|    ipv6_format_mapped(&tuple->dst, ds);
   46|  10.0k|    if (ip_proto == IPPROTO_ICMP || ip_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (46:9): [True: 4.40k, False: 5.59k]
  |  Branch (46:37): [True: 148, False: 5.45k]
  ------------------
   47|  4.55k|        ds_put_format(ds, ",icmp_id=%u,icmp_type=%u,icmp_code=%u",
   48|  4.55k|                      ntohs(tuple->icmp_id), tuple->icmp_type,
   49|  4.55k|                      tuple->icmp_code);
   50|  5.45k|    } else {
   51|  5.45k|        ds_put_format(ds, ",ct_tp_src=%u,ct_tp_dst=%u", ntohs(tuple->src_port),
   52|       |                      ntohs(tuple->dst_port));
   53|  5.45k|    }
   54|  10.0k|}
ofp-ct.c:ofp_ct_tuple_decode_nested:
  376|  11.2k|{
  377|  11.2k|    struct ofpbuf nested;
  378|  11.2k|    enum ofperr error = ofpprop_parse_nested(property, &nested);
  379|  11.2k|    if (error) {
  ------------------
  |  Branch (379:9): [True: 70, False: 11.1k]
  ------------------
  380|     70|        return error;
  381|     70|    }
  382|       |
  383|  25.0k|    while (nested.size) {
  ------------------
  |  Branch (383:12): [True: 21.5k, False: 3.45k]
  ------------------
  384|  21.5k|        struct ofpbuf inner;
  385|  21.5k|        uint64_t type;
  386|       |
  387|  21.5k|        error = ofpprop_pull(&nested, &inner, &type);
  388|  21.5k|        if (error) {
  ------------------
  |  Branch (388:13): [True: 2.82k, False: 18.7k]
  ------------------
  389|  2.82k|            return error;
  390|  2.82k|        }
  391|  18.7k|        switch (type) {
  392|  4.45k|        case NXT_CT_TUPLE_SRC:
  ------------------
  |  Branch (392:9): [True: 4.45k, False: 14.3k]
  ------------------
  393|  4.45k|            error = ofpprop_pull_ipv6(&inner, &tuple->src, l3_type);
  394|  4.45k|            break;
  395|       |
  396|  10.3k|        case NXT_CT_TUPLE_DST:
  ------------------
  |  Branch (396:9): [True: 10.3k, False: 8.46k]
  ------------------
  397|  10.3k|            error = ofpprop_pull_ipv6(&inner, &tuple->dst, l3_type);
  398|  10.3k|            break;
  399|       |
  400|    674|        case NXT_CT_TUPLE_SRC_PORT:
  ------------------
  |  Branch (400:9): [True: 674, False: 18.0k]
  ------------------
  401|    674|            error = ofpprop_parse_be16(&inner, &tuple->src_port);
  402|    674|            break;
  403|       |
  404|    813|        case NXT_CT_TUPLE_DST_PORT:
  ------------------
  |  Branch (404:9): [True: 813, False: 17.9k]
  ------------------
  405|    813|            error = ofpprop_parse_be16(&inner, &tuple->dst_port);
  406|    813|            break;
  407|       |
  408|     86|        case NXT_CT_TUPLE_ICMP_ID:
  ------------------
  |  Branch (408:9): [True: 86, False: 18.6k]
  ------------------
  409|     86|            error = ofpprop_parse_be16(&inner, &tuple->icmp_id);
  410|     86|            break;
  411|       |
  412|     19|        case NXT_CT_TUPLE_ICMP_TYPE:
  ------------------
  |  Branch (412:9): [True: 19, False: 18.7k]
  ------------------
  413|     19|            error = ofpprop_parse_u8(&inner, &tuple->icmp_type);
  414|     19|            break;
  415|       |
  416|    126|        case NXT_CT_TUPLE_ICMP_CODE:
  ------------------
  |  Branch (416:9): [True: 126, False: 18.6k]
  ------------------
  417|    126|            error = ofpprop_parse_u8(&inner, &tuple->icmp_code);
  418|    126|            break;
  419|       |
  420|  2.29k|        default:
  ------------------
  |  Branch (420:9): [True: 2.29k, False: 16.4k]
  ------------------
  421|  2.29k|            error = OFPPROP_UNKNOWN(false, "NXT_CT_TUPLE", type);
  ------------------
  |  |  144|  2.29k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  422|  2.29k|            break;
  423|  18.7k|        }
  424|       |
  425|  18.7k|        if (error) {
  ------------------
  |  Branch (425:13): [True: 4.87k, False: 13.8k]
  ------------------
  426|  4.87k|            return error;
  427|  4.87k|        }
  428|  18.7k|    }
  429|       |
  430|  3.45k|    return 0;
  431|  11.1k|}
ofp-ct.c:ofpprop_pull_ipv6:
  352|  14.7k|{
  353|  14.7k|    if (ofpbuf_msgsize(property) < sizeof *addr) {
  ------------------
  |  Branch (353:9): [True: 2.38k, False: 12.3k]
  ------------------
  354|  2.38k|        return OFPERR_OFPBPC_BAD_LEN;
  355|  2.38k|    }
  356|       |
  357|  12.3k|    memcpy(addr, property->msg, sizeof *addr);
  358|       |
  359|  12.3k|    uint16_t l3 = 0;
  360|  12.3k|    if (!ipv6_is_zero(addr)) {
  ------------------
  |  Branch (360:9): [True: 11.7k, False: 651]
  ------------------
  361|  11.7k|        l3 = IN6_IS_ADDR_V4MAPPED(addr) ? AF_INET : AF_INET6;
  ------------------
  |  Branch (361:14): [True: 641, False: 11.0k]
  ------------------
  362|  11.7k|    }
  363|       |
  364|  12.3k|    if (*l3_type && l3 && *l3_type != l3) {
  ------------------
  |  Branch (364:9): [True: 2.70k, False: 9.68k]
  |  Branch (364:21): [True: 2.19k, False: 505]
  |  Branch (364:27): [True: 200, False: 1.99k]
  ------------------
  365|    200|        return OFPERR_OFPBPC_BAD_VALUE;
  366|    200|    }
  367|       |
  368|  12.1k|    *l3_type = l3;
  369|       |
  370|  12.1k|    return 0;
  371|  12.3k|}

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

ofperr_is_valid:
   76|  1.64M|{
   77|  1.64M|    return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  3.28M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |   52|  1.63M|#define OFPERR_OFS (1 << 30)
  ------------------
                  return error >= OFPERR_OFS && error < OFPERR_OFS + OFPERR_N_ERRORS;
  ------------------
  |  |    3|  3.27M|#define OFPERR_N_ERRORS 198
  ------------------
  |  Branch (77:12): [True: 1.63M, False: 5.72k]
  |  Branch (77:35): [True: 1.63M, False: 90]
  ------------------
   78|  1.64M|}
ofperr_get_name:
   98|  1.64M|{
   99|  1.64M|    return (ofperr_is_valid(error)
  ------------------
  |  Branch (99:13): [True: 1.63M, False: 5.81k]
  ------------------
  100|  1.64M|            ? error_names[error - OFPERR_OFS]
  ------------------
  |  |   52|  1.63M|#define OFPERR_OFS (1 << 30)
  ------------------
  101|  1.64M|            : "<invalid>");
  102|  1.64M|}
ofperr_msg_format:
  248|   432k|{
  249|   432k|    ds_put_format(string, " %s\n", ofperr_get_name(error));
  250|       |
  251|   432k|    if (error == OFPERR_OFPHFC_INCOMPATIBLE || error == OFPERR_OFPHFC_EPERM) {
  ------------------
  |  Branch (251:9): [True: 13.3k, False: 419k]
  |  Branch (251:48): [True: 2.46k, False: 416k]
  ------------------
  252|  15.8k|        ds_put_printable(string, payload->data, payload->size);
  253|   416k|    } else {
  254|   416k|        char *s = ofp_to_string(payload->data, payload->size,
  255|   416k|                                port_map, table_map, 1);
  256|   416k|        ds_put_cstr(string, s);
  257|   416k|        free(s);
  258|   416k|    }
  259|   432k|}
ofperr_decode_msg:
  303|   670k|{
  304|   670k|    const struct ofp_error_msg *oem;
  305|   670k|    enum ofpraw raw;
  306|   670k|    uint16_t type, code;
  307|   670k|    uint32_t vendor;
  308|       |
  309|   670k|    if (payload) {
  ------------------
  |  Branch (309:9): [True: 670k, False: 0]
  ------------------
  310|   670k|        memset(payload, 0, sizeof *payload);
  311|   670k|    }
  312|       |
  313|       |    /* Pull off the error message. */
  314|   670k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  315|   670k|    enum ofperr error = ofpraw_pull(&raw, &b);
  316|   670k|    if (error) {
  ------------------
  |  Branch (316:9): [True: 0, False: 670k]
  ------------------
  317|      0|        return 0;
  318|      0|    }
  319|   670k|    oem = ofpbuf_pull(&b, sizeof *oem);
  320|       |
  321|       |    /* Get the error type and code. */
  322|   670k|    vendor = 0;
  323|   670k|    type = ntohs(oem->type);
  324|   670k|    code = ntohs(oem->code);
  325|   670k|    if (type == NXET_VENDOR && code == NXVC_VENDOR_ERROR) {
  ------------------
  |  |   54|  1.34M|#define NXET_VENDOR 0xb0c2
  ------------------
  |  Branch (325:9): [True: 46.8k, False: 623k]
  |  Branch (325:32): [True: 40.9k, False: 5.90k]
  ------------------
  326|  40.9k|        const struct nx_vendor_error *nve = ofpbuf_try_pull(&b, sizeof *nve);
  327|  40.9k|        if (!nve) {
  ------------------
  |  Branch (327:13): [True: 238, False: 40.7k]
  ------------------
  328|    238|            return 0;
  329|    238|        }
  330|       |
  331|  40.7k|        vendor = ntohl(nve->vendor);
  332|  40.7k|        type = ntohs(nve->type);
  333|  40.7k|        code = ntohs(nve->code);
  334|   629k|    } else if (type == OFPET12_EXPERIMENTER) {
  ------------------
  |  |   59|   629k|#define OFPET12_EXPERIMENTER 0xffff
  ------------------
  |  Branch (334:16): [True: 95.0k, False: 534k]
  ------------------
  335|  95.0k|        const ovs_be32 *vendorp = ofpbuf_try_pull(&b, sizeof *vendorp);
  336|  95.0k|        if (!vendorp) {
  ------------------
  |  Branch (336:13): [True: 7.55k, False: 87.5k]
  ------------------
  337|  7.55k|            return 0;
  338|  7.55k|        }
  339|       |
  340|  87.5k|        vendor = ntohl(*vendorp);
  341|  87.5k|        type = code;
  342|  87.5k|        code = 0;
  343|  87.5k|    }
  344|       |
  345|       |    /* Translate the error type and code into an ofperr. */
  346|   663k|    error = ofperr_decode(oh->version, vendor, type, code);
  347|   663k|    if (error && payload) {
  ------------------
  |  Branch (347:9): [True: 432k, False: 230k]
  |  Branch (347:18): [True: 432k, False: 0]
  ------------------
  348|   432k|        ofpbuf_init(payload, b.size);
  349|   432k|        ofpbuf_push(payload, b.data, b.size);
  350|   432k|        ofpbuf_trim(payload);
  351|   432k|    }
  352|   663k|    return error;
  353|   670k|}
ofp-errors.c:ofperr_domain_from_version:
   46|   663k|{
   47|   663k|    switch (version) {
   48|  57.9k|    case OFP10_VERSION:
  ------------------
  |  Branch (48:5): [True: 57.9k, False: 605k]
  ------------------
   49|  57.9k|        return &ofperr_of10;
   50|  62.7k|    case OFP11_VERSION:
  ------------------
  |  Branch (50:5): [True: 62.7k, False: 600k]
  ------------------
   51|  62.7k|        return &ofperr_of11;
   52|   143k|    case OFP12_VERSION:
  ------------------
  |  Branch (52:5): [True: 143k, False: 519k]
  ------------------
   53|   143k|        return &ofperr_of12;
   54|   119k|    case OFP13_VERSION:
  ------------------
  |  Branch (54:5): [True: 119k, False: 543k]
  ------------------
   55|   119k|        return &ofperr_of13;
   56|   117k|    case OFP14_VERSION:
  ------------------
  |  Branch (56:5): [True: 117k, False: 546k]
  ------------------
   57|   117k|        return &ofperr_of14;
   58|   125k|    case OFP15_VERSION:
  ------------------
  |  Branch (58:5): [True: 125k, False: 537k]
  ------------------
   59|   125k|        return &ofperr_of15;
   60|  37.4k|    default:
  ------------------
  |  Branch (60:5): [True: 37.4k, False: 625k]
  ------------------
   61|       |        return NULL;
   62|   663k|    }
   63|   663k|}
ofp-errors.c:ofperr_decode:
   86|   663k|{
   87|   663k|    const struct ofperr_domain *domain = ofperr_domain_from_version(version);
   88|   663k|    return domain ? domain->decode(vendor, type, code) : 0;
  ------------------
  |  Branch (88:12): [True: 625k, False: 37.4k]
  ------------------
   89|   663k|}

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

ofputil_flow_mod_flags_format:
  111|  39.6k|{
  112|  39.6k|    if (flags & OFPUTIL_FF_SEND_FLOW_REM) {
  ------------------
  |  Branch (112:9): [True: 4.58k, False: 35.0k]
  ------------------
  113|  4.58k|        ds_put_cstr(s, "send_flow_rem ");
  114|  4.58k|    }
  115|  39.6k|    if (flags & OFPUTIL_FF_CHECK_OVERLAP) {
  ------------------
  |  Branch (115:9): [True: 7.08k, False: 32.5k]
  ------------------
  116|  7.08k|        ds_put_cstr(s, "check_overlap ");
  117|  7.08k|    }
  118|  39.6k|    if (flags & OFPUTIL_FF_RESET_COUNTS) {
  ------------------
  |  Branch (118:9): [True: 2.87k, False: 36.7k]
  ------------------
  119|  2.87k|        ds_put_cstr(s, "reset_counts ");
  120|  2.87k|    }
  121|  39.6k|    if (flags & OFPUTIL_FF_NO_PKT_COUNTS) {
  ------------------
  |  Branch (121:9): [True: 4.51k, False: 35.1k]
  ------------------
  122|  4.51k|        ds_put_cstr(s, "no_packet_counts ");
  123|  4.51k|    }
  124|  39.6k|    if (flags & OFPUTIL_FF_NO_BYT_COUNTS) {
  ------------------
  |  Branch (124:9): [True: 2.55k, False: 37.0k]
  ------------------
  125|  2.55k|        ds_put_cstr(s, "no_byte_counts ");
  126|  2.55k|    }
  127|  39.6k|    if (flags & OFPUTIL_FF_HIDDEN_FIELDS) {
  ------------------
  |  Branch (127:9): [True: 0, False: 39.6k]
  ------------------
  128|      0|        ds_put_cstr(s, "allow_hidden_fields ");
  129|      0|    }
  130|  39.6k|    if (flags & OFPUTIL_FF_NO_READONLY) {
  ------------------
  |  Branch (130:9): [True: 0, False: 39.6k]
  ------------------
  131|      0|        ds_put_cstr(s, "no_readonly_table ");
  132|      0|    }
  133|  39.6k|}
ofputil_decode_flow_mod:
  155|  81.8k|{
  156|  81.8k|    ovs_be16 raw_flags;
  157|  81.8k|    enum ofperr error;
  158|  81.8k|    struct match match;
  159|  81.8k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  160|  81.8k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  161|  81.8k|    if (raw == OFPRAW_OFPT11_FLOW_MOD) {
  ------------------
  |  Branch (161:9): [True: 34.1k, False: 47.7k]
  ------------------
  162|       |        /* Standard OpenFlow 1.1+ flow_mod. */
  163|  34.1k|        const struct ofp11_flow_mod *ofm;
  164|       |
  165|  34.1k|        ofm = ofpbuf_pull(&b, sizeof *ofm);
  166|       |
  167|  34.1k|        error = ofputil_pull_ofp11_match(&b, tun_table, vl_mff_map, &match,
  168|  34.1k|                                         NULL);
  169|  34.1k|        if (error) {
  ------------------
  |  Branch (169:13): [True: 8.77k, False: 25.4k]
  ------------------
  170|  8.77k|            return error;
  171|  8.77k|        }
  172|       |
  173|       |        /* Translate the message. */
  174|  25.4k|        fm->priority = ntohs(ofm->priority);
  175|  25.4k|        if (ofm->command == OFPFC_ADD
  ------------------
  |  Branch (175:13): [True: 12.4k, False: 12.9k]
  ------------------
  176|  12.9k|            || (oh->version == OFP11_VERSION
  ------------------
  |  Branch (176:17): [True: 3.00k, False: 9.98k]
  ------------------
  177|  3.00k|                && (ofm->command == OFPFC_MODIFY ||
  ------------------
  |  Branch (177:21): [True: 1.57k, False: 1.43k]
  ------------------
  178|  1.43k|                    ofm->command == OFPFC_MODIFY_STRICT)
  ------------------
  |  Branch (178:21): [True: 553, False: 885]
  ------------------
  179|  12.4k|                && ofm->cookie_mask == htonll(0))) {
  ------------------
  |  Branch (179:20): [True: 69, False: 2.05k]
  ------------------
  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|  12.4k|            fm->cookie = htonll(0);
  184|  12.4k|            fm->cookie_mask = htonll(0);
  185|  12.4k|            fm->new_cookie = ofm->cookie;
  186|  12.9k|        } else {
  187|  12.9k|            fm->cookie = ofm->cookie;
  188|  12.9k|            fm->cookie_mask = ofm->cookie_mask;
  189|  12.9k|            fm->new_cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  12.9k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  190|  12.9k|        }
  191|  25.4k|        fm->modify_cookie = false;
  192|  25.4k|        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|  25.4k|        fm->table_id = ofm->table_id;
  199|  25.4k|        if (fm->table_id == OFPTT_ALL
  ------------------
  |  Branch (199:13): [True: 1.76k, False: 23.6k]
  ------------------
  200|  1.76k|            && (oh->version == OFP11_VERSION
  ------------------
  |  Branch (200:17): [True: 511, False: 1.25k]
  ------------------
  201|  1.25k|                || (ofm->command != OFPFC_DELETE &&
  ------------------
  |  Branch (201:21): [True: 246, False: 1.01k]
  ------------------
  202|    550|                    ofm->command != OFPFC_DELETE_STRICT))) {
  ------------------
  |  Branch (202:21): [True: 39, False: 207]
  ------------------
  203|    550|            return OFPERR_OFPFMFC_BAD_TABLE_ID;
  204|    550|        }
  205|       |
  206|  24.8k|        fm->idle_timeout = ntohs(ofm->idle_timeout);
  207|  24.8k|        fm->hard_timeout = ntohs(ofm->hard_timeout);
  208|  24.8k|        if (oh->version >= OFP14_VERSION && ofm->command == OFPFC_ADD) {
  ------------------
  |  Branch (208:13): [True: 21.6k, False: 3.22k]
  |  Branch (208:45): [True: 11.6k, False: 9.93k]
  ------------------
  209|  11.6k|            fm->importance = ntohs(ofm->importance);
  210|  13.1k|        } else {
  211|  13.1k|            fm->importance = 0;
  212|  13.1k|        }
  213|  24.8k|        fm->buffer_id = ntohl(ofm->buffer_id);
  214|  24.8k|        error = ofputil_port_from_ofp11(ofm->out_port, &fm->out_port);
  215|  24.8k|        if (error) {
  ------------------
  |  Branch (215:13): [True: 1.11k, False: 23.7k]
  ------------------
  216|  1.11k|            return error;
  217|  1.11k|        }
  218|       |
  219|  23.7k|        fm->out_group = (ofm->command == OFPFC_DELETE ||
  ------------------
  |  Branch (219:26): [True: 2.91k, False: 20.8k]
  ------------------
  220|  20.8k|                         ofm->command == OFPFC_DELETE_STRICT
  ------------------
  |  Branch (220:26): [True: 2.13k, False: 18.6k]
  ------------------
  221|  23.7k|                         ? ntohl(ofm->out_group)
  222|  23.7k|                         : OFPG_ANY);
  223|  23.7k|        raw_flags = ofm->flags;
  224|  47.7k|    } else {
  225|  47.7k|        uint16_t command;
  226|       |
  227|  47.7k|        if (raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (227:13): [True: 46.6k, False: 1.07k]
  ------------------
  228|       |            /* Standard OpenFlow 1.0 flow_mod. */
  229|  46.6k|            const struct ofp10_flow_mod *ofm;
  230|       |
  231|       |            /* Get the ofp10_flow_mod. */
  232|  46.6k|            ofm = ofpbuf_pull(&b, sizeof *ofm);
  233|       |
  234|       |            /* Translate the rule. */
  235|  46.6k|            ofputil_match_from_ofp10_match(&ofm->match, &match);
  236|  46.6k|            ofputil_normalize_match(&match);
  237|       |
  238|       |            /* OpenFlow 1.0 says that exact-match rules have to have the
  239|       |             * highest possible priority. */
  240|  46.6k|            fm->priority = (ofm->match.wildcards & htonl(OFPFW10_ALL)
  ------------------
  |  Branch (240:29): [True: 39.6k, False: 6.99k]
  ------------------
  241|  46.6k|                            ? ntohs(ofm->priority)
  242|  46.6k|                            : UINT16_MAX);
  243|       |
  244|       |            /* Translate the message. */
  245|  46.6k|            command = ntohs(ofm->command);
  246|  46.6k|            fm->cookie = htonll(0);
  247|  46.6k|            fm->cookie_mask = htonll(0);
  248|  46.6k|            fm->new_cookie = ofm->cookie;
  249|  46.6k|            fm->idle_timeout = ntohs(ofm->idle_timeout);
  250|  46.6k|            fm->hard_timeout = ntohs(ofm->hard_timeout);
  251|  46.6k|            fm->importance = 0;
  252|  46.6k|            fm->buffer_id = ntohl(ofm->buffer_id);
  253|  46.6k|            fm->out_port = u16_to_ofp(ntohs(ofm->out_port));
  254|  46.6k|            fm->out_group = OFPG_ANY;
  255|  46.6k|            raw_flags = ofm->flags;
  256|  46.6k|        } else if (raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (256:20): [True: 1.07k, False: 0]
  ------------------
  257|       |            /* Nicira extended flow_mod. */
  258|  1.07k|            const struct nx_flow_mod *nfm;
  259|       |
  260|       |            /* Dissect the message. */
  261|  1.07k|            nfm = ofpbuf_pull(&b, sizeof *nfm);
  262|  1.07k|            error = nx_pull_match(&b, ntohs(nfm->match_len),
  263|  1.07k|                                  &match, &fm->cookie, &fm->cookie_mask,
  264|  1.07k|                                  false, tun_table, vl_mff_map);
  265|  1.07k|            if (error) {
  ------------------
  |  Branch (265:17): [True: 168, False: 908]
  ------------------
  266|    168|                return error;
  267|    168|            }
  268|       |
  269|       |            /* Translate the message. */
  270|    908|            command = ntohs(nfm->command);
  271|    908|            if ((command & 0xff) == OFPFC_ADD && fm->cookie_mask) {
  ------------------
  |  Branch (271:17): [True: 381, False: 527]
  |  Branch (271:50): [True: 65, False: 316]
  ------------------
  272|       |                /* Flow additions may only set a new cookie, not match an
  273|       |                 * existing cookie. */
  274|     65|                return OFPERR_NXBRC_NXM_INVALID;
  275|     65|            }
  276|    843|            fm->priority = ntohs(nfm->priority);
  277|    843|            fm->new_cookie = nfm->cookie;
  278|    843|            fm->idle_timeout = ntohs(nfm->idle_timeout);
  279|    843|            fm->hard_timeout = ntohs(nfm->hard_timeout);
  280|    843|            fm->importance = 0;
  281|    843|            fm->buffer_id = ntohl(nfm->buffer_id);
  282|    843|            fm->out_port = u16_to_ofp(ntohs(nfm->out_port));
  283|    843|            fm->out_group = OFPG_ANY;
  284|    843|            raw_flags = nfm->flags;
  285|    843|        } else {
  286|      0|            OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  287|      0|        }
  288|       |
  289|  47.4k|        fm->modify_cookie = fm->new_cookie != OVS_BE64_MAX;
  ------------------
  |  |   44|  47.4k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  290|  47.4k|        if (protocol & OFPUTIL_P_TID) {
  ------------------
  |  |  103|  47.4k|#define OFPUTIL_P_TID (OFPUTIL_P_OF10_STD_TID | \
  |  |  104|  47.4k|                       OFPUTIL_P_OF10_NXM_TID | \
  |  |  105|  47.4k|                       OFPUTIL_P_OF11_STD |     \
  |  |  106|  47.4k|                       OFPUTIL_P_ANY_OXM)
  |  |  ------------------
  |  |  |  |   82|  47.4k|#define OFPUTIL_P_ANY_OXM (OFPUTIL_P_OF12_OXM | \
  |  |  |  |   83|  47.4k|                           OFPUTIL_P_OF13_OXM | \
  |  |  |  |   84|  47.4k|                           OFPUTIL_P_OF14_OXM | \
  |  |  |  |   85|  47.4k|                           OFPUTIL_P_OF15_OXM)
  |  |  ------------------
  ------------------
  |  Branch (290:13): [True: 47.4k, False: 0]
  ------------------
  291|  47.4k|            fm->command = command & 0xff;
  292|  47.4k|            fm->table_id = command >> 8;
  293|  47.4k|        } 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 "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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|  47.4k|    }
  302|       |
  303|       |    /* Check for mismatched conntrack original direction tuple address fields
  304|       |     * w.r.t. the IP version of the match. */
  305|  71.2k|    if (((match.wc.masks.ct_nw_src || match.wc.masks.ct_nw_dst)
  ------------------
  |  Branch (305:11): [True: 0, False: 71.2k]
  |  Branch (305:39): [True: 0, False: 71.2k]
  ------------------
  306|      0|         && match.flow.dl_type != htons(ETH_TYPE_IP))
  ------------------
  |  Branch (306:13): [True: 0, False: 0]
  ------------------
  307|  71.2k|        || ((ipv6_addr_is_set(&match.wc.masks.ct_ipv6_src)
  ------------------
  |  Branch (307:14): [True: 0, False: 71.2k]
  ------------------
  308|  71.2k|             || ipv6_addr_is_set(&match.wc.masks.ct_ipv6_dst))
  ------------------
  |  Branch (308:17): [True: 0, False: 71.2k]
  ------------------
  309|      0|            && 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|  71.2k|    if (fm->command > OFPFC_DELETE_STRICT) {
  ------------------
  |  Branch (313:9): [True: 4.45k, False: 66.7k]
  ------------------
  314|  4.45k|        return OFPERR_OFPFMFC_BAD_COMMAND;
  315|  4.45k|    }
  316|       |
  317|  66.7k|    fm->ofpacts_tlv_bitmap = 0;
  318|  66.7k|    error = ofpacts_pull_openflow_instructions(&b, b.size, oh->version,
  319|  66.7k|                                               vl_mff_map,
  320|  66.7k|                                               &fm->ofpacts_tlv_bitmap,
  321|  66.7k|                                               ofpacts);
  322|  66.7k|    if (error) {
  ------------------
  |  Branch (322:9): [True: 22.7k, False: 44.0k]
  ------------------
  323|  22.7k|        return error;
  324|  22.7k|    }
  325|  44.0k|    fm->ofpacts = ofpacts->data;
  326|  44.0k|    fm->ofpacts_len = ofpacts->size;
  327|       |
  328|  44.0k|    error = ofputil_decode_flow_mod_flags(raw_flags, fm->command,
  329|  44.0k|                                          oh->version, &fm->flags);
  330|  44.0k|    if (error) {
  ------------------
  |  Branch (330:9): [True: 2.12k, False: 41.9k]
  ------------------
  331|  2.12k|        return error;
  332|  2.12k|    }
  333|       |
  334|  41.9k|    if (fm->flags & OFPUTIL_FF_EMERG) {
  ------------------
  |  Branch (334:9): [True: 159, False: 41.7k]
  ------------------
  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|    159|        return (fm->hard_timeout || fm->idle_timeout
  ------------------
  |  Branch (341:17): [True: 52, False: 107]
  |  Branch (341:37): [True: 11, False: 96]
  ------------------
  342|    159|                ? OFPERR_OFPFMFC_BAD_EMERG_TIMEOUT
  343|    159|                : OFPERR_OFPFMFC_TABLE_FULL);
  344|    159|    }
  345|       |
  346|  41.7k|    struct ofpact_check_params cp = {
  347|  41.7k|        .match = &match,
  348|  41.7k|        .max_ports = max_port,
  349|  41.7k|        .table_id = fm->table_id,
  350|  41.7k|        .n_tables = max_table
  351|  41.7k|    };
  352|  41.7k|    error = ofpacts_check_consistency(fm->ofpacts, fm->ofpacts_len,
  353|  41.7k|                                      protocol, &cp);
  354|  41.7k|    if (!error) {
  ------------------
  |  Branch (354:9): [True: 37.5k, False: 4.18k]
  ------------------
  355|  37.5k|        minimatch_init(&fm->match, &match);
  356|  37.5k|    }
  357|  41.7k|    return error;
  358|  41.9k|}
ofputil_flow_mod_format:
  489|  81.8k|{
  490|  81.8k|    struct ofputil_flow_mod fm;
  491|  81.8k|    struct ofpbuf ofpacts;
  492|  81.8k|    bool need_priority;
  493|  81.8k|    enum ofperr error;
  494|  81.8k|    enum ofpraw raw;
  495|  81.8k|    enum ofputil_protocol protocol;
  496|       |
  497|  81.8k|    protocol = ofputil_protocol_from_ofp_version(oh->version);
  498|  81.8k|    protocol = ofputil_protocol_set_tid(protocol, true);
  499|       |
  500|  81.8k|    ofpbuf_init(&ofpacts, 64);
  501|  81.8k|    error = ofputil_decode_flow_mod(&fm, oh, protocol, NULL, NULL, &ofpacts,
  502|  81.8k|                                    OFPP_MAX, 255);
  ------------------
  |  |   33|  81.8k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  81.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  503|  81.8k|    if (error) {
  ------------------
  |  Branch (503:9): [True: 44.3k, False: 37.5k]
  ------------------
  504|  44.3k|        ofpbuf_uninit(&ofpacts);
  505|  44.3k|        return error;
  506|  44.3k|    }
  507|       |
  508|  37.5k|    ds_put_char(s, ' ');
  509|  37.5k|    switch (fm.command) {
  510|  25.5k|    case OFPFC_ADD:
  ------------------
  |  Branch (510:5): [True: 25.5k, False: 12.0k]
  ------------------
  511|  25.5k|        ds_put_cstr(s, "ADD");
  512|  25.5k|        break;
  513|  5.56k|    case OFPFC_MODIFY:
  ------------------
  |  Branch (513:5): [True: 5.56k, False: 32.0k]
  ------------------
  514|  5.56k|        ds_put_cstr(s, "MOD");
  515|  5.56k|        break;
  516|  4.02k|    case OFPFC_MODIFY_STRICT:
  ------------------
  |  Branch (516:5): [True: 4.02k, False: 33.5k]
  ------------------
  517|  4.02k|        ds_put_cstr(s, "MOD_STRICT");
  518|  4.02k|        break;
  519|  1.27k|    case OFPFC_DELETE:
  ------------------
  |  Branch (519:5): [True: 1.27k, False: 36.2k]
  ------------------
  520|  1.27k|        ds_put_cstr(s, "DEL");
  521|  1.27k|        break;
  522|  1.18k|    case OFPFC_DELETE_STRICT:
  ------------------
  |  Branch (522:5): [True: 1.18k, False: 36.3k]
  ------------------
  523|  1.18k|        ds_put_cstr(s, "DEL_STRICT");
  524|  1.18k|        break;
  525|      0|    default:
  ------------------
  |  Branch (525:5): [True: 0, False: 37.5k]
  ------------------
  526|      0|        ds_put_format(s, "cmd:%d", fm.command);
  527|  37.5k|    }
  528|  37.5k|    if (fm.table_id != 0
  ------------------
  |  Branch (528:9): [True: 15.6k, False: 21.8k]
  ------------------
  529|  21.8k|        || ofputil_table_map_get_name(table_map, fm.table_id)) {
  ------------------
  |  Branch (529:12): [True: 0, False: 21.8k]
  ------------------
  530|  15.6k|        ds_put_format(s, " table:");
  531|  15.6k|        ofputil_format_table(fm.table_id, table_map, s);
  532|  15.6k|    }
  533|       |
  534|  37.5k|    ds_put_char(s, ' ');
  535|  37.5k|    ofpraw_decode(&raw, oh);
  536|  37.5k|    if (verbosity >= 3 && raw == OFPRAW_OFPT10_FLOW_MOD) {
  ------------------
  |  Branch (536:9): [True: 0, False: 37.5k]
  |  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|  37.5k|    } else if (verbosity >= 3 && raw == OFPRAW_NXT_FLOW_MOD) {
  ------------------
  |  Branch (542:16): [True: 0, False: 37.5k]
  |  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|  37.5k|    } else {
  554|  37.5k|        struct match match;
  555|  37.5k|        minimatch_expand(&fm.match, &match);
  556|  37.5k|        match_format(&match, port_map, s, fm.priority);
  557|       |
  558|       |        /* match_format() does print priority. */
  559|  37.5k|        need_priority = false;
  560|  37.5k|    }
  561|       |
  562|  37.5k|    if (ds_last(s) != ' ') {
  ------------------
  |  Branch (562:9): [True: 37.3k, False: 205]
  ------------------
  563|  37.3k|        ds_put_char(s, ' ');
  564|  37.3k|    }
  565|  37.5k|    if (fm.new_cookie != htonll(0) && fm.new_cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  36.2k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (565:9): [True: 36.2k, False: 1.32k]
  |  Branch (565:39): [True: 29.7k, False: 6.49k]
  ------------------
  566|  29.7k|        ds_put_format(s, "cookie:0x%"PRIx64" ", ntohll(fm.new_cookie));
  567|  29.7k|    }
  568|  37.5k|    if (fm.cookie_mask != htonll(0)) {
  ------------------
  |  Branch (568:9): [True: 6.49k, False: 31.0k]
  ------------------
  569|  6.49k|        ds_put_format(s, "cookie:0x%"PRIx64"/0x%"PRIx64" ",
  570|  6.49k|                ntohll(fm.cookie), ntohll(fm.cookie_mask));
  571|  6.49k|    }
  572|  37.5k|    if (fm.idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  37.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (572:9): [True: 26.8k, False: 10.7k]
  ------------------
  573|  26.8k|        ds_put_format(s, "idle:%"PRIu16" ", fm.idle_timeout);
  574|  26.8k|    }
  575|  37.5k|    if (fm.hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  37.5k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (575:9): [True: 30.5k, False: 6.96k]
  ------------------
  576|  30.5k|        ds_put_format(s, "hard:%"PRIu16" ", fm.hard_timeout);
  577|  30.5k|    }
  578|  37.5k|    if (fm.importance != 0) {
  ------------------
  |  Branch (578:9): [True: 5.68k, False: 31.8k]
  ------------------
  579|  5.68k|        ds_put_format(s, "importance:%"PRIu16" ", fm.importance);
  580|  5.68k|    }
  581|  37.5k|    if (fm.priority != OFP_DEFAULT_PRIORITY && need_priority) {
  ------------------
  |  |  138|  75.1k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  |  Branch (581:9): [True: 37.3k, False: 210]
  |  Branch (581:48): [True: 0, False: 37.3k]
  ------------------
  582|      0|        ds_put_format(s, "pri:%d ", fm.priority);
  583|      0|    }
  584|  37.5k|    if (fm.buffer_id != UINT32_MAX) {
  ------------------
  |  Branch (584:9): [True: 36.6k, False: 890]
  ------------------
  585|  36.6k|        ds_put_format(s, "buf:0x%"PRIx32" ", fm.buffer_id);
  586|  36.6k|    }
  587|  37.5k|    if (fm.out_port != OFPP_ANY) {
  ------------------
  |  |   80|  37.5k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  37.5k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  37.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (587:9): [True: 36.4k, False: 1.14k]
  ------------------
  588|  36.4k|        ds_put_format(s, "out_port:");
  589|  36.4k|        ofputil_format_port(fm.out_port, port_map, s);
  590|  36.4k|        ds_put_char(s, ' ');
  591|  36.4k|    }
  592|       |
  593|  37.5k|    if (oh->version == OFP10_VERSION || oh->version == OFP11_VERSION) {
  ------------------
  |  Branch (593:9): [True: 24.0k, False: 13.4k]
  |  Branch (593:41): [True: 2.00k, False: 11.4k]
  ------------------
  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|  26.0k|        fm.flags &= ~OFPUTIL_FF_RESET_COUNTS;
  598|  26.0k|    }
  599|  37.5k|    ofputil_flow_mod_flags_format(s, fm.flags);
  600|       |
  601|  37.5k|    ds_put_cstr(s, "actions=");
  602|  37.5k|    struct ofpact_format_params fp = {
  603|  37.5k|        .port_map = port_map,
  604|  37.5k|        .table_map = table_map,
  605|  37.5k|        .s = s,
  606|  37.5k|    };
  607|  37.5k|    ofpacts_format(fm.ofpacts, fm.ofpacts_len, &fp);
  608|  37.5k|    ofpbuf_uninit(&ofpacts);
  609|  37.5k|    minimatch_destroy(&fm.match);
  610|       |
  611|  37.5k|    return 0;
  612|  37.5k|}
ofputil_decode_flow_stats_request:
  697|  4.34k|{
  698|  4.34k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  699|  4.34k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  700|  4.34k|    switch ((int) raw) {
  701|    362|    case OFPRAW_OFPST10_FLOW_REQUEST:
  ------------------
  |  Branch (701:5): [True: 362, False: 3.97k]
  ------------------
  702|    362|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, false);
  703|       |
  704|  1.14k|    case OFPRAW_OFPST10_AGGREGATE_REQUEST:
  ------------------
  |  Branch (704:5): [True: 1.14k, False: 3.20k]
  ------------------
  705|  1.14k|        return ofputil_decode_ofpst10_flow_request(fsr, b.data, true);
  706|       |
  707|    194|    case OFPRAW_OFPST11_FLOW_REQUEST:
  ------------------
  |  Branch (707:5): [True: 194, False: 4.14k]
  ------------------
  708|    194|        return ofputil_decode_ofpst11_flow_request(fsr, &b, false, tun_table,
  709|    194|                                                   vl_mff_map);
  710|       |
  711|  1.28k|    case OFPRAW_OFPST11_AGGREGATE_REQUEST:
  ------------------
  |  Branch (711:5): [True: 1.28k, False: 3.06k]
  ------------------
  712|  1.28k|        return ofputil_decode_ofpst11_flow_request(fsr, &b, true, tun_table,
  713|  1.28k|                                                   vl_mff_map);
  714|       |
  715|    391|    case OFPRAW_OFPST15_AGGREGATE_REQUEST:
  ------------------
  |  Branch (715:5): [True: 391, False: 3.95k]
  ------------------
  716|    391|       return ofputil_decode_ofpst11_flow_request(fsr, &b, true,
  717|    391|                                                  tun_table, vl_mff_map);
  718|       |
  719|    730|    case OFPRAW_NXST_FLOW_REQUEST:
  ------------------
  |  Branch (719:5): [True: 730, False: 3.61k]
  ------------------
  720|    730|        return ofputil_decode_nxst_flow_request(fsr, &b, false, tun_table,
  721|    730|                                                vl_mff_map);
  722|       |
  723|    244|    case OFPRAW_NXST_AGGREGATE_REQUEST:
  ------------------
  |  Branch (723:5): [True: 244, False: 4.09k]
  ------------------
  724|    244|        return ofputil_decode_nxst_flow_request(fsr, &b, true, tun_table,
  725|    244|                                                vl_mff_map);
  726|       |
  727|      0|    default:
  ------------------
  |  Branch (727:5): [True: 0, False: 4.34k]
  ------------------
  728|       |        /* Hey, the caller lied. */
  729|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  730|  4.34k|    }
  731|  4.34k|}
ofputil_flow_stats_request_format:
  819|  1.92k|{
  820|  1.92k|    if (fsr->table_id != 0xff) {
  ------------------
  |  Branch (820:9): [True: 1.11k, False: 808]
  ------------------
  821|  1.11k|        ds_put_format(s, " table=");
  822|  1.11k|        ofputil_format_table(fsr->table_id, table_map, s);
  823|  1.11k|    }
  824|       |
  825|  1.92k|    if (fsr->out_port != OFPP_ANY) {
  ------------------
  |  |   80|  1.92k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  1.92k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  1.92k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (825:9): [True: 1.76k, False: 159]
  ------------------
  826|  1.76k|        ds_put_cstr(s, " out_port=");
  827|  1.76k|        ofputil_format_port(fsr->out_port, port_map, s);
  828|  1.76k|    }
  829|       |
  830|  1.92k|    ds_put_char(s, ' ');
  831|  1.92k|    match_format(&fsr->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  1.92k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  832|  1.92k|}
ofputil_decode_flow_stats_reply:
  896|  27.6k|{
  897|  27.6k|    const struct ofp_header *oh;
  898|  27.6k|    size_t instructions_len;
  899|  27.6k|    enum ofperr error;
  900|  27.6k|    enum ofpraw raw;
  901|       |
  902|  27.6k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (902:14): [True: 7.63k, False: 20.0k]
  ------------------
  903|  27.6k|             : ofpraw_pull(&raw, msg));
  904|  27.6k|    if (error) {
  ------------------
  |  Branch (904:9): [True: 0, False: 27.6k]
  ------------------
  905|      0|        return error;
  906|      0|    }
  907|  27.6k|    oh = msg->header;
  908|       |
  909|  27.6k|    if (!msg->size) {
  ------------------
  |  Branch (909:9): [True: 2.90k, False: 24.7k]
  ------------------
  910|  2.90k|        return EOF;
  911|  24.7k|    } else if (raw == OFPRAW_OFPST15_FLOW_REPLY) {
  ------------------
  |  Branch (911:16): [True: 12.1k, False: 12.5k]
  ------------------
  912|  12.1k|        const struct ofp15_flow_desc *ofd;
  913|  12.1k|        size_t length;
  914|  12.1k|        uint16_t padded_match_len;
  915|  12.1k|        uint16_t stat_len;
  916|  12.1k|        uint8_t oxs_field_set;
  917|       |
  918|  12.1k|        ofd = ofpbuf_try_pull(msg, sizeof *ofd);
  919|  12.1k|        if (!ofd) {
  ------------------
  |  Branch (919:13): [True: 2.66k, False: 9.49k]
  ------------------
  920|  2.66k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %" PRIu32
  ------------------
  |  |  224|  2.66k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.66k|    do {                                                                \
  |  |  |  |  288|  2.66k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.66k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.66k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.66k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.66k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  921|  2.66k|                         " leftover " "bytes at end", msg->size);
  922|  2.66k|            return EINVAL;
  923|  2.66k|        }
  924|       |
  925|  9.49k|        length = ntohs(ofd->length);
  926|  9.49k|        if (length < sizeof *ofd) {
  ------------------
  |  Branch (926:13): [True: 647, False: 8.84k]
  ------------------
  927|    647|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|    647|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    647|    do {                                                                \
  |  |  |  |  288|    647|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    647|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 647]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    647|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 647]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  928|    647|                         "length %" PRIuSIZE, length);
  929|    647|            return EINVAL;
  930|    647|        }
  931|       |
  932|  8.84k|        if (ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  ------------------
  |  Branch (932:13): [True: 1.73k, False: 7.10k]
  ------------------
  933|  8.84k|                                     &padded_match_len)) {
  934|  1.73k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|  1.73k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.73k|    do {                                                                \
  |  |  |  |  288|  1.73k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.73k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.73k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.73k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.73k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  935|  1.73k|            return EINVAL;
  936|  1.73k|        }
  937|       |
  938|  7.10k|        fs->priority = ntohs(ofd->priority);
  939|  7.10k|        fs->table_id = ofd->table_id;
  940|  7.10k|        fs->cookie = ofd->cookie;
  941|  7.10k|        fs->idle_timeout = ntohs(ofd->idle_timeout);
  942|  7.10k|        fs->hard_timeout = ntohs(ofd->hard_timeout);
  943|  7.10k|        fs->importance = ntohs(ofd->importance);
  944|       |
  945|  7.10k|        error = ofputil_decode_flow_mod_flags(ofd->flags, -1, oh->version,
  946|  7.10k|                                                &fs->flags);
  947|  7.10k|        if (error) {
  ------------------
  |  Branch (947:13): [True: 572, False: 6.53k]
  ------------------
  948|    572|            return error;
  949|    572|        }
  950|       |
  951|  6.53k|        struct oxs_stats oxs;
  952|  6.53k|        if (oxs_pull_stat(msg, &oxs, &stat_len, &oxs_field_set)) {
  ------------------
  |  Branch (952:13): [True: 677, False: 5.85k]
  ------------------
  953|    677|            VLOG_WARN_RL(&rl, "OXS OFPST_FLOW reply bad stats");
  ------------------
  |  |  224|    677|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    677|    do {                                                                \
  |  |  |  |  288|    677|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    677|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 677]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    677|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 677]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  954|    677|            return EINVAL;
  955|    677|        }
  956|  5.85k|        fs->duration_sec = oxs.duration_sec;
  957|  5.85k|        fs->duration_nsec = oxs.duration_nsec;
  958|  5.85k|        fs->packet_count = oxs.packet_count;
  959|  5.85k|        fs->byte_count = oxs.byte_count;
  960|  5.85k|        fs->idle_age = oxs.idle_age == UINT32_MAX ? -1 : oxs.idle_age;
  ------------------
  |  Branch (960:24): [True: 5.85k, False: 0]
  ------------------
  961|  5.85k|        fs->hard_age = -1;
  962|       |
  963|  5.85k|        instructions_len = length - sizeof *ofd - padded_match_len - stat_len;
  964|  12.5k|    } else if (raw == OFPRAW_OFPST11_FLOW_REPLY
  ------------------
  |  Branch (964:16): [True: 1.59k, False: 11.0k]
  ------------------
  965|  11.0k|               || raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (965:19): [True: 3.23k, False: 7.77k]
  ------------------
  966|  4.82k|        const struct ofp11_flow_stats *ofs;
  967|  4.82k|        size_t length;
  968|  4.82k|        uint16_t padded_match_len;
  969|       |
  970|  4.82k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
  971|  4.82k|        if (!ofs) {
  ------------------
  |  Branch (971:13): [True: 883, False: 3.93k]
  ------------------
  972|    883|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    883|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    883|    do {                                                                \
  |  |  |  |  288|    883|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    883|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 883]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    883|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 883]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|    883|                         "bytes at end", msg->size);
  974|    883|            return OFPERR_OFPBRC_BAD_LEN;
  975|    883|        }
  976|       |
  977|  3.93k|        length = ntohs(ofs->length);
  978|  3.93k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (978:13): [True: 22, False: 3.91k]
  ------------------
  979|     22|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|     22|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     22|    do {                                                                \
  |  |  |  |  288|     22|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     22|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 22]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     22|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 22]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  980|     22|                         "length %"PRIuSIZE, length);
  981|     22|            return OFPERR_OFPBRC_BAD_LEN;
  982|     22|        }
  983|       |
  984|  3.91k|        error = ofputil_pull_ofp11_match(msg, NULL, NULL, &fs->match,
  985|  3.91k|                                         &padded_match_len);
  986|  3.91k|        if (error) {
  ------------------
  |  Branch (986:13): [True: 796, False: 3.12k]
  ------------------
  987|    796|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad match");
  ------------------
  |  |  224|    796|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    796|    do {                                                                \
  |  |  |  |  288|    796|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    796|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 796]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    796|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 796]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  988|    796|            return error;
  989|    796|        }
  990|  3.12k|        instructions_len = length - sizeof *ofs - padded_match_len;
  991|       |
  992|  3.12k|        fs->priority = ntohs(ofs->priority);
  993|  3.12k|        fs->table_id = ofs->table_id;
  994|  3.12k|        fs->duration_sec = ntohl(ofs->duration_sec);
  995|  3.12k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
  996|  3.12k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
  997|  3.12k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
  998|  3.12k|        if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (998:13): [True: 45, False: 3.07k]
  ------------------
  999|     45|            fs->importance = ntohs(ofs->importance);
 1000|  3.07k|        } else {
 1001|  3.07k|            fs->importance = 0;
 1002|  3.07k|        }
 1003|  3.12k|        if (raw == OFPRAW_OFPST13_FLOW_REPLY) {
  ------------------
  |  Branch (1003:13): [True: 2.06k, False: 1.06k]
  ------------------
 1004|  2.06k|            error = ofputil_decode_flow_mod_flags(ofs->flags, -1, oh->version,
 1005|  2.06k|                                                  &fs->flags);
 1006|  2.06k|            if (error) {
  ------------------
  |  Branch (1006:17): [True: 1.64k, False: 419]
  ------------------
 1007|  1.64k|                return error;
 1008|  1.64k|            }
 1009|  2.06k|        } else {
 1010|  1.06k|            fs->flags = 0;
 1011|  1.06k|        }
 1012|  1.48k|        fs->idle_age = -1;
 1013|  1.48k|        fs->hard_age = -1;
 1014|  1.48k|        fs->cookie = ofs->cookie;
 1015|  1.48k|        fs->packet_count = ntohll(ofs->packet_count);
 1016|  1.48k|        fs->byte_count = ntohll(ofs->byte_count);
 1017|  7.77k|    } else if (raw == OFPRAW_OFPST10_FLOW_REPLY) {
  ------------------
  |  Branch (1017:16): [True: 5.00k, False: 2.77k]
  ------------------
 1018|  5.00k|        const struct ofp10_flow_stats *ofs;
 1019|  5.00k|        size_t length;
 1020|       |
 1021|  5.00k|        ofs = ofpbuf_try_pull(msg, sizeof *ofs);
 1022|  5.00k|        if (!ofs) {
  ------------------
  |  Branch (1022:13): [True: 82, False: 4.92k]
  ------------------
 1023|     82|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|     82|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     82|    do {                                                                \
  |  |  |  |  288|     82|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     82|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 82]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     82|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 82]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1024|     82|                         "bytes at end", msg->size);
 1025|     82|            return OFPERR_OFPBRC_BAD_LEN;
 1026|     82|        }
 1027|       |
 1028|  4.92k|        length = ntohs(ofs->length);
 1029|  4.92k|        if (length < sizeof *ofs) {
  ------------------
  |  Branch (1029:13): [True: 3.37k, False: 1.54k]
  ------------------
 1030|  3.37k|            VLOG_WARN_RL(&rl, "OFPST_FLOW reply claims invalid "
  ------------------
  |  |  224|  3.37k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.37k|    do {                                                                \
  |  |  |  |  288|  3.37k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.37k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.37k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.37k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.37k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1031|  3.37k|                         "length %"PRIuSIZE, length);
 1032|  3.37k|            return OFPERR_OFPBRC_BAD_LEN;
 1033|  3.37k|        }
 1034|  1.54k|        instructions_len = length - sizeof *ofs;
 1035|       |
 1036|  1.54k|        fs->cookie = get_32aligned_be64(&ofs->cookie);
 1037|  1.54k|        ofputil_match_from_ofp10_match(&ofs->match, &fs->match);
 1038|  1.54k|        fs->priority = ntohs(ofs->priority);
 1039|  1.54k|        fs->table_id = ofs->table_id;
 1040|  1.54k|        fs->duration_sec = ntohl(ofs->duration_sec);
 1041|  1.54k|        fs->duration_nsec = ntohl(ofs->duration_nsec);
 1042|  1.54k|        fs->idle_timeout = ntohs(ofs->idle_timeout);
 1043|  1.54k|        fs->hard_timeout = ntohs(ofs->hard_timeout);
 1044|  1.54k|        fs->importance = 0;
 1045|  1.54k|        fs->idle_age = -1;
 1046|  1.54k|        fs->hard_age = -1;
 1047|  1.54k|        fs->packet_count = ntohll(get_32aligned_be64(&ofs->packet_count));
 1048|  1.54k|        fs->byte_count = ntohll(get_32aligned_be64(&ofs->byte_count));
 1049|  1.54k|        fs->flags = 0;
 1050|  2.77k|    } else if (raw == OFPRAW_NXST_FLOW_REPLY) {
  ------------------
  |  Branch (1050:16): [True: 2.77k, False: 0]
  ------------------
 1051|  2.77k|        const struct nx_flow_stats *nfs;
 1052|  2.77k|        size_t match_len, length;
 1053|       |
 1054|  2.77k|        nfs = ofpbuf_try_pull(msg, sizeof *nfs);
 1055|  2.77k|        if (!nfs) {
  ------------------
  |  Branch (1055:13): [True: 508, False: 2.26k]
  ------------------
 1056|    508|            VLOG_WARN_RL(&rl, "NXST_FLOW reply has %"PRIu32" leftover "
  ------------------
  |  |  224|    508|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    508|    do {                                                                \
  |  |  |  |  288|    508|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    508|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 508]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    508|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 508]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1057|    508|                         "bytes at end", msg->size);
 1058|    508|            return OFPERR_OFPBRC_BAD_LEN;
 1059|    508|        }
 1060|       |
 1061|  2.26k|        length = ntohs(nfs->length);
 1062|  2.26k|        match_len = ntohs(nfs->match_len);
 1063|  2.26k|        if (length < sizeof *nfs + ROUND_UP(match_len, 8)) {
  ------------------
  |  |  303|  2.26k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  2.26k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (1063:13): [True: 752, False: 1.51k]
  ------------------
 1064|    752|            VLOG_WARN_RL(&rl, "NXST_FLOW reply with match_len=%"PRIuSIZE" "
  ------------------
  |  |  224|    752|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    752|    do {                                                                \
  |  |  |  |  288|    752|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    752|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 752]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    752|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 752]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1065|    752|                         "claims invalid length %"PRIuSIZE, match_len, length);
 1066|    752|            return OFPERR_OFPBRC_BAD_LEN;
 1067|    752|        }
 1068|  1.51k|        error = nx_pull_match(msg, match_len, &fs->match, NULL, NULL, false,
 1069|  1.51k|                              NULL, NULL);
 1070|  1.51k|        if (error) {
  ------------------
  |  Branch (1070:13): [True: 416, False: 1.09k]
  ------------------
 1071|    416|            return error;
 1072|    416|        }
 1073|  1.09k|        instructions_len = length - sizeof *nfs - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  1.09k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.09k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
 1074|       |
 1075|  1.09k|        fs->cookie = nfs->cookie;
 1076|  1.09k|        fs->table_id = nfs->table_id;
 1077|  1.09k|        fs->duration_sec = ntohl(nfs->duration_sec);
 1078|  1.09k|        fs->duration_nsec = ntohl(nfs->duration_nsec);
 1079|  1.09k|        fs->priority = ntohs(nfs->priority);
 1080|  1.09k|        fs->idle_timeout = ntohs(nfs->idle_timeout);
 1081|  1.09k|        fs->hard_timeout = ntohs(nfs->hard_timeout);
 1082|  1.09k|        fs->importance = 0;
 1083|  1.09k|        fs->idle_age = -1;
 1084|  1.09k|        fs->hard_age = -1;
 1085|  1.09k|        if (flow_age_extension) {
  ------------------
  |  Branch (1085:13): [True: 1.09k, False: 0]
  ------------------
 1086|  1.09k|            if (nfs->idle_age) {
  ------------------
  |  Branch (1086:17): [True: 134, False: 962]
  ------------------
 1087|    134|                fs->idle_age = ntohs(nfs->idle_age) - 1;
 1088|    134|            }
 1089|  1.09k|            if (nfs->hard_age) {
  ------------------
  |  Branch (1089:17): [True: 915, False: 181]
  ------------------
 1090|    915|                fs->hard_age = ntohs(nfs->hard_age) - 1;
 1091|    915|            }
 1092|  1.09k|        }
 1093|  1.09k|        fs->packet_count = ntohll(nfs->packet_count);
 1094|  1.09k|        fs->byte_count = ntohll(nfs->byte_count);
 1095|  1.09k|        fs->flags = 0;
 1096|  1.09k|    } else {
 1097|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1098|      0|    }
 1099|       |
 1100|  9.98k|    error = ofpacts_pull_openflow_instructions(msg, instructions_len,
 1101|  9.98k|                                               oh->version, NULL, NULL,
 1102|  9.98k|                                               ofpacts);
 1103|  9.98k|    if (error) {
  ------------------
  |  Branch (1103:9): [True: 2.34k, False: 7.63k]
  ------------------
 1104|  2.34k|        VLOG_WARN_RL(&rl, "OFPST_FLOW reply bad instructions");
  ------------------
  |  |  224|  2.34k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.34k|    do {                                                                \
  |  |  |  |  288|  2.34k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.34k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.34k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.34k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.34k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1105|  2.34k|        return error;
 1106|  2.34k|    }
 1107|  7.63k|    fs->ofpacts = ofpacts->data;
 1108|  7.63k|    fs->ofpacts_len = ofpacts->size;
 1109|       |
 1110|  7.63k|    return 0;
 1111|  9.98k|}
ofputil_flow_stats_format:
 1292|  7.63k|{
 1293|  7.63k|    if (show_stats || fs->cookie) {
  ------------------
  |  Branch (1293:9): [True: 7.63k, False: 0]
  |  Branch (1293:23): [True: 0, False: 0]
  ------------------
 1294|  7.63k|        ds_put_format(string, "%scookie=%s0x%"PRIx64", ",
 1295|  7.63k|                      colors.param, colors.end, ntohll(fs->cookie));
 1296|  7.63k|    }
 1297|  7.63k|    if (show_stats) {
  ------------------
  |  Branch (1297:9): [True: 7.63k, False: 0]
  ------------------
 1298|  7.63k|        ds_put_format(string, "%sduration=%s", colors.param, colors.end);
 1299|  7.63k|        ofp_print_duration(string, fs->duration_sec, fs->duration_nsec);
 1300|  7.63k|        ds_put_cstr(string, ", ");
 1301|  7.63k|    }
 1302|       |
 1303|  7.63k|    if (show_stats || fs->table_id
  ------------------
  |  Branch (1303:9): [True: 7.63k, False: 0]
  |  Branch (1303:23): [True: 0, False: 0]
  ------------------
 1304|  7.63k|        || ofputil_table_map_get_name(table_map, fs->table_id) != NULL) {
  ------------------
  |  Branch (1304:12): [True: 0, False: 0]
  ------------------
 1305|  7.63k|        ds_put_format(string, "%stable=%s", colors.special, colors.end);
 1306|  7.63k|        ofputil_format_table(fs->table_id, table_map, string);
 1307|  7.63k|        ds_put_cstr(string, ", ");
 1308|  7.63k|    }
 1309|  7.63k|    if (show_stats) {
  ------------------
  |  Branch (1309:9): [True: 7.63k, False: 0]
  ------------------
 1310|  7.63k|        print_flow_stat(string, "n_packets", fs->packet_count);
 1311|  7.63k|        print_flow_stat(string, "n_bytes", fs->byte_count);
 1312|  7.63k|    }
 1313|  7.63k|    if (fs->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  7.63k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1313:9): [True: 5.85k, False: 1.77k]
  ------------------
 1314|  5.85k|        ds_put_format(string, "%sidle_timeout=%s%"PRIu16", ",
 1315|  5.85k|                      colors.param, colors.end, fs->idle_timeout);
 1316|  5.85k|    }
 1317|  7.63k|    if (fs->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  7.63k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1317:9): [True: 5.84k, False: 1.78k]
  ------------------
 1318|  5.84k|        ds_put_format(string, "%shard_timeout=%s%"PRIu16", ",
 1319|  5.84k|                      colors.param, colors.end, fs->hard_timeout);
 1320|  5.84k|    }
 1321|  7.63k|    if (fs->flags) {
  ------------------
  |  Branch (1321:9): [True: 2.06k, False: 5.56k]
  ------------------
 1322|  2.06k|        ofputil_flow_mod_flags_format(string, fs->flags);
 1323|  2.06k|    }
 1324|  7.63k|    if (fs->importance != 0) {
  ------------------
  |  Branch (1324:9): [True: 5.77k, False: 1.86k]
  ------------------
 1325|  5.77k|        ds_put_format(string, "%simportance=%s%"PRIu16", ",
 1326|  5.77k|                      colors.param, colors.end, fs->importance);
 1327|  5.77k|    }
 1328|  7.63k|    if (show_stats && fs->idle_age >= 0) {
  ------------------
  |  Branch (1328:9): [True: 7.63k, False: 0]
  |  Branch (1328:23): [True: 123, False: 7.51k]
  ------------------
 1329|    123|        ds_put_format(string, "%sidle_age=%s%d, ",
 1330|    123|                      colors.param, colors.end, fs->idle_age);
 1331|    123|    }
 1332|  7.63k|    if (show_stats && fs->hard_age >= 0 && fs->hard_age != fs->duration_sec) {
  ------------------
  |  Branch (1332:9): [True: 7.63k, False: 0]
  |  Branch (1332:23): [True: 900, False: 6.73k]
  |  Branch (1332:44): [True: 864, False: 36]
  ------------------
 1333|    864|        ds_put_format(string, "%shard_age=%s%d, ",
 1334|    864|                      colors.param, colors.end, fs->hard_age);
 1335|    864|    }
 1336|       |
 1337|       |    /* Print the match, followed by a space (but omit the space if the match
 1338|       |     * was an empty string). */
 1339|  7.63k|    size_t length = string->length;
 1340|  7.63k|    match_format(&fs->match, port_map, string, fs->priority);
 1341|  7.63k|    if (string->length != length) {
  ------------------
  |  Branch (1341:9): [True: 7.58k, False: 51]
  ------------------
 1342|  7.58k|        ds_put_char(string, ' ');
 1343|  7.58k|    }
 1344|       |
 1345|  7.63k|    ds_put_format(string, "%sactions=%s", colors.actions, colors.end);
 1346|  7.63k|    struct ofpact_format_params fp = {
 1347|  7.63k|        .port_map = port_map,
 1348|  7.63k|        .table_map = table_map,
 1349|  7.63k|        .s = string,
 1350|  7.63k|    };
 1351|  7.63k|    ofpacts_format(fs->ofpacts, fs->ofpacts_len, &fp);
 1352|  7.63k|}
ofputil_decode_aggregate_stats_reply:
 1401|  2.65k|{
 1402|  2.65k|    struct ofpbuf msg = ofpbuf_const_initializer(reply, ntohs(reply->length));
 1403|  2.65k|    enum ofpraw raw;
 1404|       |
 1405|  2.65k|    raw = ofpraw_pull_assert(&msg);
 1406|  2.65k|    if (raw == OFPRAW_OFPST15_AGGREGATE_REPLY) {
  ------------------
  |  Branch (1406:9): [True: 2.61k, False: 34]
  ------------------
 1407|  2.61k|        struct oxs_stats oxs;
 1408|  2.61k|        uint16_t statlen;
 1409|  2.61k|        uint8_t oxs_field_set;
 1410|  2.61k|        enum ofperr error = oxs_pull_stat(&msg, &oxs, &statlen,
 1411|  2.61k|                                          &oxs_field_set);
 1412|  2.61k|        if (error) {
  ------------------
  |  Branch (1412:13): [True: 2.50k, False: 110]
  ------------------
 1413|  2.50k|            return error;
 1414|  2.50k|        }
 1415|    110|        stats->packet_count = oxs.packet_count;
 1416|    110|        stats->byte_count = oxs.byte_count;
 1417|    110|        stats->flow_count = oxs.flow_count;
 1418|    110|    } else {
 1419|     34|        struct ofp_aggregate_stats_reply *asr = msg.msg;
 1420|     34|        stats->packet_count = ntohll(get_32aligned_be64(&asr->packet_count));
 1421|     34|        stats->byte_count = ntohll(get_32aligned_be64(&asr->byte_count));
 1422|     34|        stats->flow_count = ntohl(asr->flow_count);
 1423|     34|    }
 1424|       |
 1425|    144|    return 0;
 1426|  2.65k|}
ofputil_aggregate_stats_format:
 1431|    144|{
 1432|    144|    ds_put_format(s, " packet_count=%"PRIu64, as->packet_count);
 1433|    144|    ds_put_format(s, " byte_count=%"PRIu64, as->byte_count);
 1434|       |    ds_put_format(s, " flow_count=%"PRIu32, as->flow_count);
 1435|    144|}
ofp-flow.c:ofputil_decode_flow_mod_flags:
   63|  53.1k|{
   64|  53.1k|    uint16_t raw_flags = ntohs(raw_flags_);
   65|  53.1k|    const struct ofputil_flow_mod_flag *f;
   66|       |
   67|  53.1k|    *flagsp = 0;
   68|   372k|    for (f = ofputil_flow_mod_flags; f->raw_flag; f++) {
  ------------------
  |  Branch (68:38): [True: 319k, False: 53.1k]
  ------------------
   69|   319k|        if (raw_flags & f->raw_flag
  ------------------
  |  Branch (69:13): [True: 40.2k, False: 278k]
  ------------------
   70|  40.2k|            && version >= f->min_version
  ------------------
  |  Branch (70:16): [True: 39.7k, False: 489]
  ------------------
   71|  39.7k|            && (!f->max_version || version <= f->max_version)) {
  ------------------
  |  Branch (71:17): [True: 33.0k, False: 6.73k]
  |  Branch (71:36): [True: 898, False: 5.83k]
  ------------------
   72|  33.9k|            raw_flags &= ~f->raw_flag;
   73|  33.9k|            *flagsp |= f->flag;
   74|  33.9k|        }
   75|   319k|    }
   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|  53.1k|    if ((version == OFP10_VERSION || version == OFP11_VERSION)
  ------------------
  |  Branch (82:10): [True: 27.1k, False: 26.0k]
  |  Branch (82:38): [True: 2.10k, False: 23.9k]
  ------------------
   83|  29.2k|        && command == OFPFC_ADD) {
  ------------------
  |  Branch (83:12): [True: 21.1k, False: 8.11k]
  ------------------
   84|  21.1k|        *flagsp |= OFPUTIL_FF_RESET_COUNTS;
   85|  21.1k|    }
   86|       |
   87|  53.1k|    return raw_flags ? OFPERR_OFPFMFC_BAD_FLAGS : 0;
  ------------------
  |  Branch (87:12): [True: 4.33k, False: 48.8k]
  ------------------
   88|  53.1k|}
ofp-flow.c:ofputil_decode_ofpst10_flow_request:
  618|  1.50k|{
  619|  1.50k|    fsr->aggregate = aggregate;
  620|  1.50k|    ofputil_match_from_ofp10_match(&ofsr->match, &fsr->match);
  621|  1.50k|    fsr->out_port = u16_to_ofp(ntohs(ofsr->out_port));
  622|  1.50k|    fsr->out_group = OFPG_ANY;
  623|  1.50k|    fsr->table_id = ofsr->table_id;
  624|  1.50k|    fsr->cookie = fsr->cookie_mask = htonll(0);
  625|       |
  626|  1.50k|    return 0;
  627|  1.50k|}
ofp-flow.c:ofputil_decode_ofpst11_flow_request:
  634|  1.86k|{
  635|  1.86k|    const struct ofp11_flow_stats_request *ofsr;
  636|  1.86k|    enum ofperr error;
  637|       |
  638|  1.86k|    ofsr = ofpbuf_pull(b, sizeof *ofsr);
  639|  1.86k|    fsr->aggregate = aggregate;
  640|  1.86k|    fsr->table_id = ofsr->table_id;
  641|  1.86k|    error = ofputil_port_from_ofp11(ofsr->out_port, &fsr->out_port);
  642|  1.86k|    if (error) {
  ------------------
  |  Branch (642:9): [True: 204, False: 1.66k]
  ------------------
  643|    204|        return error;
  644|    204|    }
  645|  1.66k|    fsr->out_group = ntohl(ofsr->out_group);
  646|  1.66k|    fsr->cookie = ofsr->cookie;
  647|  1.66k|    fsr->cookie_mask = ofsr->cookie_mask;
  648|  1.66k|    error = ofputil_pull_ofp11_match(b, tun_table, vl_mff_map, &fsr->match,
  649|  1.66k|                                     NULL);
  650|  1.66k|    if (error) {
  ------------------
  |  Branch (650:9): [True: 1.40k, False: 261]
  ------------------
  651|  1.40k|        return error;
  652|  1.40k|    }
  653|       |
  654|    261|    return 0;
  655|  1.66k|}
ofp-flow.c:ofputil_decode_nxst_flow_request:
  662|    974|{
  663|    974|    const struct nx_flow_stats_request *nfsr;
  664|    974|    enum ofperr error;
  665|       |
  666|    974|    nfsr = ofpbuf_pull(b, sizeof *nfsr);
  667|    974|    error = nx_pull_match(b, ntohs(nfsr->match_len), &fsr->match,
  668|    974|                          &fsr->cookie, &fsr->cookie_mask, false, tun_table,
  669|    974|                          vl_mff_map);
  670|    974|    if (error) {
  ------------------
  |  Branch (670:9): [True: 766, False: 208]
  ------------------
  671|    766|        return error;
  672|    766|    }
  673|    208|    if (b->size) {
  ------------------
  |  Branch (673:9): [True: 50, False: 158]
  ------------------
  674|     50|        return OFPERR_OFPBRC_BAD_LEN;
  675|     50|    }
  676|       |
  677|    158|    fsr->aggregate = aggregate;
  678|    158|    fsr->out_port = u16_to_ofp(ntohs(nfsr->out_port));
  679|    158|    fsr->out_group = OFPG_ANY;
  680|    158|    fsr->table_id = nfsr->table_id;
  681|       |
  682|    158|    return 0;
  683|    208|}
ofp-flow.c:print_flow_stat:
 1272|  15.2k|{
 1273|  15.2k|    ds_put_format(string, "%s%s=%s", colors.param, leader, colors.end);
 1274|  15.2k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1274:9): [True: 3.70k, False: 11.5k]
  ------------------
 1275|  3.70k|        ds_put_format(string, "%"PRIu64, stat);
 1276|  11.5k|    } else {
 1277|  11.5k|        ds_put_char(string, '?');
 1278|  11.5k|    }
 1279|  15.2k|    ds_put_cstr(string, ", ");
 1280|  15.2k|}

ofputil_format_group:
   66|    754|{
   67|    754|    char name[MAX_GROUP_NAME_LEN + 1];
   68|       |
   69|    754|    ofputil_group_to_string(group_id, name, sizeof name);
   70|    754|    ds_put_cstr(s, name);
   71|    754|}
ofputil_group_to_string:
   81|    754|{
   82|    754|    switch (group_id) {
   83|    141|    case OFPG_ALL:
  ------------------
  |  Branch (83:5): [True: 141, False: 613]
  ------------------
   84|    141|        ovs_strlcpy(namebuf, "ALL", bufsize);
   85|    141|        break;
   86|       |
   87|    140|    case OFPG_ANY:
  ------------------
  |  Branch (87:5): [True: 140, False: 614]
  ------------------
   88|    140|        ovs_strlcpy(namebuf, "ANY", bufsize);
   89|    140|        break;
   90|       |
   91|    473|    default:
  ------------------
  |  Branch (91:5): [True: 473, False: 281]
  ------------------
   92|       |        snprintf(namebuf, bufsize, "%"PRIu32, group_id);
   93|    473|        break;
   94|    754|    }
   95|    754|}
ofputil_bucket_list_destroy:
  100|  37.6k|{
  101|  37.6k|    struct ofputil_bucket *bucket;
  102|       |
  103|  37.6k|    LIST_FOR_EACH_POP (bucket, list_node, buckets) {
  ------------------
  |  |  140|  46.9k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 9.32k, False: 37.6k]
  |  |  |  Branch (140:12): [True: 9.32k, False: 37.6k]
  |  |  ------------------
  |  |  141|  46.9k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  9.32k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  9.32k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  9.32k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  9.32k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  9.32k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  46.9k|           (ITER = NULL, 0))
  ------------------
  104|  9.32k|        free(bucket->ofpacts);
  105|  9.32k|        free(bucket);
  106|  9.32k|    }
  107|  37.6k|}
ofputil_bucket_check_duplicate_id:
  169|  11.5k|{
  170|  11.5k|    struct ofputil_bucket *i, *j;
  171|       |
  172|  11.5k|    LIST_FOR_EACH (i, list_node, buckets) {
  ------------------
  |  |   76|  11.5k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  11.5k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  11.5k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  14.8k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  14.8k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 3.40k, False: 11.4k]
  |  |  |  |  |  Branch (185:6): [True: 3.40k, False: 11.4k]
  |  |  |  |  ------------------
  |  |  |  |  186|  14.8k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  3.40k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  3.40k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  3.40k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  14.8k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  11.5k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  3.29k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  3.29k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  173|  5.78k|        LIST_FOR_EACH_REVERSE (j, list_node, buckets) {
  ------------------
  |  |   86|  3.40k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->prev, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  3.40k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  3.40k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   87|  5.78k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  5.78k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 5.78k, False: 0]
  |  |  |  |  |  Branch (185:6): [True: 5.78k, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  186|  5.78k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  5.78k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  5.78k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  5.78k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  5.78k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   88|  3.40k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->prev))
  |  |  ------------------
  |  |  |  |  193|  2.37k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.37k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  174|  5.78k|            if (i == j) {
  ------------------
  |  Branch (174:17): [True: 3.29k, False: 2.49k]
  ------------------
  175|  3.29k|                break;
  176|  3.29k|            }
  177|  2.49k|            if (i->bucket_id == j->bucket_id) {
  ------------------
  |  Branch (177:17): [True: 115, False: 2.37k]
  ------------------
  178|    115|                return true;
  179|    115|            }
  180|  2.49k|        }
  181|  3.40k|    }
  182|       |
  183|  11.4k|    return false;
  184|  11.5k|}
ofputil_uninit_group_desc:
  231|  1.71k|{
  232|  1.71k|    ofputil_bucket_list_destroy(&gd->buckets);
  233|  1.71k|    ofputil_group_properties_destroy(&gd->props);
  234|  1.71k|}
ofputil_decode_group_desc_request:
  241|    275|{
  242|    275|    struct ofpbuf request = ofpbuf_const_initializer(oh, ntohs(oh->length));
  243|    275|    enum ofpraw raw = ofpraw_pull_assert(&request);
  244|    275|    if (raw == OFPRAW_OFPST11_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (244:9): [True: 73, False: 202]
  ------------------
  245|     73|        return OFPG_ALL;
  246|    202|    } else if (raw == OFPRAW_NXST_GROUP_DESC_REQUEST ||
  ------------------
  |  Branch (246:16): [True: 67, False: 135]
  ------------------
  247|    202|               raw == OFPRAW_OFPST15_GROUP_DESC_REQUEST) {
  ------------------
  |  Branch (247:16): [True: 135, False: 0]
  ------------------
  248|    202|        ovs_be32 *group_id = ofpbuf_pull(&request, sizeof *group_id);
  249|    202|        return ntohl(*group_id);
  250|    202|    } else {
  251|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  252|      0|    }
  253|    275|}
ofputil_group_desc_request_format:
  298|    275|{
  299|    275|    uint32_t group_id = ofputil_decode_group_desc_request(oh);
  300|    275|    ds_put_cstr(string, " group_id=");
  301|    275|    ofputil_format_group(group_id, string);
  302|       |
  303|    275|    return 0;
  304|    275|}
ofputil_decode_group_features_reply:
  422|    993|{
  423|    993|    const struct ofp12_group_features_stats *ogf = ofpmsg_body(oh);
  424|    993|    int i;
  425|       |
  426|    993|    features->types = ntohl(ogf->types);
  427|    993|    features->capabilities = ntohl(ogf->capabilities);
  428|  4.96k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  4.96k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (428:17): [True: 3.97k, False: 993]
  ------------------
  429|       |        features->max_groups[i] = ntohl(ogf->max_groups[i]);
  430|  3.97k|        features->ofpacts[i] = ofpact_bitmap_from_openflow(
  431|  3.97k|            ogf->actions[i], oh->version);
  432|  3.97k|    }
  433|    993|}
ofputil_group_features_format:
  449|    993|{
  450|    993|    struct ofputil_group_features features;
  451|    993|    int i;
  452|       |
  453|    993|    ofputil_decode_group_features_reply(oh, &features);
  454|       |
  455|    993|    ds_put_format(string, "\n Group table:\n");
  456|    993|    ds_put_format(string, "    Types:  0x%"PRIx32"\n", features.types);
  457|    993|    ds_put_format(string, "    Capabilities:  0x%"PRIx32"\n",
  458|    993|                  features.capabilities);
  459|       |
  460|  4.96k|    for (i = 0; i < OFPGT12_N_TYPES; i++) {
  ------------------
  |  |  151|  4.96k|#define OFPGT12_N_TYPES 4
  ------------------
  |  Branch (460:17): [True: 3.97k, False: 993]
  ------------------
  461|  3.97k|        if (features.types & (1u << i)) {
  ------------------
  |  Branch (461:13): [True: 3.01k, False: 960]
  ------------------
  462|  3.01k|            ds_put_format(string, "    %s group:\n", group_type_to_string(i));
  463|  3.01k|            ds_put_format(string, "       max_groups=%#"PRIx32"\n",
  464|  3.01k|                          features.max_groups[i]);
  465|  3.01k|            ds_put_format(string, "       actions: ");
  466|  3.01k|            ofpact_bitmap_format(features.ofpacts[i], string);
  467|  3.01k|            ds_put_char(string, '\n');
  468|  3.01k|        }
  469|  3.97k|    }
  470|       |
  471|    993|    return 0;
  472|    993|}
ofputil_decode_group_stats_request:
  480|    479|{
  481|    479|    const struct ofp11_group_stats_request *gsr11 = ofpmsg_body(request);
  482|       |    *group_id = ntohl(gsr11->group_id);
  483|    479|    return 0;
  484|    479|}
ofputil_decode_group_stats_reply:
  500|  5.73k|{
  501|  5.73k|    struct ofp11_bucket_counter *obc;
  502|  5.73k|    struct ofp11_group_stats *ogs11;
  503|  5.73k|    enum ofpraw raw;
  504|  5.73k|    enum ofperr error;
  505|  5.73k|    size_t base_len;
  506|  5.73k|    size_t length;
  507|  5.73k|    size_t i;
  508|       |
  509|  5.73k|    gs->bucket_stats = NULL;
  510|  5.73k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (510:14): [True: 3.20k, False: 2.53k]
  ------------------
  511|  5.73k|             : ofpraw_pull(&raw, msg));
  512|  5.73k|    if (error) {
  ------------------
  |  Branch (512:9): [True: 0, False: 5.73k]
  ------------------
  513|      0|        return error;
  514|      0|    }
  515|       |
  516|  5.73k|    if (!msg->size) {
  ------------------
  |  Branch (516:9): [True: 497, False: 5.24k]
  ------------------
  517|    497|        return EOF;
  518|    497|    }
  519|       |
  520|  5.24k|    if (raw == OFPRAW_OFPST11_GROUP_REPLY) {
  ------------------
  |  Branch (520:9): [True: 1.62k, False: 3.62k]
  ------------------
  521|  1.62k|        base_len = sizeof *ogs11;
  522|  1.62k|        ogs11 = ofpbuf_try_pull(msg, sizeof *ogs11);
  523|  1.62k|        gs->duration_sec = gs->duration_nsec = UINT32_MAX;
  524|  3.62k|    } else if (raw == OFPRAW_NXST_GROUP_REPLY ||
  ------------------
  |  Branch (524:16): [True: 1.36k, False: 2.25k]
  ------------------
  525|  3.62k|               raw == OFPRAW_OFPST13_GROUP_REPLY) {
  ------------------
  |  Branch (525:16): [True: 2.25k, False: 0]
  ------------------
  526|  3.62k|        struct ofp13_group_stats *ogs13;
  527|       |
  528|  3.62k|        base_len = sizeof *ogs13;
  529|  3.62k|        ogs13 = ofpbuf_try_pull(msg, sizeof *ogs13);
  530|  3.62k|        if (ogs13) {
  ------------------
  |  Branch (530:13): [True: 3.34k, False: 273]
  ------------------
  531|  3.34k|            ogs11 = &ogs13->gs;
  532|  3.34k|            gs->duration_sec = ntohl(ogs13->duration_sec);
  533|  3.34k|            gs->duration_nsec = ntohl(ogs13->duration_nsec);
  534|  3.34k|        } else {
  535|    273|            ogs11 = NULL;
  536|    273|        }
  537|  3.62k|    } else {
  538|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  539|      0|    }
  540|       |
  541|  5.24k|    if (!ogs11) {
  ------------------
  |  Branch (541:9): [True: 315, False: 4.92k]
  ------------------
  542|    315|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|    315|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    315|    do {                                                                \
  |  |  |  |  288|    315|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    315|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 315]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    315|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 315]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  543|    315|                     ofpraw_get_name(raw), msg->size);
  544|    315|        return OFPERR_OFPBRC_BAD_LEN;
  545|    315|    }
  546|  4.92k|    length = ntohs(ogs11->length);
  547|  4.92k|    if (length < sizeof base_len) {
  ------------------
  |  Branch (547:9): [True: 192, False: 4.73k]
  ------------------
  548|    192|        VLOG_WARN_RL(&rl, "%s reply claims invalid length %"PRIuSIZE,
  ------------------
  |  |  224|    192|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    192|    do {                                                                \
  |  |  |  |  288|    192|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    192|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 192]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    192|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 192]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|    192|                     ofpraw_get_name(raw), length);
  550|    192|        return OFPERR_OFPBRC_BAD_LEN;
  551|    192|    }
  552|       |
  553|  4.73k|    gs->group_id = ntohl(ogs11->group_id);
  554|  4.73k|    gs->ref_count = ntohl(ogs11->ref_count);
  555|  4.73k|    gs->packet_count = ntohll(ogs11->packet_count);
  556|  4.73k|    gs->byte_count = ntohll(ogs11->byte_count);
  557|       |
  558|  4.73k|    gs->n_buckets = (length - base_len) / sizeof *obc;
  559|  4.73k|    obc = ofpbuf_try_pull(msg, gs->n_buckets * sizeof *obc);
  560|  4.73k|    if (!obc) {
  ------------------
  |  Branch (560:9): [True: 1.53k, False: 3.20k]
  ------------------
  561|  1.53k|        VLOG_WARN_RL(&rl, "%s reply has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|  1.53k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.53k|    do {                                                                \
  |  |  |  |  288|  1.53k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.53k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.53k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.53k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.53k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|  1.53k|                     ofpraw_get_name(raw), msg->size);
  563|  1.53k|        return OFPERR_OFPBRC_BAD_LEN;
  564|  1.53k|    }
  565|       |
  566|  3.20k|    gs->bucket_stats = xmalloc(gs->n_buckets * sizeof *gs->bucket_stats);
  567|  26.2k|    for (i = 0; i < gs->n_buckets; i++) {
  ------------------
  |  Branch (567:17): [True: 23.0k, False: 3.20k]
  ------------------
  568|  23.0k|        gs->bucket_stats[i].packet_count = ntohll(obc[i].packet_count);
  569|  23.0k|        gs->bucket_stats[i].byte_count = ntohll(obc[i].byte_count);
  570|  23.0k|    }
  571|       |
  572|  3.20k|    return 0;
  573|  4.73k|}
ofputil_group_stats_request_format:
  579|    479|{
  580|    479|    enum ofperr error;
  581|    479|    uint32_t group_id;
  582|       |
  583|    479|    error = ofputil_decode_group_stats_request(oh, &group_id);
  584|    479|    if (error) {
  ------------------
  |  Branch (584:9): [True: 0, False: 479]
  ------------------
  585|      0|        return error;
  586|      0|    }
  587|       |
  588|    479|    ds_put_cstr(string, " group_id=");
  589|    479|    ofputil_format_group(group_id, string);
  590|    479|    return 0;
  591|    479|}
ofputil_group_stats_format:
  595|  2.53k|{
  596|  2.53k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  597|  5.73k|    for (;;) {
  598|  5.73k|        struct ofputil_group_stats gs;
  599|  5.73k|        int retval;
  600|       |
  601|  5.73k|        retval = ofputil_decode_group_stats_reply(&b, &gs);
  602|  5.73k|        if (retval) {
  ------------------
  |  Branch (602:13): [True: 2.53k, False: 3.20k]
  ------------------
  603|  2.53k|            if (retval != EOF) {
  ------------------
  |  Branch (603:17): [True: 2.04k, False: 497]
  ------------------
  604|  2.04k|                ds_put_cstr(s, " ***parse error***");
  605|  2.04k|                return retval;
  606|  2.04k|            }
  607|    497|            break;
  608|  2.53k|        }
  609|       |
  610|  3.20k|        ds_put_char(s, '\n');
  611|       |
  612|  3.20k|        ds_put_char(s, ' ');
  613|  3.20k|        ds_put_format(s, "group_id=%"PRIu32",", gs.group_id);
  614|       |
  615|  3.20k|        if (gs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (615:13): [True: 2.22k, False: 977]
  ------------------
  616|  2.22k|            ds_put_cstr(s, "duration=");
  617|  2.22k|            ofp_print_duration(s, gs.duration_sec, gs.duration_nsec);
  618|  2.22k|            ds_put_char(s, ',');
  619|  2.22k|        }
  620|  3.20k|        ds_put_format(s, "ref_count=%"PRIu32",", gs.ref_count);
  621|  3.20k|        ds_put_format(s, "packet_count=%"PRIu64",", gs.packet_count);
  622|  3.20k|        ds_put_format(s, "byte_count=%"PRIu64"", gs.byte_count);
  623|       |
  624|  26.2k|        for (uint32_t bucket_i = 0; bucket_i < gs.n_buckets; bucket_i++) {
  ------------------
  |  Branch (624:37): [True: 23.0k, False: 3.20k]
  ------------------
  625|  23.0k|            if (gs.bucket_stats[bucket_i].packet_count != UINT64_MAX) {
  ------------------
  |  Branch (625:17): [True: 22.7k, False: 328]
  ------------------
  626|  22.7k|                ds_put_format(s, ",bucket%"PRIu32":", bucket_i);
  627|  22.7k|                ds_put_format(s, "packet_count=%"PRIu64",", gs.bucket_stats[bucket_i].packet_count);
  628|  22.7k|                ds_put_format(s, "byte_count=%"PRIu64"", gs.bucket_stats[bucket_i].byte_count);
  629|  22.7k|            }
  630|  23.0k|        }
  631|       |
  632|  3.20k|        free(gs.bucket_stats);
  633|  3.20k|    }
  634|    497|    return 0;
  635|  2.53k|}
ofputil_group_properties_destroy:
 1525|  21.3k|{
 1526|  21.3k|    free(gp->fields.values);
 1527|  21.3k|}
ofputil_group_properties_format:
 1532|  9.92k|{
 1533|  9.92k|    if (!gp->selection_method[0]) {
  ------------------
  |  Branch (1533:9): [True: 6.88k, False: 3.04k]
  ------------------
 1534|  6.88k|        return;
 1535|  6.88k|    }
 1536|       |
 1537|  3.04k|    ds_put_format(ds, ",selection_method=%s", gp->selection_method);
 1538|  3.04k|    if (gp->selection_method_param) {
  ------------------
  |  Branch (1538:9): [True: 2.97k, False: 71]
  ------------------
 1539|  2.97k|        ds_put_format(ds, ",selection_method_param=%"PRIu64,
 1540|  2.97k|                      gp->selection_method_param);
 1541|  2.97k|    }
 1542|       |
 1543|  3.04k|    size_t n = bitmap_count1(gp->fields.used.bm, MFF_N_IDS);
 1544|  3.04k|    if (n == 1) {
  ------------------
  |  Branch (1544:9): [True: 326, False: 2.71k]
  ------------------
 1545|    326|        ds_put_cstr(ds, ",fields=");
 1546|    326|        oxm_format_field_array(ds, &gp->fields);
 1547|  2.71k|    } else if (n > 1) {
  ------------------
  |  Branch (1547:16): [True: 2.57k, False: 141]
  ------------------
 1548|  2.57k|        ds_put_cstr(ds, ",fields(");
 1549|  2.57k|        oxm_format_field_array(ds, &gp->fields);
 1550|  2.57k|        ds_put_char(ds, ')');
 1551|  2.57k|    }
 1552|  3.04k|}
ofputil_decode_group_desc_reply:
 1793|  6.73k|{
 1794|  6.73k|    ofputil_init_group_properties(&gd->props);
 1795|       |
 1796|  6.73k|    switch (version)
 1797|  6.73k|    {
 1798|    894|    case OFP11_VERSION:
  ------------------
  |  Branch (1798:5): [True: 894, False: 5.83k]
  ------------------
 1799|  2.85k|    case OFP12_VERSION:
  ------------------
  |  Branch (1799:5): [True: 1.96k, False: 4.77k]
  ------------------
 1800|  2.91k|    case OFP13_VERSION:
  ------------------
  |  Branch (1800:5): [True: 61, False: 6.67k]
  ------------------
 1801|  3.10k|    case OFP14_VERSION:
  ------------------
  |  Branch (1801:5): [True: 185, False: 6.54k]
  ------------------
 1802|  3.10k|        return ofputil_decode_ofp11_group_desc_reply(gd, msg, version);
 1803|       |
 1804|  3.12k|    case OFP10_VERSION:
  ------------------
  |  Branch (1804:5): [True: 3.12k, False: 3.61k]
  ------------------
 1805|  3.63k|    case OFP15_VERSION:
  ------------------
  |  Branch (1805:5): [True: 510, False: 6.22k]
  ------------------
 1806|  3.63k|        return ofputil_decode_ofp15_group_desc_reply(gd, msg, version);
 1807|       |
 1808|      0|    default:
  ------------------
  |  Branch (1808:5): [True: 0, False: 6.73k]
  ------------------
 1809|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1810|  6.73k|    }
 1811|  6.73k|}
ofputil_bucket_format:
 1846|  3.08k|{
 1847|  3.08k|    ds_put_cstr(s, "bucket=");
 1848|       |
 1849|  3.08k|    ofp_print_bucket_id(s, "bucket_id:", bucket->bucket_id, ofp_version);
 1850|  3.08k|    if (bucket->weight != (type == OFPGT11_SELECT ? 1 : 0)) {
  ------------------
  |  Branch (1850:9): [True: 1.37k, False: 1.71k]
  |  Branch (1850:28): [True: 746, False: 2.33k]
  ------------------
 1851|  1.37k|        ds_put_format(s, "weight:%"PRIu16",", bucket->weight);
 1852|  1.37k|    }
 1853|  3.08k|    if (bucket->watch_port != OFPP_NONE) {
  ------------------
  |  |   47|  3.08k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  3.08k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1853:9): [True: 1.12k, False: 1.96k]
  ------------------
 1854|  1.12k|        ds_put_cstr(s, "watch_port:");
 1855|  1.12k|        ofputil_format_port(bucket->watch_port, port_map, s);
 1856|  1.12k|        ds_put_char(s, ',');
 1857|  1.12k|    }
 1858|  3.08k|    if (bucket->watch_group != OFPG_ANY) {
  ------------------
  |  Branch (1858:9): [True: 1.46k, False: 1.61k]
  ------------------
 1859|  1.46k|        ds_put_format(s, "watch_group:%"PRIu32",", bucket->watch_group);
 1860|  1.46k|    }
 1861|       |
 1862|  3.08k|    ds_put_cstr(s, "actions=");
 1863|  3.08k|    struct ofpact_format_params fp = {
 1864|  3.08k|        .port_map = port_map,
 1865|  3.08k|        .table_map = table_map,
 1866|  3.08k|        .s = s,
 1867|  3.08k|    };
 1868|  3.08k|    ofpacts_format(bucket->ofpacts, bucket->ofpacts_len, &fp);
 1869|  3.08k|}
ofputil_group_format:
 1879|  9.92k|{
 1880|  9.92k|    ds_put_format(s, "group_id=%"PRIu32, group_id);
 1881|       |
 1882|  9.92k|    if (!suppress_type) {
  ------------------
  |  Branch (1882:9): [True: 8.00k, False: 1.91k]
  ------------------
 1883|  8.00k|        static const char *type_str[] = { "all", "select", "indirect",
 1884|  8.00k|                                          "ff", "unknown" };
 1885|  8.00k|        ds_put_format(s, ",type=%s", type_str[type > 4 ? 4 : type]);
  ------------------
  |  Branch (1885:47): [True: 914, False: 7.09k]
  ------------------
 1886|  8.00k|    }
 1887|       |
 1888|  9.92k|    ofputil_group_properties_format(props, s);
 1889|       |
 1890|  9.92k|    if (!bucket && !p_buckets) {
  ------------------
  |  Branch (1890:9): [True: 9.92k, False: 0]
  |  Branch (1890:20): [True: 0, False: 9.92k]
  ------------------
 1891|      0|        return;
 1892|      0|    }
 1893|       |
 1894|  9.92k|    ds_put_char(s, ',');
 1895|       |
 1896|  9.92k|    if (bucket) {
  ------------------
  |  Branch (1896:9): [True: 0, False: 9.92k]
  ------------------
 1897|      0|        ofputil_bucket_format(s, bucket, type, ofp_version, NULL, NULL);
 1898|  9.92k|    } else {
 1899|  9.92k|        LIST_FOR_EACH (bucket, list_node, p_buckets) {
  ------------------
  |  |   76|  9.92k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  9.92k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  9.92k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  13.0k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  13.0k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 3.08k, False: 9.92k]
  |  |  |  |  |  Branch (185:6): [True: 3.08k, False: 9.92k]
  |  |  |  |  ------------------
  |  |  |  |  186|  13.0k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  3.08k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  3.08k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  3.08k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  13.0k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  9.92k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  3.08k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  3.08k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1900|  3.08k|            ofputil_bucket_format(s, bucket, type, ofp_version,
 1901|  3.08k|                                port_map, table_map);
 1902|  3.08k|            ds_put_char(s, ',');
 1903|  3.08k|        }
 1904|  9.92k|        ds_chomp(s, ',');
 1905|  9.92k|    }
 1906|  9.92k|}
ofputil_group_desc_format:
 1912|  5.34k|{
 1913|  5.34k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1914|  6.73k|    for (;;) {
 1915|  6.73k|        struct ofputil_group_desc gd;
 1916|  6.73k|        int retval;
 1917|       |
 1918|  6.73k|        retval = ofputil_decode_group_desc_reply(&gd, &b, oh->version);
 1919|  6.73k|        if (retval) {
  ------------------
  |  Branch (1919:13): [True: 5.34k, False: 1.38k]
  ------------------
 1920|  5.34k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (1920:20): [True: 4.32k, False: 1.01k]
  ------------------
 1921|  5.34k|        }
 1922|       |
 1923|  1.38k|        ds_put_char(s, '\n');
 1924|  1.38k|        ds_put_char(s, ' ');
 1925|  1.38k|        ofputil_group_format(s, gd.group_id, gd.type, NULL, &gd.buckets,
 1926|       |                             &gd.props, oh->version, false,
 1927|  1.38k|                             port_map, table_map);
 1928|  1.38k|        ofputil_uninit_group_desc(&gd);
 1929|  1.38k|     }
 1930|  5.34k|}
ofputil_uninit_group_mod:
 1934|  19.6k|{
 1935|  19.6k|    ofputil_bucket_list_destroy(&gm->buckets);
 1936|  19.6k|    ofputil_group_properties_destroy(&gm->props);
 1937|  19.6k|}
ofputil_decode_group_mod:
 2310|  38.5k|{
 2311|  38.5k|    ofputil_init_group_properties(&gm->props);
 2312|       |
 2313|  38.5k|    enum ofp_version ofp_version = oh->version;
 2314|  38.5k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
 2315|  38.5k|    ofpraw_pull_assert(&msg);
 2316|       |
 2317|  38.5k|    enum ofperr err;
 2318|  38.5k|    switch (ofp_version) {
 2319|  4.16k|    case OFP11_VERSION:
  ------------------
  |  Branch (2319:5): [True: 4.16k, False: 34.3k]
  ------------------
 2320|  6.55k|    case OFP12_VERSION:
  ------------------
  |  Branch (2320:5): [True: 2.39k, False: 36.1k]
  ------------------
 2321|  7.33k|    case OFP13_VERSION:
  ------------------
  |  Branch (2321:5): [True: 783, False: 37.7k]
  ------------------
 2322|  12.9k|    case OFP14_VERSION:
  ------------------
  |  Branch (2322:5): [True: 5.58k, False: 32.9k]
  ------------------
 2323|  12.9k|        err = ofputil_pull_ofp11_group_mod(&msg, ofp_version, gm);
 2324|  12.9k|        break;
 2325|       |
 2326|    170|    case OFP10_VERSION:
  ------------------
  |  Branch (2326:5): [True: 170, False: 38.3k]
  ------------------
 2327|  25.5k|    case OFP15_VERSION:
  ------------------
  |  Branch (2327:5): [True: 25.4k, False: 13.0k]
  ------------------
 2328|  25.5k|        err = ofputil_pull_ofp15_group_mod(&msg, ofp_version, gm);
 2329|  25.5k|        break;
 2330|       |
 2331|      0|    default:
  ------------------
  |  Branch (2331:5): [True: 0, False: 38.5k]
  ------------------
 2332|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2333|  38.5k|    }
 2334|  38.5k|    if (err) {
  ------------------
  |  Branch (2334:9): [True: 24.6k, False: 13.8k]
  ------------------
 2335|  24.6k|        return err;
 2336|  24.6k|    }
 2337|       |
 2338|  13.8k|    err = ofputil_check_group_mod(gm);
 2339|  13.8k|    if (err) {
  ------------------
  |  Branch (2339:9): [True: 5.30k, False: 8.54k]
  ------------------
 2340|  5.30k|        ofputil_uninit_group_mod(gm);
 2341|  5.30k|    }
 2342|  13.8k|    return err;
 2343|  38.5k|}
ofputil_group_mod_format__:
 2350|  8.54k|{
 2351|  8.54k|    bool bucket_command = false;
 2352|       |
 2353|  8.54k|    ds_put_char(s, '\n');
 2354|       |
 2355|  8.54k|    ds_put_char(s, ' ');
 2356|  8.54k|    switch (gm->command) {
 2357|  4.21k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2357:5): [True: 4.21k, False: 4.32k]
  ------------------
 2358|  4.21k|        ds_put_cstr(s, "ADD");
 2359|  4.21k|        break;
 2360|       |
 2361|  1.42k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2361:5): [True: 1.42k, False: 7.11k]
  ------------------
 2362|  1.42k|        ds_put_cstr(s, "MOD");
 2363|  1.42k|        break;
 2364|       |
 2365|    469|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2365:5): [True: 469, False: 8.07k]
  ------------------
 2366|    469|        ds_put_cstr(s, "ADD_OR_MOD");
 2367|    469|        break;
 2368|       |
 2369|    511|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2369:5): [True: 511, False: 8.02k]
  ------------------
 2370|    511|        ds_put_cstr(s, "DEL");
 2371|    511|        break;
 2372|       |
 2373|  1.16k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2373:5): [True: 1.16k, False: 7.37k]
  ------------------
 2374|  1.16k|        ds_put_cstr(s, "INSERT_BUCKET");
 2375|  1.16k|        bucket_command = true;
 2376|  1.16k|        break;
 2377|       |
 2378|    754|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2378:5): [True: 754, False: 7.78k]
  ------------------
 2379|    754|        ds_put_cstr(s, "REMOVE_BUCKET");
 2380|    754|        bucket_command = true;
 2381|    754|        break;
 2382|       |
 2383|      0|    default:
  ------------------
  |  Branch (2383:5): [True: 0, False: 8.54k]
  ------------------
 2384|      0|        ds_put_format(s, "cmd:%"PRIu16"", gm->command);
 2385|  8.54k|    }
 2386|  8.54k|    ds_put_char(s, ' ');
 2387|       |
 2388|  8.54k|    if (bucket_command) {
  ------------------
  |  Branch (2388:9): [True: 1.91k, False: 6.62k]
  ------------------
 2389|  1.91k|        ofp_print_bucket_id(s, "command_bucket_id:",
 2390|  1.91k|                            gm->command_bucket_id, ofp_version);
 2391|  1.91k|    }
 2392|       |
 2393|       |    ofputil_group_format(s, gm->group_id, gm->type, NULL, &gm->buckets,
 2394|  8.54k|                         &gm->props, ofp_version, bucket_command,
 2395|  8.54k|                         port_map, table_map);
 2396|  8.54k|}
ofputil_group_mod_format:
 2402|  38.0k|{
 2403|  38.0k|    struct ofputil_group_mod gm;
 2404|  38.0k|    int error;
 2405|       |
 2406|  38.0k|    error = ofputil_decode_group_mod(oh, &gm);
 2407|  38.0k|    if (error) {
  ------------------
  |  Branch (2407:9): [True: 29.8k, False: 8.22k]
  ------------------
 2408|  29.8k|        return error;
 2409|  29.8k|    }
 2410|  8.22k|    ofputil_group_mod_format__(s, oh->version, &gm, port_map, table_map);
 2411|  8.22k|    ofputil_uninit_group_mod(&gm);
 2412|  8.22k|    return 0;
 2413|  38.0k|}
ofp-group.c:group_type_to_string:
  437|  3.01k|{
  438|  3.01k|    switch (type) {
  439|    968|    case OFPGT11_ALL: return "all";
  ------------------
  |  Branch (439:5): [True: 968, False: 2.04k]
  ------------------
  440|    908|    case OFPGT11_SELECT: return "select";
  ------------------
  |  Branch (440:5): [True: 908, False: 2.10k]
  ------------------
  441|    912|    case OFPGT11_INDIRECT: return "indirect";
  ------------------
  |  Branch (441:5): [True: 912, False: 2.10k]
  ------------------
  442|    224|    case OFPGT11_FF: return "fast failover";
  ------------------
  |  Branch (442:5): [True: 224, False: 2.78k]
  ------------------
  443|      0|    default: OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  |  Branch (443:5): [True: 0, False: 3.01k]
  ------------------
  444|  3.01k|    }
  445|  3.01k|}
ofp-group.c:ofputil_init_group_properties:
 1511|  45.2k|{
 1512|  45.2k|    memset(gp, 0, sizeof *gp);
 1513|  45.2k|}
ofp-group.c:ofputil_decode_ofp11_group_desc_reply:
 1686|  3.10k|{
 1687|  3.10k|    struct ofp11_group_desc_stats *ogds;
 1688|  3.10k|    size_t length;
 1689|       |
 1690|  3.10k|    if (!msg->header) {
  ------------------
  |  Branch (1690:9): [True: 1.83k, False: 1.26k]
  ------------------
 1691|  1.83k|        ofpraw_pull_assert(msg);
 1692|  1.83k|    }
 1693|       |
 1694|  3.10k|    if (!msg->size) {
  ------------------
  |  Branch (1694:9): [True: 700, False: 2.40k]
  ------------------
 1695|    700|        return EOF;
 1696|    700|    }
 1697|       |
 1698|  2.40k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1699|  2.40k|    if (!ogds) {
  ------------------
  |  Branch (1699:9): [True: 0, False: 2.40k]
  ------------------
 1700|      0|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1701|      0|                     "leftover bytes at end", msg->size);
 1702|      0|        return OFPERR_OFPBRC_BAD_LEN;
 1703|      0|    }
 1704|  2.40k|    gd->type = ogds->type;
 1705|  2.40k|    gd->group_id = ntohl(ogds->group_id);
 1706|       |
 1707|  2.40k|    length = ntohs(ogds->length);
 1708|  2.40k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1708:9): [True: 510, False: 1.89k]
  |  Branch (1708:34): [True: 524, False: 1.36k]
  ------------------
 1709|  1.03k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|  1.03k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.03k|    do {                                                                \
  |  |  |  |  288|  1.03k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.03k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.03k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.03k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.03k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1710|  1.03k|                     "length %"PRIuSIZE, length);
 1711|  1.03k|        return OFPERR_OFPBRC_BAD_LEN;
 1712|  1.03k|    }
 1713|       |
 1714|  1.36k|    return ofputil_pull_ofp11_buckets(msg, length - sizeof *ogds, version,
 1715|  1.36k|                                      &gd->buckets);
 1716|  2.40k|}
ofp-group.c:ofputil_pull_ofp11_buckets:
 1319|  14.2k|{
 1320|  14.2k|    struct ofp11_bucket *ob;
 1321|  14.2k|    uint32_t bucket_id = 0;
 1322|       |
 1323|  14.2k|    ovs_list_init(buckets);
 1324|  18.4k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1324:12): [True: 8.62k, False: 9.87k]
  ------------------
 1325|  8.62k|        struct ofputil_bucket *bucket;
 1326|  8.62k|        struct ofpbuf ofpacts;
 1327|  8.62k|        enum ofperr error;
 1328|  8.62k|        size_t ob_len;
 1329|       |
 1330|  8.62k|        ob = (buckets_length >= sizeof *ob
  ------------------
  |  Branch (1330:15): [True: 8.52k, False: 95]
  ------------------
 1331|  8.62k|              ? ofpbuf_try_pull(msg, sizeof *ob)
 1332|  8.62k|              : NULL);
 1333|  8.62k|        if (!ob) {
  ------------------
  |  Branch (1333:13): [True: 95, False: 8.52k]
  ------------------
 1334|     95|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE" leftover bytes",
  ------------------
  |  |  224|     95|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     95|    do {                                                                \
  |  |  |  |  288|     95|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     95|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 95]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     95|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 95]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1335|     95|                         buckets_length);
 1336|     95|            ofputil_bucket_list_destroy(buckets);
 1337|     95|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1338|     95|        }
 1339|       |
 1340|  8.52k|        ob_len = ntohs(ob->len);
 1341|  8.52k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1341:13): [True: 1.39k, False: 7.13k]
  ------------------
 1342|  1.39k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  1.39k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.39k|    do {                                                                \
  |  |  |  |  288|  1.39k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.39k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.39k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.39k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.39k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1343|  1.39k|                         "%"PRIuSIZE" is not valid", ob_len);
 1344|  1.39k|            ofputil_bucket_list_destroy(buckets);
 1345|  1.39k|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1346|  7.13k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1346:20): [True: 880, False: 6.25k]
  ------------------
 1347|    880|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length %"PRIuSIZE" "
  ------------------
  |  |  224|    880|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    880|    do {                                                                \
  |  |  |  |  288|    880|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    880|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 880]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    880|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 880]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1348|    880|                         "exceeds remaining buckets data size %"PRIuSIZE,
 1349|    880|                         ob_len, buckets_length);
 1350|    880|            ofputil_bucket_list_destroy(buckets);
 1351|    880|            return OFPERR_OFPGMFC_BAD_BUCKET;
 1352|    880|        }
 1353|  6.25k|        buckets_length -= ob_len;
 1354|       |
 1355|  6.25k|        ofpbuf_init(&ofpacts, 0);
 1356|  6.25k|        error = ofpacts_pull_openflow_actions(msg, ob_len - sizeof *ob,
 1357|  6.25k|                                              version, NULL, NULL, &ofpacts);
 1358|  6.25k|        if (error) {
  ------------------
  |  Branch (1358:13): [True: 1.83k, False: 4.41k]
  ------------------
 1359|  1.83k|            ofpbuf_uninit(&ofpacts);
 1360|  1.83k|            ofputil_bucket_list_destroy(buckets);
 1361|  1.83k|            return error;
 1362|  1.83k|        }
 1363|       |
 1364|  4.41k|        bucket = xzalloc(sizeof *bucket);
 1365|  4.41k|        bucket->weight = ntohs(ob->weight);
 1366|  4.41k|        error = ofputil_port_from_ofp11(ob->watch_port, &bucket->watch_port);
 1367|  4.41k|        if (error) {
  ------------------
  |  Branch (1367:13): [True: 215, False: 4.20k]
  ------------------
 1368|    215|            ofpbuf_uninit(&ofpacts);
 1369|    215|            ofputil_bucket_list_destroy(buckets);
 1370|    215|            free(bucket);
 1371|    215|            return OFPERR_OFPGMFC_BAD_WATCH;
 1372|    215|        }
 1373|  4.20k|        bucket->watch_group = ntohl(ob->watch_group);
 1374|  4.20k|        bucket->bucket_id = bucket_id++;
 1375|       |
 1376|  4.20k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1377|  4.20k|        bucket->ofpacts_len = ofpacts.size;
 1378|  4.20k|        ovs_list_push_back(buckets, &bucket->list_node);
 1379|  4.20k|    }
 1380|       |
 1381|  9.87k|    return 0;
 1382|  14.2k|}
ofp-group.c:ofputil_decode_ofp15_group_desc_reply:
 1722|  3.63k|{
 1723|  3.63k|    struct ofp15_group_desc_stats *ogds;
 1724|  3.63k|    uint16_t length, bucket_list_len;
 1725|  3.63k|    int error;
 1726|       |
 1727|  3.63k|    if (!msg->header) {
  ------------------
  |  Branch (1727:9): [True: 3.50k, False: 123]
  ------------------
 1728|  3.50k|        ofpraw_pull_assert(msg);
 1729|  3.50k|    }
 1730|       |
 1731|  3.63k|    if (!msg->size) {
  ------------------
  |  Branch (1731:9): [True: 317, False: 3.31k]
  ------------------
 1732|    317|        return EOF;
 1733|    317|    }
 1734|       |
 1735|  3.31k|    ogds = ofpbuf_try_pull(msg, sizeof *ogds);
 1736|  3.31k|    if (!ogds) {
  ------------------
  |  Branch (1736:9): [True: 126, False: 3.18k]
  ------------------
 1737|    126|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|    126|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    126|    do {                                                                \
  |  |  |  |  288|    126|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    126|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 126]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    126|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 126]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1738|    126|                     "leftover bytes at end", msg->size);
 1739|    126|        return OFPERR_OFPBRC_BAD_LEN;
 1740|    126|    }
 1741|  3.18k|    gd->type = ogds->type;
 1742|  3.18k|    gd->group_id = ntohl(ogds->group_id);
 1743|       |
 1744|  3.18k|    length = ntohs(ogds->length);
 1745|  3.18k|    if (length < sizeof *ogds || length - sizeof *ogds > msg->size) {
  ------------------
  |  Branch (1745:9): [True: 614, False: 2.57k]
  |  Branch (1745:34): [True: 664, False: 1.91k]
  ------------------
 1746|  1.27k|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|  1.27k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.27k|    do {                                                                \
  |  |  |  |  288|  1.27k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.27k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.27k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.27k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.27k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1747|  1.27k|                     "length %u", length);
 1748|  1.27k|        return OFPERR_OFPBRC_BAD_LEN;
 1749|  1.27k|    }
 1750|       |
 1751|  1.91k|    bucket_list_len = ntohs(ogds->bucket_list_len);
 1752|  1.91k|    if (length < bucket_list_len + sizeof *ogds) {
  ------------------
  |  Branch (1752:9): [True: 79, False: 1.83k]
  ------------------
 1753|     79|        VLOG_WARN_RL(&rl, "OFPST11_GROUP_DESC reply claims invalid "
  ------------------
  |  |  224|     79|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     79|    do {                                                                \
  |  |  |  |  288|     79|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     79|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 79]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     79|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 79]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1754|     79|                     "bucket list length %u", bucket_list_len);
 1755|     79|        return OFPERR_OFPBRC_BAD_LEN;
 1756|     79|    }
 1757|  1.83k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, version, gd->type,
 1758|  1.83k|                                       &gd->buckets);
 1759|  1.83k|    if (error) {
  ------------------
  |  Branch (1759:9): [True: 1.38k, False: 449]
  ------------------
 1760|  1.38k|        return error;
 1761|  1.38k|    }
 1762|       |
 1763|       |    /* By definition group desc messages don't have a group mod command.
 1764|       |     * However, parse_group_prop_ntr_selection_method() checks to make sure
 1765|       |     * that the command is OFPGC15_ADD or OFPGC15_DELETE to guard
 1766|       |     * against group mod messages with other commands supplying
 1767|       |     * a NTR selection method group experimenter property.
 1768|       |     * Such properties are valid for group desc replies so
 1769|       |     * claim that the group mod command is OFPGC15_ADD to
 1770|       |     * satisfy the check in parse_group_prop_ntr_selection_method() */
 1771|    449|    error = parse_ofp15_group_properties(
 1772|    449|        msg, gd->type, OFPGC15_ADD, &gd->props,
 1773|    449|        length - sizeof *ogds - bucket_list_len);
 1774|    449|    if (error) {
  ------------------
  |  Branch (1774:9): [True: 326, False: 123]
  ------------------
 1775|    326|        ofputil_uninit_group_desc(gd);
 1776|    326|    }
 1777|    449|    return error;
 1778|  1.83k|}
ofp-group.c:ofputil_pull_ofp15_buckets:
 1388|  23.3k|{
 1389|  23.3k|    ovs_list_init(buckets);
 1390|  28.5k|    while (buckets_length > 0) {
  ------------------
  |  Branch (1390:12): [True: 16.9k, False: 11.5k]
  ------------------
 1391|  16.9k|        struct ofputil_bucket *bucket = NULL;
 1392|  16.9k|        struct ofpbuf ofpacts;
 1393|  16.9k|        enum ofperr err = OFPERR_OFPGMFC_BAD_BUCKET;
 1394|  16.9k|        size_t ob_len, actions_len, properties_len;
 1395|  16.9k|        ovs_be32 watch_port = ofputil_port_to_ofp11(OFPP_ANY);
  ------------------
  |  |   80|  16.9k|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|  16.9k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|  16.9k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1396|  16.9k|        ovs_be32 watch_group = htonl(OFPG_ANY);
 1397|  16.9k|        ovs_be16 weight = htons(group_type == OFPGT11_SELECT ? 1 : 0);
  ------------------
  |  Branch (1397:27): [True: 1.46k, False: 15.4k]
  ------------------
 1398|       |
 1399|  16.9k|        ofpbuf_init(&ofpacts, 0);
 1400|       |
 1401|  16.9k|        struct ofp15_bucket *ob = ofpbuf_try_pull(msg, sizeof *ob);
 1402|  16.9k|        if (!ob) {
  ------------------
  |  Branch (1402:13): [True: 0, False: 16.9k]
  ------------------
 1403|      0|            VLOG_WARN_RL(&rl, "buckets end with %"PRIuSIZE
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1404|      0|                         " leftover bytes", buckets_length);
 1405|      0|            goto err;
 1406|      0|        }
 1407|       |
 1408|  16.9k|        ob_len = ntohs(ob->len);
 1409|  16.9k|        actions_len = ntohs(ob->action_array_len);
 1410|       |
 1411|  16.9k|        if (ob_len < sizeof *ob) {
  ------------------
  |  Branch (1411:13): [True: 279, False: 16.6k]
  ------------------
 1412|    279|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|    279|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    279|    do {                                                                \
  |  |  |  |  288|    279|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    279|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 279]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    279|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 279]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1413|    279|                         "%"PRIuSIZE" is not valid", ob_len);
 1414|    279|            goto err;
 1415|  16.6k|        } else if (ob_len > buckets_length) {
  ------------------
  |  Branch (1415:20): [True: 1.90k, False: 14.7k]
  ------------------
 1416|  1.90k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket length "
  ------------------
  |  |  224|  1.90k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.90k|    do {                                                                \
  |  |  |  |  288|  1.90k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.90k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.90k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.90k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.90k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1417|  1.90k|                         "%"PRIuSIZE" exceeds remaining buckets data size %"
 1418|  1.90k|                         PRIuSIZE, ob_len, buckets_length);
 1419|  1.90k|            goto err;
 1420|  14.7k|        } else if (actions_len > ob_len - sizeof *ob) {
  ------------------
  |  Branch (1420:20): [True: 1.74k, False: 12.9k]
  ------------------
 1421|  1.74k|            VLOG_WARN_RL(&rl, "OpenFlow message bucket actions "
  ------------------
  |  |  224|  1.74k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.74k|    do {                                                                \
  |  |  |  |  288|  1.74k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.74k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.74k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.74k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.74k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1422|  1.74k|                         "length %"PRIuSIZE" exceeds remaining bucket "
 1423|  1.74k|                         "data size %"PRIuSIZE, actions_len,
 1424|  1.74k|                         ob_len - sizeof *ob);
 1425|  1.74k|            goto err;
 1426|  1.74k|        }
 1427|  12.9k|        buckets_length -= ob_len;
 1428|       |
 1429|  12.9k|        err = ofpacts_pull_openflow_actions(msg, actions_len, version,
 1430|  12.9k|                                            NULL, NULL, &ofpacts);
 1431|  12.9k|        if (err) {
  ------------------
  |  Branch (1431:13): [True: 3.65k, False: 9.32k]
  ------------------
 1432|  3.65k|            goto err;
 1433|  3.65k|        }
 1434|       |
 1435|  9.32k|        properties_len = ob_len - sizeof *ob - actions_len;
 1436|  9.32k|        struct ofpbuf properties = ofpbuf_const_initializer(
 1437|  9.32k|            ofpbuf_pull(msg, properties_len), properties_len);
 1438|  14.9k|        while (properties.size > 0) {
  ------------------
  |  Branch (1438:16): [True: 8.44k, False: 6.46k]
  ------------------
 1439|  8.44k|            struct ofpbuf payload;
 1440|  8.44k|            uint64_t type;
 1441|       |
 1442|  8.44k|            err = ofpprop_pull(&properties, &payload, &type);
 1443|  8.44k|            if (err) {
  ------------------
  |  Branch (1443:17): [True: 1.87k, False: 6.57k]
  ------------------
 1444|  1.87k|                goto err;
 1445|  1.87k|            }
 1446|       |
 1447|  6.57k|            switch (type) {
 1448|  3.45k|            case OFPGBPT15_WEIGHT:
  ------------------
  |  Branch (1448:13): [True: 3.45k, False: 3.12k]
  ------------------
 1449|  3.45k|                err = ofpprop_parse_be16(&payload, &weight);
 1450|  3.45k|                break;
 1451|       |
 1452|  2.53k|            case OFPGBPT15_WATCH_PORT:
  ------------------
  |  Branch (1452:13): [True: 2.53k, False: 4.03k]
  ------------------
 1453|  2.53k|                err = ofpprop_parse_be32(&payload, &watch_port);
 1454|  2.53k|                break;
 1455|       |
 1456|    120|            case OFPGBPT15_WATCH_GROUP:
  ------------------
  |  Branch (1456:13): [True: 120, False: 6.45k]
  ------------------
 1457|    120|                err = ofpprop_parse_be32(&payload, &watch_group);
 1458|    120|                break;
 1459|       |
 1460|    467|            default:
  ------------------
  |  Branch (1460:13): [True: 467, False: 6.10k]
  ------------------
 1461|    467|                err = OFPPROP_UNKNOWN(false, "group bucket", type);
  ------------------
  |  |  144|    467|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1462|    467|                break;
 1463|  6.57k|            }
 1464|       |
 1465|  6.57k|            if (err) {
  ------------------
  |  Branch (1465:17): [True: 984, False: 5.58k]
  ------------------
 1466|    984|                goto err;
 1467|    984|            }
 1468|  6.57k|        }
 1469|       |
 1470|  6.46k|        bucket = xzalloc(sizeof *bucket);
 1471|       |
 1472|  6.46k|        bucket->weight = ntohs(weight);
 1473|  6.46k|        err = ofputil_port_from_ofp11(watch_port, &bucket->watch_port);
 1474|  6.46k|        if (err) {
  ------------------
  |  Branch (1474:13): [True: 929, False: 5.53k]
  ------------------
 1475|    929|            err = OFPERR_OFPGMFC_BAD_WATCH;
 1476|    929|            goto err;
 1477|    929|        }
 1478|  5.53k|        bucket->watch_group = ntohl(watch_group);
 1479|  5.53k|        bucket->bucket_id = ntohl(ob->bucket_id);
 1480|  5.53k|        if (bucket->bucket_id > OFPG15_BUCKET_MAX) {
  ------------------
  |  Branch (1480:13): [True: 417, False: 5.12k]
  ------------------
 1481|    417|            VLOG_WARN_RL(&rl, "bucket id (%u) is out of range",
  ------------------
  |  |  224|    417|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    417|    do {                                                                \
  |  |  |  |  288|    417|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    417|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 417]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    417|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 417]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1482|    417|                         bucket->bucket_id);
 1483|    417|            err = OFPERR_OFPGMFC_BAD_BUCKET;
 1484|    417|            goto err;
 1485|    417|        }
 1486|       |
 1487|  5.12k|        bucket->ofpacts = ofpbuf_steal_data(&ofpacts);
 1488|  5.12k|        bucket->ofpacts_len = ofpacts.size;
 1489|  5.12k|        ovs_list_push_back(buckets, &bucket->list_node);
 1490|       |
 1491|  5.12k|        continue;
 1492|       |
 1493|  11.7k|    err:
 1494|  11.7k|        free(bucket);
 1495|  11.7k|        ofpbuf_uninit(&ofpacts);
 1496|  11.7k|        ofputil_bucket_list_destroy(buckets);
 1497|  11.7k|        return err;
 1498|  5.53k|    }
 1499|       |
 1500|  11.5k|    if (ofputil_bucket_check_duplicate_id(buckets)) {
  ------------------
  |  Branch (1500:9): [True: 115, False: 11.4k]
  ------------------
 1501|    115|        VLOG_WARN_RL(&rl, "Duplicate bucket id");
  ------------------
  |  |  224|    115|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    115|    do {                                                                \
  |  |  |  |  288|    115|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    115|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 115]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    115|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 115]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1502|    115|        ofputil_bucket_list_destroy(buckets);
 1503|    115|        return OFPERR_OFPGMFC_BAD_BUCKET;
 1504|    115|    }
 1505|       |
 1506|  11.4k|    return 0;
 1507|  11.5k|}
ofp-group.c:parse_ofp15_group_properties:
 1649|  11.4k|{
 1650|  11.4k|    struct ofpbuf properties = ofpbuf_const_initializer(
 1651|  11.4k|        ofpbuf_pull(msg, properties_len), properties_len);
 1652|  14.6k|    while (properties.size > 0) {
  ------------------
  |  Branch (1652:12): [True: 9.25k, False: 5.37k]
  ------------------
 1653|  9.25k|        struct ofpbuf payload;
 1654|  9.25k|        enum ofperr error;
 1655|  9.25k|        uint64_t type;
 1656|       |
 1657|  9.25k|        error = ofpprop_pull(&properties, &payload, &type);
 1658|  9.25k|        if (error) {
  ------------------
  |  Branch (1658:13): [True: 586, False: 8.67k]
  ------------------
 1659|    586|            return error;
 1660|    586|        }
 1661|       |
 1662|  8.67k|        switch (type) {
 1663|    231|        case OFPPROP_EXP(NTR_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|    231|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1663:9): [True: 231, False: 8.44k]
  ------------------
 1664|  6.76k|        case OFPPROP_EXP(NTR_COMPAT_VENDOR_ID, NTRT_SELECTION_METHOD):
  ------------------
  |  |   67|  6.76k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1664:9): [True: 6.53k, False: 2.13k]
  ------------------
 1665|  6.76k|            error = parse_group_prop_ntr_selection_method(&payload, group_type,
 1666|  6.76k|                                                          group_cmd, gp);
 1667|  6.76k|            break;
 1668|       |
 1669|  1.90k|        default:
  ------------------
  |  Branch (1669:9): [True: 1.90k, False: 6.76k]
  ------------------
 1670|  1.90k|            error = OFPPROP_UNKNOWN(false, "group", type);
  ------------------
  |  |  144|  1.90k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1671|  1.90k|            break;
 1672|  8.67k|        }
 1673|       |
 1674|  8.67k|        if (error) {
  ------------------
  |  Branch (1674:13): [True: 5.51k, False: 3.15k]
  ------------------
 1675|  5.51k|            return error;
 1676|  5.51k|        }
 1677|  8.67k|    }
 1678|       |
 1679|  5.37k|    return 0;
 1680|  11.4k|}
ofp-group.c:parse_group_prop_ntr_selection_method:
 1559|  6.76k|{
 1560|  6.76k|    struct ntr_group_prop_selection_method *prop = payload->data;
 1561|  6.76k|    size_t fields_len, method_len;
 1562|  6.76k|    enum ofperr error;
 1563|       |
 1564|  6.76k|    switch (group_type) {
 1565|  6.39k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (1565:5): [True: 6.39k, False: 367]
  ------------------
 1566|  6.39k|        break;
 1567|     55|    case OFPGT11_ALL:
  ------------------
  |  Branch (1567:5): [True: 55, False: 6.70k]
  ------------------
 1568|    129|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (1568:5): [True: 74, False: 6.69k]
  ------------------
 1569|    163|    case OFPGT11_FF:
  ------------------
  |  Branch (1569:5): [True: 34, False: 6.73k]
  ------------------
 1570|    163|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|    163|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    163|    do {                                                                \
  |  |  |  |  288|    326|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 163]
  |  |  |  |  ------------------
  |  |  |  |  289|    163|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 163]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    163|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 163]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1571|    163|                    "only allowed for select groups");
 1572|    163|        return OFPERR_OFPBPC_BAD_VALUE;
 1573|    204|    default:
  ------------------
  |  Branch (1573:5): [True: 204, False: 6.56k]
  ------------------
 1574|    204|        return OFPERR_OFPGMFC_BAD_TYPE;
 1575|  6.76k|    }
 1576|       |
 1577|  6.39k|    switch (group_cmd) {
 1578|  5.03k|    case OFPGC15_ADD:
  ------------------
  |  Branch (1578:5): [True: 5.03k, False: 1.36k]
  ------------------
 1579|  5.50k|    case OFPGC15_MODIFY:
  ------------------
  |  Branch (1579:5): [True: 470, False: 5.92k]
  ------------------
 1580|  5.58k|    case OFPGC15_ADD_OR_MOD:
  ------------------
  |  Branch (1580:5): [True: 82, False: 6.31k]
  ------------------
 1581|  5.58k|        break;
 1582|     36|    case OFPGC15_DELETE:
  ------------------
  |  Branch (1582:5): [True: 36, False: 6.36k]
  ------------------
 1583|     92|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (1583:5): [True: 56, False: 6.34k]
  ------------------
 1584|    477|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (1584:5): [True: 385, False: 6.01k]
  ------------------
 1585|    477|        OFPPROP_LOG(&rl, false, "ntr selection method property is "
  ------------------
  |  |  139|    477|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    477|    do {                                                                \
  |  |  |  |  288|    954|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 477]
  |  |  |  |  ------------------
  |  |  |  |  289|    477|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 477]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    477|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 477]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1586|    477|                    "only allowed for add and delete group modifications");
 1587|    477|        return OFPERR_OFPBPC_BAD_VALUE;
 1588|    335|    default:
  ------------------
  |  Branch (1588:5): [True: 335, False: 6.06k]
  ------------------
 1589|    335|        return OFPERR_OFPGMFC_BAD_COMMAND;
 1590|  6.39k|    }
 1591|       |
 1592|  5.58k|    if (payload->size < sizeof *prop) {
  ------------------
  |  Branch (1592:9): [True: 35, False: 5.55k]
  ------------------
 1593|     35|        OFPPROP_LOG(&rl, false, "ntr selection method property "
  ------------------
  |  |  139|     35|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     35|    do {                                                                \
  |  |  |  |  288|     70|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 35]
  |  |  |  |  ------------------
  |  |  |  |  289|     35|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 35]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     35|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 35]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1594|     35|                    "length %u is not valid", payload->size);
 1595|     35|        return OFPERR_OFPBPC_BAD_LEN;
 1596|     35|    }
 1597|       |
 1598|  5.55k|    method_len = strnlen(prop->selection_method, NTR_MAX_SELECTION_METHOD_LEN);
  ------------------
  |  |   34|  5.55k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
 1599|       |
 1600|  5.55k|    if (method_len == NTR_MAX_SELECTION_METHOD_LEN) {
  ------------------
  |  |   34|  5.55k|#define NTR_MAX_SELECTION_METHOD_LEN 16
  ------------------
  |  Branch (1600:9): [True: 28, False: 5.52k]
  ------------------
 1601|     28|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|     28|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     28|    do {                                                                \
  |  |  |  |  288|     56|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 28]
  |  |  |  |  ------------------
  |  |  |  |  289|     28|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 28]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     28|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 28]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1602|     28|                    "ntr selection method is not null terminated");
 1603|     28|        return OFPERR_OFPBPC_BAD_VALUE;
 1604|     28|    }
 1605|       |
 1606|  5.52k|    if (strcmp("hash", prop->selection_method)
  ------------------
  |  Branch (1606:9): [True: 1.48k, False: 4.03k]
  ------------------
 1607|  1.48k|        && strcmp("dp_hash", prop->selection_method)) {
  ------------------
  |  Branch (1607:12): [True: 1.38k, False: 104]
  ------------------
 1608|  1.38k|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|  1.38k|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.38k|    do {                                                                \
  |  |  |  |  288|  2.77k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 1.38k]
  |  |  |  |  ------------------
  |  |  |  |  289|  1.38k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.38k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.38k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.38k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1609|  1.38k|                    "ntr selection method '%s' is not supported",
 1610|  1.38k|                    prop->selection_method);
 1611|  1.38k|        return OFPERR_OFPBPC_BAD_VALUE;
 1612|  1.38k|    }
 1613|       |    /* 'method_len' is now non-zero. */
 1614|       |
 1615|  4.13k|    strcpy(gp->selection_method, prop->selection_method);
 1616|  4.13k|    gp->selection_method_param = ntohll(prop->selection_method_param);
 1617|       |
 1618|  4.13k|    ofpbuf_pull(payload, sizeof *prop);
 1619|       |
 1620|  4.13k|    fields_len = ntohs(prop->length) - sizeof *prop;
 1621|  4.13k|    if (fields_len && strcmp("hash", gp->selection_method)) {
  ------------------
  |  Branch (1621:9): [True: 3.96k, False: 172]
  |  Branch (1621:23): [True: 102, False: 3.86k]
  ------------------
 1622|    102|        OFPPROP_LOG(&rl, false, "ntr selection method %s "
  ------------------
  |  |  139|    102|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    102|    do {                                                                \
  |  |  |  |  288|    204|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 102]
  |  |  |  |  ------------------
  |  |  |  |  289|    102|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 102]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    102|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 102]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1623|    102|                    "does not support fields", gp->selection_method);
 1624|    102|        return OFPERR_OFPBPC_BAD_VALUE;
 1625|    102|    }
 1626|       |
 1627|  4.03k|    if (fields_len > 0) {
  ------------------
  |  Branch (1627:9): [True: 3.86k, False: 172]
  ------------------
 1628|  3.86k|        error = oxm_pull_field_array(payload->data, fields_len,
 1629|  3.86k|                &gp->fields);
 1630|  3.86k|        if (error) {
  ------------------
  |  Branch (1630:13): [True: 878, False: 2.98k]
  ------------------
 1631|    878|            OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    878|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    878|    do {                                                                \
  |  |  |  |  288|  1.75k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 878]
  |  |  |  |  ------------------
  |  |  |  |  289|    878|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 878]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    878|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 878]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1632|    878|                    "ntr selection method fields are invalid");
 1633|    878|            return error;
 1634|    878|        }
 1635|  3.86k|    } else {
 1636|       |        /* Selection_method "hash: w/o fields means default hash method. */
 1637|    172|        gp->fields.values_size = 0;
 1638|    172|    }
 1639|       |
 1640|  3.15k|    return 0;
 1641|  4.03k|}
ofp-group.c:ofp_print_bucket_id:
 1816|  5.00k|{
 1817|  5.00k|    if (ofp_version > OFP10_VERSION && ofp_version < OFP15_VERSION) {
  ------------------
  |  Branch (1817:9): [True: 4.65k, False: 351]
  |  Branch (1817:40): [True: 1.69k, False: 2.96k]
  ------------------
 1818|  1.69k|        return;
 1819|  1.69k|    }
 1820|       |
 1821|  3.31k|    ds_put_cstr(s, label);
 1822|       |
 1823|  3.31k|    switch (bucket_id) {
 1824|     81|    case OFPG15_BUCKET_FIRST:
  ------------------
  |  Branch (1824:5): [True: 81, False: 3.23k]
  ------------------
 1825|     81|        ds_put_cstr(s, "first");
 1826|     81|        break;
 1827|    357|    case OFPG15_BUCKET_LAST:
  ------------------
  |  Branch (1827:5): [True: 357, False: 2.95k]
  ------------------
 1828|    357|        ds_put_cstr(s, "last");
 1829|    357|        break;
 1830|    127|    case OFPG15_BUCKET_ALL:
  ------------------
  |  Branch (1830:5): [True: 127, False: 3.18k]
  ------------------
 1831|    127|        ds_put_cstr(s, "all");
 1832|    127|        break;
 1833|  2.74k|    default:
  ------------------
  |  Branch (1833:5): [True: 2.74k, False: 565]
  ------------------
 1834|  2.74k|        ds_put_format(s, "%"PRIu32, bucket_id);
 1835|  2.74k|        break;
 1836|  3.31k|    }
 1837|       |
 1838|  3.31k|    ds_put_char(s, ',');
 1839|  3.31k|}
ofp-group.c:ofputil_pull_ofp11_group_mod:
 2152|  12.9k|{
 2153|  12.9k|    const struct ofp11_group_mod *ogm;
 2154|  12.9k|    enum ofperr error;
 2155|       |
 2156|  12.9k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2157|  12.9k|    gm->command = ntohs(ogm->command);
 2158|  12.9k|    gm->type = ogm->type;
 2159|  12.9k|    gm->group_id = ntohl(ogm->group_id);
 2160|  12.9k|    gm->command_bucket_id = OFPG15_BUCKET_ALL;
 2161|       |
 2162|  12.9k|    error = ofputil_pull_ofp11_buckets(msg, msg->size, ofp_version,
 2163|  12.9k|                                       &gm->buckets);
 2164|       |
 2165|       |    /* OF1.3.5+ prescribes an error when an OFPGC_DELETE includes buckets. */
 2166|  12.9k|    if (!error
  ------------------
  |  Branch (2166:9): [True: 8.60k, False: 4.31k]
  ------------------
 2167|  8.60k|        && ofp_version >= OFP13_VERSION
  ------------------
  |  Branch (2167:12): [True: 5.50k, False: 3.10k]
  ------------------
 2168|  5.50k|        && gm->command == OFPGC11_DELETE
  ------------------
  |  Branch (2168:12): [True: 148, False: 5.35k]
  ------------------
 2169|    148|        && !ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2169:12): [True: 23, False: 125]
  ------------------
 2170|     23|        error = OFPERR_OFPGMFC_INVALID_GROUP;
 2171|     23|        ofputil_bucket_list_destroy(&gm->buckets);
 2172|     23|    }
 2173|       |
 2174|  12.9k|    return error;
 2175|  12.9k|}
ofp-group.c:ofputil_pull_ofp15_group_mod:
 2180|  25.5k|{
 2181|  25.5k|    const struct ofp15_group_mod *ogm;
 2182|  25.5k|    uint16_t bucket_list_len;
 2183|  25.5k|    enum ofperr error = OFPERR_OFPGMFC_BAD_BUCKET;
 2184|       |
 2185|  25.5k|    ogm = ofpbuf_pull(msg, sizeof *ogm);
 2186|  25.5k|    gm->command = ntohs(ogm->command);
 2187|  25.5k|    gm->type = ogm->type;
 2188|  25.5k|    gm->group_id = ntohl(ogm->group_id);
 2189|       |
 2190|  25.5k|    gm->command_bucket_id = ntohl(ogm->command_bucket_id);
 2191|  25.5k|    switch (gm->command) {
 2192|  11.2k|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2192:5): [True: 11.2k, False: 14.3k]
  ------------------
 2193|  11.2k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2193:13): [True: 787, False: 10.4k]
  ------------------
 2194|    787|            error = 0;
 2195|    787|        }
 2196|       |        /* Fall through */
 2197|  14.9k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2197:5): [True: 3.72k, False: 21.8k]
  ------------------
 2198|  14.9k|        if (gm->command_bucket_id <= OFPG15_BUCKET_MAX ||
  ------------------
  |  Branch (2198:13): [True: 13.5k, False: 1.34k]
  ------------------
 2199|  1.34k|            gm->command_bucket_id == OFPG15_BUCKET_FIRST
  ------------------
  |  Branch (2199:13): [True: 84, False: 1.25k]
  ------------------
 2200|  14.0k|            || gm->command_bucket_id == OFPG15_BUCKET_LAST) {
  ------------------
  |  Branch (2200:16): [True: 415, False: 842]
  ------------------
 2201|  14.0k|            error = 0;
 2202|  14.0k|        }
 2203|  14.9k|        break;
 2204|       |
 2205|  7.14k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2205:5): [True: 7.14k, False: 18.4k]
  ------------------
 2206|  7.65k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2206:5): [True: 502, False: 25.0k]
  ------------------
 2207|  7.80k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2207:5): [True: 158, False: 25.4k]
  ------------------
 2208|  7.85k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2208:5): [True: 41, False: 25.5k]
  ------------------
 2209|  10.6k|    default:
  ------------------
  |  Branch (2209:5): [True: 2.81k, False: 22.7k]
  ------------------
 2210|  10.6k|        if (gm->command_bucket_id == OFPG15_BUCKET_ALL) {
  ------------------
  |  Branch (2210:13): [True: 8.08k, False: 2.58k]
  ------------------
 2211|  8.08k|            error = 0;
 2212|  8.08k|        }
 2213|  10.6k|        break;
 2214|  25.5k|    }
 2215|  25.5k|    if (error) {
  ------------------
  |  Branch (2215:9): [True: 2.63k, False: 22.9k]
  ------------------
 2216|  2.63k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  2.63k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  2.63k|    do {                                                                \
  |  |  |  |  288|  2.63k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  2.63k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 2.63k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  2.63k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 2.63k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2217|  2.63k|                     "group command bucket id (%u) is out of range",
 2218|  2.63k|                     gm->command_bucket_id);
 2219|  2.63k|        return OFPERR_OFPGMFC_BAD_BUCKET;
 2220|  2.63k|    }
 2221|       |
 2222|  22.9k|    bucket_list_len = ntohs(ogm->bucket_array_len);
 2223|  22.9k|    if (bucket_list_len > msg->size) {
  ------------------
  |  Branch (2223:9): [True: 1.40k, False: 21.5k]
  ------------------
 2224|  1.40k|        return OFPERR_OFPBRC_BAD_LEN;
 2225|  1.40k|    }
 2226|  21.5k|    error = ofputil_pull_ofp15_buckets(msg, bucket_list_len, ofp_version,
 2227|  21.5k|                                       gm->type, &gm->buckets);
 2228|  21.5k|    if (error) {
  ------------------
  |  Branch (2228:9): [True: 10.5k, False: 11.0k]
  ------------------
 2229|  10.5k|        return error;
 2230|  10.5k|    }
 2231|       |
 2232|  11.0k|    error = parse_ofp15_group_properties(msg, gm->type, gm->command,
 2233|  11.0k|                                         &gm->props, msg->size);
 2234|  11.0k|    if (error) {
  ------------------
  |  Branch (2234:9): [True: 5.77k, False: 5.25k]
  ------------------
 2235|  5.77k|        ofputil_uninit_group_mod(gm);
 2236|  5.77k|    }
 2237|  11.0k|    return error;
 2238|  21.5k|}
ofp-group.c:ofputil_check_group_mod:
 2242|  13.8k|{
 2243|  13.8k|    switch (gm->type) {
 2244|  2.15k|    case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2244:5): [True: 2.15k, False: 11.6k]
  ------------------
 2245|  2.15k|        if (gm->command != OFPGC11_DELETE
  ------------------
  |  Branch (2245:13): [True: 1.73k, False: 417]
  ------------------
 2246|  1.73k|            && !ovs_list_is_singleton(&gm->buckets) ) {
  ------------------
  |  Branch (2246:16): [True: 321, False: 1.41k]
  ------------------
 2247|    321|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2248|    321|        }
 2249|  1.83k|        break;
 2250|  3.27k|    case OFPGT11_ALL:
  ------------------
  |  Branch (2250:5): [True: 3.27k, False: 10.5k]
  ------------------
 2251|  7.46k|    case OFPGT11_SELECT:
  ------------------
  |  Branch (2251:5): [True: 4.18k, False: 9.65k]
  ------------------
 2252|  9.34k|    case OFPGT11_FF:
  ------------------
  |  Branch (2252:5): [True: 1.87k, False: 11.9k]
  ------------------
 2253|  9.34k|        break;
 2254|  2.34k|    default:
  ------------------
  |  Branch (2254:5): [True: 2.34k, False: 11.4k]
  ------------------
 2255|  2.34k|        return OFPERR_OFPGMFC_BAD_TYPE;
 2256|  13.8k|    }
 2257|       |
 2258|  11.1k|    switch (gm->command) {
 2259|  5.18k|    case OFPGC11_ADD:
  ------------------
  |  Branch (2259:5): [True: 5.18k, False: 5.99k]
  ------------------
 2260|  6.60k|    case OFPGC11_MODIFY:
  ------------------
  |  Branch (2260:5): [True: 1.42k, False: 9.75k]
  ------------------
 2261|  7.07k|    case OFPGC11_ADD_OR_MOD:
  ------------------
  |  Branch (2261:5): [True: 469, False: 10.7k]
  ------------------
 2262|  7.58k|    case OFPGC11_DELETE:
  ------------------
  |  Branch (2262:5): [True: 511, False: 10.6k]
  ------------------
 2263|  9.30k|    case OFPGC15_INSERT_BUCKET:
  ------------------
  |  Branch (2263:5): [True: 1.72k, False: 9.45k]
  ------------------
 2264|  9.30k|        break;
 2265|    950|    case OFPGC15_REMOVE_BUCKET:
  ------------------
  |  Branch (2265:5): [True: 950, False: 10.2k]
  ------------------
 2266|    950|        if (!ovs_list_is_empty(&gm->buckets)) {
  ------------------
  |  Branch (2266:13): [True: 196, False: 754]
  ------------------
 2267|    196|            return OFPERR_OFPGMFC_BAD_BUCKET;
 2268|    196|        }
 2269|    754|        break;
 2270|    918|    default:
  ------------------
  |  Branch (2270:5): [True: 918, False: 10.2k]
  ------------------
 2271|    918|        return OFPERR_OFPGMFC_BAD_COMMAND;
 2272|  11.1k|    }
 2273|       |
 2274|  10.0k|    struct ofputil_bucket *bucket;
 2275|  10.0k|    LIST_FOR_EACH (bucket, list_node, &gm->buckets) {
  ------------------
  |  |   76|  10.0k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  10.0k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  10.0k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  12.6k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  12.6k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 4.06k, False: 8.54k]
  |  |  |  |  |  Branch (185:6): [True: 4.06k, False: 8.54k]
  |  |  |  |  ------------------
  |  |  |  |  186|  12.6k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  4.06k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  4.06k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  4.06k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  12.6k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  10.0k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  2.54k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.54k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2276|  4.06k|        if (bucket->weight && gm->type != OFPGT11_SELECT
  ------------------
  |  Branch (2276:13): [True: 796, False: 3.26k]
  |  Branch (2276:31): [True: 634, False: 162]
  ------------------
 2277|    634|            && gm->command != OFPGC15_INSERT_BUCKET) {
  ------------------
  |  Branch (2277:16): [True: 351, False: 283]
  ------------------
 2278|    351|            return OFPERR_OFPGMFC_INVALID_GROUP;
 2279|    351|        }
 2280|       |
 2281|  3.71k|        switch (gm->type) {
 2282|  1.52k|        case OFPGT11_ALL:
  ------------------
  |  Branch (2282:9): [True: 1.52k, False: 2.18k]
  ------------------
 2283|  2.38k|        case OFPGT11_INDIRECT:
  ------------------
  |  Branch (2283:9): [True: 864, False: 2.84k]
  ------------------
 2284|  2.38k|            if (ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2284:17): [True: 742, False: 1.64k]
  ------------------
 2285|    742|                return OFPERR_OFPGMFC_WATCH_UNSUPPORTED;
 2286|    742|            }
 2287|  1.64k|            break;
 2288|  1.64k|        case OFPGT11_SELECT:
  ------------------
  |  Branch (2288:9): [True: 745, False: 2.96k]
  ------------------
 2289|    745|            break;
 2290|    579|        case OFPGT11_FF:
  ------------------
  |  Branch (2290:9): [True: 579, False: 3.13k]
  ------------------
 2291|    579|            if (!ofputil_bucket_has_liveness(bucket)) {
  ------------------
  |  Branch (2291:17): [True: 428, False: 151]
  ------------------
 2292|    428|                return OFPERR_OFPGMFC_INVALID_GROUP;
 2293|    428|            }
 2294|    151|            break;
 2295|    151|        default:
  ------------------
  |  Branch (2295:9): [True: 0, False: 3.71k]
  ------------------
 2296|       |            /* Returning BAD TYPE to be consistent
 2297|       |             * though gm->type has been checked already. */
 2298|      0|            return OFPERR_OFPGMFC_BAD_TYPE;
 2299|  3.71k|        }
 2300|  3.71k|    }
 2301|       |
 2302|  8.54k|    return 0;
 2303|  10.0k|}

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

ofputil_wildcard_from_ofpfw10:
   67|  49.9k|{
   68|  49.9k|    BUILD_ASSERT_DECL(FLOW_WC_SEQ == 43);
  ------------------
  |  |  270|  49.9k|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
   69|       |
   70|       |    /* Initialize most of wc. */
   71|  49.9k|    flow_wildcards_init_catchall(wc);
   72|       |
   73|  49.9k|    if (!(ofpfw & OFPFW10_IN_PORT)) {
  ------------------
  |  Branch (73:9): [True: 38.1k, False: 11.8k]
  ------------------
   74|  38.1k|        wc->masks.in_port.ofp_port = u16_to_ofp(UINT16_MAX);
   75|  38.1k|    }
   76|       |
   77|  49.9k|    if (!(ofpfw & OFPFW10_NW_TOS)) {
  ------------------
  |  Branch (77:9): [True: 36.0k, False: 13.8k]
  ------------------
   78|  36.0k|        wc->masks.nw_tos |= IP_DSCP_MASK;
  ------------------
  |  |  724|  36.0k|#define IP_DSCP_MASK 0xfc
  ------------------
   79|  36.0k|    }
   80|       |
   81|  49.9k|    if (!(ofpfw & OFPFW10_NW_PROTO)) {
  ------------------
  |  Branch (81:9): [True: 35.9k, False: 13.9k]
  ------------------
   82|  35.9k|        wc->masks.nw_proto = UINT8_MAX;
   83|  35.9k|    }
   84|  49.9k|    wc->masks.nw_src = ofputil_wcbits_to_netmask(ofpfw
   85|  49.9k|                                                 >> OFPFW10_NW_SRC_SHIFT);
   86|  49.9k|    wc->masks.nw_dst = ofputil_wcbits_to_netmask(ofpfw
   87|  49.9k|                                                 >> OFPFW10_NW_DST_SHIFT);
   88|       |
   89|  49.9k|    if (!(ofpfw & OFPFW10_TP_SRC)) {
  ------------------
  |  Branch (89:9): [True: 34.1k, False: 15.7k]
  ------------------
   90|  34.1k|        wc->masks.tp_src = OVS_BE16_MAX;
  ------------------
  |  |   42|  34.1k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   91|  34.1k|    }
   92|  49.9k|    if (!(ofpfw & OFPFW10_TP_DST)) {
  ------------------
  |  Branch (92:9): [True: 36.6k, False: 13.2k]
  ------------------
   93|  36.6k|        wc->masks.tp_dst = OVS_BE16_MAX;
  ------------------
  |  |   42|  36.6k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
   94|  36.6k|    }
   95|       |
   96|  49.9k|    if (!(ofpfw & OFPFW10_DL_SRC)) {
  ------------------
  |  Branch (96:9): [True: 35.9k, False: 13.9k]
  ------------------
   97|  35.9k|        WC_MASK_FIELD(wc, dl_src);
  ------------------
  |  |  201|  35.9k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
   98|  35.9k|    }
   99|  49.9k|    if (!(ofpfw & OFPFW10_DL_DST)) {
  ------------------
  |  Branch (99:9): [True: 33.2k, False: 16.7k]
  ------------------
  100|  33.2k|        WC_MASK_FIELD(wc, dl_dst);
  ------------------
  |  |  201|  33.2k|    memset(&(WC)->masks.FIELD, 0xff, sizeof (WC)->masks.FIELD)
  ------------------
  101|  33.2k|    }
  102|  49.9k|    if (!(ofpfw & OFPFW10_DL_TYPE)) {
  ------------------
  |  Branch (102:9): [True: 40.8k, False: 9.05k]
  ------------------
  103|  40.8k|        wc->masks.dl_type = OVS_BE16_MAX;
  ------------------
  |  |   42|  40.8k|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  104|  40.8k|    }
  105|       |
  106|       |    /* VLAN TCI mask. */
  107|  49.9k|    if (!(ofpfw & OFPFW10_DL_VLAN_PCP)) {
  ------------------
  |  Branch (107:9): [True: 36.7k, False: 13.1k]
  ------------------
  108|  36.7k|        wc->masks.vlans[0].tci |= htons(VLAN_PCP_MASK | VLAN_CFI);
  109|  36.7k|    }
  110|  49.9k|    if (!(ofpfw & OFPFW10_DL_VLAN)) {
  ------------------
  |  Branch (110:9): [True: 30.4k, False: 19.4k]
  ------------------
  111|       |        wc->masks.vlans[0].tci |= htons(VLAN_VID_MASK | VLAN_CFI);
  112|  30.4k|    }
  113|  49.9k|}
ofputil_match_from_ofp10_match:
  119|  49.9k|{
  120|  49.9k|    uint32_t ofpfw = ntohl(ofmatch->wildcards) & OFPFW10_ALL;
  121|       |
  122|       |    /* Initialize match->wc. */
  123|  49.9k|    memset(&match->flow, 0, sizeof match->flow);
  124|  49.9k|    ofputil_wildcard_from_ofpfw10(ofpfw, &match->wc);
  125|  49.9k|    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|  49.9k|    const uint32_t ofpfw_data_bits = (OFPFW10_NW_TOS | OFPFW10_NW_PROTO
  130|  49.9k|                                      | OFPFW10_TP_SRC | OFPFW10_TP_DST
  131|  49.9k|                                      | OFPFW10_DL_SRC | OFPFW10_DL_DST
  132|  49.9k|                                      | OFPFW10_DL_TYPE
  133|  49.9k|                                      | OFPFW10_DL_VLAN | OFPFW10_DL_VLAN_PCP);
  134|  49.9k|    if ((ofpfw & ofpfw_data_bits) != ofpfw_data_bits
  ------------------
  |  Branch (134:9): [True: 47.6k, False: 2.26k]
  ------------------
  135|  2.26k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_SRC_SHIFT)
  ------------------
  |  Branch (135:12): [True: 222, False: 2.04k]
  ------------------
  136|  47.9k|        || ofputil_wcbits_to_netmask(ofpfw >> OFPFW10_NW_DST_SHIFT)) {
  ------------------
  |  Branch (136:12): [True: 52, False: 1.98k]
  ------------------
  137|  47.9k|        match_set_default_packet_type(match);
  138|  47.9k|    }
  139|       |
  140|       |    /* Initialize most of match->flow. */
  141|  49.9k|    match->flow.nw_src = ofmatch->nw_src;
  142|  49.9k|    match->flow.nw_dst = ofmatch->nw_dst;
  143|  49.9k|    match->flow.in_port.ofp_port = u16_to_ofp(ntohs(ofmatch->in_port));
  144|  49.9k|    match->flow.dl_type = ofputil_dl_type_from_openflow(ofmatch->dl_type);
  145|  49.9k|    match->flow.tp_src = ofmatch->tp_src;
  146|  49.9k|    match->flow.tp_dst = ofmatch->tp_dst;
  147|  49.9k|    match->flow.dl_src = ofmatch->dl_src;
  148|  49.9k|    match->flow.dl_dst = ofmatch->dl_dst;
  149|  49.9k|    match->flow.nw_tos = ofmatch->nw_tos & IP_DSCP_MASK;
  ------------------
  |  |  724|  49.9k|#define IP_DSCP_MASK 0xfc
  ------------------
  150|  49.9k|    match->flow.nw_proto = ofmatch->nw_proto;
  151|       |
  152|       |    /* Translate VLANs. */
  153|  49.9k|    if (!(ofpfw & OFPFW10_DL_VLAN) &&
  ------------------
  |  Branch (153:9): [True: 30.4k, False: 19.4k]
  ------------------
  154|  30.4k|        ofmatch->dl_vlan == htons(OFP10_VLAN_NONE)) {
  ------------------
  |  Branch (154:9): [True: 2.78k, False: 27.6k]
  ------------------
  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|  2.78k|        match->flow.vlans[0].tci = htons(0);
  164|  2.78k|        match->wc.masks.vlans[0].tci = htons(0xffff);
  165|  47.1k|    } else {
  166|  47.1k|        ovs_be16 vid, pcp, tci;
  167|  47.1k|        uint16_t hpcp;
  168|       |
  169|  47.1k|        vid = ofmatch->dl_vlan & htons(VLAN_VID_MASK);
  170|  47.1k|        hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  498|  47.1k|#define VLAN_PCP_SHIFT 13
  ------------------
                      hpcp = (ofmatch->dl_vlan_pcp << VLAN_PCP_SHIFT) & VLAN_PCP_MASK;
  ------------------
  |  |  497|  47.1k|#define VLAN_PCP_MASK 0xe000
  ------------------
  171|  47.1k|        pcp = htons(hpcp);
  172|  47.1k|        tci = vid | pcp | htons(VLAN_CFI);
  173|  47.1k|        match->flow.vlans[0].tci = tci & match->wc.masks.vlans[0].tci;
  174|  47.1k|    }
  175|       |
  176|       |    /* Clean up. */
  177|  49.9k|    match_zero_wildcarded_fields(match);
  178|  49.9k|}
ofputil_pull_ofp11_match:
  262|  60.9k|{
  263|  60.9k|    struct ofp11_match_header *omh = buf->data;
  264|  60.9k|    uint16_t match_len;
  265|       |
  266|  60.9k|    if (buf->size < sizeof *omh) {
  ------------------
  |  Branch (266:9): [True: 284, False: 60.6k]
  ------------------
  267|    284|        return OFPERR_OFPBMC_BAD_LEN;
  268|    284|    }
  269|       |
  270|  60.6k|    match_len = ntohs(omh->length);
  271|       |
  272|  60.6k|    switch (ntohs(omh->type)) {
  273|  7.73k|    case OFPMT_STANDARD: {
  ------------------
  |  Branch (273:5): [True: 7.73k, False: 52.9k]
  ------------------
  274|  7.73k|        struct ofp11_match *om;
  275|       |
  276|  7.73k|        if (match_len != sizeof *om || buf->size < sizeof *om) {
  ------------------
  |  Branch (276:13): [True: 2.10k, False: 5.62k]
  |  Branch (276:40): [True: 15, False: 5.61k]
  ------------------
  277|  2.12k|            return OFPERR_OFPBMC_BAD_LEN;
  278|  2.12k|        }
  279|  5.61k|        om = ofpbuf_pull(buf, sizeof *om);
  280|  5.61k|        if (padded_match_len) {
  ------------------
  |  Branch (280:13): [True: 52, False: 5.56k]
  ------------------
  281|     52|            *padded_match_len = match_len;
  282|     52|        }
  283|  5.61k|        return ofputil_match_from_ofp11_match(om, match);
  284|  7.73k|    }
  285|       |
  286|  46.5k|    case OFPMT_OXM:
  ------------------
  |  Branch (286:5): [True: 46.5k, False: 14.1k]
  ------------------
  287|  46.5k|        if (padded_match_len) {
  ------------------
  |  Branch (287:13): [True: 14.0k, False: 32.5k]
  ------------------
  288|  14.0k|            *padded_match_len = ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  14.0k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  14.0k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  289|  14.0k|        }
  290|  46.5k|        return oxm_pull_match(buf, false, tun_table, vl_mff_map, match);
  291|       |
  292|  6.36k|    default:
  ------------------
  |  Branch (292:5): [True: 6.36k, False: 54.3k]
  ------------------
  293|  6.36k|        return OFPERR_OFPBMC_BAD_TYPE;
  294|  60.6k|    }
  295|  60.6k|}
ofputil_match_from_ofp11_match:
  302|  5.61k|{
  303|  5.61k|    uint16_t wc = ntohl(ofmatch->wildcards);
  304|  5.61k|    bool ipv4, arp, rarp;
  305|       |
  306|  5.61k|    match_init_catchall(match);
  307|  5.61k|    match->flow.tunnel.metadata.tab = NULL;
  308|       |
  309|  5.61k|    if (!(wc & OFPFW11_IN_PORT)) {
  ------------------
  |  Branch (309:9): [True: 2.79k, False: 2.81k]
  ------------------
  310|  2.79k|        ofp_port_t ofp_port;
  311|  2.79k|        enum ofperr error;
  312|       |
  313|  2.79k|        error = ofputil_port_from_ofp11(ofmatch->in_port, &ofp_port);
  314|  2.79k|        if (error) {
  ------------------
  |  Branch (314:13): [True: 214, False: 2.58k]
  ------------------
  315|    214|            return OFPERR_OFPBMC_BAD_VALUE;
  316|    214|        }
  317|  2.58k|        match_set_in_port(match, ofp_port);
  318|  2.58k|    }
  319|       |
  320|  5.39k|    struct eth_addr dl_src_mask = eth_addr_invert(ofmatch->dl_src_mask);
  321|  5.39k|    struct eth_addr dl_dst_mask = eth_addr_invert(ofmatch->dl_dst_mask);
  322|  5.39k|    if (!eth_addr_is_zero(dl_src_mask) || !eth_addr_is_zero(dl_dst_mask)) {
  ------------------
  |  Branch (322:9): [True: 4.98k, False: 418]
  |  Branch (322:43): [True: 381, False: 37]
  ------------------
  323|  5.36k|        match_set_dl_src_masked(match, ofmatch->dl_src, dl_src_mask);
  324|  5.36k|        match_set_dl_dst_masked(match, ofmatch->dl_dst, dl_dst_mask);
  325|  5.36k|        match_set_default_packet_type(match);
  326|  5.36k|    }
  327|       |
  328|  5.39k|    if (!(wc & OFPFW11_DL_VLAN)) {
  ------------------
  |  Branch (328:9): [True: 4.21k, False: 1.17k]
  ------------------
  329|  4.21k|        if (ofmatch->dl_vlan == htons(OFPVID11_NONE)) {
  ------------------
  |  Branch (329:13): [True: 821, False: 3.39k]
  ------------------
  330|       |            /* Match only packets without a VLAN tag. */
  331|    821|            match->flow.vlans[0].tci = htons(0);
  332|    821|            match->wc.masks.vlans[0].tci = OVS_BE16_MAX;
  ------------------
  |  |   42|    821|#define OVS_BE16_MAX ((OVS_FORCE ovs_be16) 0xffff)
  ------------------
  333|  3.39k|        } else {
  334|  3.39k|            if (ofmatch->dl_vlan == htons(OFPVID11_ANY)) {
  ------------------
  |  Branch (334:17): [True: 919, False: 2.47k]
  ------------------
  335|       |                /* Match any packet with a VLAN tag regardless of VID. */
  336|    919|                match->flow.vlans[0].tci = htons(VLAN_CFI);
  337|    919|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI);
  338|  2.47k|            } else if (ntohs(ofmatch->dl_vlan) < 4096) {
  ------------------
  |  Branch (338:24): [True: 2.28k, False: 199]
  ------------------
  339|       |                /* Match only packets with the specified VLAN VID. */
  340|  2.28k|                match->flow.vlans[0].tci = htons(VLAN_CFI) | ofmatch->dl_vlan;
  341|  2.28k|                match->wc.masks.vlans[0].tci = htons(VLAN_CFI | VLAN_VID_MASK);
  342|  2.28k|            } else {
  343|       |                /* Invalid VID. */
  344|    199|                return OFPERR_OFPBMC_BAD_VALUE;
  345|    199|            }
  346|       |
  347|  3.19k|            if (!(wc & OFPFW11_DL_VLAN_PCP)) {
  ------------------
  |  Branch (347:17): [True: 1.38k, False: 1.81k]
  ------------------
  348|  1.38k|                if (ofmatch->dl_vlan_pcp <= 7) {
  ------------------
  |  Branch (348:21): [True: 1.29k, False: 88]
  ------------------
  349|  1.29k|                    match->flow.vlans[0].tci |= htons(ofmatch->dl_vlan_pcp
  350|  1.29k|                                                  << VLAN_PCP_SHIFT);
  351|  1.29k|                    match->wc.masks.vlans[0].tci |= htons(VLAN_PCP_MASK);
  352|  1.29k|                } else {
  353|       |                    /* Invalid PCP. */
  354|     88|                    return OFPERR_OFPBMC_BAD_VALUE;
  355|     88|                }
  356|  1.38k|            }
  357|  3.19k|        }
  358|  3.93k|        match_set_default_packet_type(match);
  359|  3.93k|    }
  360|       |
  361|  5.11k|    if (!(wc & OFPFW11_DL_TYPE)) {
  ------------------
  |  Branch (361:9): [True: 4.16k, False: 951]
  ------------------
  362|  4.16k|        match_set_dl_type(match,
  363|  4.16k|                          ofputil_dl_type_from_openflow(ofmatch->dl_type));
  364|  4.16k|        match_set_default_packet_type(match);
  365|  4.16k|    }
  366|       |
  367|  5.11k|    ipv4 = match->flow.dl_type == htons(ETH_TYPE_IP);
  368|  5.11k|    arp = match->flow.dl_type == htons(ETH_TYPE_ARP);
  369|  5.11k|    rarp = match->flow.dl_type == htons(ETH_TYPE_RARP);
  370|       |
  371|  5.11k|    if (ipv4 && !(wc & OFPFW11_NW_TOS)) {
  ------------------
  |  Branch (371:9): [True: 1.85k, False: 3.25k]
  |  Branch (371:17): [True: 1.28k, False: 564]
  ------------------
  372|  1.28k|        if (ofmatch->nw_tos & ~IP_DSCP_MASK) {
  ------------------
  |  |  724|  1.28k|#define IP_DSCP_MASK 0xfc
  ------------------
  |  Branch (372:13): [True: 75, False: 1.21k]
  ------------------
  373|       |            /* Invalid TOS. */
  374|     75|            return OFPERR_OFPBMC_BAD_VALUE;
  375|     75|        }
  376|       |
  377|  1.21k|        match_set_nw_dscp(match, ofmatch->nw_tos);
  378|  1.21k|    }
  379|       |
  380|  5.03k|    if (ipv4 || arp || rarp) {
  ------------------
  |  Branch (380:9): [True: 1.77k, False: 3.25k]
  |  Branch (380:17): [True: 216, False: 3.04k]
  |  Branch (380:24): [True: 16, False: 3.02k]
  ------------------
  381|  2.00k|        if (!(wc & OFPFW11_NW_PROTO)) {
  ------------------
  |  Branch (381:13): [True: 1.64k, False: 367]
  ------------------
  382|  1.64k|            match_set_nw_proto(match, ofmatch->nw_proto);
  383|  1.64k|        }
  384|  2.00k|        match_set_nw_src_masked(match, ofmatch->nw_src, ~ofmatch->nw_src_mask);
  385|  2.00k|        match_set_nw_dst_masked(match, ofmatch->nw_dst, ~ofmatch->nw_dst_mask);
  386|  2.00k|    }
  387|       |
  388|  5.03k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  389|  5.03k|    if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.77k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
                  if (ipv4 && (wc & OFPFW11_TP_ALL) != OFPFW11_TP_ALL) {
  ------------------
  |  |  388|  1.77k|#define OFPFW11_TP_ALL (OFPFW11_TP_SRC | OFPFW11_TP_DST)
  ------------------
  |  Branch (389:9): [True: 1.77k, False: 3.25k]
  |  Branch (389:17): [True: 1.26k, False: 516]
  ------------------
  390|  1.26k|        switch (match->flow.nw_proto) {
  391|    318|        case IPPROTO_ICMP:
  ------------------
  |  Branch (391:9): [True: 318, False: 943]
  ------------------
  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|    318|            if (!(wc & OFPFW11_TP_SRC)) {
  ------------------
  |  Branch (399:17): [True: 290, False: 28]
  ------------------
  400|    290|                uint16_t icmp_type = ntohs(ofmatch->tp_src);
  401|    290|                if (icmp_type < 0x100) {
  ------------------
  |  Branch (401:21): [True: 251, False: 39]
  ------------------
  402|    251|                    match_set_icmp_type(match, icmp_type);
  403|    251|                } else {
  404|     39|                    return OFPERR_OFPBMC_BAD_FIELD;
  405|     39|                }
  406|    290|            }
  407|    279|            if (!(wc & OFPFW11_TP_DST)) {
  ------------------
  |  Branch (407:17): [True: 130, False: 149]
  ------------------
  408|    130|                uint16_t icmp_code = ntohs(ofmatch->tp_dst);
  409|    130|                if (icmp_code < 0x100) {
  ------------------
  |  Branch (409:21): [True: 76, False: 54]
  ------------------
  410|     76|                    match_set_icmp_code(match, icmp_code);
  411|     76|                } else {
  412|     54|                    return OFPERR_OFPBMC_BAD_FIELD;
  413|     54|                }
  414|    130|            }
  415|    225|            break;
  416|       |
  417|    225|        case IPPROTO_TCP:
  ------------------
  |  Branch (417:9): [True: 22, False: 1.23k]
  ------------------
  418|     60|        case IPPROTO_UDP:
  ------------------
  |  Branch (418:9): [True: 38, False: 1.22k]
  ------------------
  419|    641|        case IPPROTO_SCTP:
  ------------------
  |  Branch (419:9): [True: 581, False: 680]
  ------------------
  420|    641|            if (!(wc & (OFPFW11_TP_SRC))) {
  ------------------
  |  Branch (420:17): [True: 59, False: 582]
  ------------------
  421|     59|                match_set_tp_src(match, ofmatch->tp_src);
  422|     59|            }
  423|    641|            if (!(wc & (OFPFW11_TP_DST))) {
  ------------------
  |  Branch (423:17): [True: 584, False: 57]
  ------------------
  424|    584|                match_set_tp_dst(match, ofmatch->tp_dst);
  425|    584|            }
  426|    641|            break;
  427|       |
  428|    302|        default:
  ------------------
  |  Branch (428:9): [True: 302, False: 959]
  ------------------
  429|       |            /* OF1.1 says explicitly to ignore this. */
  430|    302|            break;
  431|  1.26k|        }
  432|  1.26k|    }
  433|       |
  434|  4.94k|    if (eth_type_mpls(match->flow.dl_type)) {
  ------------------
  |  Branch (434:9): [True: 471, False: 4.47k]
  ------------------
  435|    471|        if (!(wc & OFPFW11_MPLS_LABEL)) {
  ------------------
  |  Branch (435:13): [True: 343, False: 128]
  ------------------
  436|    343|            match_set_mpls_label(match, 0, ofmatch->mpls_label);
  437|    343|        }
  438|    471|        if (!(wc & OFPFW11_MPLS_TC)) {
  ------------------
  |  Branch (438:13): [True: 428, False: 43]
  ------------------
  439|    428|            match_set_mpls_tc(match, 0, ofmatch->mpls_tc);
  440|    428|        }
  441|    471|    }
  442|       |
  443|  4.94k|    match_set_metadata_masked(match, ofmatch->metadata,
  444|  4.94k|                              ~ofmatch->metadata_mask);
  445|       |
  446|  4.94k|    return 0;
  447|  5.03k|}
ofputil_dl_type_from_openflow:
  632|  54.0k|{
  633|  54.0k|    return (ofp_dl_type == htons(OFP_DL_TYPE_NOT_ETH_TYPE)
  ------------------
  |  Branch (633:13): [True: 65, False: 54.0k]
  ------------------
  634|  54.0k|            ? htons(FLOW_DL_TYPE_NONE)
  635|  54.0k|            : ofp_dl_type);
  636|  54.0k|}
ofputil_decode_tlv_table_mod:
  709|  1.34k|{
  710|  1.34k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  711|  1.34k|    ofpraw_pull_assert(&msg);
  712|       |
  713|  1.34k|    struct nx_tlv_table_mod *nx_ttm = ofpbuf_pull(&msg, sizeof *nx_ttm);
  714|  1.34k|    ttm->command = ntohs(nx_ttm->command);
  715|  1.34k|    if (ttm->command > NXTTMC_CLEAR) {
  ------------------
  |  Branch (715:9): [True: 418, False: 928]
  ------------------
  716|    418|        VLOG_WARN_RL(&rl, "tlv table mod command (%u) is out of range",
  ------------------
  |  |  224|    418|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    418|    do {                                                                \
  |  |  |  |  288|    418|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    418|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 418]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    418|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 418]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  717|    418|                     ttm->command);
  718|    418|        return OFPERR_NXTTMFC_BAD_COMMAND;
  719|    418|    }
  720|       |
  721|    928|    return decode_tlv_table_mappings(&msg, TUN_METADATA_NUM_OPTS,
  ------------------
  |  |   26|    928|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  722|    928|                                        &ttm->mappings);
  723|  1.34k|}
ofputil_format_tlv_table_mod:
  745|    551|{
  746|    551|    ds_put_cstr(s, "\n ");
  747|       |
  748|    551|    switch (ttm->command) {
  ------------------
  |  Branch (748:13): [True: 551, False: 0]
  ------------------
  749|    445|    case NXTTMC_ADD:
  ------------------
  |  Branch (749:5): [True: 445, False: 106]
  ------------------
  750|    445|        ds_put_cstr(s, "ADD");
  751|    445|        break;
  752|     72|    case NXTTMC_DELETE:
  ------------------
  |  Branch (752:5): [True: 72, False: 479]
  ------------------
  753|     72|        ds_put_cstr(s, "DEL");
  754|     72|        break;
  755|     34|    case NXTTMC_CLEAR:
  ------------------
  |  Branch (755:5): [True: 34, False: 517]
  ------------------
  756|     34|        ds_put_cstr(s, "CLEAR");
  757|     34|        break;
  758|    551|    }
  759|       |
  760|    551|    if (ttm->command != NXTTMC_CLEAR) {
  ------------------
  |  Branch (760:9): [True: 517, False: 34]
  ------------------
  761|    517|        print_tlv_table(s, &ttm->mappings);
  762|    517|    }
  763|    551|}
ofputil_decode_tlv_table_reply:
  791|  1.60k|{
  792|  1.60k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  793|  1.60k|    ofpraw_pull_assert(&msg);
  794|       |
  795|  1.60k|    struct nx_tlv_table_reply *nx_ttr = ofpbuf_pull(&msg, sizeof *nx_ttr);
  796|  1.60k|    ttr->max_option_space = ntohl(nx_ttr->max_option_space);
  797|  1.60k|    ttr->max_fields = ntohs(nx_ttr->max_fields);
  798|       |
  799|  1.60k|    return decode_tlv_table_mappings(&msg, ttr->max_fields, &ttr->mappings);
  800|  1.60k|}
ofputil_format_tlv_table_reply:
  839|    690|{
  840|    690|    ds_put_char(s, '\n');
  841|       |
  842|    690|    const struct ofputil_tlv_map *map;
  843|    690|    int allocated_space = 0;
  844|  1.21k|    LIST_FOR_EACH (map, list_node, &ttr->mappings) {
  ------------------
  |  |   76|    690|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|    690|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|    690|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  1.90k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  1.90k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 1.21k, False: 690]
  |  |  |  |  |  Branch (185:6): [True: 1.21k, False: 690]
  |  |  |  |  ------------------
  |  |  |  |  186|  1.90k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  1.21k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  1.21k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  1.21k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  1.90k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  1.21k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  1.21k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  1.21k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  845|  1.21k|        allocated_space += map->option_len;
  846|  1.21k|    }
  847|       |
  848|    690|    ds_put_format(s, " max option space=%"PRIu32" max fields=%"PRIu16"\n",
  849|    690|                  ttr->max_option_space, ttr->max_fields);
  850|    690|    ds_put_format(s, " allocated option space=%d\n", allocated_space);
  851|    690|    ds_put_char(s, '\n');
  852|    690|    print_tlv_table(s, &ttr->mappings);
  853|    690|}
ofputil_uninit_tlv_table:
  857|  2.53k|{
  858|  2.53k|    struct ofputil_tlv_map *map;
  859|       |
  860|  4.98k|    LIST_FOR_EACH_POP (map, list_node, mappings) {
  ------------------
  |  |  140|  7.51k|    while (!ovs_list_is_empty(LIST) ?                                         \
  |  |  ------------------
  |  |  |  Branch (140:12): [True: 4.98k, False: 2.53k]
  |  |  |  Branch (140:12): [True: 4.98k, False: 2.53k]
  |  |  ------------------
  |  |  141|  7.51k|           (INIT_CONTAINER(ITER, ovs_list_pop_front(LIST), MEMBER), 1) :      \
  |  |  ------------------
  |  |  |  |  150|  4.98k|    ((OBJECT) = NULL, ASSIGN_CONTAINER(OBJECT, POINTER, MEMBER))
  |  |  |  |  ------------------
  |  |  |  |  |  |  143|  4.98k|    ((OBJECT) = OBJECT_CONTAINING(POINTER, OBJECT, MEMBER), (void) 0)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  134|  4.98k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  |  |  135|  4.98k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  108|  4.98k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  142|  7.51k|           (ITER = NULL, 0))
  ------------------
  861|  4.98k|        free(map);
  862|  4.98k|    }
  863|  2.53k|}
ofputil_normalize_match:
 1000|  46.6k|{
 1001|       |    ofputil_normalize_match__(match, true);
 1002|  46.6k|}
ofp-match.c:ofputil_wcbits_to_netmask:
   44|   104k|{
   45|   104k|    wcbits &= 0x3f;
   46|   104k|    return wcbits < 32 ? htonl(~((1u << wcbits) - 1)) : 0;
  ------------------
  |  Branch (46:12): [True: 70.8k, False: 33.3k]
  ------------------
   47|   104k|}
ofp-match.c:decode_tlv_table_mappings:
  672|  2.53k|{
  673|  2.53k|    ovs_list_init(mappings);
  674|       |
  675|  6.22k|    while (msg->size) {
  ------------------
  |  Branch (675:12): [True: 4.98k, False: 1.24k]
  ------------------
  676|  4.98k|        struct nx_tlv_map *nx_map;
  677|  4.98k|        struct ofputil_tlv_map *map;
  678|       |
  679|  4.98k|        nx_map = ofpbuf_pull(msg, sizeof *nx_map);
  680|  4.98k|        map = xmalloc(sizeof *map);
  681|  4.98k|        ovs_list_push_back(mappings, &map->list_node);
  682|       |
  683|  4.98k|        map->option_class = ntohs(nx_map->option_class);
  684|  4.98k|        map->option_type = nx_map->option_type;
  685|       |
  686|  4.98k|        map->option_len = nx_map->option_len;
  687|  4.98k|        if (map->option_len % 4 || map->option_len > TLV_MAX_OPT_SIZE) {
  ------------------
  |  |   26|  4.44k|#define TLV_MAX_OPT_SIZE 124
  ------------------
  |  Branch (687:13): [True: 535, False: 4.44k]
  |  Branch (687:36): [True: 321, False: 4.12k]
  ------------------
  688|    856|            VLOG_WARN_RL(&rl, "tlv table option length (%u) is not a "
  ------------------
  |  |  224|    856|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    856|    do {                                                                \
  |  |  |  |  288|    856|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    856|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 856]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    856|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 856]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  689|    856|                         "valid option size", map->option_len);
  690|    856|            ofputil_uninit_tlv_table(mappings);
  691|    856|            return OFPERR_NXTTMFC_BAD_OPT_LEN;
  692|    856|        }
  693|       |
  694|  4.12k|        map->index = ntohs(nx_map->index);
  695|  4.12k|        if (map->index >= max_fields) {
  ------------------
  |  Branch (695:13): [True: 437, False: 3.68k]
  ------------------
  696|    437|            VLOG_WARN_RL(&rl, "tlv table field index (%u) is too large "
  ------------------
  |  |  224|    437|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    437|    do {                                                                \
  |  |  |  |  288|    437|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    437|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 437]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    437|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 437]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  697|    437|                         "(max %u)", map->index, max_fields - 1);
  698|    437|            ofputil_uninit_tlv_table(mappings);
  699|    437|            return OFPERR_NXTTMFC_BAD_FIELD_IDX;
  700|    437|        }
  701|  4.12k|    }
  702|       |
  703|  1.24k|    return 0;
  704|  2.53k|}
ofp-match.c:print_tlv_table:
  727|  1.20k|{
  728|  1.20k|    struct ofputil_tlv_map *map;
  729|       |
  730|  1.20k|    ds_put_cstr(s, " mapping table:\n");
  731|  1.20k|    ds_put_cstr(s, "  class  type  length  match field\n");
  732|  1.20k|    ds_put_cstr(s, " ------  ----  ------  --------------");
  733|       |
  734|  2.14k|    LIST_FOR_EACH (map, list_node, mappings) {
  ------------------
  |  |   76|  1.20k|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|  1.20k|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  1.20k|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|  3.35k|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|  3.35k|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 2.14k, False: 1.20k]
  |  |  |  |  |  Branch (185:6): [True: 2.14k, False: 1.20k]
  |  |  |  |  ------------------
  |  |  |  |  186|  3.35k|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  2.14k|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  2.14k|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  2.14k|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  3.35k|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|  2.14k|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|  2.14k|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|  2.14k|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  735|  2.14k|        ds_put_format(s, "\n %#6"PRIx16"  %#4"PRIx8"  %6"PRIu8"  "
  736|       |                      "tun_metadata%"PRIu16,
  737|  2.14k|                      map->option_class, map->option_type, map->option_len,
  738|  2.14k|                      map->index);
  739|  2.14k|    }
  740|  1.20k|}
ofp-match.c:ofputil_normalize_match__:
  867|  46.6k|{
  868|  46.6k|    enum {
  869|  46.6k|        MAY_NW_ADDR     = 1 << 0, /* nw_src, nw_dst */
  870|  46.6k|        MAY_TP_ADDR     = 1 << 1, /* tp_src, tp_dst */
  871|  46.6k|        MAY_NW_PROTO    = 1 << 2, /* nw_proto */
  872|  46.6k|        MAY_IPVx        = 1 << 3, /* tos, frag, ttl */
  873|  46.6k|        MAY_ARP_SHA     = 1 << 4, /* arp_sha */
  874|  46.6k|        MAY_ARP_THA     = 1 << 5, /* arp_tha */
  875|  46.6k|        MAY_IPV6        = 1 << 6, /* ipv6_src, ipv6_dst, ipv6_label */
  876|  46.6k|        MAY_ND_TARGET   = 1 << 7, /* nd_target */
  877|  46.6k|        MAY_MPLS        = 1 << 8, /* mpls label and tc */
  878|  46.6k|        MAY_ETHER       = 1 << 9, /* dl_src, dl_dst */
  879|  46.6k|    } may_match;
  880|       |
  881|  46.6k|    struct flow_wildcards wc = match->wc;
  882|  46.6k|    ovs_be16 dl_type;
  883|       |
  884|       |    /* Figure out what fields may be matched. */
  885|       |    /* Check the packet_type first and extract dl_type. */
  886|  46.6k|    if (wc.masks.packet_type == 0 || match_has_default_packet_type(match)) {
  ------------------
  |  Branch (886:9): [True: 1.97k, False: 44.6k]
  |  Branch (886:38): [True: 44.6k, False: 0]
  ------------------
  887|  46.6k|        may_match = MAY_ETHER;
  888|  46.6k|        dl_type = match->flow.dl_type;
  889|  46.6k|    } 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|  46.6k|    if (dl_type == htons(ETH_TYPE_IP)) {
  ------------------
  |  Branch (897:9): [True: 8.95k, False: 37.6k]
  ------------------
  898|  8.95k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_NW_ADDR;
  899|  8.95k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (899:13): [True: 1.02k, False: 7.92k]
  ------------------
  900|  7.92k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (900:13): [True: 1.37k, False: 6.55k]
  ------------------
  901|  6.55k|            match->flow.nw_proto == IPPROTO_SCTP ||
  ------------------
  |  Branch (901:13): [True: 573, False: 5.98k]
  ------------------
  902|  5.98k|            match->flow.nw_proto == IPPROTO_ICMP) {
  ------------------
  |  Branch (902:13): [True: 273, False: 5.71k]
  ------------------
  903|  3.24k|            may_match |= MAY_TP_ADDR;
  904|  3.24k|        }
  905|  37.6k|    } else if (dl_type == htons(ETH_TYPE_IPV6)) {
  ------------------
  |  Branch (905:16): [True: 3.40k, False: 34.2k]
  ------------------
  906|  3.40k|        may_match |= MAY_NW_PROTO | MAY_IPVx | MAY_IPV6;
  907|  3.40k|        if (match->flow.nw_proto == IPPROTO_TCP ||
  ------------------
  |  Branch (907:13): [True: 822, False: 2.58k]
  ------------------
  908|  2.58k|            match->flow.nw_proto == IPPROTO_UDP ||
  ------------------
  |  Branch (908:13): [True: 664, False: 1.92k]
  ------------------
  909|  2.58k|            match->flow.nw_proto == IPPROTO_SCTP) {
  ------------------
  |  Branch (909:13): [True: 1.09k, False: 824]
  ------------------
  910|  2.58k|            may_match |= MAY_TP_ADDR;
  911|  2.58k|        } else if (match->flow.nw_proto == IPPROTO_ICMPV6) {
  ------------------
  |  Branch (911:20): [True: 549, False: 275]
  ------------------
  912|    549|            may_match |= MAY_TP_ADDR;
  913|    549|            if (match->flow.tp_src == htons(ND_NEIGHBOR_SOLICIT)) {
  ------------------
  |  Branch (913:17): [True: 69, False: 480]
  ------------------
  914|     69|                may_match |= MAY_ND_TARGET | MAY_ARP_SHA;
  915|    480|            } else if (match->flow.tp_src == htons(ND_NEIGHBOR_ADVERT)) {
  ------------------
  |  Branch (915:24): [True: 90, False: 390]
  ------------------
  916|     90|                may_match |= MAY_ND_TARGET | MAY_ARP_THA;
  917|     90|            }
  918|    549|        }
  919|  34.2k|    } else if (dl_type == htons(ETH_TYPE_ARP) ||
  ------------------
  |  Branch (919:16): [True: 1.34k, False: 32.9k]
  ------------------
  920|  32.9k|               dl_type == htons(ETH_TYPE_RARP)) {
  ------------------
  |  Branch (920:16): [True: 471, False: 32.4k]
  ------------------
  921|  1.81k|        may_match |= MAY_NW_PROTO | MAY_NW_ADDR | MAY_ARP_SHA | MAY_ARP_THA;
  922|  32.4k|    } else if (eth_type_mpls(dl_type)) {
  ------------------
  |  Branch (922:16): [True: 286, False: 32.1k]
  ------------------
  923|    286|        may_match |= MAY_MPLS;
  924|    286|    }
  925|       |
  926|       |    /* Clear the fields that may not be matched. */
  927|  46.6k|    if (!(may_match & MAY_ETHER)) {
  ------------------
  |  Branch (927:9): [True: 0, False: 46.6k]
  ------------------
  928|      0|        wc.masks.dl_src = wc.masks.dl_dst = eth_addr_zero;
  929|      0|    }
  930|  46.6k|    if (!(may_match & MAY_NW_ADDR)) {
  ------------------
  |  Branch (930:9): [True: 35.8k, False: 10.7k]
  ------------------
  931|  35.8k|        wc.masks.nw_src = wc.masks.nw_dst = htonl(0);
  932|  35.8k|    }
  933|  46.6k|    if (!(may_match & MAY_TP_ADDR)) {
  ------------------
  |  Branch (933:9): [True: 40.2k, False: 6.37k]
  ------------------
  934|  40.2k|        wc.masks.tp_src = wc.masks.tp_dst = htons(0);
  935|  40.2k|    }
  936|  46.6k|    if (!(may_match & MAY_NW_PROTO)) {
  ------------------
  |  Branch (936:9): [True: 32.4k, False: 14.1k]
  ------------------
  937|  32.4k|        wc.masks.nw_proto = 0;
  938|  32.4k|    }
  939|  46.6k|    if (!(may_match & MAY_IPVx)) {
  ------------------
  |  Branch (939:9): [True: 34.2k, False: 12.3k]
  ------------------
  940|  34.2k|        wc.masks.nw_tos = 0;
  941|  34.2k|        wc.masks.nw_ttl = 0;
  942|  34.2k|    }
  943|  46.6k|    if (!(may_match & MAY_ARP_SHA)) {
  ------------------
  |  Branch (943:9): [True: 44.7k, False: 1.88k]
  ------------------
  944|  44.7k|        WC_UNMASK_FIELD(&wc, arp_sha);
  ------------------
  |  |  205|  44.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  945|  44.7k|    }
  946|  46.6k|    if (!(may_match & MAY_ARP_THA)) {
  ------------------
  |  Branch (946:9): [True: 44.7k, False: 1.90k]
  ------------------
  947|  44.7k|        WC_UNMASK_FIELD(&wc, arp_tha);
  ------------------
  |  |  205|  44.7k|    memset(&(WC)->masks.FIELD, 0, sizeof (WC)->masks.FIELD)
  ------------------
  948|  44.7k|    }
  949|  46.6k|    if (!(may_match & MAY_IPV6)) {
  ------------------
  |  Branch (949:9): [True: 43.2k, False: 3.40k]
  ------------------
  950|  43.2k|        wc.masks.ipv6_src = wc.masks.ipv6_dst = in6addr_any;
  951|  43.2k|        wc.masks.ipv6_label = htonl(0);
  952|  43.2k|    }
  953|  46.6k|    if (!(may_match & MAY_ND_TARGET)) {
  ------------------
  |  Branch (953:9): [True: 46.4k, False: 159]
  ------------------
  954|  46.4k|        wc.masks.nd_target = in6addr_any;
  955|  46.4k|    }
  956|  46.6k|    if (!(may_match & MAY_MPLS)) {
  ------------------
  |  Branch (956:9): [True: 46.3k, False: 286]
  ------------------
  957|  46.3k|        memset(wc.masks.mpls_lse, 0, sizeof wc.masks.mpls_lse);
  958|  46.3k|    }
  959|       |
  960|       |    /* Log any changes. */
  961|  46.6k|    if (!flow_wildcards_equal(&wc, &match->wc)) {
  ------------------
  |  Branch (961:9): [True: 40.9k, False: 5.69k]
  ------------------
  962|  40.9k|        bool log = may_log && !VLOG_DROP_INFO(&rl);
  ------------------
  |  |  235|  81.8k|#define VLOG_DROP_INFO(RL) vlog_should_drop(&this_module, VLL_INFO, RL)
  ------------------
  |  Branch (962:20): [True: 40.9k, False: 0]
  |  Branch (962:31): [True: 0, False: 40.9k]
  ------------------
  963|  40.9k|        char *pre = (log
  ------------------
  |  Branch (963:22): [True: 0, False: 40.9k]
  ------------------
  964|  40.9k|                     ? match_to_string(match, NULL, OFP_DEFAULT_PRIORITY)
  ------------------
  |  |  138|      0|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  965|  40.9k|                     : NULL);
  966|       |
  967|  40.9k|        match->wc = wc;
  968|  40.9k|        match_zero_wildcarded_fields(match);
  969|       |
  970|  40.9k|        if (log) {
  ------------------
  |  Branch (970:13): [True: 0, False: 40.9k]
  ------------------
  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:");
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  973|      0|            VLOG_INFO(" pre: %s", pre);
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  974|      0|            VLOG_INFO("post: %s", post);
  ------------------
  |  |  210|      0|#define VLOG_INFO(...) VLOG(VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  975|      0|            free(pre);
  976|      0|            free(post);
  977|      0|        }
  978|  40.9k|    }
  979|  46.6k|}

ofputil_format_meter_id:
   34|  5.84k|{
   35|  5.84k|    if (meter_id <= OFPM13_MAX) {
  ------------------
  |  Branch (35:9): [True: 2.69k, False: 3.15k]
  ------------------
   36|  2.69k|        ds_put_format(s, "meter%c%"PRIu32, separator, meter_id);
   37|  3.15k|    } else {
   38|  3.15k|        const char *name;
   39|  3.15k|        switch (meter_id) {
   40|    102|        case OFPM13_SLOWPATH:
  ------------------
  |  Branch (40:9): [True: 102, False: 3.05k]
  ------------------
   41|    102|            name = "slowpath";
   42|    102|            break;
   43|    215|        case OFPM13_CONTROLLER:
  ------------------
  |  Branch (43:9): [True: 215, False: 2.94k]
  ------------------
   44|    215|            name = "controller";
   45|    215|            break;
   46|    810|        case OFPM13_ALL:
  ------------------
  |  Branch (46:9): [True: 810, False: 2.34k]
  ------------------
   47|    810|            name = "all";
   48|    810|            break;
   49|  2.03k|        default:
  ------------------
  |  Branch (49:9): [True: 2.03k, False: 1.12k]
  ------------------
   50|  2.03k|            name = "unknown";
   51|  3.15k|        }
   52|  3.15k|        ds_put_format(s, "meter%c%s", separator, name);
   53|  3.15k|    }
   54|  5.84k|}
ofputil_format_meter_band:
   59|  1.42k|{
   60|  1.42k|    ds_put_cstr(s, "\ntype=");
   61|  1.42k|    switch (mb->type) {
   62|  1.34k|    case OFPMBT13_DROP:
  ------------------
  |  Branch (62:5): [True: 1.34k, False: 77]
  ------------------
   63|  1.34k|        ds_put_cstr(s, "drop");
   64|  1.34k|        break;
   65|     77|    case OFPMBT13_DSCP_REMARK:
  ------------------
  |  Branch (65:5): [True: 77, False: 1.34k]
  ------------------
   66|     77|        ds_put_cstr(s, "dscp_remark");
   67|     77|        break;
   68|      0|    default:
  ------------------
  |  Branch (68:5): [True: 0, False: 1.42k]
  ------------------
   69|      0|        ds_put_format(s, "%u", mb->type);
   70|  1.42k|    }
   71|       |
   72|  1.42k|    ds_put_format(s, " rate=%"PRIu32, mb->rate);
   73|       |
   74|  1.42k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (74:9): [True: 527, False: 895]
  ------------------
   75|    527|        ds_put_format(s, " burst_size=%"PRIu32, mb->burst_size);
   76|    527|    }
   77|  1.42k|    if (mb->type == OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (77:9): [True: 77, False: 1.34k]
  ------------------
   78|       |        ds_put_format(s, " prec_level=%"PRIu8, mb->prec_level);
   79|     77|    }
   80|  1.42k|}
ofputil_decode_meter_mod:
  126|  4.07k|{
  127|  4.07k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  128|  4.07k|    ofpraw_pull_assert(&b);
  129|  4.07k|    const struct ofp13_meter_mod *omm = ofpbuf_pull(&b, sizeof *omm);
  130|       |
  131|       |    /* Translate the message. */
  132|  4.07k|    mm->command = ntohs(omm->command);
  133|  4.07k|    if (mm->command != OFPMC13_ADD &&
  ------------------
  |  Branch (133:9): [True: 2.38k, False: 1.68k]
  ------------------
  134|  2.38k|        mm->command != OFPMC13_MODIFY &&
  ------------------
  |  Branch (134:9): [True: 1.01k, False: 1.37k]
  ------------------
  135|  1.01k|        mm->command != OFPMC13_DELETE) {
  ------------------
  |  Branch (135:9): [True: 645, False: 372]
  ------------------
  136|    645|        return OFPERR_OFPMMFC_BAD_COMMAND;
  137|    645|    }
  138|  3.43k|    mm->meter.meter_id = ntohl(omm->meter_id);
  139|       |
  140|  3.43k|    if (mm->command == OFPMC13_DELETE) {
  ------------------
  |  Branch (140:9): [True: 372, False: 3.05k]
  ------------------
  141|    372|        mm->meter.flags = 0;
  142|    372|        mm->meter.n_bands = 0;
  143|    372|        mm->meter.bands = NULL;
  144|  3.05k|    } else {
  145|  3.05k|        enum ofperr error;
  146|       |
  147|  3.05k|        mm->meter.flags = ntohs(omm->flags);
  148|  3.05k|        if (mm->meter.flags & OFPMF13_KBPS &&
  ------------------
  |  Branch (148:13): [True: 1.53k, False: 1.52k]
  ------------------
  149|  1.53k|            mm->meter.flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (149:13): [True: 1.14k, False: 390]
  ------------------
  150|  1.14k|            return OFPERR_OFPMMFC_BAD_FLAGS;
  151|  1.14k|        }
  152|       |
  153|  1.91k|        error = ofputil_pull_bands(&b, b.size, &mm->meter.n_bands, bands);
  154|  1.91k|        if (error) {
  ------------------
  |  Branch (154:13): [True: 686, False: 1.23k]
  ------------------
  155|    686|            return error;
  156|    686|        }
  157|  1.23k|        mm->meter.bands = bands->data;
  158|  1.23k|    }
  159|  1.60k|    return 0;
  160|  3.43k|}
ofputil_decode_meter_request:
  164|  1.32k|{
  165|  1.32k|    const struct ofp13_meter_multipart_request *omr = ofpmsg_body(oh);
  166|       |    *meter_id = ntohl(omr->meter_id);
  167|  1.32k|}
ofputil_decode_meter_config:
  289|  2.14k|{
  290|  2.14k|    const struct ofp13_meter_config *omc;
  291|  2.14k|    enum ofperr err;
  292|       |
  293|       |    /* Pull OpenFlow headers for the first call. */
  294|  2.14k|    if (!msg->header) {
  ------------------
  |  Branch (294:9): [True: 1.15k, False: 991]
  ------------------
  295|  1.15k|        ofpraw_pull_assert(msg);
  296|  1.15k|    }
  297|       |
  298|  2.14k|    if (!msg->size) {
  ------------------
  |  Branch (298:9): [True: 701, False: 1.44k]
  ------------------
  299|    701|        return EOF;
  300|    701|    }
  301|       |
  302|  1.44k|    omc = ofpbuf_try_pull(msg, sizeof *omc);
  303|  1.44k|    if (!omc) {
  ------------------
  |  Branch (303:9): [True: 0, False: 1.44k]
  ------------------
  304|      0|        VLOG_WARN_RL(&rl, "OFPMP_METER_CONFIG reply has %"PRIu32" leftover "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  305|      0|                     "bytes at end", msg->size);
  306|      0|        return OFPERR_OFPBRC_BAD_LEN;
  307|      0|    }
  308|       |
  309|  1.44k|    ofpbuf_clear(bands);
  310|  1.44k|    err = ofputil_pull_bands(msg, ntohs(omc->length) - sizeof *omc,
  311|  1.44k|                             &mc->n_bands, bands);
  312|  1.44k|    if (err) {
  ------------------
  |  Branch (312:9): [True: 451, False: 991]
  ------------------
  313|    451|        return err;
  314|    451|    }
  315|    991|    mc->meter_id = ntohl(omc->meter_id);
  316|    991|    mc->flags = ntohs(omc->flags);
  317|    991|    mc->bands = bands->data;
  318|       |
  319|    991|    return 0;
  320|  1.44k|}
ofputil_format_meter_config:
  347|  2.59k|{
  348|  2.59k|    uint16_t i;
  349|       |
  350|  2.59k|    ofputil_format_meter_id(s, mc->meter_id, '=');
  351|  2.59k|    ds_put_char(s, ' ');
  352|       |
  353|  2.59k|    ofp_print_meter_flags(s, mc->flags);
  354|       |
  355|  2.59k|    ds_put_cstr(s, "bands=");
  356|  4.01k|    for (i = 0; i < mc->n_bands; ++i) {
  ------------------
  |  Branch (356:17): [True: 1.42k, False: 2.59k]
  ------------------
  357|  1.42k|        ofputil_format_meter_band(s, mc->flags, &mc->bands[i]);
  358|  1.42k|    }
  359|  2.59k|    ds_put_char(s, '\n');
  360|  2.59k|}
ofputil_decode_meter_stats:
  404|  4.81k|{
  405|  4.81k|    const struct ofp13_meter_stats *oms;
  406|  4.81k|    enum ofperr err;
  407|       |
  408|       |    /* Pull OpenFlow headers for the first call. */
  409|  4.81k|    if (!msg->header) {
  ------------------
  |  Branch (409:9): [True: 2.88k, False: 1.92k]
  ------------------
  410|  2.88k|        ofpraw_pull_assert(msg);
  411|  2.88k|    }
  412|       |
  413|  4.81k|    if (!msg->size) {
  ------------------
  |  Branch (413:9): [True: 780, False: 4.03k]
  ------------------
  414|    780|        return EOF;
  415|    780|    }
  416|       |
  417|  4.03k|    oms = ofpbuf_try_pull(msg, sizeof *oms);
  418|  4.03k|    if (!oms) {
  ------------------
  |  Branch (418:9): [True: 1.05k, False: 2.98k]
  ------------------
  419|  1.05k|        VLOG_WARN_RL(&rl, "OFPMP_METER reply has %"PRIu32" leftover bytes "
  ------------------
  |  |  224|  1.05k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.05k|    do {                                                                \
  |  |  |  |  288|  1.05k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.05k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.05k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.05k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.05k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  420|  1.05k|                     "at end", msg->size);
  421|  1.05k|        return OFPERR_OFPBRC_BAD_LEN;
  422|  1.05k|    }
  423|       |
  424|  2.98k|    ofpbuf_clear(bands);
  425|  2.98k|    err = ofputil_pull_band_stats(msg, ntohs(oms->len) - sizeof *oms,
  426|  2.98k|                                  &ms->n_bands, bands);
  427|  2.98k|    if (err) {
  ------------------
  |  Branch (427:9): [True: 1.05k, False: 1.92k]
  ------------------
  428|  1.05k|        return err;
  429|  1.05k|    }
  430|  1.92k|    ms->meter_id = ntohl(oms->meter_id);
  431|  1.92k|    ms->flow_count = ntohl(oms->flow_count);
  432|  1.92k|    ms->packet_in_count = ntohll(oms->packet_in_count);
  433|  1.92k|    ms->byte_in_count = ntohll(oms->byte_in_count);
  434|  1.92k|    ms->duration_sec = ntohl(oms->duration_sec);
  435|  1.92k|    ms->duration_nsec = ntohl(oms->duration_nsec);
  436|  1.92k|    ms->bands = bands->data;
  437|       |
  438|  1.92k|    return 0;
  439|  2.98k|}
ofputil_format_meter_stats:
  443|  1.92k|{
  444|  1.92k|    uint16_t i;
  445|       |
  446|  1.92k|    ofputil_format_meter_id(s, ms->meter_id, ':');
  447|  1.92k|    ds_put_char(s, ' ');
  448|  1.92k|    ds_put_format(s, "flow_count:%"PRIu32" ", ms->flow_count);
  449|  1.92k|    ds_put_format(s, "packet_in_count:%"PRIu64" ", ms->packet_in_count);
  450|  1.92k|    ds_put_format(s, "byte_in_count:%"PRIu64" ", ms->byte_in_count);
  451|  1.92k|    ds_put_cstr(s, "duration:");
  452|  1.92k|    ofp_print_duration(s, ms->duration_sec, ms->duration_nsec);
  453|  1.92k|    ds_put_char(s, ' ');
  454|       |
  455|  1.92k|    ds_put_cstr(s, "bands:\n");
  456|  3.63k|    for (i = 0; i < ms->n_bands; ++i) {
  ------------------
  |  Branch (456:17): [True: 1.71k, False: 1.92k]
  ------------------
  457|  1.71k|        ds_put_format(s, "%d: ", i);
  458|  1.71k|        ds_put_format(s, "packet_count:%"PRIu64" ", ms->bands[i].packet_count);
  459|  1.71k|        ds_put_format(s, "byte_count:%"PRIu64"\n", ms->bands[i].byte_count);
  460|  1.71k|    }
  461|  1.92k|}
ofputil_decode_meter_features:
  466|    524|{
  467|    524|    const struct ofp13_meter_features *omf = ofpmsg_body(oh);
  468|       |
  469|    524|    mf->max_meters = ntohl(omf->max_meter);
  470|    524|    mf->band_types = ntohl(omf->band_types);
  471|       |    mf->capabilities = ntohl(omf->capabilities);
  472|    524|    mf->max_bands = omf->max_bands;
  473|    524|    mf->max_color = omf->max_color;
  474|    524|}
ofputil_format_meter_features:
  524|    524|{
  525|    524|    ds_put_format(s, "\nmax_meter:%"PRIu32, mf->max_meters);
  526|    524|    ds_put_format(s, " max_bands:%"PRIu8, mf->max_bands);
  527|    524|    ds_put_format(s, " max_color:%"PRIu8"\n", mf->max_color);
  528|       |
  529|    524|    ds_put_cstr(s, "band_types: ");
  530|    524|    ofp_print_bit_names(s, mf->band_types,
  531|    524|                        ofputil_meter_band_types_to_name, ' ');
  532|    524|    ds_put_char(s, '\n');
  533|       |
  534|    524|    ds_put_cstr(s, "capabilities: ");
  535|    524|    ofp_print_bit_names(s, mf->capabilities,
  536|    524|                        ofputil_meter_capabilities_to_name, ' ');
  537|    524|    ds_put_char(s, '\n');
  538|    524|}
ofputil_format_meter_mod:
  797|  1.60k|{
  798|  1.60k|    switch (mm->command) {
  799|    813|    case OFPMC13_ADD:
  ------------------
  |  Branch (799:5): [True: 813, False: 792]
  ------------------
  800|    813|        ds_put_cstr(s, " ADD ");
  801|    813|        break;
  802|    420|    case OFPMC13_MODIFY:
  ------------------
  |  Branch (802:5): [True: 420, False: 1.18k]
  ------------------
  803|    420|        ds_put_cstr(s, " MOD ");
  804|    420|        break;
  805|    372|    case OFPMC13_DELETE:
  ------------------
  |  Branch (805:5): [True: 372, False: 1.23k]
  ------------------
  806|    372|        ds_put_cstr(s, " DEL ");
  807|    372|        break;
  808|      0|    default:
  ------------------
  |  Branch (808:5): [True: 0, False: 1.60k]
  ------------------
  809|      0|        ds_put_format(s, " cmd:%d ", mm->command);
  810|  1.60k|    }
  811|       |
  812|  1.60k|    ofputil_format_meter_config(s, &mm->meter);
  813|  1.60k|}
ofp-meter.c:ofputil_pull_bands:
   85|  3.36k|{
   86|  3.36k|    const struct ofp13_meter_band_header *ombh;
   87|  3.36k|    struct ofputil_meter_band *mb;
   88|  3.36k|    uint16_t n = 0;
   89|       |
   90|  3.36k|    ombh = ofpbuf_try_pull(msg, len);
   91|  3.36k|    if (!ombh) {
  ------------------
  |  Branch (91:9): [True: 239, False: 3.12k]
  ------------------
   92|    239|        return OFPERR_OFPBRC_BAD_LEN;
   93|    239|    }
   94|       |
   95|  4.76k|    while (len >= sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (95:12): [True: 2.35k, False: 2.41k]
  ------------------
   96|  2.35k|        size_t ombh_len = ntohs(ombh->len);
   97|       |        /* All supported band types have the same length. */
   98|  2.35k|        if (ombh_len != sizeof (struct ofp13_meter_band_drop)) {
  ------------------
  |  Branch (98:13): [True: 404, False: 1.95k]
  ------------------
   99|    404|            return OFPERR_OFPBRC_BAD_LEN;
  100|    404|        }
  101|  1.95k|        mb = ofpbuf_put_uninit(bands, sizeof *mb);
  102|  1.95k|        mb->type = ntohs(ombh->type);
  103|  1.95k|        if (mb->type != OFPMBT13_DROP && mb->type != OFPMBT13_DSCP_REMARK) {
  ------------------
  |  Branch (103:13): [True: 468, False: 1.48k]
  |  Branch (103:42): [True: 308, False: 160]
  ------------------
  104|    308|            return OFPERR_OFPMMFC_BAD_BAND;
  105|    308|        }
  106|  1.64k|        mb->rate = ntohl(ombh->rate);
  107|  1.64k|        mb->burst_size = ntohl(ombh->burst_size);
  108|  1.64k|        mb->prec_level = (mb->type == OFPMBT13_DSCP_REMARK) ?
  ------------------
  |  Branch (108:26): [True: 160, False: 1.48k]
  ------------------
  109|  1.48k|            ((struct ofp13_meter_band_dscp_remark *)ombh)->prec_level : 0;
  110|  1.64k|        n++;
  111|  1.64k|        len -= ombh_len;
  112|  1.64k|        ombh = ALIGNED_CAST(struct ofp13_meter_band_header *,
  ------------------
  |  |  434|  1.64k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  113|  1.64k|                            (char *) ombh + ombh_len);
  114|  1.64k|    }
  115|  2.41k|    if (len) {
  ------------------
  |  Branch (115:9): [True: 186, False: 2.22k]
  ------------------
  116|    186|        return OFPERR_OFPBRC_BAD_LEN;
  117|    186|    }
  118|  2.22k|    *n_bands = n;
  119|  2.22k|    return 0;
  120|  2.41k|}
ofp-meter.c:ofp_print_meter_flags:
  324|  2.59k|{
  325|  2.59k|    if (flags & OFPMF13_KBPS) {
  ------------------
  |  Branch (325:9): [True: 992, False: 1.60k]
  ------------------
  326|    992|        ds_put_cstr(s, "kbps ");
  327|    992|    }
  328|  2.59k|    if (flags & OFPMF13_PKTPS) {
  ------------------
  |  Branch (328:9): [True: 924, False: 1.67k]
  ------------------
  329|    924|        ds_put_cstr(s, "pktps ");
  330|    924|    }
  331|  2.59k|    if (flags & OFPMF13_BURST) {
  ------------------
  |  Branch (331:9): [True: 679, False: 1.91k]
  ------------------
  332|    679|        ds_put_cstr(s, "burst ");
  333|    679|    }
  334|  2.59k|    if (flags & OFPMF13_STATS) {
  ------------------
  |  Branch (334:9): [True: 912, False: 1.68k]
  ------------------
  335|    912|        ds_put_cstr(s, "stats ");
  336|    912|    }
  337|       |
  338|  2.59k|    flags &= ~(OFPMF13_KBPS | OFPMF13_PKTPS | OFPMF13_BURST | OFPMF13_STATS);
  339|  2.59k|    if (flags) {
  ------------------
  |  Branch (339:9): [True: 1.34k, False: 1.25k]
  ------------------
  340|  1.34k|        ds_put_format(s, "flags:0x%x ", (unsigned)flags);
  341|  1.34k|    }
  342|  2.59k|}
ofp-meter.c:ofputil_pull_band_stats:
  365|  2.98k|{
  366|  2.98k|    const struct ofp13_meter_band_stats *ombs;
  367|  2.98k|    struct ofputil_meter_band_stats *mbs;
  368|  2.98k|    uint16_t n, i;
  369|       |
  370|  2.98k|    ombs = ofpbuf_try_pull(msg, len);
  371|  2.98k|    if (!ombs) {
  ------------------
  |  Branch (371:9): [True: 767, False: 2.21k]
  ------------------
  372|    767|        return OFPERR_OFPBRC_BAD_LEN;
  373|    767|    }
  374|       |
  375|  2.21k|    n = len / sizeof *ombs;
  376|  2.21k|    if (len != n * sizeof *ombs) {
  ------------------
  |  Branch (376:9): [True: 286, False: 1.92k]
  ------------------
  377|    286|        return OFPERR_OFPBRC_BAD_LEN;
  378|    286|    }
  379|       |
  380|  1.92k|    mbs = ofpbuf_put_uninit(bands, len);
  381|       |
  382|  3.63k|    for (i = 0; i < n; ++i) {
  ------------------
  |  Branch (382:17): [True: 1.71k, False: 1.92k]
  ------------------
  383|  1.71k|        mbs[i].packet_count = ntohll(ombs[i].packet_band_count);
  384|  1.71k|        mbs[i].byte_count = ntohll(ombs[i].byte_band_count);
  385|  1.71k|    }
  386|  1.92k|    *n_bands = n;
  387|  1.92k|    return 0;
  388|  2.21k|}
ofp-meter.c:ofputil_meter_band_types_to_name:
  497|  3.90k|{
  498|  3.90k|    switch (bit) {
  ------------------
  |  Branch (498:13): [True: 196, False: 3.70k]
  ------------------
  499|    155|    case 1 << OFPMBT13_DROP:          return "drop";
  ------------------
  |  Branch (499:5): [True: 155, False: 3.74k]
  ------------------
  500|     41|    case 1 << OFPMBT13_DSCP_REMARK:   return "dscp_remark";
  ------------------
  |  Branch (500:5): [True: 41, False: 3.86k]
  ------------------
  501|  3.90k|    }
  502|       |
  503|  3.70k|    return NULL;
  504|  3.90k|}
ofp-meter.c:ofputil_meter_capabilities_to_name:
  508|  4.91k|{
  509|  4.91k|    enum ofp13_meter_flags flag = bit;
  510|       |
  511|  4.91k|    switch (flag) {
  ------------------
  |  Branch (511:13): [True: 641, False: 4.26k]
  ------------------
  512|    189|    case OFPMF13_KBPS:    return "kbps";
  ------------------
  |  Branch (512:5): [True: 189, False: 4.72k]
  ------------------
  513|    178|    case OFPMF13_PKTPS:   return "pktps";
  ------------------
  |  Branch (513:5): [True: 178, False: 4.73k]
  ------------------
  514|    172|    case OFPMF13_BURST:   return "burst";
  ------------------
  |  Branch (514:5): [True: 172, False: 4.73k]
  ------------------
  515|    102|    case OFPMF13_STATS:   return "stats";
  ------------------
  |  Branch (515:5): [True: 102, False: 4.80k]
  ------------------
  516|  4.91k|    }
  517|       |
  518|  4.26k|    return NULL;
  519|  4.91k|}

ofp_flow_removed_reason_to_string:
   44|  12.8k|{
   45|  12.8k|    switch (reason) {
   46|  3.20k|    case OFPRR_IDLE_TIMEOUT:
  ------------------
  |  Branch (46:5): [True: 3.20k, False: 9.62k]
  ------------------
   47|  3.20k|        return "idle";
   48|  2.30k|    case OFPRR_HARD_TIMEOUT:
  ------------------
  |  Branch (48:5): [True: 2.30k, False: 10.5k]
  ------------------
   49|  2.30k|        return "hard";
   50|  1.28k|    case OFPRR_DELETE:
  ------------------
  |  Branch (50:5): [True: 1.28k, False: 11.5k]
  ------------------
   51|  1.28k|        return "delete";
   52|  1.57k|    case OFPRR_GROUP_DELETE:
  ------------------
  |  Branch (52:5): [True: 1.57k, False: 11.2k]
  ------------------
   53|  1.57k|        return "group_delete";
   54|  1.76k|    case OFPRR_EVICTION:
  ------------------
  |  Branch (54:5): [True: 1.76k, False: 11.0k]
  ------------------
   55|  1.76k|        return "eviction";
   56|    840|    case OFPRR_METER_DELETE:
  ------------------
  |  Branch (56:5): [True: 840, False: 11.9k]
  ------------------
   57|    840|        return "meter_delete";
   58|      4|    case OVS_OFPRR_NONE:
  ------------------
  |  Branch (58:5): [True: 4, False: 12.8k]
  ------------------
   59|  1.84k|    default:
  ------------------
  |  Branch (59:5): [True: 1.83k, False: 10.9k]
  ------------------
   60|  1.84k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
   61|  1.84k|        return reasonbuf;
   62|  12.8k|    }
   63|  12.8k|}
ofputil_decode_flow_removed:
   71|  8.39k|{
   72|  8.39k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   73|  8.39k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   74|  8.39k|    if (raw == OFPRAW_OFPT15_FLOW_REMOVED) {
  ------------------
  |  Branch (74:9): [True: 3.12k, False: 5.26k]
  ------------------
   75|  3.12k|        const struct ofp15_flow_removed *ofr;
   76|  3.12k|        enum ofperr error;
   77|       |
   78|  3.12k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
   79|       |
   80|  3.12k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL,  &fr->match, NULL);
   81|  3.12k|        if (error) {
  ------------------
  |  Branch (81:13): [True: 654, False: 2.47k]
  ------------------
   82|    654|            return error;
   83|    654|        }
   84|       |
   85|  2.47k|        struct oxs_stats stats;
   86|  2.47k|        uint16_t statlen;
   87|  2.47k|        uint8_t oxs_field_set;
   88|  2.47k|        error = oxs_pull_stat(&b, &stats, &statlen, &oxs_field_set);
   89|  2.47k|        if (error) {
  ------------------
  |  Branch (89:13): [True: 2.10k, False: 365]
  ------------------
   90|  2.10k|            return error;
   91|  2.10k|        }
   92|       |
   93|    365|        fr->cookie = ofr->cookie;
   94|    365|        fr->priority = ntohs(ofr->priority);
   95|    365|        fr->reason = ofr->reason;
   96|    365|        fr->table_id = ofr->table_id;
   97|    365|        fr->duration_sec = stats.duration_sec;
   98|    365|        fr->duration_nsec = stats.duration_nsec;
   99|    365|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  100|    365|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  101|    365|        fr->packet_count = stats.packet_count;
  102|    365|        fr->byte_count = stats.byte_count;
  103|  5.26k|    } else if (raw == OFPRAW_OFPT11_FLOW_REMOVED) {
  ------------------
  |  Branch (103:16): [True: 4.08k, False: 1.18k]
  ------------------
  104|  4.08k|        const struct ofp12_flow_removed *ofr;
  105|  4.08k|        enum ofperr error;
  106|       |
  107|  4.08k|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  108|       |
  109|  4.08k|        error = ofputil_pull_ofp11_match(&b, NULL, NULL, &fr->match, NULL);
  110|  4.08k|        if (error) {
  ------------------
  |  Branch (110:13): [True: 1.68k, False: 2.40k]
  ------------------
  111|  1.68k|            return error;
  112|  1.68k|        }
  113|       |
  114|  2.40k|        fr->priority = ntohs(ofr->priority);
  115|  2.40k|        fr->cookie = ofr->cookie;
  116|  2.40k|        fr->reason = ofr->reason;
  117|  2.40k|        fr->table_id = ofr->table_id;
  118|  2.40k|        fr->duration_sec = ntohl(ofr->duration_sec);
  119|  2.40k|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  120|  2.40k|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  121|  2.40k|        fr->hard_timeout = ntohs(ofr->hard_timeout);
  122|  2.40k|        fr->packet_count = ntohll(ofr->packet_count);
  123|  2.40k|        fr->byte_count = ntohll(ofr->byte_count);
  124|  2.40k|    } else if (raw == OFPRAW_OFPT10_FLOW_REMOVED) {
  ------------------
  |  Branch (124:16): [True: 251, False: 933]
  ------------------
  125|    251|        const struct ofp10_flow_removed *ofr;
  126|       |
  127|    251|        ofr = ofpbuf_pull(&b, sizeof *ofr);
  128|       |
  129|    251|        ofputil_match_from_ofp10_match(&ofr->match, &fr->match);
  130|    251|        fr->priority = ntohs(ofr->priority);
  131|    251|        fr->cookie = ofr->cookie;
  132|    251|        fr->reason = ofr->reason;
  133|    251|        fr->table_id = 255;
  134|    251|        fr->duration_sec = ntohl(ofr->duration_sec);
  135|    251|        fr->duration_nsec = ntohl(ofr->duration_nsec);
  136|    251|        fr->idle_timeout = ntohs(ofr->idle_timeout);
  137|    251|        fr->hard_timeout = 0;
  138|    251|        fr->packet_count = ntohll(ofr->packet_count);
  139|    251|        fr->byte_count = ntohll(ofr->byte_count);
  140|    933|    } else if (raw == OFPRAW_NXT_FLOW_REMOVED) {
  ------------------
  |  Branch (140:16): [True: 933, False: 0]
  ------------------
  141|    933|        struct nx_flow_removed *nfr;
  142|    933|        enum ofperr error;
  143|       |
  144|    933|        nfr = ofpbuf_pull(&b, sizeof *nfr);
  145|    933|        error = nx_pull_match(&b, ntohs(nfr->match_len), &fr->match, NULL,
  146|    933|                              NULL, false, NULL, NULL);
  147|    933|        if (error) {
  ------------------
  |  Branch (147:13): [True: 148, False: 785]
  ------------------
  148|    148|            return error;
  149|    148|        }
  150|    785|        if (b.size) {
  ------------------
  |  Branch (150:13): [True: 85, False: 700]
  ------------------
  151|     85|            return OFPERR_OFPBRC_BAD_LEN;
  152|     85|        }
  153|       |
  154|    700|        fr->priority = ntohs(nfr->priority);
  155|    700|        fr->cookie = nfr->cookie;
  156|    700|        fr->reason = nfr->reason;
  157|    700|        fr->table_id = nfr->table_id ? nfr->table_id - 1 : 255;
  ------------------
  |  Branch (157:24): [True: 375, False: 325]
  ------------------
  158|    700|        fr->duration_sec = ntohl(nfr->duration_sec);
  159|    700|        fr->duration_nsec = ntohl(nfr->duration_nsec);
  160|    700|        fr->idle_timeout = ntohs(nfr->idle_timeout);
  161|    700|        fr->hard_timeout = 0;
  162|    700|        fr->packet_count = ntohll(nfr->packet_count);
  163|    700|        fr->byte_count = ntohll(nfr->byte_count);
  164|    700|    } else {
  165|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  166|      0|    }
  167|       |
  168|  3.71k|    return 0;
  169|  8.39k|}
ofputil_flow_removed_format:
  302|  3.71k|{
  303|  3.71k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
  304|       |
  305|  3.71k|    ds_put_char(s, ' ');
  306|  3.71k|    match_format(&fr->match, port_map, s, fr->priority);
  307|       |
  308|  3.71k|    ds_put_format(s, " reason=%s",
  309|  3.71k|                  ofp_flow_removed_reason_to_string(fr->reason, reasonbuf,
  310|  3.71k|                                                    sizeof reasonbuf));
  311|       |
  312|  3.71k|    if (fr->table_id != 255) {
  ------------------
  |  Branch (312:9): [True: 3.05k, False: 659]
  ------------------
  313|  3.05k|        ds_put_format(s, " table_id=");
  314|  3.05k|        ofputil_format_table(fr->table_id, table_map, s);
  315|  3.05k|    }
  316|       |
  317|  3.71k|    if (fr->cookie != htonll(0)) {
  ------------------
  |  Branch (317:9): [True: 3.21k, False: 502]
  ------------------
  318|  3.21k|        ds_put_format(s, " cookie:0x%"PRIx64, ntohll(fr->cookie));
  319|  3.21k|    }
  320|  3.71k|    ds_put_cstr(s, " duration");
  321|  3.71k|    ofp_print_duration(s, fr->duration_sec, fr->duration_nsec);
  322|  3.71k|    ds_put_format(s, " idle%"PRIu16, fr->idle_timeout);
  323|  3.71k|    if (fr->hard_timeout) {
  ------------------
  |  Branch (323:9): [True: 992, False: 2.72k]
  ------------------
  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|       |        ds_put_format(s, " hard%"PRIu16, fr->hard_timeout);
  327|    992|    }
  328|  3.71k|    ds_put_format(s, " pkts%"PRIu64" bytes%"PRIu64"\n",
  329|  3.71k|                  fr->packet_count, fr->byte_count);
  330|  3.71k|}
ofputil_decode_flow_monitor_request:
  439|  9.87k|{
  440|  9.87k|    uint16_t flags;
  441|  9.87k|    enum ofperr error;
  442|  9.87k|    enum ofpraw raw;
  443|       |
  444|  9.87k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (444:14): [True: 5.22k, False: 4.65k]
  ------------------
  445|  9.87k|             : ofpraw_pull(&raw, msg));
  446|  9.87k|    if (error) {
  ------------------
  |  Branch (446:9): [True: 0, False: 9.87k]
  ------------------
  447|      0|        return error;
  448|      0|    }
  449|       |
  450|  9.87k|    if (!msg->size) {
  ------------------
  |  Branch (450:9): [True: 1.88k, False: 7.99k]
  ------------------
  451|  1.88k|        return EOF;
  452|  1.88k|    }
  453|       |
  454|  7.99k|    switch ((int) raw) {
  455|  5.40k|    case OFPRAW_NXST_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (455:5): [True: 5.40k, False: 2.59k]
  ------------------
  456|  5.40k|        struct nx_flow_monitor_request *nfmr;
  457|       |
  458|  5.40k|        nfmr = ofpbuf_try_pull(msg, sizeof *nfmr);
  459|  5.40k|        if (!nfmr) {
  ------------------
  |  Branch (459:13): [True: 645, False: 4.76k]
  ------------------
  460|    645|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  224|    645|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    645|    do {                                                                \
  |  |  |  |  288|    645|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    645|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 645]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    645|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 645]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  461|    645|                    "leftover bytes at end", msg->size);
  462|    645|            return OFPERR_OFPBRC_BAD_LEN;
  463|    645|        }
  464|       |
  465|  4.76k|        flags = ntohs(nfmr->flags);
  466|  4.76k|        if (!(flags & (NXFMF_ADD | NXFMF_DELETE | NXFMF_MODIFY))
  ------------------
  |  Branch (466:13): [True: 362, False: 4.39k]
  ------------------
  467|  4.39k|            || flags & ~(NXFMF_INITIAL | NXFMF_ADD | NXFMF_DELETE
  ------------------
  |  Branch (467:16): [True: 387, False: 4.01k]
  ------------------
  468|  4.39k|                         | NXFMF_MODIFY | NXFMF_ACTIONS | NXFMF_OWN)) {
  469|    749|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  224|    749|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    749|    do {                                                                \
  |  |  |  |  288|    749|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    749|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 749]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    749|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 749]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  470|    749|                         flags);
  471|    749|            return OFPERR_OFPMOFC_BAD_FLAGS;
  472|    749|        }
  473|       |
  474|  4.01k|        if (!is_all_zeros(nfmr->zeros, sizeof nfmr->zeros)) {
  ------------------
  |  Branch (474:13): [True: 384, False: 3.62k]
  ------------------
  475|    384|            return OFPERR_NXBRC_MUST_BE_ZERO;
  476|    384|        }
  477|       |
  478|  3.62k|        rq->id = ntohl(nfmr->id);
  479|  3.62k|        rq->command = OFPFMC_ADD;
  480|  3.62k|        rq->flags = nx_to_ofp_flow_monitor_flags(flags);
  481|  3.62k|        rq->out_port = u16_to_ofp(ntohs(nfmr->out_port));
  482|  3.62k|        rq->table_id = nfmr->table_id;
  483|  3.62k|        rq->out_group = OFPG_ANY;
  484|       |
  485|  3.62k|        return nx_pull_match(msg, ntohs(nfmr->match_len), &rq->match, NULL,
  486|  3.62k|                NULL, false, NULL, NULL);
  487|  4.01k|    }
  488|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (488:5): [True: 0, False: 7.99k]
  ------------------
  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" "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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,
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  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|  2.59k|    case OFPRAW_OFPST14_FLOW_MONITOR_REQUEST: {
  ------------------
  |  Branch (523:5): [True: 2.59k, False: 5.40k]
  ------------------
  524|  2.59k|        struct ofp14_flow_monitor_request *ofmr;
  525|       |
  526|  2.59k|        ofmr = ofpbuf_try_pull(msg, sizeof *ofmr);
  527|  2.59k|        if (!ofmr) {
  ------------------
  |  Branch (527:13): [True: 92, False: 2.49k]
  ------------------
  528|     92|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR request has %"PRIu32" "
  ------------------
  |  |  224|     92|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     92|    do {                                                                \
  |  |  |  |  288|     92|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     92|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 92]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     92|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 92]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|     92|                    "leftover bytes at end", msg->size);
  530|     92|            return OFPERR_OFPBRC_BAD_LEN;
  531|     92|        }
  532|       |
  533|  2.49k|        flags = ntohs(ofmr->flags);
  534|  2.49k|        rq->id = ntohl(ofmr->monitor_id);
  535|  2.49k|        rq->command = ofmr->command;
  536|       |
  537|  2.49k|        if (ofmr->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (537:13): [True: 401, False: 2.09k]
  ------------------
  538|    401|            return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  539|    401|        }
  540|       |
  541|  2.09k|        if (!(flags & (OFPFMF_ADD | OFPFMF_REMOVED | OFPFMF_MODIFY))
  ------------------
  |  Branch (541:13): [True: 112, False: 1.98k]
  ------------------
  542|  1.98k|                || flags & ~(OFPFMF_INITIAL | OFPFMF_ADD | OFPFMF_REMOVED
  ------------------
  |  Branch (542:20): [True: 84, False: 1.90k]
  ------------------
  543|  1.98k|                    | OFPFMF_MODIFY | OFPFMF_INSTRUCTIONS | OFPFMF_ONLY_OWN)) {
  544|    196|            VLOG_WARN_RL(&rl, "OFPST_FLOW_MONITOR has bad flags %#"PRIx16,
  ------------------
  |  |  224|    196|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    196|    do {                                                                \
  |  |  |  |  288|    196|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    196|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 196]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    196|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 196]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  545|    196|                         flags);
  546|    196|            return OFPERR_OFPMOFC_BAD_FLAGS;
  547|    196|        }
  548|       |
  549|  1.90k|        rq->command = ofmr->command;
  550|  1.90k|        rq->flags = flags;
  551|  1.90k|        error = ofputil_port_from_ofp11(ofmr->out_port, &rq->out_port);
  552|  1.90k|        if (error) {
  ------------------
  |  Branch (552:13): [True: 114, False: 1.78k]
  ------------------
  553|    114|            return error;
  554|    114|        }
  555|  1.78k|        rq->out_group = ntohl(ofmr->out_group);
  556|  1.78k|        rq->table_id = ofmr->table_id;
  557|       |
  558|  1.78k|        return ofputil_pull_ofp11_match(msg, NULL, NULL, &rq->match, NULL);
  559|  1.90k|    }
  560|      0|    default:
  ------------------
  |  Branch (560:5): [True: 0, False: 7.99k]
  ------------------
  561|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  562|  7.99k|    }
  563|  7.99k|}
ofputil_flow_monitor_request_format:
  678|  5.22k|{
  679|  5.22k|    if (request->command == OFPFMC_DELETE) {
  ------------------
  |  Branch (679:9): [True: 272, False: 4.94k]
  ------------------
  680|    272|        ds_put_format(s, "\n id=%"PRIu32" command=%s", request->id,
  681|    272|                      ofp_flow_monitor_command_to_string(request->command));
  682|    272|        return;
  683|    272|    }
  684|  4.94k|    ds_put_format(s, "\n id=%"PRIu32" flags=", request->id);
  685|  4.94k|    ofp_print_bit_names(s, request->flags,
  686|  4.94k|                        ofp_flow_monitor_flags_to_name, ',');
  687|       |
  688|  4.94k|    if (request->out_port != OFPP_NONE) {
  ------------------
  |  |   47|  4.94k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  4.94k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (688:9): [True: 3.88k, False: 1.06k]
  ------------------
  689|  3.88k|        ds_put_cstr(s, " out_port=");
  690|  3.88k|        ofputil_format_port(request->out_port, port_map, s);
  691|  3.88k|    }
  692|       |
  693|  4.94k|    if (request->out_group && (request->out_group != OFPG_ANY)) {
  ------------------
  |  Branch (693:9): [True: 4.87k, False: 70]
  |  Branch (693:31): [True: 1.29k, False: 3.58k]
  ------------------
  694|  1.29k|        ds_put_format(s, " out_group=%d", request->out_group);
  695|  1.29k|    }
  696|       |
  697|  4.94k|    if (request->table_id != 0xff) {
  ------------------
  |  Branch (697:9): [True: 3.94k, False: 1.00k]
  ------------------
  698|  3.94k|        ds_put_format(s, " table=");
  699|  3.94k|        ofputil_format_table(request->table_id, table_map, s);
  700|  3.94k|    }
  701|       |
  702|  4.94k|    if (request->command != OFPFMC_DELETE) {
  ------------------
  |  Branch (702:9): [True: 4.94k, False: 0]
  ------------------
  703|  4.94k|        ds_put_char(s, ' ');
  704|  4.94k|        match_format(&request->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  4.94k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  705|  4.94k|        ds_chomp(s, ' ');
  706|  4.94k|    }
  707|  4.94k|}
ofputil_decode_flow_update:
  824|  13.2k|{
  825|  13.2k|    unsigned int length;
  826|  13.2k|    struct ofp_header *oh;
  827|  13.2k|    enum ofperr error;
  828|  13.2k|    enum ofpraw raw;
  829|       |
  830|  13.2k|    if (!msg->header) {
  ------------------
  |  Branch (830:9): [True: 8.19k, False: 5.04k]
  ------------------
  831|  8.19k|        ofpraw_pull_assert(msg);
  832|  8.19k|    }
  833|       |
  834|  13.2k|    error = ofpraw_decode(&raw, msg->header);
  835|  13.2k|    if (error) {
  ------------------
  |  Branch (835:9): [True: 0, False: 13.2k]
  ------------------
  836|      0|        return error;
  837|      0|    }
  838|       |
  839|  13.2k|    ofpbuf_clear(ofpacts);
  840|  13.2k|    if (!msg->size) {
  ------------------
  |  Branch (840:9): [True: 1.68k, False: 11.5k]
  ------------------
  841|  1.68k|        return EOF;
  842|  1.68k|    }
  843|       |
  844|  11.5k|    oh = msg->header;
  845|       |
  846|  11.5k|    switch ((int) raw) {
  847|      0|    case OFPRAW_ONFST13_FLOW_MONITOR_REPLY:
  ------------------
  |  Branch (847:5): [True: 0, False: 11.5k]
  ------------------
  848|  3.11k|    case OFPRAW_NXST_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (848:5): [True: 3.11k, False: 8.44k]
  ------------------
  849|  3.11k|        struct nx_flow_update_header *nfuh;
  850|  3.11k|        enum nx_flow_update_event nx_event;
  851|       |
  852|  3.11k|        if (msg->size < sizeof(struct nx_flow_update_header)) {
  ------------------
  |  Branch (852:13): [True: 0, False: 3.11k]
  ------------------
  853|      0|            goto bad_len;
  854|      0|        }
  855|       |
  856|  3.11k|        nfuh = msg->data;
  857|  3.11k|        length = ntohs(nfuh->length);
  858|  3.11k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (858:13): [True: 401, False: 2.70k]
  |  Branch (858:35): [True: 87, False: 2.62k]
  ------------------
  859|    488|            goto bad_len;
  860|    488|        }
  861|       |
  862|  2.62k|        nx_event = ntohs(nfuh->event);
  863|  2.62k|        if (nx_event == NXFME_ABBREV) {
  ------------------
  |  Branch (863:13): [True: 162, False: 2.46k]
  ------------------
  864|    162|            struct nx_flow_update_abbrev *nfua;
  865|       |
  866|    162|            if (length != sizeof *nfua) {
  ------------------
  |  Branch (866:17): [True: 18, False: 144]
  ------------------
  867|     18|                goto bad_len;
  868|     18|            }
  869|       |
  870|    144|            nfua = ofpbuf_pull(msg, sizeof *nfua);
  871|    144|            update->xid = nfua->xid;
  872|  2.46k|        } else if (nx_event == NXFME_ADDED
  ------------------
  |  Branch (872:20): [True: 1.30k, False: 1.15k]
  ------------------
  873|  1.15k|                   || nx_event == NXFME_DELETED
  ------------------
  |  Branch (873:23): [True: 401, False: 753]
  ------------------
  874|  2.23k|                   || nx_event == NXFME_MODIFIED) {
  ------------------
  |  Branch (874:23): [True: 528, False: 225]
  ------------------
  875|  2.23k|            struct nx_flow_update_full *nfuf;
  876|  2.23k|            unsigned int actions_len;
  877|  2.23k|            unsigned int match_len;
  878|       |
  879|  2.23k|            if (length < sizeof *nfuf) {
  ------------------
  |  Branch (879:17): [True: 304, False: 1.93k]
  ------------------
  880|    304|                goto bad_len;
  881|    304|            }
  882|       |
  883|  1.93k|            nfuf = ofpbuf_pull(msg, sizeof *nfuf);
  884|  1.93k|            match_len = ntohs(nfuf->match_len);
  885|  1.93k|            if (sizeof *nfuf + match_len > length) {
  ------------------
  |  Branch (885:17): [True: 289, False: 1.64k]
  ------------------
  886|    289|                goto bad_len;
  887|    289|            }
  888|       |
  889|  1.64k|            update->reason = ntohs(nfuf->reason);
  890|  1.64k|            update->idle_timeout = ntohs(nfuf->idle_timeout);
  891|  1.64k|            update->hard_timeout = ntohs(nfuf->hard_timeout);
  892|  1.64k|            update->table_id = nfuf->table_id;
  893|  1.64k|            update->cookie = nfuf->cookie;
  894|  1.64k|            update->priority = ntohs(nfuf->priority);
  895|       |
  896|  1.64k|            if (raw == OFPRAW_ONFST13_FLOW_MONITOR_REPLY) {
  ------------------
  |  Branch (896:17): [True: 0, False: 1.64k]
  ------------------
  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|  1.64k|            } else {
  913|  1.64k|                error = nx_pull_match(msg, match_len, &update->match, NULL,
  914|  1.64k|                                      NULL, false, NULL, NULL);
  915|  1.64k|                if (error) {
  ------------------
  |  Branch (915:21): [True: 26, False: 1.61k]
  ------------------
  916|     26|                    return error;
  917|     26|                }
  918|       |
  919|  1.61k|                actions_len = length - sizeof *nfuf - ROUND_UP(match_len, 8);
  ------------------
  |  |  303|  1.61k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  1.61k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  920|  1.61k|                error = ofpacts_pull_openflow_actions(
  921|  1.61k|                    msg, actions_len, oh->version, NULL, NULL, ofpacts);
  922|  1.61k|                if (error) {
  ------------------
  |  Branch (922:21): [True: 12, False: 1.60k]
  ------------------
  923|     12|                    return error;
  924|     12|                }
  925|  1.61k|            }
  926|       |
  927|  1.60k|            update->ofpacts = ofpacts->data;
  928|  1.60k|            update->ofpacts_len = ofpacts->size;
  929|  1.60k|        } else {
  930|    225|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  224|    225|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    225|    do {                                                                \
  |  |  |  |  288|    225|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    225|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 225]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    225|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 225]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  931|    225|                         ntohs(nfuh->event));
  932|    225|            return OFPERR_NXBRC_FM_BAD_EVENT;
  933|    225|        }
  934|       |
  935|  1.74k|        update->event = nx_to_ofp_flow_update_event(nx_event);
  936|  1.74k|        return 0;
  937|  2.62k|    }
  938|  8.44k|    case OFPRAW_OFPST14_FLOW_MONITOR_REPLY: {
  ------------------
  |  Branch (938:5): [True: 8.44k, False: 3.11k]
  ------------------
  939|  8.44k|        struct ofp_flow_update_header *ofuh;
  940|  8.44k|        uint16_t padded_match_len = 0;
  941|       |
  942|  8.44k|        if (msg->size < sizeof(struct ofp_flow_update_header)) {
  ------------------
  |  Branch (942:13): [True: 0, False: 8.44k]
  ------------------
  943|      0|            goto bad_len;
  944|      0|        }
  945|       |
  946|  8.44k|        ofuh = msg->data;
  947|  8.44k|        update->event = ntohs(ofuh->event);
  948|  8.44k|        length = ntohs(ofuh->length);
  949|  8.44k|        if (length > msg->size || length % 8) {
  ------------------
  |  Branch (949:13): [True: 1.33k, False: 7.10k]
  |  Branch (949:35): [True: 751, False: 6.35k]
  ------------------
  950|  2.09k|            goto bad_len;
  951|  2.09k|        }
  952|       |
  953|  6.35k|        if (update->event == OFPFME_ABBREV) {
  ------------------
  |  Branch (953:13): [True: 993, False: 5.36k]
  ------------------
  954|    993|            struct ofp_flow_update_abbrev *ofua;
  955|       |
  956|    993|            if (length != sizeof *ofua) {
  ------------------
  |  Branch (956:17): [True: 66, False: 927]
  ------------------
  957|     66|                goto bad_len;
  958|     66|            }
  959|       |
  960|    927|            ofua = ofpbuf_pull(msg, sizeof *ofua);
  961|    927|            update->xid = ofua->xid;
  962|    927|            return 0;
  963|  5.36k|        } else if (update->event == OFPFME_PAUSED
  ------------------
  |  Branch (963:20): [True: 679, False: 4.68k]
  ------------------
  964|  4.68k|                   || update->event == OFPFME_RESUMED) {
  ------------------
  |  Branch (964:23): [True: 953, False: 3.73k]
  ------------------
  965|  1.63k|            struct ofp_flow_update_paused *ofup OVS_UNUSED;
  966|       |
  967|  1.63k|            if (length != sizeof *ofup) {
  ------------------
  |  Branch (967:17): [True: 275, False: 1.35k]
  ------------------
  968|    275|                goto bad_len;
  969|    275|            }
  970|       |
  971|  1.35k|            ofup = ofpbuf_pull(msg, sizeof *ofup);
  972|  1.35k|            return 0;
  973|  3.73k|        } else if (update->event == OFPFME_INITIAL
  ------------------
  |  Branch (973:20): [True: 1.05k, False: 2.68k]
  ------------------
  974|  2.68k|                   || update->event == OFPFME_ADDED
  ------------------
  |  Branch (974:23): [True: 1.80k, False: 877]
  ------------------
  975|    877|                   || update->event == OFPFME_REMOVED
  ------------------
  |  Branch (975:23): [True: 315, False: 562]
  ------------------
  976|  3.23k|                   || update->event == OFPFME_MODIFIED) {
  ------------------
  |  Branch (976:23): [True: 68, False: 494]
  ------------------
  977|  3.23k|            struct ofp_flow_update_full *ofuf;
  978|  3.23k|            unsigned int instructions_len;
  979|       |
  980|  3.23k|            if (length < sizeof *ofuf) {
  ------------------
  |  Branch (980:17): [True: 265, False: 2.97k]
  ------------------
  981|    265|                goto bad_len;
  982|    265|            }
  983|       |
  984|  2.97k|            ofuf = ofpbuf_pull(msg, sizeof *ofuf);
  985|  2.97k|            if (sizeof *ofuf > length) {
  ------------------
  |  Branch (985:17): [True: 0, False: 2.97k]
  ------------------
  986|      0|                goto bad_len;
  987|      0|            }
  988|       |
  989|  2.97k|            update->reason = ofuf->reason;
  990|  2.97k|            update->idle_timeout = ntohs(ofuf->idle_timeout);
  991|  2.97k|            update->hard_timeout = ntohs(ofuf->hard_timeout);
  992|  2.97k|            update->table_id = ofuf->table_id;
  993|  2.97k|            update->cookie = ofuf->cookie;
  994|  2.97k|            update->priority = ntohs(ofuf->priority);
  995|       |
  996|  2.97k|            error = ofputil_pull_ofp11_match(
  997|  2.97k|                msg, NULL, NULL, &update->match, &padded_match_len);
  998|  2.97k|            if (error) {
  ------------------
  |  Branch (998:17): [True: 387, False: 2.58k]
  ------------------
  999|    387|                return error;
 1000|    387|            }
 1001|       |
 1002|  2.58k|            instructions_len = length - sizeof *ofuf - padded_match_len;
 1003|  2.58k|            error = ofpacts_pull_openflow_instructions(
 1004|  2.58k|                msg, instructions_len, oh->version, NULL, NULL, ofpacts);
 1005|  2.58k|            if (error) {
  ------------------
  |  Branch (1005:17): [True: 1.57k, False: 1.01k]
  ------------------
 1006|  1.57k|                return error;
 1007|  1.57k|            }
 1008|       |
 1009|  1.01k|            update->ofpacts = ofpacts->data;
 1010|  1.01k|            update->ofpacts_len = ofpacts->size;
 1011|  1.01k|            return 0;
 1012|  2.58k|        } else {
 1013|    494|            VLOG_WARN_RL(&rl, "NXST_FLOW_MONITOR reply has bad event %"PRIu16,
  ------------------
  |  |  224|    494|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    494|    do {                                                                \
  |  |  |  |  288|    494|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    494|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 494]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    494|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 494]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1014|    494|                         ntohs(ofuh->event));
 1015|    494|            return OFPERR_NXBRC_FM_BAD_EVENT;
 1016|    494|        }
 1017|  6.35k|    }
 1018|      0|    default:
  ------------------
  |  Branch (1018:5): [True: 0, False: 11.5k]
  ------------------
 1019|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1020|  11.5k|    }
 1021|  3.79k|bad_len:
 1022|  3.79k|    VLOG_WARN_RL(&rl, "%s has %"PRIu32" leftover bytes at end",
  ------------------
  |  |  224|  3.79k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.79k|    do {                                                                \
  |  |  |  |  288|  3.79k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.79k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.79k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.79k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.79k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1023|  3.79k|                 ofpraw_get_name(raw), msg->size);
 1024|  3.79k|    return OFPERR_OFPBRC_BAD_LEN;
 1025|  11.5k|}
ofputil_decode_flow_monitor_cancel:
 1029|     68|{
 1030|     68|    enum ofperr error;
 1031|     68|    enum ofpraw raw;
 1032|       |
 1033|     68|    error = ofpraw_decode(&raw, oh);
 1034|     68|    if (error) {
  ------------------
  |  Branch (1034:9): [True: 0, False: 68]
  ------------------
 1035|      0|        return error;
 1036|      0|    }
 1037|       |
 1038|     68|    switch ((int) raw) {
 1039|      0|    case OFPRAW_ONFT13_FLOW_MONITOR_CANCEL:
  ------------------
  |  Branch (1039:5): [True: 0, False: 68]
  ------------------
 1040|     68|    case OFPRAW_NXT_FLOW_MONITOR_CANCEL: {
  ------------------
  |  Branch (1040:5): [True: 68, False: 0]
  ------------------
 1041|     68|        const struct nx_flow_monitor_cancel *cancel = ofpmsg_body(oh);
 1042|     68|        return ntohl(cancel->id);
 1043|      0|    }
 1044|      0|    default:
  ------------------
  |  Branch (1044:5): [True: 0, False: 68]
  ------------------
 1045|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1046|     68|    }
 1047|     68|}
ofputil_flow_update_format:
 1285|  5.04k|{
 1286|  5.04k|    char reasonbuf[OFP_FLOW_REMOVED_REASON_BUFSIZE];
 1287|       |
 1288|  5.04k|    ds_put_cstr(s, "\n event=");
 1289|  5.04k|    switch (update->event) {
  ------------------
  |  Branch (1289:13): [True: 5.04k, False: 0]
  ------------------
 1290|    745|    case OFPFME_INITIAL:
  ------------------
  |  Branch (1290:5): [True: 745, False: 4.29k]
  ------------------
 1291|    745|        ds_put_cstr(s, "INITIAL");
 1292|    745|        break;
 1293|       |
 1294|    879|    case OFPFME_ADDED:
  ------------------
  |  Branch (1294:5): [True: 879, False: 4.16k]
  ------------------
 1295|    879|        ds_put_cstr(s, "ADDED");
 1296|    879|        break;
 1297|       |
 1298|    577|    case OFPFME_REMOVED:
  ------------------
  |  Branch (1298:5): [True: 577, False: 4.46k]
  ------------------
 1299|    577|        ds_put_format(s, "DELETED reason=%s",
 1300|    577|                      ofp_flow_removed_reason_to_string(update->reason,
 1301|    577|                                                        reasonbuf,
 1302|    577|                                                        sizeof reasonbuf));
 1303|    577|        break;
 1304|       |
 1305|    415|    case OFPFME_MODIFIED:
  ------------------
  |  Branch (1305:5): [True: 415, False: 4.62k]
  ------------------
 1306|    415|        ds_put_cstr(s, "MODIFIED");
 1307|    415|        break;
 1308|       |
 1309|  1.07k|    case OFPFME_ABBREV:
  ------------------
  |  Branch (1309:5): [True: 1.07k, False: 3.97k]
  ------------------
 1310|  1.07k|        ds_put_format(s, "ABBREV xid=0x%"PRIx32, ntohl(update->xid));
 1311|  1.07k|        return;
 1312|       |
 1313|    671|    case OFPFME_PAUSED:
  ------------------
  |  Branch (1313:5): [True: 671, False: 4.37k]
  ------------------
 1314|    671|        ds_put_cstr(s, "PAUSED");
 1315|    671|        return;
 1316|       |
 1317|    686|    case OFPFME_RESUMED:
  ------------------
  |  Branch (1317:5): [True: 686, False: 4.35k]
  ------------------
 1318|    686|        ds_put_cstr(s, "RESUMED");
 1319|    686|        return;
 1320|       |
 1321|  5.04k|    }
 1322|       |
 1323|  2.61k|    ds_put_format(s, " table=");
 1324|  2.61k|    ofputil_format_table(update->table_id, table_map, s);
 1325|  2.61k|    if (update->idle_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  2.61k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1325:9): [True: 1.05k, False: 1.56k]
  ------------------
 1326|  1.05k|        ds_put_format(s, " idle_timeout=%"PRIu16, update->idle_timeout);
 1327|  1.05k|    }
 1328|  2.61k|    if (update->hard_timeout != OFP_FLOW_PERMANENT) {
  ------------------
  |  |  135|  2.61k|#define OFP_FLOW_PERMANENT 0
  ------------------
  |  Branch (1328:9): [True: 1.67k, False: 945]
  ------------------
 1329|  1.67k|        ds_put_format(s, " hard_timeout=%"PRIu16, update->hard_timeout);
 1330|  1.67k|    }
 1331|  2.61k|    ds_put_format(s, " cookie=%#"PRIx64, ntohll(update->cookie));
 1332|       |
 1333|  2.61k|    ds_put_char(s, ' ');
 1334|  2.61k|    match_format(&update->match, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  2.61k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1335|       |
 1336|  2.61k|    if (update->ofpacts_len) {
  ------------------
  |  Branch (1336:9): [True: 841, False: 1.77k]
  ------------------
 1337|    841|        if (s->string[s->length - 1] != ' ') {
  ------------------
  |  Branch (1337:13): [True: 768, False: 73]
  ------------------
 1338|    768|            ds_put_char(s, ' ');
 1339|    768|        }
 1340|    841|        ds_put_cstr(s, "actions=");
 1341|    841|        struct ofpact_format_params fp = {
 1342|    841|            .port_map = port_map,
 1343|    841|            .table_map = table_map,
 1344|    841|            .s = s,
 1345|    841|        };
 1346|    841|        ofpacts_format(update->ofpacts, update->ofpacts_len, &fp);
 1347|    841|    }
 1348|  2.61k|}
ofputil_decode_requestforward:
 1401|  1.50k|{
 1402|  1.50k|    rf->new_buckets = NULL;
 1403|  1.50k|    rf->group_existed = -1;
 1404|       |
 1405|  1.50k|    struct ofpbuf b = ofpbuf_const_initializer(outer, ntohs(outer->length));
 1406|       |
 1407|       |    /* Skip past outer message. */
 1408|  1.50k|    enum ofpraw raw_msg_type = ofpraw_pull_assert(&b);
 1409|  1.50k|    ovs_assert(raw_msg_type == OFPRAW_OFPT14_REQUESTFORWARD ||
  ------------------
  |  |   62|  1.50k|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1409:16): [True: 1.49k, False: 10]
  ------------------
 1410|     10|               raw_msg_type == OFPRAW_ONFT13_REQUESTFORWARD ||
  ------------------
  |  Branch (1410:16): [True: 0, False: 10]
  ------------------
 1411|     10|               raw_msg_type == OFPRAW_NXT_REQUESTFORWARD);
  ------------------
  |  Branch (1411:16): [True: 10, False: 0]
  ------------------
 1412|       |
 1413|       |    /* Validate inner message. */
 1414|  1.50k|    if (b.size < sizeof(struct ofp_header)) {
  ------------------
  |  Branch (1414:9): [True: 0, False: 1.50k]
  ------------------
 1415|      0|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1416|      0|    }
 1417|  1.50k|    const struct ofp_header *inner = b.data;
 1418|  1.50k|    unsigned int inner_len = ntohs(inner->length);
 1419|  1.50k|    if (inner_len < sizeof(struct ofp_header) || inner_len > b.size) {
  ------------------
  |  Branch (1419:9): [True: 24, False: 1.47k]
  |  Branch (1419:50): [True: 126, False: 1.35k]
  ------------------
 1420|    150|        return OFPERR_OFPBFC_MSG_BAD_LEN;
 1421|    150|    }
 1422|  1.35k|    if (inner->version != outer->version) {
  ------------------
  |  Branch (1422:9): [True: 323, False: 1.02k]
  ------------------
 1423|    323|        return OFPERR_OFPBRC_BAD_VERSION;
 1424|    323|    }
 1425|       |
 1426|       |    /* Parse inner message. */
 1427|  1.02k|    enum ofptype type;
 1428|  1.02k|    enum ofperr error = ofptype_decode(&type, inner);
 1429|  1.02k|    if (error) {
  ------------------
  |  Branch (1429:9): [True: 81, False: 947]
  ------------------
 1430|     81|        return error;
 1431|     81|    }
 1432|       |
 1433|    947|    rf->xid = inner->xid;
 1434|    947|    if (type == OFPTYPE_GROUP_MOD) {
  ------------------
  |  Branch (1434:9): [True: 436, False: 511]
  ------------------
 1435|    436|        rf->reason = OFPRFR_GROUP_MOD;
 1436|    436|        rf->group_mod = xmalloc(sizeof *rf->group_mod);
 1437|    436|        error = ofputil_decode_group_mod(inner, rf->group_mod);
 1438|    436|        if (error) {
  ------------------
  |  Branch (1438:13): [True: 120, False: 316]
  ------------------
 1439|    120|            free(rf->group_mod);
 1440|    120|            return error;
 1441|    120|        }
 1442|    511|    } else if (type == OFPTYPE_METER_MOD) {
  ------------------
  |  Branch (1442:16): [True: 442, False: 69]
  ------------------
 1443|    442|        rf->reason = OFPRFR_METER_MOD;
 1444|    442|        rf->meter_mod = xmalloc(sizeof *rf->meter_mod);
 1445|    442|        ofpbuf_init(&rf->bands, 64);
 1446|    442|        error = ofputil_decode_meter_mod(inner, rf->meter_mod, &rf->bands);
 1447|    442|        if (error) {
  ------------------
  |  Branch (1447:13): [True: 45, False: 397]
  ------------------
 1448|     45|            free(rf->meter_mod);
 1449|     45|            ofpbuf_uninit(&rf->bands);
 1450|     45|            return error;
 1451|     45|        }
 1452|    442|    } else {
 1453|     69|        return OFPERR_OFPBFC_MSG_UNSUP;
 1454|     69|    }
 1455|       |
 1456|    713|    return 0;
 1457|    947|}
ofputil_format_requestforward:
 1465|    713|{
 1466|    713|    ds_put_cstr(string, " reason=");
 1467|       |
 1468|    713|    switch (rf->reason) {
  ------------------
  |  Branch (1468:13): [True: 713, False: 0]
  ------------------
 1469|    316|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1469:5): [True: 316, False: 397]
  ------------------
 1470|    316|        ds_put_cstr(string, "group_mod");
 1471|    316|        ofputil_group_mod_format__(string, ofp_version, rf->group_mod,
 1472|    316|                                   port_map, table_map);
 1473|    316|        break;
 1474|       |
 1475|    397|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1475:5): [True: 397, False: 316]
  ------------------
 1476|    397|        ds_put_cstr(string, "meter_mod");
 1477|    397|        ofputil_format_meter_mod(string, rf->meter_mod);
 1478|    397|        break;
 1479|       |
 1480|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1480:5): [True: 0, False: 713]
  ------------------
 1481|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1482|    713|    }
 1483|    713|}
ofputil_destroy_requestforward:
 1490|    713|{
 1491|    713|    if (!rf) {
  ------------------
  |  Branch (1491:9): [True: 0, False: 713]
  ------------------
 1492|      0|        return;
 1493|      0|    }
 1494|       |
 1495|    713|    switch (rf->reason) {
  ------------------
  |  Branch (1495:13): [True: 713, False: 0]
  ------------------
 1496|    316|    case OFPRFR_GROUP_MOD:
  ------------------
  |  Branch (1496:5): [True: 316, False: 397]
  ------------------
 1497|    316|        ofputil_uninit_group_mod(rf->group_mod);
 1498|    316|        free(rf->group_mod);
 1499|       |        /* 'rf' does not own rf->new_buckets. */
 1500|    316|        break;
 1501|       |
 1502|    397|    case OFPRFR_METER_MOD:
  ------------------
  |  Branch (1502:5): [True: 397, False: 316]
  ------------------
 1503|    397|        ofpbuf_uninit(&rf->bands);
 1504|    397|        free(rf->meter_mod);
 1505|    397|        break;
 1506|       |
 1507|      0|    case OFPRFR_N_REASONS:
  ------------------
  |  Branch (1507:5): [True: 0, False: 713]
  ------------------
 1508|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1509|    713|    }
 1510|    713|}
ofp-monitor.c:nx_to_ofp_flow_monitor_flags:
  334|  3.62k|{
  335|  3.62k|    uint16_t oxm_flags = 0;
  336|       |
  337|  3.62k|    if (flags & NXFMF_INITIAL) {
  ------------------
  |  Branch (337:9): [True: 1.93k, False: 1.69k]
  ------------------
  338|  1.93k|        oxm_flags |= OFPFMF_INITIAL;
  339|  1.93k|    }
  340|  3.62k|    if (flags & NXFMF_ADD) {
  ------------------
  |  Branch (340:9): [True: 2.38k, False: 1.24k]
  ------------------
  341|  2.38k|        oxm_flags |= OFPFMF_ADD;
  342|  2.38k|    }
  343|  3.62k|    if (flags & NXFMF_DELETE) {
  ------------------
  |  Branch (343:9): [True: 1.00k, False: 2.62k]
  ------------------
  344|  1.00k|        oxm_flags |= OFPFMF_REMOVED;
  345|  1.00k|    }
  346|  3.62k|    if (flags & NXFMF_MODIFY) {
  ------------------
  |  Branch (346:9): [True: 3.04k, False: 583]
  ------------------
  347|  3.04k|        oxm_flags |= OFPFMF_MODIFY;
  348|  3.04k|    }
  349|  3.62k|    if (flags & NXFMF_ACTIONS) {
  ------------------
  |  Branch (349:9): [True: 1.24k, False: 2.37k]
  ------------------
  350|  1.24k|        oxm_flags |= OFPFMF_INSTRUCTIONS;
  351|  1.24k|    }
  352|  3.62k|    if (flags & NXFMF_OWN) {
  ------------------
  |  Branch (352:9): [True: 1.32k, False: 2.30k]
  ------------------
  353|  1.32k|        oxm_flags |= OFPFMF_ONLY_OWN;
  354|  1.32k|    }
  355|       |
  356|  3.62k|    return oxm_flags;
  357|  3.62k|}
ofp-monitor.c:ofp_flow_monitor_command_to_string:
  663|    272|{
  664|    272|    switch (command) {
  665|      0|    case OFPFMC_ADD: return "add";
  ------------------
  |  Branch (665:5): [True: 0, False: 272]
  ------------------
  666|      0|    case OFPFMC_MODIFY: return "modify";
  ------------------
  |  Branch (666:5): [True: 0, False: 272]
  ------------------
  667|    272|    case OFPFMC_DELETE: return "delete";
  ------------------
  |  Branch (667:5): [True: 272, False: 0]
  ------------------
  668|      0|    default:
  ------------------
  |  Branch (668:5): [True: 0, False: 272]
  ------------------
  669|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  670|    272|    }
  671|    272|}
ofp-monitor.c:ofp_flow_monitor_flags_to_name:
  645|  18.0k|{
  646|  18.0k|    enum ofp14_flow_monitor_flags fmf = bit;
  647|       |
  648|  18.0k|    switch (fmf) {
  ------------------
  |  Branch (648:13): [True: 18.0k, False: 0]
  ------------------
  649|  3.19k|    case OFPFMF_INITIAL: return "initial";
  ------------------
  |  Branch (649:5): [True: 3.19k, False: 14.9k]
  ------------------
  650|  3.41k|    case OFPFMF_ADD: return "add";
  ------------------
  |  Branch (650:5): [True: 3.41k, False: 14.6k]
  ------------------
  651|  2.32k|    case OFPFMF_REMOVED: return "delete";
  ------------------
  |  Branch (651:5): [True: 2.32k, False: 15.7k]
  ------------------
  652|  4.22k|    case OFPFMF_MODIFY: return "modify";
  ------------------
  |  Branch (652:5): [True: 4.22k, False: 13.8k]
  ------------------
  653|  2.42k|    case OFPFMF_INSTRUCTIONS: return "actions";
  ------------------
  |  Branch (653:5): [True: 2.42k, False: 15.6k]
  ------------------
  654|      0|    case OFPFMF_NO_ABBREV: return "no-abbrev";
  ------------------
  |  Branch (654:5): [True: 0, False: 18.0k]
  ------------------
  655|  2.52k|    case OFPFMF_ONLY_OWN: return "own";
  ------------------
  |  Branch (655:5): [True: 2.52k, False: 15.5k]
  ------------------
  656|  18.0k|    }
  657|       |
  658|      0|    return NULL;
  659|  18.0k|}
ofp-monitor.c:nx_to_ofp_flow_update_event:
  388|  1.74k|{
  389|  1.74k|    switch (event) {
  390|    851|    case NXFME_ADDED:
  ------------------
  |  Branch (390:5): [True: 851, False: 897]
  ------------------
  391|    851|        return OFPFME_ADDED;
  392|    339|    case NXFME_DELETED:
  ------------------
  |  Branch (392:5): [True: 339, False: 1.40k]
  ------------------
  393|    339|        return OFPFME_REMOVED;
  394|    414|    case NXFME_MODIFIED:
  ------------------
  |  Branch (394:5): [True: 414, False: 1.33k]
  ------------------
  395|    414|        return OFPFME_MODIFIED;
  396|    144|    case NXFME_ABBREV:
  ------------------
  |  Branch (396:5): [True: 144, False: 1.60k]
  ------------------
  397|    144|        return OFPFME_ABBREV;
  398|      0|     default:
  ------------------
  |  Branch (398:6): [True: 0, False: 1.74k]
  ------------------
  399|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  400|  1.74k|    }
  401|  1.74k|}

ofphdrs_len:
  368|  9.98k|{
  369|  9.98k|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  9.98k|#define OFPT_VENDOR 4
  ------------------
  |  Branch (369:9): [True: 639, False: 9.34k]
  ------------------
  370|    639|        return sizeof(struct ofp_vendor_header);
  371|    639|    }
  372|       |
  373|  9.34k|    switch ((enum ofp_version) hdrs->version) {
  ------------------
  |  Branch (373:13): [True: 8.35k, False: 996]
  ------------------
  374|  1.02k|    case OFP10_VERSION:
  ------------------
  |  Branch (374:5): [True: 1.02k, False: 8.32k]
  ------------------
  375|  1.02k|        if (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  2.05k|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (375:13): [True: 980, False: 45]
  ------------------
  376|  1.00k|            hdrs->type == OFPT10_STATS_REPLY) {
  ------------------
  |  |   34|     45|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (376:13): [True: 26, False: 19]
  ------------------
  377|  1.00k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  1.00k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (377:21): [True: 26, False: 980]
  ------------------
  378|  1.00k|                    ? sizeof(struct nicira10_stats_msg)
  379|  1.00k|                    : sizeof(struct ofp10_stats_msg));
  380|  1.00k|        }
  381|     19|        break;
  382|       |
  383|  1.02k|    case OFP11_VERSION:
  ------------------
  |  Branch (383:5): [True: 1.02k, False: 8.31k]
  ------------------
  384|  1.72k|    case OFP12_VERSION:
  ------------------
  |  Branch (384:5): [True: 694, False: 8.65k]
  ------------------
  385|  3.33k|    case OFP13_VERSION:
  ------------------
  |  Branch (385:5): [True: 1.60k, False: 7.73k]
  ------------------
  386|  6.11k|    case OFP14_VERSION:
  ------------------
  |  Branch (386:5): [True: 2.78k, False: 6.56k]
  ------------------
  387|  7.32k|    case OFP15_VERSION:
  ------------------
  |  Branch (387:5): [True: 1.20k, False: 8.13k]
  ------------------
  388|  7.32k|        if (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  14.6k|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (388:13): [True: 4.24k, False: 3.08k]
  ------------------
  389|  5.85k|            hdrs->type == OFPT11_STATS_REPLY) {
  ------------------
  |  |   36|  3.08k|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (389:13): [True: 1.61k, False: 1.46k]
  ------------------
  390|  5.85k|            return (hdrs->stat == OFPST_VENDOR
  ------------------
  |  |   37|  5.85k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (390:21): [True: 28, False: 5.82k]
  ------------------
  391|  5.85k|                    ? sizeof(struct ofp11_vendor_stats_msg)
  392|  5.85k|                    : sizeof(struct ofp11_stats_msg));
  393|  5.85k|        }
  394|  1.46k|        break;
  395|  9.34k|    }
  396|       |
  397|  2.48k|    return sizeof(struct ofp_header);
  398|  9.34k|}
ofpraw_decode:
  409|  2.05M|{
  410|       |    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  411|  2.05M|    return ofpraw_pull(raw, &msg);
  412|  2.05M|}
ofpraw_decode_assert:
  422|  9.93k|{
  423|  9.93k|    enum ofpraw raw;
  424|  9.93k|    ovs_assert(!ofpraw_decode(&raw, oh));
  ------------------
  |  |   62|  9.93k|#define ovs_assert ovs_ignore
  ------------------
  425|  9.93k|    return raw;
  426|  9.93k|}
ofpraw_pull:
  485|  3.38M|{
  486|       |    /* Set default outputs. */
  487|  3.38M|    msg->header = msg->data;
  488|  3.38M|    msg->msg = msg->header;
  489|  3.38M|    *rawp = 0;
  490|       |
  491|  3.38M|    struct ofphdrs hdrs;
  492|  3.38M|    enum ofperr error = ofphdrs_decode(&hdrs, msg->data, msg->size);
  493|  3.38M|    if (error) {
  ------------------
  |  Branch (493:9): [True: 52.9k, False: 3.33M]
  ------------------
  494|  52.9k|        return error;
  495|  52.9k|    }
  496|       |
  497|  3.33M|    enum ofpraw raw;
  498|  3.33M|    error = ofpraw_from_ofphdrs(&raw, &hdrs);
  499|  3.33M|    if (error) {
  ------------------
  |  Branch (499:9): [True: 432k, False: 2.89M]
  ------------------
  500|   432k|        return error;
  501|   432k|    }
  502|       |
  503|  2.89M|    const struct raw_info *info = raw_info_get(raw);
  504|  2.89M|    const struct raw_instance *instance = raw_instance_get(info, hdrs.version);
  505|  2.89M|    error = ofpraw_check_length(info, instance, msg->size);
  506|  2.89M|    if (error) {
  ------------------
  |  Branch (506:9): [True: 81.6k, False: 2.81M]
  ------------------
  507|  81.6k|        return error;
  508|  81.6k|    }
  509|       |
  510|  2.81M|    msg->header = ofpbuf_pull(msg, instance->hdrs_len);
  511|  2.81M|    msg->msg = msg->data;
  512|  2.81M|    *rawp = raw;
  513|  2.81M|    return 0;
  514|  2.89M|}
ofpraw_pull_assert:
  524|   604k|{
  525|   604k|    enum ofpraw raw;
  526|   604k|    ovs_assert(!ofpraw_pull(&raw, msg));
  ------------------
  |  |   62|   604k|#define ovs_assert ovs_ignore
  ------------------
  527|   604k|    return raw;
  528|   604k|}
ofpraw_decode_partial:
  543|  8.38k|{
  544|  8.38k|    struct ofphdrs hdrs;
  545|  8.38k|    enum ofperr error;
  546|       |
  547|  8.38k|    error = ofphdrs_decode(&hdrs, oh, length);
  548|  8.38k|    if (!error) {
  ------------------
  |  Branch (548:9): [True: 8.27k, False: 107]
  ------------------
  549|  8.27k|        error = ofpraw_from_ofphdrs(raw, &hdrs);
  550|  8.27k|    }
  551|       |
  552|  8.38k|    if (error) {
  ------------------
  |  Branch (552:9): [True: 5.03k, False: 3.34k]
  ------------------
  553|  5.03k|        *raw = 0;
  554|  5.03k|    }
  555|  8.38k|    return error;
  556|  8.38k|}
ofpraw_get_name:
  782|  1.35M|{
  783|  1.35M|    return raw_info_get(raw)->name;
  784|  1.35M|}
ofptype_decode:
  828|  3.16k|{
  829|  3.16k|    enum ofperr error;
  830|  3.16k|    enum ofpraw raw;
  831|       |
  832|  3.16k|    error = ofpraw_decode(&raw, oh);
  833|  3.16k|    *typep = error ? 0 : ofptype_from_ofpraw(raw);
  ------------------
  |  Branch (833:14): [True: 285, False: 2.87k]
  ------------------
  834|  3.16k|    return error;
  835|  3.16k|}
ofptype_from_ofpraw:
  867|  1.35M|{
  868|  1.35M|    return raw_info_get(raw)->type;
  869|  1.35M|}
ofpmsg_body:
  891|  8.52k|{
  892|  8.52k|    struct ofphdrs hdrs;
  893|       |
  894|       |    ofphdrs_decode_assert(&hdrs, oh, ntohs(oh->length));
  895|  8.52k|    return (const uint8_t *) oh + ofphdrs_len(&hdrs);
  896|  8.52k|}
ofpmsg_is_stat_request:
  901|  99.8k|{
  902|  99.8k|    return ofp_is_stat_request(oh->version, oh->type);
  903|  99.8k|}
ofpmsg_is_stat:
  915|  1.35M|{
  916|  1.35M|    return ofp_is_stat(oh->version, oh->type);
  917|  1.35M|}
ofpmp_flags:
 1049|   111k|{
 1050|       |    return ntohs(*ofpmp_flags__(oh));
 1051|   111k|}
ofp-msgs.c:ofphdrs_decode:
  215|  3.40M|{
  216|  3.40M|    memset(hdrs, 0, sizeof *hdrs);
  217|  3.40M|    if (length < sizeof *oh) {
  ------------------
  |  Branch (217:9): [True: 0, False: 3.40M]
  ------------------
  218|      0|        return OFPERR_OFPBRC_BAD_LEN;
  219|      0|    }
  220|       |
  221|       |    /* Get base message version and type (OFPT_*). */
  222|  3.40M|    hdrs->version = oh->version;
  223|  3.40M|    hdrs->type = oh->type;
  224|       |
  225|  3.40M|    if (hdrs->type == OFPT_VENDOR) {
  ------------------
  |  |   32|  3.40M|#define OFPT_VENDOR 4
  ------------------
  |  Branch (225:9): [True: 133k, False: 3.26M]
  ------------------
  226|       |        /* Get vendor. */
  227|   133k|        const struct ofp_vendor_header *ovh;
  228|       |
  229|   133k|        if (length < sizeof *ovh) {
  ------------------
  |  Branch (229:13): [True: 24.8k, False: 108k]
  ------------------
  230|  24.8k|            return OFPERR_OFPBRC_BAD_LEN;
  231|  24.8k|        }
  232|       |
  233|   108k|        ovh = (const struct ofp_vendor_header *) oh;
  234|   108k|        hdrs->vendor = ntohl(ovh->vendor);
  235|   108k|        if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  110|   217k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
                      if (hdrs->vendor == NX_VENDOR_ID || hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|  8.22k|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (235:13): [True: 100k, False: 8.22k]
  |  Branch (235:45): [True: 72, False: 8.15k]
  ------------------
  236|   100k|            hdrs->subtype = ntohl(ovh->subtype);
  237|   100k|        } else {
  238|  8.15k|            log_bad_vendor(hdrs->vendor);
  239|  8.15k|            return OFPERR_OFPBRC_BAD_VENDOR;
  240|  8.15k|        }
  241|  3.26M|    } else if (hdrs->version == OFP10_VERSION
  ------------------
  |  Branch (241:16): [True: 529k, False: 2.73M]
  ------------------
  242|   529k|               && (hdrs->type == OFPT10_STATS_REQUEST ||
  ------------------
  |  |   33|  1.05M|#define OFPT10_STATS_REQUEST 16
  ------------------
  |  Branch (242:20): [True: 20.1k, False: 509k]
  ------------------
  243|   509k|                   hdrs->type == OFPT10_STATS_REPLY)) {
  ------------------
  |  |   34|   509k|#define OFPT10_STATS_REPLY 17
  ------------------
  |  Branch (243:20): [True: 83.7k, False: 425k]
  ------------------
  244|   103k|        const struct ofp10_stats_msg *osm;
  245|       |
  246|       |        /* Get statistic type (OFPST_*). */
  247|   103k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (247:13): [True: 2.80k, False: 101k]
  ------------------
  248|  2.80k|            return OFPERR_OFPBRC_BAD_LEN;
  249|  2.80k|        }
  250|   101k|        osm = (const struct ofp10_stats_msg *) oh;
  251|   101k|        hdrs->stat = ntohs(osm->type);
  252|       |
  253|   101k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   101k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (253:13): [True: 53.3k, False: 47.7k]
  ------------------
  254|       |            /* Get vendor. */
  255|  53.3k|            const struct ofp10_vendor_stats_msg *ovsm;
  256|       |
  257|  53.3k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (257:17): [True: 67, False: 53.2k]
  ------------------
  258|     67|                return OFPERR_OFPBRC_BAD_LEN;
  259|     67|            }
  260|       |
  261|  53.2k|            ovsm = (const struct ofp10_vendor_stats_msg *) oh;
  262|  53.2k|            hdrs->vendor = ntohl(ovsm->vendor);
  263|  53.2k|            if (hdrs->vendor == NX_VENDOR_ID) {
  ------------------
  |  |  110|  53.2k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (263:17): [True: 52.6k, False: 626]
  ------------------
  264|       |                /* Get Nicira statistic type (NXST_*). */
  265|  52.6k|                const struct nicira10_stats_msg *nsm;
  266|       |
  267|  52.6k|                if (length < sizeof *nsm) {
  ------------------
  |  Branch (267:21): [True: 72, False: 52.5k]
  ------------------
  268|     72|                    return OFPERR_OFPBRC_BAD_LEN;
  269|     72|                }
  270|  52.5k|                nsm = (const struct nicira10_stats_msg *) oh;
  271|  52.5k|                hdrs->subtype = ntohl(nsm->subtype);
  272|  52.5k|            } else {
  273|    626|                log_bad_vendor(hdrs->vendor);
  274|    626|                return OFPERR_OFPBRC_BAD_VENDOR;
  275|    626|            }
  276|  53.2k|        }
  277|  3.16M|    } else if (hdrs->version != OFP10_VERSION
  ------------------
  |  Branch (277:16): [True: 2.73M, False: 425k]
  ------------------
  278|  2.73M|               && (hdrs->type == OFPT11_STATS_REQUEST ||
  ------------------
  |  |   35|  5.47M|#define OFPT11_STATS_REQUEST 18
  ------------------
  |  Branch (278:20): [True: 34.6k, False: 2.70M]
  ------------------
  279|  2.70M|                   hdrs->type == OFPT11_STATS_REPLY)) {
  ------------------
  |  |   36|  2.70M|#define OFPT11_STATS_REPLY 19
  ------------------
  |  Branch (279:20): [True: 238k, False: 2.46M]
  ------------------
  280|   273k|        const struct ofp11_stats_msg *osm;
  281|       |
  282|       |        /* Get statistic type (OFPST_*). */
  283|   273k|        if (length < sizeof *osm) {
  ------------------
  |  Branch (283:13): [True: 15.1k, False: 258k]
  ------------------
  284|  15.1k|            return OFPERR_OFPBRC_BAD_LEN;
  285|  15.1k|        }
  286|   258k|        osm = (const struct ofp11_stats_msg *) oh;
  287|   258k|        hdrs->stat = ntohs(osm->type);
  288|       |
  289|   258k|        if (hdrs->stat == OFPST_VENDOR) {
  ------------------
  |  |   37|   258k|#define OFPST_VENDOR 0xffff
  ------------------
  |  Branch (289:13): [True: 1.80k, False: 256k]
  ------------------
  290|       |            /* Get vendor. */
  291|  1.80k|            const struct ofp11_vendor_stats_msg *ovsm;
  292|       |
  293|  1.80k|            if (length < sizeof *ovsm) {
  ------------------
  |  Branch (293:17): [True: 1.21k, False: 589]
  ------------------
  294|  1.21k|                return OFPERR_OFPBRC_BAD_LEN;
  295|  1.21k|            }
  296|       |
  297|    589|            ovsm = (const struct ofp11_vendor_stats_msg *) oh;
  298|    589|            hdrs->vendor = ntohl(ovsm->vendor);
  299|    589|            if (hdrs->vendor == NX_VENDOR_ID ||
  ------------------
  |  |  110|  1.17k|#define NX_VENDOR_ID    0x00002320 /* Nicira. */
  ------------------
  |  Branch (299:17): [True: 398, False: 191]
  ------------------
  300|    475|                hdrs->vendor == ONF_VENDOR_ID) {
  ------------------
  |  |  111|    191|#define ONF_VENDOR_ID   0x4f4e4600 /* Open Networking Foundation. */
  ------------------
  |  Branch (300:17): [True: 77, False: 114]
  ------------------
  301|    475|                hdrs->subtype = ntohl(ovsm->subtype);
  302|    475|            } else {
  303|    114|                log_bad_vendor(hdrs->vendor);
  304|    114|                return OFPERR_OFPBRC_BAD_VENDOR;
  305|    114|            }
  306|    589|        }
  307|   258k|    }
  308|       |
  309|  3.34M|    return 0;
  310|  3.40M|}
ofp-msgs.c:log_bad_vendor:
  206|  8.89k|{
  207|  8.89k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  8.89k|        {                                                                 \
  |  |  111|  8.89k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  35.5k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 8.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  8.89k|            0,                              /* first_dropped */           \
  |  |  113|  8.89k|            0,                              /* last_dropped */            \
  |  |  114|  8.89k|            0,                              /* n_dropped */               \
  |  |  115|  8.89k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  8.89k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  8.89k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  8.89k|        }
  ------------------
  208|       |
  209|  8.89k|    VLOG_WARN_RL(&rl, "OpenFlow message has unknown vendor %#"PRIx32, vendor);
  ------------------
  |  |  224|  8.89k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  8.89k|    do {                                                                \
  |  |  |  |  288|  8.89k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  8.89k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 8.89k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  8.89k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 8.89k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  210|  8.89k|}
ofp-msgs.c:ofpraw_check_length:
  434|  2.89M|{
  435|  2.89M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 5);
  ------------------
  |  |  110|  2.89M|        {                                                                 \
  |  |  111|  2.89M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  11.5M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 2.89M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  2.89M|            0,                              /* first_dropped */           \
  |  |  113|  2.89M|            0,                              /* last_dropped */            \
  |  |  114|  2.89M|            0,                              /* n_dropped */               \
  |  |  115|  2.89M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  2.89M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  2.89M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  2.89M|        }
  ------------------
  436|       |
  437|  2.89M|    unsigned int min_len = instance->hdrs_len + info->min_body;
  438|  2.89M|    switch (info->extra_multiple) {
  439|  89.5k|    case 0:
  ------------------
  |  Branch (439:5): [True: 89.5k, False: 2.80M]
  ------------------
  440|  89.5k|        if (len != min_len) {
  ------------------
  |  Branch (440:13): [True: 26.2k, False: 63.3k]
  ------------------
  441|  26.2k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  26.2k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  26.2k|    do {                                                                \
  |  |  |  |  288|  26.2k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  26.2k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 26.2k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  26.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 26.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  442|  26.2k|                         "length %u)", info->name, len, min_len);
  443|  26.2k|            return OFPERR_OFPBRC_BAD_LEN;
  444|  26.2k|        }
  445|  63.3k|        break;
  446|       |
  447|  2.01M|    case 1:
  ------------------
  |  Branch (447:5): [True: 2.01M, False: 880k]
  ------------------
  448|  2.01M|        if (len < min_len) {
  ------------------
  |  Branch (448:13): [True: 36.4k, False: 1.98M]
  ------------------
  449|  36.4k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (expected "
  ------------------
  |  |  224|  36.4k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  36.4k|    do {                                                                \
  |  |  |  |  288|  36.4k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  36.4k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 36.4k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  36.4k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 36.4k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  450|  36.4k|                         "length at least %u bytes)",
  451|  36.4k|                         info->name, len, min_len);
  452|  36.4k|            return OFPERR_OFPBRC_BAD_LEN;
  453|  36.4k|        }
  454|  1.98M|        break;
  455|       |
  456|  1.98M|    default:
  ------------------
  |  Branch (456:5): [True: 790k, False: 2.10M]
  ------------------
  457|   790k|        if (len < min_len || (len - min_len) % info->extra_multiple) {
  ------------------
  |  Branch (457:13): [True: 14.5k, False: 776k]
  |  Branch (457:30): [True: 4.40k, False: 771k]
  ------------------
  458|  18.9k|            VLOG_WARN_RL(&rl, "received %s with incorrect length %u (must be "
  ------------------
  |  |  224|  18.9k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  18.9k|    do {                                                                \
  |  |  |  |  288|  18.9k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  18.9k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 18.9k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  18.9k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 18.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  459|  18.9k|                         "exactly %u bytes or longer by an integer multiple "
  460|  18.9k|                         "of %u bytes)",
  461|  18.9k|                         info->name, len, min_len, info->extra_multiple);
  462|  18.9k|            return OFPERR_OFPBRC_BAD_LEN;
  463|  18.9k|        }
  464|   771k|        break;
  465|  2.89M|    }
  466|       |
  467|  2.81M|    return 0;
  468|  2.89M|}
ofp-msgs.c:ofphdrs_decode_assert:
  315|  8.52k|{
  316|  8.52k|    ovs_assert(!ofphdrs_decode(hdrs, oh, length));
  ------------------
  |  |   62|  8.52k|#define ovs_assert ovs_ignore
  ------------------
  317|  8.52k|}
ofp-msgs.c:ofp_is_stat_request:
  321|  1.88M|{
  322|  1.88M|    switch (version) {
  ------------------
  |  Branch (322:13): [True: 1.42M, False: 465k]
  ------------------
  323|   279k|    case OFP10_VERSION:
  ------------------
  |  Branch (323:5): [True: 279k, False: 1.60M]
  ------------------
  324|   279k|        return type == OFPT10_STATS_REQUEST;
  ------------------
  |  |   33|   279k|#define OFPT10_STATS_REQUEST 16
  ------------------
  325|   102k|    case OFP11_VERSION:
  ------------------
  |  Branch (325:5): [True: 102k, False: 1.78M]
  ------------------
  326|   347k|    case OFP12_VERSION:
  ------------------
  |  Branch (326:5): [True: 244k, False: 1.64M]
  ------------------
  327|   496k|    case OFP13_VERSION:
  ------------------
  |  Branch (327:5): [True: 149k, False: 1.73M]
  ------------------
  328|   766k|    case OFP14_VERSION:
  ------------------
  |  Branch (328:5): [True: 270k, False: 1.61M]
  ------------------
  329|  1.14M|    case OFP15_VERSION:
  ------------------
  |  Branch (329:5): [True: 375k, False: 1.51M]
  ------------------
  330|  1.14M|        return type == OFPT11_STATS_REQUEST;
  ------------------
  |  |   35|  1.14M|#define OFPT11_STATS_REQUEST 18
  ------------------
  331|  1.88M|    }
  332|       |
  333|   465k|    return false;
  334|  1.88M|}
ofp-msgs.c:ofp_is_stat_reply:
  338|  1.76M|{
  339|  1.76M|    switch (version) {
  ------------------
  |  Branch (339:13): [True: 1.29M, False: 465k]
  ------------------
  340|   248k|    case OFP10_VERSION:
  ------------------
  |  Branch (340:5): [True: 248k, False: 1.51M]
  ------------------
  341|   248k|        return type == OFPT10_STATS_REPLY;
  ------------------
  |  |   34|   248k|#define OFPT10_STATS_REPLY 17
  ------------------
  342|  95.0k|    case OFP11_VERSION:
  ------------------
  |  Branch (342:5): [True: 95.0k, False: 1.66M]
  ------------------
  343|   333k|    case OFP12_VERSION:
  ------------------
  |  Branch (343:5): [True: 238k, False: 1.52M]
  ------------------
  344|   480k|    case OFP13_VERSION:
  ------------------
  |  Branch (344:5): [True: 147k, False: 1.61M]
  ------------------
  345|   723k|    case OFP14_VERSION:
  ------------------
  |  Branch (345:5): [True: 243k, False: 1.52M]
  ------------------
  346|  1.05M|    case OFP15_VERSION:
  ------------------
  |  Branch (346:5): [True: 327k, False: 1.43M]
  ------------------
  347|  1.05M|        return type == OFPT11_STATS_REPLY;
  ------------------
  |  |   36|  1.05M|#define OFPT11_STATS_REPLY 19
  ------------------
  348|  1.76M|    }
  349|       |
  350|   465k|    return false;
  351|  1.76M|}
ofp-msgs.c:ofp_is_stat:
  355|  1.78M|{
  356|  1.78M|    return (ofp_is_stat_request(version, type) ||
  ------------------
  |  Branch (356:13): [True: 22.0k, False: 1.76M]
  ------------------
  357|  1.76M|            ofp_is_stat_reply(version, type));
  ------------------
  |  Branch (357:13): [True: 99.7k, False: 1.66M]
  ------------------
  358|  1.78M|}
ofp-msgs.c:ofpmp_flags__:
 1028|   111k|{
 1029|   111k|    switch ((enum ofp_version)oh->version) {
 1030|  26.3k|    case OFP10_VERSION:
  ------------------
  |  Branch (1030:5): [True: 26.3k, False: 85.2k]
  ------------------
 1031|  26.3k|        return &((struct ofp10_stats_msg *) oh)->flags;
 1032|  6.24k|    case OFP11_VERSION:
  ------------------
  |  Branch (1032:5): [True: 6.24k, False: 105k]
  ------------------
 1033|  10.7k|    case OFP12_VERSION:
  ------------------
  |  Branch (1033:5): [True: 4.49k, False: 107k]
  ------------------
 1034|  15.3k|    case OFP13_VERSION:
  ------------------
  |  Branch (1034:5): [True: 4.57k, False: 107k]
  ------------------
 1035|  38.0k|    case OFP14_VERSION:
  ------------------
  |  Branch (1035:5): [True: 22.6k, False: 88.9k]
  ------------------
 1036|  85.2k|    case OFP15_VERSION:
  ------------------
  |  Branch (1036:5): [True: 47.2k, False: 64.3k]
  ------------------
 1037|  85.2k|        return &((struct ofp11_stats_msg *) oh)->flags;
 1038|      0|    default:
  ------------------
  |  Branch (1038:5): [True: 0, False: 111k]
  ------------------
 1039|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1040|   111k|    }
 1041|   111k|}
ofp-msgs.c:raw_info_get:
 1307|  5.61M|{
 1308|  5.61M|    ofpmsgs_init();
 1309|       |
 1310|  5.61M|    ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |   62|  5.61M|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(raw < ARRAY_SIZE(raw_infos));
  ------------------
  |  |  297|  5.61M|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  5.61M|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  5.61M|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  5.61M|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  5.61M|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  5.61M|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1311|  5.61M|    return &raw_infos[raw];
 1312|  5.61M|}
ofp-msgs.c:ofpmsgs_init:
 1363|  8.95M|{
 1364|  8.95M|    static struct ovsthread_once once = OVSTHREAD_ONCE_INITIALIZER;
  ------------------
  |  |  134|  8.95M|    {                                           \
  |  |  135|  8.95M|        false,                                  \
  |  |  136|  8.95M|        OVS_MUTEX_INITIALIZER,                  \
  |  |  ------------------
  |  |  |  |   45|  8.95M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  8.95M|                                "<unlocked>" }
  |  |  ------------------
  |  |  137|  8.95M|    }
  ------------------
 1365|  8.95M|    const struct raw_info *info;
 1366|       |
 1367|  8.95M|    if (!ovsthread_once_start(&once)) {
  ------------------
  |  Branch (1367:9): [True: 8.95M, False: 1]
  ------------------
 1368|  8.95M|        return;
 1369|  8.95M|    }
 1370|       |
 1371|      1|    hmap_init(&raw_instance_map);
 1372|    162|    for (info = raw_infos; info < &raw_infos[ARRAY_SIZE(raw_infos)]; info++)
  ------------------
  |  |  297|    162|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|    162|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    162|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|    162|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|    162|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    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|  3.34M|{
  194|  3.34M|    BUILD_ASSERT_DECL(sizeof *hdrs % 4 == 0);
  ------------------
  |  |  270|  3.34M|#define BUILD_ASSERT_DECL(EXPR) _Static_assert(EXPR, #EXPR)
  ------------------
  195|  3.34M|    return hash_bytes32((const uint32_t *) hdrs, sizeof *hdrs, 0);
  196|  3.34M|}
ofp-msgs.c:raw_instance_get:
 1316|  2.89M|{
 1317|  2.89M|    ovs_assert(version >= info->min_version && version <= info->max_version);
  ------------------
  |  |   62|  2.89M|#define ovs_assert ovs_ignore
  ------------------
  |  Branch (1317:16): [True: 2.89M, False: 0]
  |  Branch (1317:48): [True: 2.89M, False: 0]
  ------------------
 1318|  2.89M|    return &info->instances[version - info->min_version];
 1319|  2.89M|}
ofp-msgs.c:ofpraw_from_ofphdrs:
 1323|  3.34M|{
 1324|  3.34M|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(1, 1);
  ------------------
  |  |  110|  3.34M|        {                                                                 \
  |  |  111|  3.34M|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|  13.3M|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 3.34M]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  3.34M|            0,                              /* first_dropped */           \
  |  |  113|  3.34M|            0,                              /* last_dropped */            \
  |  |  114|  3.34M|            0,                              /* n_dropped */               \
  |  |  115|  3.34M|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  3.34M|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  3.34M|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  3.34M|        }
  ------------------
 1325|       |
 1326|  3.34M|    struct raw_instance *raw_hdrs;
 1327|  3.34M|    uint32_t hash;
 1328|       |
 1329|  3.34M|    ofpmsgs_init();
 1330|       |
 1331|  3.34M|    hash = ofphdrs_hash(hdrs);
 1332|  3.34M|    HMAP_FOR_EACH_WITH_HASH (raw_hdrs, hmap_node, hash, &raw_instance_map) {
  ------------------
  |  |  138|  3.34M|    for (INIT_MULTIVAR(NODE, MEMBER, hmap_first_with_hash(HMAP, HASH),        \
  |  |  ------------------
  |  |  |  |  171|  3.34M|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|  3.34M|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  139|  3.34M|                       struct hmap_node);                                     \
  |  |  140|  3.34M|         CONDITION_MULTIVAR(NODE, MEMBER, ITER_VAR(NODE) != NULL);            \
  |  |  ------------------
  |  |  |  |  185|  3.34M|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 2.90M, False: 437k]
  |  |  |  |  |  Branch (185:6): [True: 2.90M, False: 437k]
  |  |  |  |  ------------------
  |  |  |  |  186|  3.34M|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|  2.90M|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|  2.90M|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|  2.90M|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|  3.34M|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |  141|  3.34M|         UPDATE_MULTIVAR(NODE, hmap_next_with_hash(ITER_VAR(NODE))))
  |  |  ------------------
  |  |  |  |  193|    329|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    329|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1333|  2.90M|        if (ofphdrs_equal(hdrs, &raw_hdrs->hdrs)) {
  ------------------
  |  Branch (1333:13): [True: 2.90M, False: 329]
  ------------------
 1334|  2.90M|            *raw = raw_hdrs->raw;
 1335|  2.90M|            return 0;
 1336|  2.90M|        }
 1337|  2.90M|    }
 1338|       |
 1339|   437k|    if (!VLOG_DROP_WARN(&rl)) {
  ------------------
  |  |  234|   437k|#define VLOG_DROP_WARN(RL) vlog_should_drop(&this_module, VLL_WARN, RL)
  ------------------
  |  Branch (1339:9): [True: 0, False: 437k]
  ------------------
 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));
  ------------------
  |  |  209|      0|#define VLOG_WARN(...) VLOG(VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  280|      0|    do {                                                \
  |  |  |  |  281|      0|        enum vlog_level level__ = LEVEL;                \
  |  |  |  |  282|      0|        if (this_module.min_level >= level__) {         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (282:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  283|      0|            vlog(&this_module, level__, __VA_ARGS__);   \
  |  |  |  |  284|      0|        }                                               \
  |  |  |  |  285|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (285:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1353|      0|        ds_destroy(&s);
 1354|      0|    }
 1355|       |
 1356|   437k|    return (hdrs->vendor ? OFPERR_OFPBRC_BAD_SUBTYPE
  ------------------
  |  Branch (1356:13): [True: 3.98k, False: 433k]
  ------------------
 1357|   437k|            : ofphdrs_is_stat(hdrs) ? OFPERR_OFPBRC_BAD_STAT
  ------------------
  |  Branch (1357:15): [True: 10.1k, False: 423k]
  ------------------
 1358|   433k|            : OFPERR_OFPBRC_BAD_TYPE);
 1359|  3.34M|}
ofp-msgs.c:ofphdrs_equal:
  200|  2.90M|{
  201|  2.90M|    return !memcmp(a, b, sizeof *a);
  202|  2.90M|}
ofp-msgs.c:ofphdrs_is_stat:
  362|   433k|{
  363|   433k|    return ofp_is_stat(hdrs->version, hdrs->type);
  364|   433k|}

ofputil_packet_in_format_to_string:
   41|     81|{
   42|     81|    switch (format) {
   43|     61|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (43:5): [True: 61, False: 20]
  ------------------
   44|     61|        return "standard";
   45|     12|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (45:5): [True: 12, False: 69]
  ------------------
   46|     12|        return "nxt_packet_in";
   47|      8|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (47:5): [True: 8, False: 73]
  ------------------
   48|      8|        return "nxt_packet_in2";
   49|      0|    default:
  ------------------
  |  Branch (49:5): [True: 0, False: 81]
  ------------------
   50|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
   51|     81|    }
   52|     81|}
ofputil_decode_set_packet_in_format:
   81|    112|{
   82|    112|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   83|    112|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_PACKET_IN_FORMAT);
  ------------------
  |  |   62|    112|#define ovs_assert ovs_ignore
  ------------------
   84|    112|    ovs_be32 *spifp = ofpbuf_pull(&b, sizeof *spifp);
   85|    112|    uint32_t spif = ntohl(*spifp);
   86|       |
   87|    112|    switch (spif) {
   88|     61|    case OFPUTIL_PACKET_IN_STD:
  ------------------
  |  Branch (88:5): [True: 61, False: 51]
  ------------------
   89|     73|    case OFPUTIL_PACKET_IN_NXT:
  ------------------
  |  Branch (89:5): [True: 12, False: 100]
  ------------------
   90|     81|    case OFPUTIL_PACKET_IN_NXT2:
  ------------------
  |  Branch (90:5): [True: 8, False: 104]
  ------------------
   91|     81|        *format = spif;
   92|     81|        return 0;
   93|       |
   94|     31|    default:
  ------------------
  |  Branch (94:5): [True: 31, False: 81]
  ------------------
   95|     31|        VLOG_WARN_RL(&rl, "NXT_SET_PACKET_IN_FORMAT message specified invalid "
  ------------------
  |  |  224|     31|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     31|    do {                                                                \
  |  |  |  |  288|     31|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     31|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 31]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     31|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 31]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   96|     31|                     "packet-in format %"PRIu32, spif);
   97|     31|        return OFPERR_OFPBRC_EPERM;
   98|    112|    }
   99|    112|}
ofputil_decode_packet_in:
  233|  91.7k|{
  234|  91.7k|    uint32_t buffer_id;
  235|  91.7k|    size_t total_len;
  236|       |
  237|  91.7k|    memset(pin, 0, sizeof *pin);
  238|  91.7k|    pin->cookie = OVS_BE64_MAX;
  ------------------
  |  |   44|  91.7k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  239|  91.7k|    if (continuation) {
  ------------------
  |  Branch (239:9): [True: 91.7k, False: 0]
  ------------------
  240|  91.7k|        ofpbuf_use_const(continuation, NULL, 0);
  241|  91.7k|    }
  242|       |
  243|  91.7k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  244|  91.7k|    enum ofpraw raw = ofpraw_pull_assert(&b);
  245|  91.7k|    if (raw == OFPRAW_OFPT13_PACKET_IN || raw == OFPRAW_OFPT12_PACKET_IN) {
  ------------------
  |  Branch (245:9): [True: 823, False: 90.8k]
  |  Branch (245:43): [True: 56.9k, False: 33.9k]
  ------------------
  246|  57.7k|        const struct ofp12_packet_in *opi = ofpbuf_pull(&b, sizeof *opi);
  247|  57.7k|        const ovs_be64 *cookie = (raw == OFPRAW_OFPT13_PACKET_IN
  ------------------
  |  Branch (247:35): [True: 823, False: 56.9k]
  ------------------
  248|  57.7k|                                  ? ofpbuf_pull(&b, sizeof *cookie)
  249|  57.7k|                                  : NULL);
  250|  57.7k|        enum ofperr error = oxm_pull_match_loose(&b, false, tun_table,
  251|  57.7k|                                                 &pin->flow_metadata);
  252|  57.7k|        pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  253|  57.7k|        if (error) {
  ------------------
  |  Branch (253:13): [True: 31.3k, False: 26.4k]
  ------------------
  254|  31.3k|            return error;
  255|  31.3k|        }
  256|       |
  257|  26.4k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (257:13): [True: 2.29k, False: 24.1k]
  ------------------
  258|  2.29k|            return OFPERR_OFPBRC_BAD_LEN;
  259|  2.29k|        }
  260|       |
  261|  24.1k|        pin->reason = opi->reason;
  262|  24.1k|        pin->table_id = opi->table_id;
  263|  24.1k|        buffer_id = ntohl(opi->buffer_id);
  264|  24.1k|        total_len = ntohs(opi->total_len);
  265|  24.1k|        if (cookie) {
  ------------------
  |  Branch (265:13): [True: 378, False: 23.7k]
  ------------------
  266|    378|            pin->cookie = *cookie;
  267|    378|        }
  268|       |
  269|  24.1k|        pin->packet = b.data;
  270|  24.1k|        pin->packet_len = b.size;
  271|  33.9k|    } else if (raw == OFPRAW_OFPT10_PACKET_IN) {
  ------------------
  |  Branch (271:16): [True: 16.1k, False: 17.7k]
  ------------------
  272|  16.1k|        const struct ofp10_packet_in *opi;
  273|       |
  274|  16.1k|        opi = ofpbuf_pull(&b, offsetof(struct ofp10_packet_in, data));
  275|       |
  276|  16.1k|        pin->packet = CONST_CAST(uint8_t *, opi->data);
  ------------------
  |  |   85|  16.1k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  16.1k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  16.1k|     (TYPE) (POINTER))
  ------------------
  277|  16.1k|        pin->packet_len = b.size;
  278|       |
  279|  16.1k|        match_init_catchall(&pin->flow_metadata);
  280|  16.1k|        match_set_in_port(&pin->flow_metadata,
  281|  16.1k|                          u16_to_ofp(ntohs(opi->in_port)));
  282|  16.1k|        pin->reason = opi->reason;
  283|  16.1k|        buffer_id = ntohl(opi->buffer_id);
  284|  16.1k|        total_len = ntohs(opi->total_len);
  285|  17.7k|    } else if (raw == OFPRAW_OFPT11_PACKET_IN) {
  ------------------
  |  Branch (285:16): [True: 663, False: 17.1k]
  ------------------
  286|    663|        const struct ofp11_packet_in *opi;
  287|    663|        ofp_port_t in_port;
  288|    663|        enum ofperr error;
  289|       |
  290|    663|        opi = ofpbuf_pull(&b, sizeof *opi);
  291|       |
  292|    663|        pin->packet = b.data;
  293|    663|        pin->packet_len = b.size;
  294|       |
  295|    663|        buffer_id = ntohl(opi->buffer_id);
  296|    663|        error = ofputil_port_from_ofp11(opi->in_port, &in_port);
  297|    663|        if (error) {
  ------------------
  |  Branch (297:13): [True: 370, False: 293]
  ------------------
  298|    370|            return error;
  299|    370|        }
  300|    293|        match_init_catchall(&pin->flow_metadata);
  301|    293|        match_set_in_port(&pin->flow_metadata, in_port);
  302|    293|        total_len = ntohs(opi->total_len);
  303|    293|        pin->reason = opi->reason;
  304|    293|        pin->table_id = opi->table_id;
  305|  17.1k|    } else if (raw == OFPRAW_NXT_PACKET_IN) {
  ------------------
  |  Branch (305:16): [True: 1.81k, False: 15.2k]
  ------------------
  306|  1.81k|        const struct nx_packet_in *npi;
  307|  1.81k|        int error;
  308|       |
  309|  1.81k|        npi = ofpbuf_pull(&b, sizeof *npi);
  310|  1.81k|        error = nx_pull_match_loose(&b, ntohs(npi->match_len),
  311|  1.81k|                                    &pin->flow_metadata, NULL, NULL, false,
  312|  1.81k|                                    NULL);
  313|  1.81k|        if (error) {
  ------------------
  |  Branch (313:13): [True: 627, False: 1.18k]
  ------------------
  314|    627|            return error;
  315|    627|        }
  316|       |
  317|  1.18k|        if (!ofpbuf_try_pull(&b, 2)) {
  ------------------
  |  Branch (317:13): [True: 19, False: 1.17k]
  ------------------
  318|     19|            return OFPERR_OFPBRC_BAD_LEN;
  319|     19|        }
  320|       |
  321|  1.17k|        pin->reason = npi->reason;
  322|  1.17k|        pin->table_id = npi->table_id;
  323|  1.17k|        pin->cookie = npi->cookie;
  324|       |
  325|  1.17k|        buffer_id = ntohl(npi->buffer_id);
  326|  1.17k|        total_len = ntohs(npi->total_len);
  327|       |
  328|  1.17k|        pin->packet = b.data;
  329|  1.17k|        pin->packet_len = b.size;
  330|  15.2k|    } else if (raw == OFPRAW_NXT_PACKET_IN2 || raw == OFPRAW_NXT_RESUME) {
  ------------------
  |  Branch (330:16): [True: 12.0k, False: 3.21k]
  |  Branch (330:48): [True: 3.21k, False: 0]
  ------------------
  331|  15.2k|        enum ofperr error = decode_nx_packet_in2(oh, loose, tun_table,
  332|  15.2k|                                                 vl_mff_map, pin, &total_len,
  333|  15.2k|                                                 &buffer_id, continuation);
  334|  15.2k|        if (error) {
  ------------------
  |  Branch (334:13): [True: 3.77k, False: 11.5k]
  ------------------
  335|  3.77k|            return error;
  336|  3.77k|        }
  337|  15.2k|    } else {
  338|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  339|      0|    }
  340|       |
  341|  53.2k|    if (total_lenp) {
  ------------------
  |  Branch (341:9): [True: 53.2k, False: 0]
  ------------------
  342|  53.2k|        *total_lenp = total_len;
  343|  53.2k|    }
  344|  53.2k|    if (buffer_idp) {
  ------------------
  |  Branch (344:9): [True: 53.2k, False: 0]
  ------------------
  345|  53.2k|        *buffer_idp = buffer_id;
  346|  53.2k|    }
  347|       |
  348|  53.2k|    return 0;
  349|  91.7k|}
ofputil_packet_in_reason_to_string:
  710|  80.6k|{
  711|  80.6k|    switch (reason) {
  712|  25.2k|    case OFPR_NO_MATCH:
  ------------------
  |  Branch (712:5): [True: 25.2k, False: 55.3k]
  ------------------
  713|  25.2k|        return "no_match";
  714|  5.96k|    case OFPR_ACTION:
  ------------------
  |  Branch (714:5): [True: 5.96k, False: 74.6k]
  ------------------
  715|  5.96k|        return "action";
  716|  4.65k|    case OFPR_INVALID_TTL:
  ------------------
  |  Branch (716:5): [True: 4.65k, False: 75.9k]
  ------------------
  717|  4.65k|        return "invalid_ttl";
  718|  4.18k|    case OFPR_ACTION_SET:
  ------------------
  |  Branch (718:5): [True: 4.18k, False: 76.4k]
  ------------------
  719|  4.18k|        return "action_set";
  720|  6.22k|    case OFPR_GROUP:
  ------------------
  |  Branch (720:5): [True: 6.22k, False: 74.4k]
  ------------------
  721|  6.22k|        return "group";
  722|  3.29k|    case OFPR_PACKET_OUT:
  ------------------
  |  Branch (722:5): [True: 3.29k, False: 77.3k]
  ------------------
  723|  3.29k|        return "packet_out";
  724|  5.22k|    case OFPR_EXPLICIT_MISS:
  ------------------
  |  Branch (724:5): [True: 5.22k, False: 75.4k]
  ------------------
  725|  6.86k|    case OFPR_IMPLICIT_MISS:
  ------------------
  |  Branch (725:5): [True: 1.63k, False: 79.0k]
  ------------------
  726|  6.86k|        return "";
  727|       |
  728|    210|    case OFPR_N_REASONS:
  ------------------
  |  Branch (728:5): [True: 210, False: 80.4k]
  ------------------
  729|  24.1k|    default:
  ------------------
  |  Branch (729:5): [True: 23.9k, False: 56.6k]
  ------------------
  730|  24.1k|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
  731|  24.1k|        return reasonbuf;
  732|  80.6k|    }
  733|  80.6k|}
ofputil_decode_packet_in_private:
  818|  91.7k|{
  819|  91.7k|    memset(pin, 0, sizeof *pin);
  820|       |
  821|  91.7k|    struct ofpbuf continuation;
  822|  91.7k|    enum ofperr error;
  823|  91.7k|    error = ofputil_decode_packet_in(oh, loose, tun_table, vl_mff_map,
  824|  91.7k|                                     &pin->base, total_len, buffer_id,
  825|  91.7k|                                     &continuation);
  826|  91.7k|    if (error) {
  ------------------
  |  Branch (826:9): [True: 38.4k, False: 53.2k]
  ------------------
  827|  38.4k|        return error;
  828|  38.4k|    }
  829|       |
  830|  53.2k|    struct ofpbuf actions, action_set;
  831|  53.2k|    ofpbuf_init(&actions, 0);
  832|  53.2k|    ofpbuf_init(&action_set, 0);
  833|       |
  834|  53.2k|    uint8_t table_id = 0;
  835|  53.2k|    ovs_be64 cookie = 0;
  836|       |
  837|  53.2k|    struct ofpbuf stack;
  838|  53.2k|    ofpbuf_init(&stack, 0);
  839|       |
  840|  72.1k|    while (continuation.size > 0) {
  ------------------
  |  Branch (840:12): [True: 23.4k, False: 48.6k]
  ------------------
  841|  23.4k|        struct ofpbuf payload;
  842|  23.4k|        uint64_t type;
  843|       |
  844|  23.4k|        error = ofpprop_pull(&continuation, &payload, &type);
  845|  23.4k|        if (error) {
  ------------------
  |  Branch (845:13): [True: 2.22k, False: 21.2k]
  ------------------
  846|  2.22k|            break;
  847|  2.22k|        }
  848|       |
  849|  21.2k|        switch (type) {
  850|  1.42k|        case NXCPT_BRIDGE:
  ------------------
  |  Branch (850:9): [True: 1.42k, False: 19.8k]
  ------------------
  851|  1.42k|            error = ofpprop_parse_uuid(&payload, &pin->bridge);
  852|  1.42k|            break;
  853|       |
  854|  3.36k|        case NXCPT_STACK:
  ------------------
  |  Branch (854:9): [True: 3.36k, False: 17.8k]
  ------------------
  855|  3.36k|            error = parse_stack_prop(&payload, &stack);
  856|  3.36k|            break;
  857|       |
  858|    905|        case NXCPT_MIRRORS:
  ------------------
  |  Branch (858:9): [True: 905, False: 20.3k]
  ------------------
  859|    905|            error = ofpprop_parse_u32(&payload, &pin->mirrors);
  860|    905|            break;
  861|       |
  862|    824|        case NXCPT_CONNTRACKED:
  ------------------
  |  Branch (862:9): [True: 824, False: 20.3k]
  ------------------
  863|    824|            pin->conntracked = true;
  864|    824|            break;
  865|       |
  866|    263|        case NXCPT_TABLE_ID:
  ------------------
  |  Branch (866:9): [True: 263, False: 20.9k]
  ------------------
  867|    263|            error = ofpprop_parse_u8(&payload, &table_id);
  868|    263|            break;
  869|       |
  870|    267|        case NXCPT_COOKIE:
  ------------------
  |  Branch (870:9): [True: 267, False: 20.9k]
  ------------------
  871|    267|            error = ofpprop_parse_be64(&payload, &cookie);
  872|    267|            break;
  873|       |
  874|  6.41k|        case NXCPT_ACTIONS: {
  ------------------
  |  Branch (874:9): [True: 6.41k, False: 14.8k]
  ------------------
  875|  6.41k|            struct ofpact_unroll_xlate *unroll
  876|  6.41k|                = ofpact_put_UNROLL_XLATE(&actions);
  877|  6.41k|            unroll->rule_table_id = table_id;
  878|  6.41k|            unroll->rule_cookie = cookie;
  879|  6.41k|            error = parse_actions_property(&payload, oh->version, &actions);
  880|  6.41k|            break;
  881|      0|        }
  882|       |
  883|  4.56k|        case NXCPT_ACTION_SET:
  ------------------
  |  Branch (883:9): [True: 4.56k, False: 16.6k]
  ------------------
  884|  4.56k|            error = parse_actions_property(&payload, oh->version, &action_set);
  885|  4.56k|            break;
  886|       |
  887|    731|        case NXCPT_ODP_PORT: {
  ------------------
  |  Branch (887:9): [True: 731, False: 20.4k]
  ------------------
  888|    731|            uint32_t value;
  889|    731|            error = ofpprop_parse_u32(&payload, &value);
  890|    731|            if (!error) {
  ------------------
  |  Branch (890:17): [True: 470, False: 261]
  ------------------
  891|    470|                pin->odp_port = u32_to_odp(value);
  892|    470|            }
  893|    731|            break;
  894|      0|         }
  895|       |
  896|  2.46k|        default:
  ------------------
  |  Branch (896:9): [True: 2.46k, False: 18.7k]
  ------------------
  897|  2.46k|            error = OFPPROP_UNKNOWN(loose, "continuation", type);
  ------------------
  |  |  144|  2.46k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  898|  2.46k|            break;
  899|  21.2k|        }
  900|  21.2k|        if (error) {
  ------------------
  |  Branch (900:13): [True: 2.38k, False: 18.8k]
  ------------------
  901|  2.38k|            break;
  902|  2.38k|        }
  903|  21.2k|    }
  904|       |
  905|  53.2k|    pin->actions_len = actions.size;
  906|  53.2k|    pin->actions = ofpbuf_steal_data(&actions);
  907|  53.2k|    pin->action_set_len = action_set.size;
  908|  53.2k|    pin->action_set = ofpbuf_steal_data(&action_set);
  909|  53.2k|    pin->stack_size = stack.size;
  910|  53.2k|    pin->stack = ofpbuf_steal_data(&stack);
  911|       |
  912|  53.2k|    if (error) {
  ------------------
  |  Branch (912:9): [True: 4.61k, False: 48.6k]
  ------------------
  913|  4.61k|        ofputil_packet_in_private_destroy(pin);
  914|  4.61k|    }
  915|       |
  916|  53.2k|    return error;
  917|  53.2k|}
ofputil_packet_in_private_format:
  926|  48.6k|{
  927|  48.6k|    char reasonbuf[OFPUTIL_PACKET_IN_REASON_BUFSIZE];
  928|  48.6k|    const struct ofputil_packet_in *public = &pin->base;
  929|       |
  930|  48.6k|    if (public->table_id
  ------------------
  |  Branch (930:9): [True: 13.8k, False: 34.7k]
  ------------------
  931|  34.7k|        || ofputil_table_map_get_name(table_map, public->table_id)) {
  ------------------
  |  Branch (931:12): [True: 0, False: 34.7k]
  ------------------
  932|  13.8k|        ds_put_format(s, " table_id=");
  933|  13.8k|        ofputil_format_table(public->table_id, table_map, s);
  934|  13.8k|    }
  935|       |
  936|  48.6k|    if (public->cookie != OVS_BE64_MAX) {
  ------------------
  |  |   44|  48.6k|#define OVS_BE64_MAX ((OVS_FORCE ovs_be64) 0xffffffffffffffffULL)
  ------------------
  |  Branch (936:9): [True: 1.54k, False: 47.1k]
  ------------------
  937|  1.54k|        ds_put_format(s, " cookie=0x%"PRIx64, ntohll(public->cookie));
  938|  1.54k|    }
  939|       |
  940|  48.6k|    ds_put_format(s, " total_len=%"PRIuSIZE" ", total_len);
  941|       |
  942|  48.6k|    match_format(&public->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  48.6k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
  943|       |
  944|  48.6k|    ds_put_format(s, " (via %s)",
  945|  48.6k|                  ofputil_packet_in_reason_to_string(public->reason,
  946|  48.6k|                                                     reasonbuf,
  947|  48.6k|                                                     sizeof reasonbuf));
  948|       |
  949|  48.6k|    ds_put_format(s, " data_len=%"PRIuSIZE, public->packet_len);
  ------------------
  |  |  120|  48.6k|#define PRIuSIZE "zu"
  ------------------
  950|  48.6k|    if (buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (950:9): [True: 7.74k, False: 40.9k]
  ------------------
  951|  7.74k|        ds_put_format(s, " (unbuffered)");
  952|  7.74k|        if (total_len != public->packet_len) {
  ------------------
  |  Branch (952:13): [True: 4.71k, False: 3.02k]
  ------------------
  953|  4.71k|            ds_put_format(s, " (***total_len != data_len***)");
  954|  4.71k|        }
  955|  40.9k|    } else {
  956|  40.9k|        ds_put_format(s, " buffer=0x%08"PRIx32, buffer_id);
  957|  40.9k|        if (total_len < public->packet_len) {
  ------------------
  |  Branch (957:13): [True: 1.17k, False: 39.7k]
  ------------------
  958|  1.17k|            ds_put_format(s, " (***total_len < data_len***)");
  959|  1.17k|        }
  960|  40.9k|    }
  961|  48.6k|    ds_put_char(s, '\n');
  962|       |
  963|  48.6k|    if (public->userdata_len) {
  ------------------
  |  Branch (963:9): [True: 717, False: 47.9k]
  ------------------
  964|    717|        ds_put_cstr(s, " userdata=");
  965|    717|        ds_put_hex_with_delimiter(s, pin->base.userdata,
  966|    717|                                  pin->base.userdata_len, ".");
  967|    717|        ds_put_char(s, '\n');
  968|    717|    }
  969|       |
  970|  48.6k|    if (!uuid_is_zero(&pin->bridge)) {
  ------------------
  |  Branch (970:9): [True: 666, False: 47.9k]
  ------------------
  971|    666|        ds_put_format(s, " continuation.bridge="UUID_FMT"\n",
  972|    666|                      UUID_ARGS(&pin->bridge));
  ------------------
  |  |   39|    666|    ((unsigned int) ((UUID)->parts[0])),            \
  |  |   40|    666|    ((unsigned int) ((UUID)->parts[1] >> 16)),      \
  |  |   41|    666|    ((unsigned int) ((UUID)->parts[1] & 0xffff)),   \
  |  |   42|    666|    ((unsigned int) ((UUID)->parts[2] >> 16)),      \
  |  |   43|    666|    ((unsigned int) ((UUID)->parts[2] & 0xffff)),   \
  |  |   44|    666|    ((unsigned int) ((UUID)->parts[3]))
  ------------------
  973|    666|    }
  974|       |
  975|  48.6k|    if (pin->stack_size) {
  ------------------
  |  Branch (975:9): [True: 1.54k, False: 47.1k]
  ------------------
  976|  1.54k|        ds_put_cstr(s, " continuation.stack=(top)");
  977|       |
  978|  1.54k|        struct ofpbuf pin_stack;
  979|  1.54k|        ofpbuf_use_const(&pin_stack, pin->stack, pin->stack_size);
  980|       |
  981|  3.72k|        while (pin_stack.size) {
  ------------------
  |  Branch (981:16): [True: 2.17k, False: 1.54k]
  ------------------
  982|  2.17k|            uint8_t len;
  983|  2.17k|            uint8_t *val = nx_stack_pop(&pin_stack, &len);
  984|  2.17k|            union mf_subvalue value;
  985|       |
  986|  2.17k|            ds_put_char(s, ' ');
  987|  2.17k|            memset(&value, 0, sizeof value - len);
  988|  2.17k|            memcpy(&value.u8[sizeof value - len], val, len);
  989|  2.17k|            mf_subvalue_format(&value, s);
  990|  2.17k|        }
  991|  1.54k|        ds_put_cstr(s, " (bottom)\n");
  992|  1.54k|    }
  993|       |
  994|  48.6k|    if (pin->mirrors) {
  ------------------
  |  Branch (994:9): [True: 259, False: 48.3k]
  ------------------
  995|    259|        ds_put_format(s, " continuation.mirrors=0x%"PRIx32"\n",
  996|    259|                      pin->mirrors);
  997|    259|    }
  998|       |
  999|  48.6k|    if (pin->conntracked) {
  ------------------
  |  Branch (999:9): [True: 369, False: 48.2k]
  ------------------
 1000|    369|        ds_put_cstr(s, " continuation.conntracked=true\n");
 1001|    369|    }
 1002|       |
 1003|  48.6k|    struct ofpact_format_params fp = {
 1004|  48.6k|        .port_map = port_map,
 1005|  48.6k|        .table_map = table_map,
 1006|  48.6k|        .s = s,
 1007|  48.6k|    };
 1008|       |
 1009|  48.6k|    if (pin->actions_len) {
  ------------------
  |  Branch (1009:9): [True: 4.17k, False: 44.4k]
  ------------------
 1010|  4.17k|        ds_put_cstr(s, " continuation.actions=");
 1011|  4.17k|        ofpacts_format(pin->actions, pin->actions_len, &fp);
 1012|  4.17k|        ds_put_char(s, '\n');
 1013|  4.17k|    }
 1014|       |
 1015|  48.6k|    if (pin->action_set_len) {
  ------------------
  |  Branch (1015:9): [True: 3.41k, False: 45.2k]
  ------------------
 1016|  3.41k|        ds_put_cstr(s, " continuation.action_set=");
 1017|  3.41k|        ofpacts_format(pin->action_set, pin->action_set_len, &fp);
 1018|  3.41k|        ds_put_char(s, '\n');
 1019|  3.41k|    }
 1020|       |
 1021|  48.6k|    if (pin->odp_port) {
  ------------------
  |  Branch (1021:9): [True: 469, False: 48.1k]
  ------------------
 1022|    469|        ds_put_format(s, " continuation.odp_port=%"PRIu32, pin->odp_port);
 1023|    469|        ds_put_char(s, '\n');
 1024|    469|    }
 1025|       |
 1026|  48.6k|    if (verbosity > 0) {
  ------------------
  |  Branch (1026:9): [True: 48.6k, False: 0]
  ------------------
 1027|  48.6k|        char *packet = ofp_packet_to_string(
 1028|  48.6k|            public->packet, public->packet_len,
 1029|  48.6k|            public->flow_metadata.flow.packet_type);
 1030|  48.6k|        ds_put_cstr(s, packet);
 1031|  48.6k|        free(packet);
 1032|  48.6k|    }
 1033|  48.6k|    if (verbosity > 2) {
  ------------------
  |  Branch (1033:9): [True: 0, False: 48.6k]
  ------------------
 1034|       |        ds_put_hex_dump(s, public->packet, public->packet_len, 0, false);
 1035|      0|    }
 1036|  48.6k|}
ofputil_packet_in_private_destroy:
 1046|  53.2k|{
 1047|  53.2k|    if (pin) {
  ------------------
  |  Branch (1047:9): [True: 53.2k, False: 0]
  ------------------
 1048|  53.2k|        free(pin->stack);
 1049|  53.2k|        free(pin->actions);
 1050|  53.2k|        free(pin->action_set);
 1051|  53.2k|    }
 1052|  53.2k|}
ofputil_decode_packet_out:
 1070|   185k|{
 1071|   185k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1072|   185k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1073|       |
 1074|   185k|    ofpbuf_clear(ofpacts);
 1075|   185k|    match_init_catchall(&po->flow_metadata);
 1076|   185k|    if (raw == OFPRAW_OFPT15_PACKET_OUT) {
  ------------------
  |  Branch (1076:9): [True: 69.7k, False: 115k]
  ------------------
 1077|  69.7k|        enum ofperr error;
 1078|  69.7k|        const struct ofp15_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1079|       |
 1080|  69.7k|        po->buffer_id = ntohl(opo->buffer_id);
 1081|  69.7k|        error = oxm_pull_match_loose(&b, true, tun_table, &po->flow_metadata);
 1082|  69.7k|        if (error) {
  ------------------
  |  Branch (1082:13): [True: 48.6k, False: 21.1k]
  ------------------
 1083|  48.6k|            return error;
 1084|  48.6k|        }
 1085|       |
 1086|  21.1k|        if (!po->flow_metadata.wc.masks.in_port.ofp_port) {
  ------------------
  |  Branch (1086:13): [True: 19.5k, False: 1.54k]
  ------------------
 1087|  19.5k|            return OFPERR_OFPBRC_BAD_PORT;
 1088|  19.5k|        }
 1089|       |
 1090|  1.54k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1091|  1.54k|                                              oh->version, NULL, NULL,
 1092|  1.54k|                                              ofpacts);
 1093|  1.54k|        if (error) {
  ------------------
  |  Branch (1093:13): [True: 311, False: 1.23k]
  ------------------
 1094|    311|            return error;
 1095|    311|        }
 1096|   115k|    } else if (raw == OFPRAW_OFPT11_PACKET_OUT) {
  ------------------
  |  Branch (1096:16): [True: 53.6k, False: 62.1k]
  ------------------
 1097|  53.6k|        enum ofperr error;
 1098|  53.6k|        ofp_port_t in_port;
 1099|  53.6k|        const struct ofp11_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1100|       |
 1101|  53.6k|        po->buffer_id = ntohl(opo->buffer_id);
 1102|  53.6k|        error = ofputil_port_from_ofp11(opo->in_port, &in_port);
 1103|  53.6k|        if (error) {
  ------------------
  |  Branch (1103:13): [True: 4.00k, False: 49.6k]
  ------------------
 1104|  4.00k|            return error;
 1105|  4.00k|        }
 1106|  49.6k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1107|  49.6k|        match_set_in_port(&po->flow_metadata, in_port);
 1108|       |
 1109|  49.6k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1110|  49.6k|                                              oh->version, NULL, NULL,
 1111|  49.6k|                                              ofpacts);
 1112|  49.6k|        if (error) {
  ------------------
  |  Branch (1112:13): [True: 36.1k, False: 13.4k]
  ------------------
 1113|  36.1k|            return error;
 1114|  36.1k|        }
 1115|  62.1k|    } else if (raw == OFPRAW_OFPT10_PACKET_OUT) {
  ------------------
  |  Branch (1115:16): [True: 62.1k, False: 0]
  ------------------
 1116|  62.1k|        enum ofperr error;
 1117|  62.1k|        const struct ofp10_packet_out *opo = ofpbuf_pull(&b, sizeof *opo);
 1118|       |
 1119|  62.1k|        po->buffer_id = ntohl(opo->buffer_id);
 1120|  62.1k|        match_set_packet_type(&po->flow_metadata, htonl(PT_ETH));
 1121|  62.1k|        match_set_in_port(&po->flow_metadata, u16_to_ofp(ntohs(opo->in_port)));
 1122|       |
 1123|  62.1k|        error = ofpacts_pull_openflow_actions(&b, ntohs(opo->actions_len),
 1124|  62.1k|                                              oh->version, NULL, NULL,
 1125|  62.1k|                                              ofpacts);
 1126|  62.1k|        if (error) {
  ------------------
  |  Branch (1126:13): [True: 52.3k, False: 9.88k]
  ------------------
 1127|  52.3k|            return error;
 1128|  52.3k|        }
 1129|  62.1k|    } else {
 1130|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1131|      0|    }
 1132|       |
 1133|  24.5k|    ofp_port_t in_port = po->flow_metadata.flow.in_port.ofp_port;
 1134|  24.5k|    if (ofp_to_u16(in_port) >= ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|  24.5k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|  24.5k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1134:9): [True: 3.33k, False: 21.2k]
  ------------------
 1135|  24.5k|        && in_port != OFPP_LOCAL
  ------------------
  |  |   46|  3.33k|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  ------------------
  |  |  |  |  157|  27.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1135:12): [True: 3.29k, False: 44]
  ------------------
 1136|  24.5k|        && in_port != OFPP_NONE
  ------------------
  |  |   47|  3.29k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  27.8k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1136:12): [True: 3.11k, False: 180]
  ------------------
 1137|  3.11k|        && in_port != OFPP_CONTROLLER) {
  ------------------
  |  |   45|  3.11k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  ------------------
  |  |  |  |  157|  3.11k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (1137:12): [True: 139, False: 2.97k]
  ------------------
 1138|    139|        VLOG_WARN_RL(&rl, "packet-out has bad input port %#"PRIx32,
  ------------------
  |  |  224|    139|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    139|    do {                                                                \
  |  |  |  |  288|    139|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    139|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 139]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    139|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 139]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1139|    139|                     po->flow_metadata.flow.in_port.ofp_port);
 1140|    139|        return OFPERR_OFPBRC_BAD_PORT;
 1141|    139|    }
 1142|       |
 1143|  24.4k|    po->ofpacts = ofpacts->data;
 1144|  24.4k|    po->ofpacts_len = ofpacts->size;
 1145|       |
 1146|  24.4k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1146:9): [True: 1.11k, False: 23.2k]
  ------------------
 1147|  1.11k|        po->packet = b.data;
 1148|  1.11k|        po->packet_len = b.size;
 1149|  23.2k|    } else {
 1150|  23.2k|        po->packet = NULL;
 1151|  23.2k|        po->packet_len = 0;
 1152|  23.2k|    }
 1153|       |
 1154|  24.4k|    return 0;
 1155|  24.5k|}
ofputil_packet_out_format:
 1243|  24.4k|{
 1244|  24.4k|    ds_put_char(s, ' ');
 1245|  24.4k|    match_format(&po->flow_metadata, port_map, s, OFP_DEFAULT_PRIORITY);
  ------------------
  |  |  138|  24.4k|#define OFP_DEFAULT_PRIORITY 0x8000
  ------------------
 1246|       |
 1247|  24.4k|    ds_put_cstr(s, " actions=");
 1248|  24.4k|    struct ofpact_format_params fp = {
 1249|  24.4k|        .port_map = port_map,
 1250|  24.4k|        .table_map = table_map,
 1251|  24.4k|        .s = s,
 1252|  24.4k|    };
 1253|  24.4k|    ofpacts_format(po->ofpacts, po->ofpacts_len, &fp);
 1254|       |
 1255|  24.4k|    if (po->buffer_id == UINT32_MAX) {
  ------------------
  |  Branch (1255:9): [True: 1.11k, False: 23.2k]
  ------------------
 1256|  1.11k|        ds_put_format(s, " data_len=%"PRIuSIZE, po->packet_len);
  ------------------
  |  |  120|  1.11k|#define PRIuSIZE "zu"
  ------------------
 1257|  1.11k|        if (verbosity > 0 && po->packet_len > 0) {
  ------------------
  |  Branch (1257:13): [True: 1.11k, False: 0]
  |  Branch (1257:30): [True: 1.02k, False: 92]
  ------------------
 1258|  1.02k|            ovs_be32 po_packet_type = po->flow_metadata.flow.packet_type;
 1259|  1.02k|            char *packet = ofp_packet_to_string(po->packet, po->packet_len,
 1260|  1.02k|                                                po_packet_type);
 1261|  1.02k|            ds_put_char(s, '\n');
 1262|  1.02k|            ds_put_cstr(s, packet);
 1263|  1.02k|            free(packet);
 1264|  1.02k|        }
 1265|  1.11k|        if (verbosity > 2) {
  ------------------
  |  Branch (1265:13): [True: 0, False: 1.11k]
  ------------------
 1266|      0|            ds_put_hex_dump(s, po->packet, po->packet_len, 0, false);
 1267|      0|        }
 1268|  23.2k|    } else {
 1269|       |        ds_put_format(s, " buffer=0x%08"PRIx32, po->buffer_id);
 1270|  23.2k|    }
 1271|  24.4k|}
ofp-packet.c:decode_nx_packet_in2:
  110|  15.2k|{
  111|  15.2k|    *total_len = 0;
  112|  15.2k|    *buffer_id = UINT32_MAX;
  113|       |
  114|  15.2k|    struct ofpbuf properties;
  115|  15.2k|    ofpbuf_use_const(&properties, oh, ntohs(oh->length));
  116|  15.2k|    ofpraw_pull_assert(&properties);
  117|       |
  118|  54.9k|    while (properties.size > 0) {
  ------------------
  |  Branch (118:12): [True: 42.1k, False: 12.8k]
  ------------------
  119|  42.1k|        struct ofpbuf payload;
  120|  42.1k|        uint64_t type;
  121|       |
  122|  42.1k|        enum ofperr error = ofpprop_pull(&properties, &payload, &type);
  123|  42.1k|        if (error) {
  ------------------
  |  Branch (123:13): [True: 2.05k, False: 40.0k]
  ------------------
  124|  2.05k|            return error;
  125|  2.05k|        }
  126|       |
  127|  40.0k|        switch (type) {
  128|  12.6k|        case NXPINT_PACKET:
  ------------------
  |  Branch (128:9): [True: 12.6k, False: 27.3k]
  ------------------
  129|  12.6k|            pin->packet = payload.msg;
  130|  12.6k|            pin->packet_len = ofpbuf_msgsize(&payload);
  131|  12.6k|            break;
  132|       |
  133|  5.97k|        case NXPINT_FULL_LEN: {
  ------------------
  |  Branch (133:9): [True: 5.97k, False: 34.0k]
  ------------------
  134|  5.97k|            uint32_t u32;
  135|  5.97k|            error = ofpprop_parse_u32(&payload, &u32);
  136|  5.97k|            if (!error) {
  ------------------
  |  Branch (136:17): [True: 5.94k, False: 34]
  ------------------
  137|  5.94k|                *total_len = u32;
  138|  5.94k|            }
  139|  5.97k|            break;
  140|      0|        }
  141|       |
  142|    654|        case NXPINT_BUFFER_ID:
  ------------------
  |  Branch (142:9): [True: 654, False: 39.4k]
  ------------------
  143|    654|            error = ofpprop_parse_u32(&payload, buffer_id);
  144|    654|            break;
  145|       |
  146|     73|        case NXPINT_TABLE_ID:
  ------------------
  |  Branch (146:9): [True: 73, False: 39.9k]
  ------------------
  147|     73|            error = ofpprop_parse_u8(&payload, &pin->table_id);
  148|     73|            break;
  149|       |
  150|    129|        case NXPINT_COOKIE:
  ------------------
  |  Branch (150:9): [True: 129, False: 39.9k]
  ------------------
  151|    129|            error = ofpprop_parse_be64(&payload, &pin->cookie);
  152|    129|            break;
  153|       |
  154|    134|        case NXPINT_REASON: {
  ------------------
  |  Branch (154:9): [True: 134, False: 39.9k]
  ------------------
  155|    134|            uint8_t reason;
  156|    134|            error = ofpprop_parse_u8(&payload, &reason);
  157|    134|            if (!error) {
  ------------------
  |  Branch (157:17): [True: 100, False: 34]
  ------------------
  158|    100|                pin->reason = reason;
  159|    100|            }
  160|    134|            break;
  161|      0|        }
  162|       |
  163|  3.07k|        case NXPINT_METADATA:
  ------------------
  |  Branch (163:9): [True: 3.07k, False: 36.9k]
  ------------------
  164|  3.07k|            error = oxm_decode_match(payload.msg, ofpbuf_msgsize(&payload),
  165|  3.07k|                                     loose, tun_table, vl_mff_map,
  166|  3.07k|                                     &pin->flow_metadata);
  167|  3.07k|            pin->flow_metadata.flow.tunnel.metadata.tab = tun_table;
  168|  3.07k|            break;
  169|       |
  170|  1.21k|        case NXPINT_USERDATA:
  ------------------
  |  Branch (170:9): [True: 1.21k, False: 38.8k]
  ------------------
  171|  1.21k|            pin->userdata = payload.msg;
  172|  1.21k|            pin->userdata_len = ofpbuf_msgsize(&payload);
  173|  1.21k|            break;
  174|       |
  175|  11.3k|        case NXPINT_CONTINUATION:
  ------------------
  |  Branch (175:9): [True: 11.3k, False: 28.6k]
  ------------------
  176|  11.3k|            if (continuation) {
  ------------------
  |  Branch (176:17): [True: 11.3k, False: 0]
  ------------------
  177|  11.3k|                error = ofpprop_parse_nested(&payload, continuation);
  178|  11.3k|            }
  179|  11.3k|            break;
  180|       |
  181|  4.72k|        default:
  ------------------
  |  Branch (181:9): [True: 4.72k, False: 35.3k]
  ------------------
  182|  4.72k|            error = OFPPROP_UNKNOWN(loose, "NX_PACKET_IN2", type);
  ------------------
  |  |  144|  4.72k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  183|  4.72k|            break;
  184|  40.0k|        }
  185|  40.0k|        if (error) {
  ------------------
  |  Branch (185:13): [True: 390, False: 39.6k]
  ------------------
  186|    390|            return error;
  187|    390|        }
  188|  40.0k|    }
  189|       |
  190|  12.8k|    if (!pin->packet_len) {
  ------------------
  |  Branch (190:9): [True: 1.29k, False: 11.5k]
  ------------------
  191|  1.29k|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 lacks packet");
  ------------------
  |  |  224|  1.29k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.29k|    do {                                                                \
  |  |  |  |  288|  1.29k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.29k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.29k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.29k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.29k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  192|  1.29k|        return OFPERR_OFPBRC_BAD_LEN;
  193|  11.5k|    } else if (!*total_len) {
  ------------------
  |  Branch (193:16): [True: 5.80k, False: 5.76k]
  ------------------
  194|  5.80k|        *total_len = pin->packet_len;
  195|  5.80k|    } else if (*total_len < pin->packet_len) {
  ------------------
  |  Branch (195:16): [True: 34, False: 5.72k]
  ------------------
  196|     34|        VLOG_WARN_RL(&rl, "NXT_PACKET_IN2 claimed full_len < len");
  ------------------
  |  |  224|     34|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     34|    do {                                                                \
  |  |  |  |  288|     34|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     34|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 34]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     34|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 34]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  197|     34|        return OFPERR_OFPBRC_BAD_LEN;
  198|     34|    }
  199|       |
  200|  11.5k|    return 0;
  201|  12.8k|}
ofp-packet.c:parse_stack_prop:
  776|  3.36k|{
  777|  3.36k|    unsigned int len = ofpbuf_msgsize(property);
  778|  3.36k|    if (len > sizeof(union mf_subvalue)) {
  ------------------
  |  Branch (778:9): [True: 67, False: 3.30k]
  ------------------
  779|     67|        VLOG_WARN_RL(&rl, "NXCPT_STACK property has bad length %u",
  ------------------
  |  |  224|     67|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     67|    do {                                                                \
  |  |  |  |  288|     67|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|     67|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 67]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     67|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 67]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  780|     67|                     len);
  781|     67|        return OFPERR_OFPBPC_BAD_LEN;
  782|     67|    }
  783|  3.30k|    nx_stack_push_bottom(stack, property->msg, len);
  784|  3.30k|    return 0;
  785|  3.36k|}
ofp-packet.c:parse_actions_property:
  790|  10.9k|{
  791|  10.9k|    if (!ofpbuf_try_pull(property, ROUND_UP(ofpbuf_headersize(property), 8))) {
  ------------------
  |  |  303|  10.9k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  10.9k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (791:9): [True: 187, False: 10.7k]
  ------------------
  792|    187|        VLOG_WARN_RL(&rl, "actions property has bad length %"PRIu32,
  ------------------
  |  |  224|    187|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    187|    do {                                                                \
  |  |  |  |  288|    187|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    187|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 187]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    187|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 187]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  793|    187|                     property->size);
  794|    187|        return OFPERR_OFPBPC_BAD_LEN;
  795|    187|    }
  796|       |
  797|  10.7k|    return ofpacts_pull_openflow_actions(property, property->size,
  798|  10.7k|                                         version, NULL, NULL, ofpacts);
  799|  10.9k|}

ofputil_port_map_get_name:
   53|   140k|{
   54|   140k|    struct namemap_node *node
   55|   140k|        = (map
  ------------------
  |  Branch (55:12): [True: 0, False: 140k]
  ------------------
   56|   140k|           ? namemap_find_by_number(&map->map, ofp_to_u16(ofp_port))
   57|   140k|           : NULL);
   58|   140k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (58:12): [True: 0, False: 140k]
  |  Branch (58:20): [True: 0, False: 0]
  ------------------
   59|   140k|}
ofputil_port_from_ofp11:
   84|   160k|{
   85|   160k|    uint32_t ofp11_port_h = ntohl(ofp11_port);
   86|       |
   87|   160k|    if (ofp11_port_h < ofp_to_u16(OFPP_MAX)) {
  ------------------
  |  |   33|   160k|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|   160k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (87:9): [True: 101k, False: 58.8k]
  ------------------
   88|   101k|        *ofp10_port = u16_to_ofp(ofp11_port_h);
   89|   101k|        return 0;
   90|   101k|    } else if (ofp11_port_h >= ofp11_to_u32(OFPP11_MAX)) {
  ------------------
  |  |   71|  58.8k|#define OFPP11_MAX    OFP11_PORT_C(0xffffff00)
  |  |  ------------------
  |  |  |  |  159|  58.8k|#define OFP11_PORT_C(X) ((OVS_FORCE ofp11_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (90:16): [True: 29.5k, False: 29.2k]
  ------------------
   91|  29.5k|        *ofp10_port = u16_to_ofp(ofp11_port_h - OFPP11_OFFSET);
  ------------------
  |  |   72|  29.5k|#define OFPP11_OFFSET 0xffff0000    /* OFPP11_MAX - OFPP_MAX */
  ------------------
   92|  29.5k|        return 0;
   93|  29.5k|    } else {
   94|  29.2k|        *ofp10_port = OFPP_NONE;
  ------------------
  |  |   47|  29.2k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  ------------------
  |  |  |  |  157|  29.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
   95|       |
   96|  29.2k|        static struct vlog_rate_limit rll = 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): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 29.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  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|        }
  ------------------
   97|  29.2k|        VLOG_WARN_RL(&rll, "port %"PRIu32" is outside the supported "
  ------------------
  |  |  224|  29.2k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  29.2k|    do {                                                                \
  |  |  |  |  288|  29.2k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  29.2k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 29.2k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  29.2k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 29.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   98|  29.2k|                     "range 0 through %d or 0x%"PRIx32" through 0x%"PRIx32,
   99|  29.2k|                     ofp11_port_h, ofp_to_u16(OFPP_MAX) - 1,
  100|  29.2k|                     ofp11_to_u32(OFPP11_MAX), UINT32_MAX);
  101|       |
  102|  29.2k|        return OFPERR_OFPBAC_BAD_OUT_PORT;
  103|  29.2k|    }
  104|   160k|}
ofputil_port_to_ofp11:
  112|  21.6k|{
  113|       |    return htonl(ofp_to_u16(ofp10_port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  Branch (113:12): [True: 4.73k, False: 16.9k]
  ------------------
  114|  21.6k|                 ? ofp_to_u16(ofp10_port)
  115|  21.6k|                 : ofp_to_u16(ofp10_port) + OFPP11_OFFSET);
  116|  21.6k|}
ofputil_port_get_reserved_name:
  229|   174k|{
  230|   174k|    switch (port) {
  231|      0|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  232|      0|        OFPUTIL_NAMED_PORTS
  ------------------
  |  |  119|  1.72k|        OFPUTIL_NAMED_PORT(IN_PORT)             \
  |  |  ------------------
  |  |  |  |  231|  1.72k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   39|  1.72k|#define OFPP_IN_PORT    OFP_PORT_C(0xfff8) /* Where the packet came in. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  1.72k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 1.72k, False: 172k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  120|  2.27k|        OFPUTIL_NAMED_PORT(TABLE)               \
  |  |  ------------------
  |  |  |  |  231|  2.27k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   40|  2.27k|#define OFPP_TABLE      OFP_PORT_C(0xfff9) /* Perform actions in flow table. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  2.27k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 2.27k, False: 171k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  121|  2.27k|        OFPUTIL_NAMED_PORT(NORMAL)              \
  |  |  ------------------
  |  |  |  |  231|    887|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|    887|#define OFPP_NORMAL     OFP_PORT_C(0xfffa) /* Process with normal L2/L3. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    887|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 887, False: 173k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  122|    887|        OFPUTIL_NAMED_PORT(FLOOD)               \
  |  |  ------------------
  |  |  |  |  231|    699|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   42|    699|#define OFPP_FLOOD      OFP_PORT_C(0xfffb) /* All ports except input port and
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    699|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 699, False: 173k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  123|    699|        OFPUTIL_NAMED_PORT(ALL)                 \
  |  |  ------------------
  |  |  |  |  231|    414|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|    414|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    414|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 414, False: 173k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  124|  10.6k|        OFPUTIL_NAMED_PORT(CONTROLLER)          \
  |  |  ------------------
  |  |  |  |  231|  10.6k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   45|  10.6k|#define OFPP_CONTROLLER OFP_PORT_C(0xfffd) /* Send to controller. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|  10.6k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 10.6k, False: 163k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  125|  10.6k|        OFPUTIL_NAMED_PORT(LOCAL)               \
  |  |  ------------------
  |  |  |  |  231|    717|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   46|    717|#define OFPP_LOCAL      OFP_PORT_C(0xfffe) /* Local openflow "port". */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    717|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 717, False: 173k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  126|  16.2k|        OFPUTIL_NAMED_PORT(ANY)                 \
  |  |  ------------------
  |  |  |  |  231|  16.2k|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   80|  16.2k|#define OFPP_ANY OFPP_NONE
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   47|  16.2k|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  |  |  157|  16.2k|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 16.2k, False: 157k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  127|  16.2k|        OFPUTIL_NAMED_PORT(UNSET)
  |  |  ------------------
  |  |  |  |  231|    102|#define OFPUTIL_NAMED_PORT(NAME) case OFPP_##NAME: return #NAME;
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    102|#define OFPP_UNSET      OFP_PORT_C(0xfff7) /* For OXM_OF_ACTSET_OUTPUT only. */
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  157|    102|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (231:34): [True: 102, False: 174k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  233|      0|#undef OFPUTIL_NAMED_PORT
  234|       |
  235|   140k|    default:
  ------------------
  |  Branch (235:5): [True: 140k, False: 33.7k]
  ------------------
  236|       |        return NULL;
  237|   174k|    }
  238|   174k|}
ofputil_format_port:
  246|   174k|{
  247|   174k|    const char *reserved_name = ofputil_port_get_reserved_name(port);
  248|   174k|    if (reserved_name) {
  ------------------
  |  Branch (248:9): [True: 33.7k, False: 140k]
  ------------------
  249|  33.7k|        ds_put_cstr(s, reserved_name);
  250|  33.7k|        return;
  251|  33.7k|    }
  252|       |
  253|   140k|    const char *port_name = ofputil_port_map_get_name(port_map, port);
  254|   140k|    if (port_name) {
  ------------------
  |  Branch (254:9): [True: 0, False: 140k]
  ------------------
  255|      0|        namemap_put_name(port_name, s);
  256|      0|        return;
  257|      0|    }
  258|       |
  259|   140k|    ds_put_format(s, "%"PRIu32, port);
  260|   140k|}
ofputil_port_config_format:
  311|  20.3k|{
  312|  20.3k|    ofp_print_bit_names(s, config, ofputil_port_config_to_name, ' ');
  313|  20.3k|    ds_put_char(s, '\n');
  314|  20.3k|}
ofputil_port_state_format:
  341|  16.7k|{
  342|  16.7k|    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|  16.7k|    stp_state = state & OFPUTIL_PS_STP_MASK;
  352|  16.7k|    if (stp_state) {
  ------------------
  |  Branch (352:9): [True: 7.57k, False: 9.17k]
  ------------------
  353|  7.57k|        ds_put_cstr(s, (stp_state == OFPUTIL_PS_STP_LEARN ? "STP_LEARN"
  ------------------
  |  Branch (353:25): [True: 2.22k, False: 5.34k]
  ------------------
  354|  7.57k|                        : stp_state == OFPUTIL_PS_STP_FORWARD ? "STP_FORWARD"
  ------------------
  |  Branch (354:27): [True: 1.29k, False: 4.05k]
  ------------------
  355|  5.34k|                        : "STP_BLOCK"));
  356|  7.57k|        state &= ~OFPUTIL_PS_STP_MASK;
  357|  7.57k|        if (state) {
  ------------------
  |  Branch (357:13): [True: 4.06k, False: 3.50k]
  ------------------
  358|  4.06k|            ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  359|  4.06k|        }
  360|  9.17k|    } else {
  361|  9.17k|        ofp_print_bit_names(s, state, ofputil_port_state_to_name, ' ');
  362|  9.17k|    }
  363|  16.7k|    ds_put_char(s, '\n');
  364|  16.7k|}
ofputil_decode_port_desc_stats_request:
  662|    618|{
  663|    618|    struct ofpbuf b = ofpbuf_const_initializer(request,
  664|    618|                                               ntohs(request->length));
  665|    618|    enum ofpraw raw = ofpraw_pull_assert(&b);
  666|    618|    if (raw == OFPRAW_OFPST10_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (666:9): [True: 270, False: 348]
  ------------------
  667|    270|        *port = OFPP_ANY;
  ------------------
  |  |   80|    270|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    270|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    270|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  668|    270|        return 0;
  669|    348|    } else if (raw == OFPRAW_OFPST15_PORT_DESC_REQUEST) {
  ------------------
  |  Branch (669:16): [True: 348, False: 0]
  ------------------
  670|    348|        ovs_be32 *ofp11_port;
  671|       |
  672|    348|        ofp11_port = ofpbuf_pull(&b, sizeof *ofp11_port);
  673|    348|        return ofputil_port_from_ofp11(*ofp11_port, port);
  674|    348|    } else {
  675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  676|      0|    }
  677|    618|}
ofputil_pull_phy_port:
  728|  23.4k|{
  729|  23.4k|    memset(pp, 0, sizeof *pp);
  730|       |
  731|  23.4k|    switch (ofp_version) {
  732|  18.0k|    case OFP10_VERSION: {
  ------------------
  |  Branch (732:5): [True: 18.0k, False: 5.40k]
  ------------------
  733|  18.0k|        const struct ofp10_phy_port *opp = ofpbuf_try_pull(b, sizeof *opp);
  734|  18.0k|        return opp ? ofputil_decode_ofp10_phy_port(pp, opp) : EOF;
  ------------------
  |  Branch (734:16): [True: 16.0k, False: 2.04k]
  ------------------
  735|      0|    }
  736|    733|    case OFP11_VERSION:
  ------------------
  |  Branch (736:5): [True: 733, False: 22.7k]
  ------------------
  737|  1.31k|    case OFP12_VERSION:
  ------------------
  |  Branch (737:5): [True: 584, False: 22.8k]
  ------------------
  738|  1.61k|    case OFP13_VERSION: {
  ------------------
  |  Branch (738:5): [True: 299, False: 23.1k]
  ------------------
  739|  1.61k|        const struct ofp11_port *op = ofpbuf_try_pull(b, sizeof *op);
  740|  1.61k|        return op ? ofputil_decode_ofp11_port(pp, op) : EOF;
  ------------------
  |  Branch (740:16): [True: 927, False: 689]
  ------------------
  741|  1.31k|    }
  742|  1.45k|    case OFP14_VERSION:
  ------------------
  |  Branch (742:5): [True: 1.45k, False: 22.0k]
  ------------------
  743|  3.78k|    case OFP15_VERSION:
  ------------------
  |  Branch (743:5): [True: 2.33k, False: 21.1k]
  ------------------
  744|  3.78k|        return b->size ? ofputil_pull_ofp14_port(pp, b) : EOF;
  ------------------
  |  Branch (744:16): [True: 2.04k, False: 1.74k]
  ------------------
  745|      0|    default:
  ------------------
  |  Branch (745:5): [True: 0, False: 23.4k]
  ------------------
  746|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  747|  23.4k|    }
  748|  23.4k|}
ofputil_phy_port_format:
  752|  16.7k|{
  753|  16.7k|    char name[sizeof port->name];
  754|  16.7k|    int j;
  755|       |
  756|  16.7k|    memcpy(name, port->name, sizeof name);
  757|  32.0k|    for (j = 0; j < sizeof name - 1; j++) {
  ------------------
  |  Branch (757:17): [True: 31.5k, False: 475]
  ------------------
  758|  31.5k|        if (!isprint((unsigned char) name[j])) {
  ------------------
  |  Branch (758:13): [True: 16.2k, False: 15.2k]
  ------------------
  759|  16.2k|            break;
  760|  16.2k|        }
  761|  31.5k|    }
  762|  16.7k|    name[j] = '\0';
  763|       |
  764|  16.7k|    ds_put_char(s, ' ');
  765|  16.7k|    ofputil_format_port(port->port_no, NULL, s);
  766|  16.7k|    ds_put_format(s, "(%s): addr:"ETH_ADDR_FMT"\n",
  767|  16.7k|                  name, ETH_ADDR_ARGS(port->hw_addr));
  ------------------
  |  |  371|  16.7k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  16.7k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  768|       |
  769|  16.7k|    ds_put_cstr(s, "     config:     ");
  770|  16.7k|    ofputil_port_config_format(s, port->config);
  771|       |
  772|  16.7k|    ds_put_cstr(s, "     state:      ");
  773|  16.7k|    ofputil_port_state_format(s, port->state);
  774|       |
  775|  16.7k|    if (port->curr) {
  ------------------
  |  Branch (775:9): [True: 13.2k, False: 3.51k]
  ------------------
  776|  13.2k|        ds_put_format(s, "     current:    ");
  777|  13.2k|        netdev_features_format(s, port->curr);
  778|  13.2k|    }
  779|  16.7k|    if (port->advertised) {
  ------------------
  |  Branch (779:9): [True: 12.6k, False: 4.05k]
  ------------------
  780|  12.6k|        ds_put_format(s, "     advertised: ");
  781|  12.6k|        netdev_features_format(s, port->advertised);
  782|  12.6k|    }
  783|  16.7k|    if (port->supported) {
  ------------------
  |  Branch (783:9): [True: 13.1k, False: 3.58k]
  ------------------
  784|  13.1k|        ds_put_format(s, "     supported:  ");
  785|  13.1k|        netdev_features_format(s, port->supported);
  786|  13.1k|    }
  787|  16.7k|    if (port->peer) {
  ------------------
  |  Branch (787:9): [True: 13.3k, False: 3.35k]
  ------------------
  788|  13.3k|        ds_put_format(s, "     peer:       ");
  789|  13.3k|        netdev_features_format(s, port->peer);
  790|  13.3k|    }
  791|  16.7k|    ds_put_format(s, "     speed: %"PRIu32" Mbps now, "
  792|  16.7k|                  "%"PRIu32" Mbps max\n",
  793|  16.7k|                  port->curr_speed / UINT32_C(1000),
  794|       |                  port->max_speed / UINT32_C(1000));
  795|  16.7k|}
ofputil_phy_ports_format:
  814|  5.60k|{
  815|  5.60k|    struct ofputil_phy_port *ports;
  816|  5.60k|    size_t allocated_ports, n_ports;
  817|  5.60k|    int retval;
  818|  5.60k|    size_t i;
  819|       |
  820|  5.60k|    ports = NULL;
  821|  5.60k|    allocated_ports = 0;
  822|  21.0k|    for (n_ports = 0; ; n_ports++) {
  823|  21.0k|        if (n_ports >= allocated_ports) {
  ------------------
  |  Branch (823:13): [True: 6.88k, False: 14.2k]
  ------------------
  824|  6.88k|            ports = x2nrealloc(ports, &allocated_ports, sizeof *ports);
  825|  6.88k|        }
  826|       |
  827|  21.0k|        retval = ofputil_pull_phy_port(ofp_version, b, &ports[n_ports]);
  828|  21.0k|        if (retval) {
  ------------------
  |  Branch (828:13): [True: 5.60k, False: 15.4k]
  ------------------
  829|  5.60k|            break;
  830|  5.60k|        }
  831|  21.0k|    }
  832|       |
  833|  5.60k|    qsort(ports, n_ports, sizeof *ports, compare_ports);
  834|  21.0k|    for (i = 0; i < n_ports; i++) {
  ------------------
  |  Branch (834:17): [True: 15.4k, False: 5.60k]
  ------------------
  835|  15.4k|        ofputil_phy_port_format(string, &ports[i]);
  836|  15.4k|    }
  837|  5.60k|    free(ports);
  838|       |
  839|  5.60k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (839:12): [True: 1.12k, False: 4.48k]
  ------------------
  840|  5.60k|}
ofputil_decode_port_status:
  849|  2.49k|{
  850|  2.49k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  851|  2.49k|    ofpraw_pull_assert(&b);
  852|       |
  853|  2.49k|    const struct ofp_port_status *ops = ofpbuf_pull(&b, sizeof *ops);
  854|  2.49k|    if (ops->reason != OFPPR_ADD &&
  ------------------
  |  Branch (854:9): [True: 1.81k, False: 684]
  ------------------
  855|  1.81k|        ops->reason != OFPPR_DELETE &&
  ------------------
  |  Branch (855:9): [True: 919, False: 893]
  ------------------
  856|    919|        ops->reason != OFPPR_MODIFY) {
  ------------------
  |  Branch (856:9): [True: 114, False: 805]
  ------------------
  857|    114|        return OFPERR_NXBRC_BAD_REASON;
  858|    114|    }
  859|  2.38k|    ps->reason = ops->reason;
  860|       |
  861|  2.38k|    int retval = ofputil_pull_phy_port(oh->version, &b, &ps->desc);
  862|  2.38k|    ovs_assert(retval != EOF);
  ------------------
  |  |   62|  2.38k|#define ovs_assert ovs_ignore
  ------------------
  863|  2.38k|    return retval;
  864|  2.49k|}
ofputil_port_status_format:
  910|  1.26k|{
  911|  1.26k|    if (ps->reason == OFPPR_ADD) {
  ------------------
  |  Branch (911:9): [True: 367, False: 901]
  ------------------
  912|    367|        ds_put_format(s, " ADD:");
  913|    901|    } else if (ps->reason == OFPPR_DELETE) {
  ------------------
  |  Branch (913:16): [True: 854, False: 47]
  ------------------
  914|    854|        ds_put_format(s, " DEL:");
  915|    854|    } else if (ps->reason == OFPPR_MODIFY) {
  ------------------
  |  Branch (915:16): [True: 47, False: 0]
  ------------------
  916|     47|        ds_put_format(s, " MOD:");
  917|     47|    }
  918|       |
  919|  1.26k|    ofputil_phy_port_format(s, &ps->desc);
  920|  1.26k|}
ofputil_decode_port_mod:
 1022|  3.23k|{
 1023|  3.23k|    memset(pm, 0, sizeof *pm);
 1024|       |
 1025|  3.23k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1026|  3.23k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1027|       |
 1028|  3.23k|    enum ofperr error;
 1029|  3.23k|    if (raw == OFPRAW_OFPT10_PORT_MOD) {
  ------------------
  |  Branch (1029:9): [True: 1.23k, False: 1.99k]
  ------------------
 1030|  1.23k|        error = ofputil_decode_ofp10_port_mod(b.data, pm);
 1031|  1.99k|    } else if (raw == OFPRAW_OFPT11_PORT_MOD) {
  ------------------
  |  Branch (1031:16): [True: 409, False: 1.58k]
  ------------------
 1032|    409|        error = ofputil_decode_ofp11_port_mod(b.data, pm);
 1033|  1.58k|    } else if (raw == OFPRAW_OFPT14_PORT_MOD) {
  ------------------
  |  Branch (1033:16): [True: 1.58k, False: 0]
  ------------------
 1034|  1.58k|        error = ofputil_decode_ofp14_port_mod(&b, loose, pm);
 1035|  1.58k|    } else {
 1036|      0|        error = OFPERR_OFPBRC_BAD_TYPE;
 1037|      0|    }
 1038|       |
 1039|  3.23k|    pm->config &= pm->mask;
 1040|  3.23k|    return error;
 1041|  3.23k|}
ofputil_port_mod_format:
 1108|  1.78k|{
 1109|  1.78k|    ds_put_cstr(s, " port: ");
 1110|  1.78k|    ofputil_format_port(pm->port_no, port_map, s);
 1111|  1.78k|    ds_put_format(s, ": addr:"ETH_ADDR_FMT"\n",
 1112|  1.78k|                  ETH_ADDR_ARGS(pm->hw_addr));
  ------------------
  |  |  371|  1.78k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  1.78k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
 1113|       |
 1114|  1.78k|    ds_put_cstr(s, "     config: ");
 1115|  1.78k|    ofputil_port_config_format(s, pm->config);
 1116|       |
 1117|  1.78k|    ds_put_cstr(s, "     mask:   ");
 1118|  1.78k|    ofputil_port_config_format(s, pm->mask);
 1119|       |
 1120|  1.78k|    ds_put_cstr(s, "     advertise: ");
 1121|  1.78k|    if (pm->advertise) {
  ------------------
  |  Branch (1121:9): [True: 1.44k, False: 336]
  ------------------
 1122|  1.44k|        netdev_features_format(s, pm->advertise);
 1123|  1.44k|    } else {
 1124|    336|        ds_put_cstr(s, "UNCHANGED\n");
 1125|    336|    }
 1126|  1.78k|}
ofputil_count_port_stats:
 1606|  6.96k|{
 1607|  6.96k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1608|  6.96k|    ofpraw_pull_assert(&b);
 1609|       |
 1610|  14.6k|    for (size_t n = 0; ; n++) {
 1611|  14.6k|        struct ofputil_port_stats ps;
 1612|  14.6k|        if (ofputil_decode_port_stats(&ps, &b)) {
  ------------------
  |  Branch (1612:13): [True: 6.96k, False: 7.71k]
  ------------------
 1613|  6.96k|            return n;
 1614|  6.96k|        }
 1615|  7.71k|        netdev_free_custom_stats_counters(&ps.custom_stats);
 1616|  7.71k|    }
 1617|  6.96k|}
ofputil_decode_port_stats:
 1634|  29.3k|{
 1635|  29.3k|    enum ofperr error;
 1636|  29.3k|    enum ofpraw raw;
 1637|       |
 1638|  29.3k|    memset(&(ps->stats), 0xFF, sizeof (ps->stats));
 1639|  29.3k|    memset(&(ps->custom_stats), 0, sizeof (ps->custom_stats));
 1640|       |
 1641|  29.3k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (1641:14): [True: 22.3k, False: 6.96k]
  ------------------
 1642|  29.3k|             : ofpraw_pull(&raw, msg));
 1643|  29.3k|    if (error) {
  ------------------
  |  Branch (1643:9): [True: 0, False: 29.3k]
  ------------------
 1644|      0|        return error;
 1645|      0|    }
 1646|       |
 1647|  29.3k|    if (!msg->size) {
  ------------------
  |  Branch (1647:9): [True: 7.43k, False: 21.9k]
  ------------------
 1648|  7.43k|        return EOF;
 1649|  21.9k|    } else if (raw == OFPRAW_OFPST14_PORT_REPLY) {
  ------------------
  |  Branch (1649:16): [True: 10.8k, False: 11.1k]
  ------------------
 1650|  10.8k|        return ofputil_pull_ofp14_port_stats(ps, msg);
 1651|  11.1k|    } else if (raw == OFPRAW_OFPST13_PORT_REPLY) {
  ------------------
  |  Branch (1651:16): [True: 2.65k, False: 8.46k]
  ------------------
 1652|  2.65k|        const struct ofp13_port_stats *ps13;
 1653|  2.65k|        ps13 = ofpbuf_try_pull(msg, sizeof *ps13);
 1654|  2.65k|        if (!ps13) {
  ------------------
  |  Branch (1654:13): [True: 0, False: 2.65k]
  ------------------
 1655|      0|            goto bad_len;
 1656|      0|        }
 1657|  2.65k|        return ofputil_port_stats_from_ofp13(ps, ps13);
 1658|  8.46k|    } else if (raw == OFPRAW_OFPST11_PORT_REPLY) {
  ------------------
  |  Branch (1658:16): [True: 400, False: 8.06k]
  ------------------
 1659|    400|        const struct ofp11_port_stats *ps11;
 1660|       |
 1661|    400|        ps11 = ofpbuf_try_pull(msg, sizeof *ps11);
 1662|    400|        if (!ps11) {
  ------------------
  |  Branch (1662:13): [True: 0, False: 400]
  ------------------
 1663|      0|            goto bad_len;
 1664|      0|        }
 1665|    400|        return ofputil_port_stats_from_ofp11(ps, ps11);
 1666|  8.06k|    } else if (raw == OFPRAW_OFPST10_PORT_REPLY) {
  ------------------
  |  Branch (1666:16): [True: 8.06k, False: 0]
  ------------------
 1667|  8.06k|        const struct ofp10_port_stats *ps10;
 1668|       |
 1669|  8.06k|        ps10 = ofpbuf_try_pull(msg, sizeof *ps10);
 1670|  8.06k|        if (!ps10) {
  ------------------
  |  Branch (1670:13): [True: 0, False: 8.06k]
  ------------------
 1671|      0|            goto bad_len;
 1672|      0|        }
 1673|  8.06k|        return ofputil_port_stats_from_ofp10(ps, ps10);
 1674|  8.06k|    } else {
 1675|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      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 "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1680|      0|                 "bytes at end", msg->size);
 1681|      0|    return OFPERR_OFPBRC_BAD_LEN;
 1682|  29.3k|}
ofputil_format_port_stats:
 1712|  7.71k|{
 1713|  7.71k|    ds_put_cstr(string, "  port ");
 1714|  7.71k|    if (ofp_to_u16(ps->port_no) < 10) {
  ------------------
  |  Branch (1714:9): [True: 755, False: 6.95k]
  ------------------
 1715|    755|        ds_put_char(string, ' ');
 1716|    755|    }
 1717|  7.71k|    ofputil_format_port(ps->port_no, port_map, string);
 1718|       |
 1719|  7.71k|    ds_put_cstr(string, ": rx ");
 1720|  7.71k|    print_port_stat(string, "pkts=", ps->stats.rx_packets, 1);
 1721|  7.71k|    print_port_stat(string, "bytes=", ps->stats.rx_bytes, 1);
 1722|  7.71k|    print_port_stat(string, "drop=", ps->stats.rx_dropped, 1);
 1723|  7.71k|    print_port_stat(string, "errs=", ps->stats.rx_errors, 1);
 1724|  7.71k|    print_port_stat(string, "frame=", ps->stats.rx_frame_errors, 1);
 1725|  7.71k|    print_port_stat(string, "over=", ps->stats.rx_over_errors, 1);
 1726|  7.71k|    print_port_stat(string, "crc=", ps->stats.rx_crc_errors, 0);
 1727|       |
 1728|  7.71k|    ds_put_cstr(string, "           tx ");
 1729|  7.71k|    print_port_stat(string, "pkts=", ps->stats.tx_packets, 1);
 1730|  7.71k|    print_port_stat(string, "bytes=", ps->stats.tx_bytes, 1);
 1731|  7.71k|    print_port_stat(string, "drop=", ps->stats.tx_dropped, 1);
 1732|  7.71k|    print_port_stat(string, "errs=", ps->stats.tx_errors, 1);
 1733|  7.71k|    print_port_stat(string, "coll=", ps->stats.collisions, 0);
 1734|       |
 1735|  7.71k|    if (ps->duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (1735:9): [True: 3.00k, False: 4.71k]
  ------------------
 1736|  3.00k|        ds_put_cstr(string, "           duration=");
 1737|  3.00k|        ofp_print_duration(string, ps->duration_sec, ps->duration_nsec);
 1738|  3.00k|        ds_put_char(string, '\n');
 1739|  3.00k|    }
 1740|  7.71k|    struct ds string_ext_stats = DS_EMPTY_INITIALIZER;
  ------------------
  |  |   46|  7.71k|#define DS_EMPTY_INITIALIZER { NULL, 0, 0 }
  ------------------
 1741|       |
 1742|  7.71k|    ds_init(&string_ext_stats);
 1743|       |
 1744|  7.71k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1745|  7.71k|                         ps->stats.rx_1_to_64_packets);
 1746|  7.71k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1747|  7.71k|                         ps->stats.rx_65_to_127_packets);
 1748|  7.71k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1749|  7.71k|                         ps->stats.rx_128_to_255_packets);
 1750|  7.71k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1751|  7.71k|                         ps->stats.rx_256_to_511_packets);
 1752|  7.71k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1753|  7.71k|                         ps->stats.rx_512_to_1023_packets);
 1754|  7.71k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1755|  7.71k|                         ps->stats.rx_1024_to_1522_packets);
 1756|  7.71k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1757|  7.71k|                         ps->stats.rx_1523_to_max_packets);
 1758|  7.71k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1759|  7.71k|                         ps->stats.rx_broadcast_packets);
 1760|  7.71k|    print_port_stat_cond(&string_ext_stats, "undersized_errors=",
 1761|  7.71k|                         ps->stats.rx_undersized_errors);
 1762|  7.71k|    print_port_stat_cond(&string_ext_stats, "oversize_errors=",
 1763|  7.71k|                         ps->stats.rx_oversize_errors);
 1764|  7.71k|    print_port_stat_cond(&string_ext_stats, "rx_fragmented_errors=",
 1765|  7.71k|                         ps->stats.rx_fragmented_errors);
 1766|  7.71k|    print_port_stat_cond(&string_ext_stats, "rx_jabber_errors=",
 1767|  7.71k|                         ps->stats.rx_jabber_errors);
 1768|       |
 1769|  7.71k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1769:9): [True: 0, False: 7.71k]
  ------------------
 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|  7.71k|    ds_init(&string_ext_stats);
 1779|       |
 1780|  7.71k|    print_port_stat_cond(&string_ext_stats, "1_to_64_packets=",
 1781|  7.71k|                         ps->stats.tx_1_to_64_packets);
 1782|  7.71k|    print_port_stat_cond(&string_ext_stats, "65_to_127_packets=",
 1783|  7.71k|                         ps->stats.tx_65_to_127_packets);
 1784|  7.71k|    print_port_stat_cond(&string_ext_stats, "128_to_255_packets=",
 1785|  7.71k|                         ps->stats.tx_128_to_255_packets);
 1786|  7.71k|    print_port_stat_cond(&string_ext_stats, "256_to_511_packets=",
 1787|  7.71k|                         ps->stats.tx_256_to_511_packets);
 1788|  7.71k|    print_port_stat_cond(&string_ext_stats, "512_to_1023_packets=",
 1789|  7.71k|                         ps->stats.tx_512_to_1023_packets);
 1790|  7.71k|    print_port_stat_cond(&string_ext_stats, "1024_to_1522_packets=",
 1791|  7.71k|                         ps->stats.tx_1024_to_1522_packets);
 1792|  7.71k|    print_port_stat_cond(&string_ext_stats, "1523_to_max_packets=",
 1793|  7.71k|                         ps->stats.tx_1523_to_max_packets);
 1794|  7.71k|    print_port_stat_cond(&string_ext_stats, "multicast_packets=",
 1795|  7.71k|                         ps->stats.tx_multicast_packets);
 1796|  7.71k|    print_port_stat_cond(&string_ext_stats, "broadcast_packets=",
 1797|  7.71k|                         ps->stats.tx_broadcast_packets);
 1798|       |
 1799|  7.71k|    if (string_ext_stats.length != 0) {
  ------------------
  |  Branch (1799:9): [True: 0, False: 7.71k]
  ------------------
 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|  7.71k|    if (ps->custom_stats.size) {
  ------------------
  |  Branch (1808:9): [True: 858, False: 6.85k]
  ------------------
 1809|    858|        ds_put_cstr(string, "           CUSTOM Statistics");
 1810|  9.27k|        for (int i = 0; i < ps->custom_stats.size; i++) {
  ------------------
  |  Branch (1810:25): [True: 8.41k, False: 858]
  ------------------
 1811|       |            /* 3 counters in the row */
 1812|  8.41k|            if (ps->custom_stats.counters[i].name[0]) {
  ------------------
  |  Branch (1812:17): [True: 3.97k, False: 4.44k]
  ------------------
 1813|  3.97k|                if (i % 3 == 0) {
  ------------------
  |  Branch (1813:21): [True: 1.43k, False: 2.54k]
  ------------------
 1814|  1.43k|                    ds_put_cstr(string, "\n");
 1815|  1.43k|                    ds_put_cstr(string, "                      ");
 1816|  2.54k|                } else {
 1817|  2.54k|                    ds_put_char(string, ' ');
 1818|  2.54k|                }
 1819|  3.97k|                ds_put_format(string, "%s=%"PRIu64",",
 1820|  3.97k|                              ps->custom_stats.counters[i].name,
 1821|  3.97k|                              ps->custom_stats.counters[i].value);
 1822|  3.97k|            }
 1823|  8.41k|        }
 1824|    858|        ds_put_cstr(string, "\n");
 1825|    858|    }
 1826|  7.71k|}
ofputil_decode_port_stats_request:
 1835|  1.28k|{
 1836|  1.28k|    switch ((enum ofp_version)request->version) {
 1837|    278|    case OFP15_VERSION:
  ------------------
  |  Branch (1837:5): [True: 278, False: 1.00k]
  ------------------
 1838|    445|    case OFP14_VERSION:
  ------------------
  |  Branch (1838:5): [True: 167, False: 1.11k]
  ------------------
 1839|    487|    case OFP13_VERSION:
  ------------------
  |  Branch (1839:5): [True: 42, False: 1.24k]
  ------------------
 1840|    704|    case OFP12_VERSION:
  ------------------
  |  Branch (1840:5): [True: 217, False: 1.06k]
  ------------------
 1841|  1.08k|    case OFP11_VERSION: {
  ------------------
  |  Branch (1841:5): [True: 381, False: 902]
  ------------------
 1842|  1.08k|        const struct ofp11_port_stats_request *psr11 = ofpmsg_body(request);
 1843|  1.08k|        return ofputil_port_from_ofp11(psr11->port_no, ofp10_port);
 1844|    704|    }
 1845|       |
 1846|    198|    case OFP10_VERSION: {
  ------------------
  |  Branch (1846:5): [True: 198, False: 1.08k]
  ------------------
 1847|    198|        const struct ofp10_port_stats_request *psr10 = ofpmsg_body(request);
 1848|    198|        *ofp10_port = u16_to_ofp(ntohs(psr10->port_no));
 1849|    198|        return 0;
 1850|    704|    }
 1851|       |
 1852|      0|    default:
  ------------------
  |  Branch (1852:5): [True: 0, False: 1.28k]
  ------------------
 1853|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 1854|  1.28k|    }
 1855|  1.28k|}
ofp-port.c:ofputil_port_config_to_name:
  293|  56.1k|{
  294|  56.1k|    enum ofputil_port_config pc = bit;
  295|       |
  296|  56.1k|    switch (pc) {
  ------------------
  |  Branch (296:13): [True: 56.1k, False: 0]
  ------------------
  297|  8.56k|    case OFPUTIL_PC_PORT_DOWN:    return "PORT_DOWN";
  ------------------
  |  Branch (297:5): [True: 8.56k, False: 47.5k]
  ------------------
  298|  7.35k|    case OFPUTIL_PC_NO_STP:       return "NO_STP";
  ------------------
  |  Branch (298:5): [True: 7.35k, False: 48.8k]
  ------------------
  299|  8.14k|    case OFPUTIL_PC_NO_RECV:      return "NO_RECV";
  ------------------
  |  Branch (299:5): [True: 8.14k, False: 48.0k]
  ------------------
  300|  8.59k|    case OFPUTIL_PC_NO_RECV_STP:  return "NO_RECV_STP";
  ------------------
  |  Branch (300:5): [True: 8.59k, False: 47.5k]
  ------------------
  301|  6.94k|    case OFPUTIL_PC_NO_FLOOD:     return "NO_FLOOD";
  ------------------
  |  Branch (301:5): [True: 6.94k, False: 49.2k]
  ------------------
  302|  8.22k|    case OFPUTIL_PC_NO_FWD:       return "NO_FWD";
  ------------------
  |  Branch (302:5): [True: 8.22k, False: 47.9k]
  ------------------
  303|  8.32k|    case OFPUTIL_PC_NO_PACKET_IN: return "NO_PACKET_IN";
  ------------------
  |  Branch (303:5): [True: 8.32k, False: 47.8k]
  ------------------
  304|  56.1k|    }
  305|       |
  306|      0|    return NULL;
  307|  56.1k|}
ofp-port.c:ofputil_port_state_to_name:
  320|  6.84k|{
  321|  6.84k|    enum ofputil_port_state ps = bit;
  322|       |
  323|  6.84k|    switch (ps) {
  ------------------
  |  Branch (323:13): [True: 6.84k, False: 0]
  ------------------
  324|  6.18k|    case OFPUTIL_PS_LINK_DOWN: return "LINK_DOWN";
  ------------------
  |  Branch (324:5): [True: 6.18k, False: 667]
  ------------------
  325|    308|    case OFPUTIL_PS_BLOCKED:   return "BLOCKED";
  ------------------
  |  Branch (325:5): [True: 308, False: 6.53k]
  ------------------
  326|    359|    case OFPUTIL_PS_LIVE:      return "LIVE";
  ------------------
  |  Branch (326:5): [True: 359, False: 6.48k]
  ------------------
  327|       |
  328|      0|    case OFPUTIL_PS_STP_LISTEN:
  ------------------
  |  Branch (328:5): [True: 0, False: 6.84k]
  ------------------
  329|      0|    case OFPUTIL_PS_STP_LEARN:
  ------------------
  |  Branch (329:5): [True: 0, False: 6.84k]
  ------------------
  330|      0|    case OFPUTIL_PS_STP_FORWARD:
  ------------------
  |  Branch (330:5): [True: 0, False: 6.84k]
  ------------------
  331|      0|    case OFPUTIL_PS_STP_BLOCK:
  ------------------
  |  Branch (331:5): [True: 0, False: 6.84k]
  ------------------
  332|       |        /* Handled elsewhere. */
  333|      0|        return NULL;
  334|  6.84k|    }
  335|       |
  336|      0|    return NULL;
  337|  6.84k|}
ofp-port.c:ofputil_decode_ofp10_phy_port:
  429|  16.0k|{
  430|  16.0k|    pp->port_no = u16_to_ofp(ntohs(opp->port_no));
  431|  16.0k|    pp->hw_addr = opp->hw_addr;
  432|  16.0k|    ovs_strlcpy_arrays(pp->name, opp->name);
  ------------------
  |  |  209|  16.0k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  16.0k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 16.0k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  433|       |
  434|  16.0k|    pp->config = ntohl(opp->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  16.0k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  16.0k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  16.0k|                     OFPPC_NO_PACKET_IN)
  ------------------
  435|  16.0k|    pp->state = ntohl(opp->state) & OFPPS10_ALL;
  ------------------
  |  |   84|  16.0k|#define OFPPS10_ALL (OFPPS_LINK_DOWN | OFPPS10_STP_MASK)
  ------------------
  436|       |
  437|  16.0k|    pp->curr = netdev_port_features_from_ofp10(opp->curr);
  438|  16.0k|    pp->advertised = netdev_port_features_from_ofp10(opp->advertised);
  439|  16.0k|    pp->supported = netdev_port_features_from_ofp10(opp->supported);
  440|  16.0k|    pp->peer = netdev_port_features_from_ofp10(opp->peer);
  441|       |
  442|  16.0k|    pp->curr_speed = netdev_features_to_bps(pp->curr, 0) / 1000;
  443|  16.0k|    pp->max_speed = netdev_features_to_bps(pp->supported, 0) / 1000;
  444|       |
  445|  16.0k|    return 0;
  446|  16.0k|}
ofp-port.c:netdev_port_features_from_ofp10:
  386|  65.3k|{
  387|       |    uint32_t ofp10 = ntohl(ofp10_);
  388|  65.3k|    return (ofp10 & 0x7f) | ((ofp10 & 0xf80) << 4);
  389|  65.3k|}
ofp-port.c:ofputil_decode_ofp11_port:
  451|    927|{
  452|    927|    enum ofperr error;
  453|       |
  454|    927|    error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  455|    927|    if (error) {
  ------------------
  |  Branch (455:9): [True: 326, False: 601]
  ------------------
  456|    326|        return error;
  457|    326|    }
  458|    601|    pp->hw_addr = op->hw_addr;
  459|    601|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|    601|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|    601|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 601]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  460|       |
  461|    601|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    601|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  462|    601|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|    601|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  463|       |
  464|    601|    pp->curr = netdev_port_features_from_ofp11(op->curr);
  465|    601|    pp->advertised = netdev_port_features_from_ofp11(op->advertised);
  466|    601|    pp->supported = netdev_port_features_from_ofp11(op->supported);
  467|    601|    pp->peer = netdev_port_features_from_ofp11(op->peer);
  468|       |
  469|    601|    pp->curr_speed = ntohl(op->curr_speed);
  470|    601|    pp->max_speed = ntohl(op->max_speed);
  471|       |
  472|    601|    return 0;
  473|    927|}
ofp-port.c:netdev_port_features_from_ofp11:
  416|  2.88k|{
  417|       |    return ntohl(ofp11) & 0xffff;
  418|  2.88k|}
ofp-port.c:ofputil_pull_ofp14_port:
  531|  2.04k|{
  532|  2.04k|    const struct ofp14_port *op = ofpbuf_try_pull(msg, sizeof *op);
  533|  2.04k|    if (!op) {
  ------------------
  |  Branch (533:9): [True: 68, False: 1.97k]
  ------------------
  534|     68|        return OFPERR_OFPBRC_BAD_LEN;
  535|     68|    }
  536|       |
  537|  1.97k|    size_t len = ntohs(op->length);
  538|  1.97k|    if (len < sizeof *op || len - sizeof *op > msg->size) {
  ------------------
  |  Branch (538:9): [True: 247, False: 1.72k]
  |  Branch (538:29): [True: 812, False: 915]
  ------------------
  539|  1.05k|        return OFPERR_OFPBRC_BAD_LEN;
  540|  1.05k|    }
  541|    915|    len -= sizeof *op;
  542|       |
  543|    915|    enum ofperr error = ofputil_port_from_ofp11(op->port_no, &pp->port_no);
  544|    915|    if (error) {
  ------------------
  |  Branch (544:9): [True: 102, False: 813]
  ------------------
  545|    102|        return error;
  546|    102|    }
  547|    813|    pp->hw_addr = op->hw_addr;
  548|    813|    ovs_strlcpy_arrays(pp->name, op->name);
  ------------------
  |  |  209|    813|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|    813|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 813]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  549|       |
  550|    813|    pp->config = ntohl(op->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    813|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  551|    813|    pp->state = ntohl(op->state) & OFPPS11_ALL;
  ------------------
  |  |   92|    813|#define OFPPS11_ALL (OFPPS_LINK_DOWN | OFPPS11_BLOCKED | OFPPS11_LIVE)
  ------------------
  552|       |
  553|    813|    return ofputil_pull_ofp14_port_properties(ofpbuf_pull(msg, len), len, pp);
  554|    915|}
ofp-port.c:ofputil_pull_ofp14_port_properties:
  499|    813|{
  500|    813|    struct ofpbuf properties = ofpbuf_const_initializer(props, len);
  501|  1.68k|    while (properties.size > 0) {
  ------------------
  |  Branch (501:12): [True: 1.55k, False: 127]
  ------------------
  502|  1.55k|        struct ofpbuf payload;
  503|  1.55k|        enum ofperr error;
  504|  1.55k|        uint64_t type;
  505|       |
  506|  1.55k|        error = ofpprop_pull(&properties, &payload, &type);
  507|  1.55k|        if (error) {
  ------------------
  |  Branch (507:13): [True: 151, False: 1.40k]
  ------------------
  508|    151|            return error;
  509|    151|        }
  510|       |
  511|  1.40k|        switch (type) {
  512|    546|        case OFPPDPT14_ETHERNET:
  ------------------
  |  Branch (512:9): [True: 546, False: 861]
  ------------------
  513|    546|            error = parse_ofp14_port_ethernet_property(&payload, pp);
  514|    546|            break;
  515|       |
  516|    861|        default:
  ------------------
  |  Branch (516:9): [True: 861, False: 546]
  ------------------
  517|    861|            error = OFPPROP_UNKNOWN(true, "port", type);
  ------------------
  |  |  144|    861|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  518|    861|            break;
  519|  1.40k|        }
  520|       |
  521|  1.40k|        if (error) {
  ------------------
  |  Branch (521:13): [True: 535, False: 872]
  ------------------
  522|    535|            return error;
  523|    535|        }
  524|  1.40k|    }
  525|       |
  526|    127|    return 0;
  527|    813|}
ofp-port.c:parse_ofp14_port_ethernet_property:
  478|    546|{
  479|    546|    struct ofp14_port_desc_prop_ethernet *eth = payload->data;
  480|       |
  481|    546|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (481:9): [True: 535, False: 11]
  ------------------
  482|    535|        return OFPERR_OFPBPC_BAD_LEN;
  483|    535|    }
  484|       |
  485|     11|    pp->curr = netdev_port_features_from_ofp11(eth->curr);
  486|     11|    pp->advertised = netdev_port_features_from_ofp11(eth->advertised);
  487|     11|    pp->supported = netdev_port_features_from_ofp11(eth->supported);
  488|     11|    pp->peer = netdev_port_features_from_ofp11(eth->peer);
  489|       |
  490|     11|    pp->curr_speed = ntohl(eth->curr_speed);
  491|     11|    pp->max_speed = ntohl(eth->max_speed);
  492|       |
  493|     11|    return 0;
  494|    546|}
ofp-port.c:compare_ports:
  800|   102k|{
  801|   102k|    const struct ofputil_phy_port *a = a_;
  802|   102k|    const struct ofputil_phy_port *b = b_;
  803|   102k|    uint16_t ap = ofp_to_u16(a->port_no);
  804|   102k|    uint16_t bp = ofp_to_u16(b->port_no);
  805|       |
  806|   102k|    return ap < bp ? -1 : ap > bp;
  ------------------
  |  Branch (806:12): [True: 22.7k, False: 79.4k]
  ------------------
  807|   102k|}
ofp-port.c:ofputil_decode_ofp10_port_mod:
  941|  1.23k|{
  942|  1.23k|    pm->port_no = u16_to_ofp(ntohs(opm->port_no));
  943|  1.23k|    pm->hw_addr = opm->hw_addr;
  944|  1.23k|    pm->config = ntohl(opm->config) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.23k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.23k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.23k|                     OFPPC_NO_PACKET_IN)
  ------------------
  945|  1.23k|    pm->mask = ntohl(opm->mask) & OFPPC10_ALL;
  ------------------
  |  |   65|  1.23k|#define OFPPC10_ALL (OFPPC_PORT_DOWN | OFPPC10_NO_STP | OFPPC_NO_RECV | \
  |  |   66|  1.23k|                     OFPPC10_NO_RECV_STP | OFPPC10_NO_FLOOD | OFPPC_NO_FWD | \
  |  |   67|  1.23k|                     OFPPC_NO_PACKET_IN)
  ------------------
  946|  1.23k|    pm->advertise = netdev_port_features_from_ofp10(opm->advertise);
  947|  1.23k|    return 0;
  948|  1.23k|}
ofp-port.c:ofputil_decode_ofp11_port_mod:
  953|    409|{
  954|    409|    enum ofperr error;
  955|       |
  956|    409|    error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
  957|    409|    if (error) {
  ------------------
  |  Branch (957:9): [True: 76, False: 333]
  ------------------
  958|     76|        return error;
  959|     76|    }
  960|       |
  961|    333|    pm->hw_addr = opm->hw_addr;
  962|    333|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|    333|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  963|    333|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|    333|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
  964|    333|    pm->advertise = netdev_port_features_from_ofp11(opm->advertise);
  965|       |
  966|    333|    return 0;
  967|    409|}
ofp-port.c:ofputil_decode_ofp14_port_mod:
 1003|  1.58k|{
 1004|  1.58k|    const struct ofp14_port_mod *opm = ofpbuf_pull(b, sizeof *opm);
 1005|  1.58k|    enum ofperr error = ofputil_port_from_ofp11(opm->port_no, &pm->port_no);
 1006|  1.58k|    if (error) {
  ------------------
  |  Branch (1006:9): [True: 561, False: 1.02k]
  ------------------
 1007|    561|        return error;
 1008|    561|    }
 1009|       |
 1010|  1.02k|    pm->hw_addr = opm->hw_addr;
 1011|  1.02k|    pm->config = ntohl(opm->config) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.02k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1012|  1.02k|    pm->mask = ntohl(opm->mask) & OFPPC11_ALL;
  ------------------
  |  |   84|  1.02k|    (OFPPC_PORT_DOWN | OFPPC_NO_RECV | OFPPC_NO_FWD | OFPPC_NO_PACKET_IN)
  ------------------
 1013|       |
 1014|  1.02k|    return ofputil_decode_ofp14_port_mod_properties(b, loose, pm);
 1015|  1.58k|}
ofp-port.c:ofputil_decode_ofp14_port_mod_properties:
  972|  1.02k|{
  973|  1.49k|    while (b->size > 0) {
  ------------------
  |  Branch (973:12): [True: 1.28k, False: 214]
  ------------------
  974|  1.28k|        struct ofpbuf property;
  975|  1.28k|        enum ofperr error;
  976|  1.28k|        uint64_t type;
  977|       |
  978|  1.28k|        error = ofpprop_pull(b, &property, &type);
  979|  1.28k|        if (error) {
  ------------------
  |  Branch (979:13): [True: 778, False: 504]
  ------------------
  980|    778|            return error;
  981|    778|        }
  982|       |
  983|    504|        switch (type) {
  984|    140|        case OFPPMPT14_ETHERNET:
  ------------------
  |  Branch (984:9): [True: 140, False: 364]
  ------------------
  985|    140|            error = parse_port_mod_ethernet_property(&property, pm);
  986|    140|            break;
  987|       |
  988|    364|        default:
  ------------------
  |  Branch (988:9): [True: 364, False: 140]
  ------------------
  989|    364|            error = OFPPROP_UNKNOWN(loose, "port_mod", type);
  ------------------
  |  |  144|    364|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  990|    364|            break;
  991|    504|        }
  992|       |
  993|    504|        if (error) {
  ------------------
  |  Branch (993:13): [True: 34, False: 470]
  ------------------
  994|     34|            return error;
  995|     34|        }
  996|    504|    }
  997|    214|    return 0;
  998|  1.02k|}
ofp-port.c:parse_port_mod_ethernet_property:
  927|    140|{
  928|    140|    ovs_be32 advertise;
  929|    140|    enum ofperr error;
  930|       |
  931|    140|    error = ofpprop_parse_be32(property, &advertise);
  932|    140|    if (!error) {
  ------------------
  |  Branch (932:9): [True: 106, False: 34]
  ------------------
  933|    106|        pm->advertise = netdev_port_features_from_ofp11(advertise);
  934|    106|    }
  935|    140|    return error;
  936|    140|}
ofp-port.c:ofputil_pull_ofp14_port_stats:
 1538|  10.8k|{
 1539|  10.8k|    const struct ofp14_port_stats *ps14 = ofpbuf_try_pull(msg, sizeof *ps14);
 1540|  10.8k|    if (!ps14) {
  ------------------
  |  Branch (1540:9): [True: 510, False: 10.3k]
  ------------------
 1541|    510|        return OFPERR_OFPBRC_BAD_LEN;
 1542|    510|    }
 1543|       |
 1544|  10.3k|    size_t len = ntohs(ps14->length);
 1545|  10.3k|    if (len < sizeof *ps14 || len - sizeof *ps14 > msg->size) {
  ------------------
  |  Branch (1545:9): [True: 466, False: 9.83k]
  |  Branch (1545:31): [True: 318, False: 9.52k]
  ------------------
 1546|    784|        return OFPERR_OFPBRC_BAD_LEN;
 1547|    784|    }
 1548|  9.52k|    len -= sizeof *ps14;
 1549|       |
 1550|  9.52k|    enum ofperr error = ofputil_port_from_ofp11(ps14->port_no, &ops->port_no);
 1551|  9.52k|    if (error) {
  ------------------
  |  Branch (1551:9): [True: 946, False: 8.57k]
  ------------------
 1552|    946|        return error;
 1553|    946|    }
 1554|       |
 1555|  8.57k|    ops->duration_sec = ntohl(ps14->duration_sec);
 1556|  8.57k|    ops->duration_nsec = ntohl(ps14->duration_nsec);
 1557|  8.57k|    ops->stats.rx_packets = ntohll(ps14->rx_packets);
 1558|  8.57k|    ops->stats.tx_packets = ntohll(ps14->tx_packets);
 1559|  8.57k|    ops->stats.rx_bytes = ntohll(ps14->rx_bytes);
 1560|  8.57k|    ops->stats.tx_bytes = ntohll(ps14->tx_bytes);
 1561|  8.57k|    ops->stats.rx_dropped = ntohll(ps14->rx_dropped);
 1562|  8.57k|    ops->stats.tx_dropped = ntohll(ps14->tx_dropped);
 1563|  8.57k|    ops->stats.rx_errors = ntohll(ps14->rx_errors);
 1564|  8.57k|    ops->stats.tx_errors = ntohll(ps14->tx_errors);
 1565|       |
 1566|       |
 1567|  8.57k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
 1568|  8.57k|                                                        len);
 1569|  11.5k|    while (properties.size > 0) {
  ------------------
  |  Branch (1569:12): [True: 6.79k, False: 4.76k]
  ------------------
 1570|  6.79k|        struct ofpbuf payload;
 1571|  6.79k|        uint64_t type = 0;
 1572|       |
 1573|  6.79k|        error = ofpprop_pull(&properties, &payload, &type);
 1574|  6.79k|        if (error) {
  ------------------
  |  Branch (1574:13): [True: 1.08k, False: 5.71k]
  ------------------
 1575|  1.08k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1576|  1.08k|            return error;
 1577|  1.08k|        }
 1578|  5.71k|        switch (type) {
 1579|    162|        case OFPPSPT14_ETHERNET:
  ------------------
  |  Branch (1579:9): [True: 162, False: 5.55k]
  ------------------
 1580|    162|            error = parse_ofp14_port_stats_ethernet_property(&payload, ops);
 1581|    162|            break;
 1582|     20|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_RFC2819):
  ------------------
  |  |   67|     20|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1582:9): [True: 20, False: 5.69k]
  ------------------
 1583|     20|            error = parse_intel_port_stats_rfc2819_property(&payload, ops);
 1584|     20|            break;
 1585|  4.36k|        case OFPPROP_EXP(INTEL_VENDOR_ID, INTEL_PORT_STATS_CUSTOM):
  ------------------
  |  |   67|  4.36k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  |  Branch (1585:9): [True: 4.36k, False: 1.35k]
  ------------------
 1586|  4.36k|            error = parse_intel_port_custom_property(&payload, ops);
 1587|  4.36k|            break;
 1588|  1.16k|        default:
  ------------------
  |  Branch (1588:9): [True: 1.16k, False: 4.54k]
  ------------------
 1589|  1.16k|            error = OFPPROP_UNKNOWN(true, "port stats", type);
  ------------------
  |  |  144|  1.16k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
 1590|  1.16k|            break;
 1591|  5.71k|        }
 1592|       |
 1593|  5.71k|        if (error) {
  ------------------
  |  Branch (1593:13): [True: 2.72k, False: 2.98k]
  ------------------
 1594|  2.72k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1595|  2.72k|            return error;
 1596|  2.72k|        }
 1597|  5.71k|    }
 1598|       |
 1599|  4.76k|    return 0;
 1600|  8.57k|}
ofp-port.c:parse_ofp14_port_stats_ethernet_property:
 1434|    162|{
 1435|    162|    const struct ofp14_port_stats_prop_ethernet *eth = payload->data;
 1436|       |
 1437|    162|    if (payload->size != sizeof *eth) {
  ------------------
  |  Branch (1437:9): [True: 136, False: 26]
  ------------------
 1438|    136|        return OFPERR_OFPBPC_BAD_LEN;
 1439|    136|    }
 1440|       |
 1441|     26|    ops->stats.rx_frame_errors = ntohll(eth->rx_frame_err);
 1442|     26|    ops->stats.rx_over_errors = ntohll(eth->rx_over_err);
 1443|     26|    ops->stats.rx_crc_errors = ntohll(eth->rx_crc_err);
 1444|     26|    ops->stats.collisions = ntohll(eth->collisions);
 1445|       |
 1446|     26|    return 0;
 1447|    162|}
ofp-port.c:parse_intel_port_stats_rfc2819_property:
 1452|     20|{
 1453|     20|    const struct intel_port_stats_rfc2819 *rfc2819 = payload->data;
 1454|       |
 1455|     20|    if (payload->size != sizeof *rfc2819) {
  ------------------
  |  Branch (1455:9): [True: 20, False: 0]
  ------------------
 1456|     20|        return OFPERR_OFPBPC_BAD_LEN;
 1457|     20|    }
 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|     20|}
ofp-port.c:parse_intel_port_custom_property:
 1495|  4.36k|{
 1496|  4.36k|    const struct intel_port_custom_stats *custom_stats
 1497|  4.36k|        = ofpbuf_try_pull(payload, sizeof *custom_stats);
 1498|  4.36k|    if (!custom_stats) {
  ------------------
  |  Branch (1498:9): [True: 6, False: 4.35k]
  ------------------
 1499|      6|        return OFPERR_OFPBPC_BAD_LEN;
 1500|      6|    }
 1501|       |
 1502|  4.35k|    ops->custom_stats.size = ntohs(custom_stats->stats_array_size);
 1503|       |
 1504|  4.35k|    netdev_free_custom_stats_counters(&ops->custom_stats);
 1505|  4.35k|    ops->custom_stats.counters = xcalloc(ops->custom_stats.size,
 1506|  4.35k|                                         sizeof *ops->custom_stats.counters);
 1507|       |
 1508|  32.2k|    for (int i = 0; i < ops->custom_stats.size; i++) {
  ------------------
  |  Branch (1508:21): [True: 30.4k, False: 1.79k]
  ------------------
 1509|  30.4k|        struct netdev_custom_counter *c = &ops->custom_stats.counters[i];
 1510|       |
 1511|       |        /* Counter name. */
 1512|  30.4k|        uint8_t *name_len = ofpbuf_try_pull(payload, sizeof *name_len);
 1513|  30.4k|        char *name = name_len ? ofpbuf_try_pull(payload, *name_len) : NULL;
  ------------------
  |  Branch (1513:22): [True: 30.2k, False: 150]
  ------------------
 1514|  30.4k|        if (!name_len || !name) {
  ------------------
  |  Branch (1514:13): [True: 150, False: 30.2k]
  |  Branch (1514:26): [True: 948, False: 29.3k]
  ------------------
 1515|  1.09k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1516|  1.09k|            return OFPERR_OFPBPC_BAD_LEN;
 1517|  1.09k|        }
 1518|       |
 1519|  29.3k|        size_t len = MIN(*name_len, sizeof c->name - 1);
  ------------------
  |  |   91|  29.3k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 28.0k, False: 1.30k]
  |  |  ------------------
  ------------------
 1520|  29.3k|        memcpy(c->name, name, len);
 1521|  29.3k|        c->name[len] = '\0';
 1522|       |
 1523|       |        /* Counter value. */
 1524|  29.3k|        ovs_be64 *value = ofpbuf_try_pull(payload, sizeof *value);
 1525|  29.3k|        if (!value) {
  ------------------
  |  Branch (1525:13): [True: 1.46k, False: 27.8k]
  ------------------
 1526|  1.46k|            netdev_free_custom_stats_counters(&ops->custom_stats);
 1527|  1.46k|            return OFPERR_OFPBPC_BAD_LEN;
 1528|  1.46k|        }
 1529|  27.8k|        c->value = ntohll(get_unaligned_be64(value));
 1530|  27.8k|    }
 1531|       |
 1532|  1.79k|    return 0;
 1533|  4.35k|}
ofp-port.c:ofputil_port_stats_from_ofp13:
 1422|  2.65k|{
 1423|  2.65k|    enum ofperr error = ofputil_port_stats_from_ofp11(ops, &ps13->ps);
 1424|  2.65k|    if (!error) {
  ------------------
  |  Branch (1424:9): [True: 2.29k, False: 356]
  ------------------
 1425|  2.29k|        ops->duration_sec = ntohl(ps13->duration_sec);
 1426|       |        ops->duration_nsec = ntohl(ps13->duration_nsec);
 1427|  2.29k|    }
 1428|  2.65k|    return error;
 1429|  2.65k|}
ofp-port.c:ofputil_port_stats_from_ofp11:
 1394|  3.05k|{
 1395|  3.05k|    enum ofperr error;
 1396|       |
 1397|  3.05k|    error = ofputil_port_from_ofp11(ps11->port_no, &ops->port_no);
 1398|  3.05k|    if (error) {
  ------------------
  |  Branch (1398:9): [True: 450, False: 2.60k]
  ------------------
 1399|    450|        return error;
 1400|    450|    }
 1401|       |
 1402|  2.60k|    ops->stats.rx_packets = ntohll(ps11->rx_packets);
 1403|  2.60k|    ops->stats.tx_packets = ntohll(ps11->tx_packets);
 1404|  2.60k|    ops->stats.rx_bytes = ntohll(ps11->rx_bytes);
 1405|  2.60k|    ops->stats.tx_bytes = ntohll(ps11->tx_bytes);
 1406|  2.60k|    ops->stats.rx_dropped = ntohll(ps11->rx_dropped);
 1407|  2.60k|    ops->stats.tx_dropped = ntohll(ps11->tx_dropped);
 1408|  2.60k|    ops->stats.rx_errors = ntohll(ps11->rx_errors);
 1409|  2.60k|    ops->stats.tx_errors = ntohll(ps11->tx_errors);
 1410|  2.60k|    ops->stats.rx_frame_errors = ntohll(ps11->rx_frame_err);
 1411|  2.60k|    ops->stats.rx_over_errors = ntohll(ps11->rx_over_err);
 1412|  2.60k|    ops->stats.rx_crc_errors = ntohll(ps11->rx_crc_err);
 1413|  2.60k|    ops->stats.collisions = ntohll(ps11->collisions);
 1414|  2.60k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1415|       |
 1416|  2.60k|    return 0;
 1417|  3.05k|}
ofp-port.c:ofputil_port_stats_from_ofp10:
 1370|  8.06k|{
 1371|       |
 1372|  8.06k|    ops->port_no = u16_to_ofp(ntohs(ps10->port_no));
 1373|  8.06k|    ops->stats.rx_packets = ntohll(get_32aligned_be64(&ps10->rx_packets));
 1374|  8.06k|    ops->stats.tx_packets = ntohll(get_32aligned_be64(&ps10->tx_packets));
 1375|  8.06k|    ops->stats.rx_bytes = ntohll(get_32aligned_be64(&ps10->rx_bytes));
 1376|  8.06k|    ops->stats.tx_bytes = ntohll(get_32aligned_be64(&ps10->tx_bytes));
 1377|  8.06k|    ops->stats.rx_dropped = ntohll(get_32aligned_be64(&ps10->rx_dropped));
 1378|  8.06k|    ops->stats.tx_dropped = ntohll(get_32aligned_be64(&ps10->tx_dropped));
 1379|  8.06k|    ops->stats.rx_errors = ntohll(get_32aligned_be64(&ps10->rx_errors));
 1380|  8.06k|    ops->stats.tx_errors = ntohll(get_32aligned_be64(&ps10->tx_errors));
 1381|  8.06k|    ops->stats.rx_frame_errors =
 1382|  8.06k|        ntohll(get_32aligned_be64(&ps10->rx_frame_err));
 1383|  8.06k|    ops->stats.rx_over_errors = ntohll(get_32aligned_be64(&ps10->rx_over_err));
 1384|  8.06k|    ops->stats.rx_crc_errors = ntohll(get_32aligned_be64(&ps10->rx_crc_err));
 1385|  8.06k|    ops->stats.collisions = ntohll(get_32aligned_be64(&ps10->collisions));
 1386|  8.06k|    ops->duration_sec = ops->duration_nsec = UINT32_MAX;
 1387|       |
 1388|  8.06k|    return 0;
 1389|  8.06k|}
ofp-port.c:print_port_stat:
 1686|  92.5k|{
 1687|  92.5k|    ds_put_cstr(string, leader);
 1688|  92.5k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1688:9): [True: 53.6k, False: 38.9k]
  ------------------
 1689|  53.6k|        ds_put_format(string, "%"PRIu64, stat);
 1690|  53.6k|    } else {
 1691|  38.9k|        ds_put_char(string, '?');
 1692|  38.9k|    }
 1693|  92.5k|    if (more) {
  ------------------
  |  Branch (1693:9): [True: 77.1k, False: 15.4k]
  ------------------
 1694|  77.1k|        ds_put_cstr(string, ", ");
 1695|  77.1k|    } else {
 1696|  15.4k|        ds_put_cstr(string, "\n");
 1697|  15.4k|    }
 1698|  92.5k|}
ofp-port.c:print_port_stat_cond:
 1702|   161k|{
 1703|   161k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (1703:9): [True: 0, False: 161k]
  ------------------
 1704|      0|        ds_put_format(string, "%s%"PRIu64", ", leader, stat);
 1705|      0|    }
 1706|   161k|}

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

ofpprop_pull__:
   75|   204k|{
   76|   204k|    struct ofp_prop_header *oph;
   77|   204k|    unsigned int padded_len;
   78|   204k|    unsigned int len;
   79|       |
   80|   204k|    if (msg->size < sizeof *oph) {
  ------------------
  |  Branch (80:9): [True: 103, False: 204k]
  ------------------
   81|    103|        return OFPERR_OFPBPC_BAD_LEN;
   82|    103|    }
   83|       |
   84|   204k|    oph = msg->data;
   85|   204k|    len = ntohs(oph->len);
   86|   204k|    padded_len = ROUND_UP(len, alignment);
  ------------------
  |  |  303|   204k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|   204k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
   87|   204k|    if (len < sizeof *oph || padded_len > msg->size) {
  ------------------
  |  Branch (87:9): [True: 6.80k, False: 197k]
  |  Branch (87:30): [True: 22.5k, False: 174k]
  ------------------
   88|  29.3k|        return OFPERR_OFPBPC_BAD_LEN;
   89|  29.3k|    }
   90|       |
   91|   174k|    uint16_t type = ntohs(oph->type);
   92|   174k|    if (type < min_exp) {
  ------------------
  |  Branch (92:9): [True: 161k, False: 13.9k]
  ------------------
   93|   161k|        *typep = type;
   94|   161k|    } else {
   95|  13.9k|        struct ofp_prop_experimenter *ope = msg->data;
   96|  13.9k|        if (len < sizeof *ope) {
  ------------------
  |  Branch (96:13): [True: 190, False: 13.7k]
  ------------------
   97|    190|            return OFPERR_OFPBPC_BAD_LEN;
   98|    190|        }
   99|       |
  100|  13.7k|        if (!ope->experimenter) {
  ------------------
  |  Branch (100:13): [True: 42, False: 13.6k]
  ------------------
  101|       |            /* Reject experimenter 0 because it yields ambiguity with standard
  102|       |             * property types. */
  103|     42|            return OFPERR_OFPBPC_BAD_EXPERIMENTER;
  104|     42|        }
  105|       |
  106|  13.6k|        *typep = OFPPROP_EXP(ntohl(ope->experimenter), ntohl(ope->exp_type));
  ------------------
  |  |   67|  13.6k|    (((uint64_t) (EXP_ID) << 32) | (EXP_TYPE))
  ------------------
  107|  13.6k|    }
  108|       |
  109|   174k|    if (property) {
  ------------------
  |  Branch (109:9): [True: 171k, False: 2.99k]
  ------------------
  110|   171k|        ofpbuf_use_const(property, msg->data, len);
  111|   171k|        property->header = property->data;
  112|   171k|        property->msg = ((uint8_t *) property->data
  113|   171k|                         + (type < min_exp
  ------------------
  |  Branch (113:29): [True: 158k, False: 13.6k]
  ------------------
  114|   171k|                            ? sizeof(struct ofp_prop_header)
  115|   171k|                            : sizeof(struct ofp_prop_experimenter)));
  116|   171k|    }
  117|   174k|    ofpbuf_pull(msg, padded_len);
  118|   174k|    return 0;
  119|   174k|}
ofpprop_pull:
  136|   166k|{
  137|   166k|    return ofpprop_pull__(msg, property, 8, 0xffff, typep);
  138|   166k|}
ofpprop_parse_be16:
  145|  5.02k|{
  146|       |    /* OpenFlow uses 8-byte properties for 16-bit values, which doesn't really
  147|       |     * make sense.  Be forgiving by allowing any size payload as long as it's
  148|       |     * at least big enough.  */
  149|  5.02k|    ovs_be16 *p = property->msg;
  150|  5.02k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (150:9): [True: 401, False: 4.62k]
  ------------------
  151|    401|        return OFPERR_OFPBPC_BAD_LEN;
  152|    401|    }
  153|  4.62k|    *value = *p;
  154|  4.62k|    return 0;
  155|  5.02k|}
ofpprop_parse_be32:
  162|  18.5k|{
  163|  18.5k|    ovs_be32 *p = property->msg;
  164|  18.5k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (164:9): [True: 221, False: 18.3k]
  ------------------
  165|    221|        return OFPERR_OFPBPC_BAD_LEN;
  166|    221|    }
  167|  18.3k|    *value = *p;
  168|  18.3k|    return 0;
  169|  18.5k|}
ofpprop_parse_be64:
  176|    396|{
  177|    396|    ovs_be64 *p;
  178|    396|    size_t be64_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|    396|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|    396|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  179|    396|    if (property->size != be64_offset + sizeof *p) {
  ------------------
  |  Branch (179:9): [True: 176, False: 220]
  ------------------
  180|    176|        return OFPERR_OFPBPC_BAD_LEN;
  181|    176|    }
  182|       |
  183|    220|    p = ALIGNED_CAST(ovs_be64 *, (char *) property->data + be64_offset);
  ------------------
  |  |  434|    220|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
  184|    220|    *value = *p;
  185|    220|    return 0;
  186|    396|}
ofpprop_parse_be128:
  193|  1.54k|{
  194|  1.54k|    ovs_32aligned_be128 *p = property->msg;
  195|       |
  196|  1.54k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (196:9): [True: 24, False: 1.52k]
  ------------------
  197|     24|        return OFPERR_OFPBPC_BAD_LEN;
  198|     24|    }
  199|  1.52k|    *value = get_32aligned_be128(p);
  200|  1.52k|    return 0;
  201|  1.54k|}
ofpprop_parse_u8:
  208|  1.03k|{
  209|       |    /* OpenFlow 1.5 and earlier don't have any 8-bit properties, but it uses
  210|       |     * 8-byte properties for 16-bit values, which doesn't really make sense.
  211|       |     * Be forgiving by allowing any size payload as long as it's at least big
  212|       |     * enough. */
  213|  1.03k|    uint8_t *p = property->msg;
  214|  1.03k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (214:9): [True: 232, False: 806]
  ------------------
  215|    232|        return OFPERR_OFPBPC_BAD_LEN;
  216|    232|    }
  217|    806|    *value = *p;
  218|    806|    return 0;
  219|  1.03k|}
ofpprop_parse_u16:
  226|  5.69k|{
  227|       |    /* OpenFlow uses 8-byte properties for 16-bit values, which doesn't really
  228|       |     * make sense.  Be forgiving by allowing any size payload as long as it's
  229|       |     * at least big enough.  */
  230|  5.69k|    ovs_be16 *p = property->msg;
  231|  5.69k|    if (ofpbuf_msgsize(property) < sizeof *p) {
  ------------------
  |  Branch (231:9): [True: 87, False: 5.60k]
  ------------------
  232|     87|        return OFPERR_OFPBPC_BAD_LEN;
  233|     87|    }
  234|  5.60k|    *value = ntohs(*p);
  235|  5.60k|    return 0;
  236|  5.69k|}
ofpprop_parse_u32:
  243|  10.0k|{
  244|  10.0k|    ovs_be32 *p = property->msg;
  245|  10.0k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (245:9): [True: 306, False: 9.78k]
  ------------------
  246|    306|        return OFPERR_OFPBPC_BAD_LEN;
  247|    306|    }
  248|  9.78k|    *value = ntohl(*p);
  249|  9.78k|    return 0;
  250|  10.0k|}
ofpprop_parse_u128:
  274|  1.54k|{
  275|  1.54k|    enum ofperr error = ofpprop_parse_be128(property, (ovs_be128 *) value);
  276|       |
  277|  1.54k|    if (!error) {
  ------------------
  |  Branch (277:9): [True: 1.52k, False: 24]
  ------------------
  278|  1.52k|        *value = ntoh128(*(ovs_be128 *) value);
  279|  1.52k|    }
  280|       |
  281|  1.54k|    return error;
  282|  1.54k|}
ofpprop_parse_uuid:
  289|  1.42k|{
  290|  1.42k|    struct uuid *p = property->msg;
  291|  1.42k|    if (ofpbuf_msgsize(property) != sizeof *p) {
  ------------------
  |  Branch (291:9): [True: 755, False: 666]
  ------------------
  292|    755|        return OFPERR_OFPBPC_BAD_LEN;
  293|    755|    }
  294|    666|    *uuid = *p;
  295|    666|    return 0;
  296|  1.42k|}
ofpprop_parse_nested:
  308|  22.6k|{
  309|  22.6k|    size_t nested_offset = ROUND_UP(ofpbuf_headersize(property), 8);
  ------------------
  |  |  303|  22.6k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  22.6k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  310|  22.6k|    if (property->size < nested_offset) {
  ------------------
  |  Branch (310:9): [True: 96, False: 22.5k]
  ------------------
  311|     96|        return OFPERR_OFPBPC_BAD_LEN;
  312|     96|    }
  313|       |
  314|  22.5k|    ofpbuf_use_const(nested, property->data, property->size);
  315|  22.5k|    ofpbuf_pull(nested, nested_offset);
  316|  22.5k|    return 0;
  317|  22.6k|}
ofpprop_unknown:
  528|  30.9k|{
  529|  30.9k|    bool is_experimenter = ofpprop_is_experimenter(type);
  530|       |
  531|  30.9k|    static struct vlog_rate_limit rl = VLOG_RATE_LIMIT_INIT(5, 5);
  ------------------
  |  |  110|  30.9k|        {                                                                 \
  |  |  111|  30.9k|            TOKEN_BUCKET_INIT(RATE, OVS_SAT_MUL(BURST, VLOG_MSG_TOKENS)), \
  |  |  ------------------
  |  |  |  |   37|   123k|#define TOKEN_BUCKET_INIT(RATE, BURST) { RATE, BURST, 0, LLONG_MIN }
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (37:48): [True: 0, Folded]
  |  |  |  |  |  Branch (37:48): [Folded, False: 30.9k]
  |  |  |  |  ------------------
  |  |  ------------------
  |  |  112|  30.9k|            0,                              /* first_dropped */           \
  |  |  113|  30.9k|            0,                              /* last_dropped */            \
  |  |  114|  30.9k|            0,                              /* n_dropped */               \
  |  |  115|  30.9k|            OVS_MUTEX_INITIALIZER           /* mutex */                   \
  |  |  ------------------
  |  |  |  |   45|  30.9k|#define OVS_MUTEX_INITIALIZER { PTHREAD_ERRORCHECK_MUTEX_INITIALIZER_NP, \
  |  |  |  |   46|  30.9k|                                "<unlocked>" }
  |  |  ------------------
  |  |  116|  30.9k|        }
  ------------------
  532|  30.9k|    enum vlog_level level = loose ? VLL_DBG : VLL_WARN;
  ------------------
  |  Branch (532:29): [True: 25.1k, False: 5.82k]
  ------------------
  533|  30.9k|    if (!is_experimenter) {
  ------------------
  |  Branch (533:9): [True: 28.4k, False: 2.52k]
  ------------------
  534|  28.4k|        vlog_rate_limit(module, level, &rl, "unknown %s property type %"PRId64,
  535|  28.4k|                        msg, type);
  536|  28.4k|    } else {
  537|  2.52k|        vlog_rate_limit(module, level, &rl,
  538|  2.52k|                        "unknown %s property type for exp_id 0x%"PRIx32", "
  539|  2.52k|                        "exp_type %"PRId32, msg,
  540|  2.52k|                        ofpprop_type_to_exp_id(type),
  541|  2.52k|                        ofpprop_type_to_exp_type(type));
  542|  2.52k|    }
  543|       |
  544|       |    /* There's an error OFPBPC_BAD_EXPERIMENTER that we could use for
  545|       |     * experimenter IDs that we don't know at all, but that seems like a
  546|       |     * difficult distinction and OFPERR_OFPBPC_BAD_EXP_TYPE communicates the
  547|       |     * problem quite well. */
  548|  30.9k|    return (loose ? 0
  ------------------
  |  Branch (548:13): [True: 25.1k, False: 5.82k]
  ------------------
  549|  30.9k|            : is_experimenter ? OFPERR_OFPBPC_BAD_EXP_TYPE
  ------------------
  |  Branch (549:15): [True: 1.49k, False: 4.33k]
  ------------------
  550|  5.82k|            : OFPERR_OFPBPC_BAD_TYPE);
  551|  30.9k|}
ofp-prop.c:ofpprop_type_to_exp_id:
   45|  2.52k|{
   46|  2.52k|    return type >> 32;
   47|  2.52k|}
ofp-prop.c:ofpprop_type_to_exp_type:
   51|  2.52k|{
   52|       |    return type & UINT32_MAX;
   53|  2.52k|}

ofputil_protocols_from_ofp_version:
   65|  81.8k|{
   66|  81.8k|    switch (version) {
   67|  46.7k|    case OFP10_VERSION:
  ------------------
  |  Branch (67:5): [True: 46.7k, False: 35.1k]
  ------------------
   68|  46.7k|        return OFPUTIL_P_OF10_STD_ANY | OFPUTIL_P_OF10_NXM_ANY;
  ------------------
  |  |   58|  46.7k|#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|  46.7k|#define OFPUTIL_P_OF10_NXM_ANY (OFPUTIL_P_OF10_NXM | OFPUTIL_P_OF10_NXM_TID)
  ------------------
   69|  4.21k|    case OFP11_VERSION:
  ------------------
  |  Branch (69:5): [True: 4.21k, False: 77.6k]
  ------------------
   70|  4.21k|        return OFPUTIL_P_OF11_STD;
   71|    478|    case OFP12_VERSION:
  ------------------
  |  Branch (71:5): [True: 478, False: 81.4k]
  ------------------
   72|    478|        return OFPUTIL_P_OF12_OXM;
   73|    845|    case OFP13_VERSION:
  ------------------
  |  Branch (73:5): [True: 845, False: 81.0k]
  ------------------
   74|    845|        return OFPUTIL_P_OF13_OXM;
   75|  29.1k|    case OFP14_VERSION:
  ------------------
  |  Branch (75:5): [True: 29.1k, False: 52.7k]
  ------------------
   76|  29.1k|        return OFPUTIL_P_OF14_OXM;
   77|    473|    case OFP15_VERSION:
  ------------------
  |  Branch (77:5): [True: 473, False: 81.4k]
  ------------------
   78|    473|        return OFPUTIL_P_OF15_OXM;
   79|      0|    default:
  ------------------
  |  Branch (79:5): [True: 0, False: 81.8k]
  ------------------
   80|      0|        return 0;
   81|  81.8k|    }
   82|  81.8k|}
ofputil_protocol_from_ofp_version:
   91|  81.8k|{
   92|  81.8k|    return rightmost_1bit(ofputil_protocols_from_ofp_version(version));
   93|  81.8k|}
ofputil_protocol_set_tid:
  173|  81.8k|{
  174|  81.8k|    switch (protocol) {
  175|  46.7k|    case OFPUTIL_P_OF10_STD:
  ------------------
  |  Branch (175:5): [True: 46.7k, False: 35.1k]
  ------------------
  176|  46.7k|    case OFPUTIL_P_OF10_STD_TID:
  ------------------
  |  Branch (176:5): [True: 0, False: 81.8k]
  ------------------
  177|  46.7k|        return enable ? OFPUTIL_P_OF10_STD_TID : OFPUTIL_P_OF10_STD;
  ------------------
  |  Branch (177:16): [True: 46.7k, False: 0]
  ------------------
  178|       |
  179|      0|    case OFPUTIL_P_OF10_NXM:
  ------------------
  |  Branch (179:5): [True: 0, False: 81.8k]
  ------------------
  180|      0|    case OFPUTIL_P_OF10_NXM_TID:
  ------------------
  |  Branch (180:5): [True: 0, False: 81.8k]
  ------------------
  181|      0|        return enable ? OFPUTIL_P_OF10_NXM_TID : OFPUTIL_P_OF10_NXM;
  ------------------
  |  Branch (181:16): [True: 0, False: 0]
  ------------------
  182|       |
  183|  4.21k|    case OFPUTIL_P_OF11_STD:
  ------------------
  |  Branch (183:5): [True: 4.21k, False: 77.6k]
  ------------------
  184|  4.21k|        return OFPUTIL_P_OF11_STD;
  185|       |
  186|    478|    case OFPUTIL_P_OF12_OXM:
  ------------------
  |  Branch (186:5): [True: 478, False: 81.4k]
  ------------------
  187|    478|        return OFPUTIL_P_OF12_OXM;
  188|       |
  189|    845|    case OFPUTIL_P_OF13_OXM:
  ------------------
  |  Branch (189:5): [True: 845, False: 81.0k]
  ------------------
  190|    845|        return OFPUTIL_P_OF13_OXM;
  191|       |
  192|  29.1k|    case OFPUTIL_P_OF14_OXM:
  ------------------
  |  Branch (192:5): [True: 29.1k, False: 52.7k]
  ------------------
  193|  29.1k|        return OFPUTIL_P_OF14_OXM;
  194|       |
  195|    473|    case OFPUTIL_P_OF15_OXM:
  ------------------
  |  Branch (195:5): [True: 473, False: 81.4k]
  ------------------
  196|    473|        return OFPUTIL_P_OF15_OXM;
  197|       |
  198|      0|    default:
  ------------------
  |  Branch (198:5): [True: 0, False: 81.8k]
  ------------------
  199|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  200|  81.8k|    }
  201|  81.8k|}
ofputil_format_version:
  508|   830k|{
  509|   830k|    ds_put_format(msg, "0x%02x", version);
  510|   830k|}
ofputil_format_version_bitmap:
  534|  45.8k|{
  535|  45.8k|    ofputil_format_version_bitmap__(msg, bitmap, ofputil_format_version);
  536|  45.8k|}
ofputil_decode_nx_set_flow_format:
  635|  1.09k|{
  636|  1.09k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  637|  1.09k|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_SET_FLOW_FORMAT);
  ------------------
  |  |   62|  1.09k|#define ovs_assert ovs_ignore
  ------------------
  638|       |
  639|  1.09k|    ovs_be32 *flow_formatp = ofpbuf_pull(&b, sizeof *flow_formatp);
  640|  1.09k|    uint32_t flow_format = ntohl(*flow_formatp);
  641|  1.09k|    switch (flow_format) {
  642|     74|    case NXFF_OPENFLOW10:
  ------------------
  |  Branch (642:5): [True: 74, False: 1.02k]
  ------------------
  643|     74|        return OFPUTIL_P_OF10_STD;
  644|       |
  645|    613|    case NXFF_NXM:
  ------------------
  |  Branch (645:5): [True: 613, False: 486]
  ------------------
  646|    613|        return OFPUTIL_P_OF10_NXM;
  647|       |
  648|    412|    default:
  ------------------
  |  Branch (648:5): [True: 412, False: 687]
  ------------------
  649|    412|        VLOG_WARN_RL(&rl, "NXT_SET_FLOW_FORMAT message specified invalid "
  ------------------
  |  |  224|    412|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    412|    do {                                                                \
  |  |  |  |  288|    412|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    412|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 412]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    412|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 412]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  650|    412|                     "flow format %"PRIu32, flow_format);
  651|    412|        return 0;
  652|  1.09k|    }
  653|  1.09k|}
ofputil_decode_nx_flow_mod_table_id:
  712|     67|{
  713|     67|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  714|     67|    ovs_assert(ofpraw_pull_assert(&b) == OFPRAW_NXT_FLOW_MOD_TABLE_ID);
  ------------------
  |  |   62|     67|#define ovs_assert ovs_ignore
  ------------------
  715|     67|    uint8_t *enable = ofpbuf_pull(&b, 8);
  716|     67|    return *enable != 0;
  717|     67|}
ofp-protocol.c:ofputil_format_version_bitmap__:
  522|  45.8k|{
  523|   876k|    while (bitmap) {
  ------------------
  |  Branch (523:12): [True: 830k, False: 45.8k]
  ------------------
  524|   830k|        format_version(msg, raw_ctz(bitmap));
  525|   830k|        bitmap = zero_rightmost_1bit(bitmap);
  526|   830k|        if (bitmap) {
  ------------------
  |  Branch (526:13): [True: 784k, False: 45.8k]
  ------------------
  527|   784k|            ds_put_cstr(msg, ", ");
  528|   784k|        }
  529|   830k|    }
  530|  45.8k|}

ofputil_decode_queue_get_config_request:
   90|  1.31k|{
   91|  1.31k|    const struct ofp10_queue_get_config_request *qgcr10;
   92|  1.31k|    const struct ofp11_queue_get_config_request *qgcr11;
   93|  1.31k|    const struct ofp14_queue_desc_request *qdr14;
   94|  1.31k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
   95|  1.31k|    enum ofpraw raw = ofpraw_pull_assert(&b);
   96|       |
   97|  1.31k|    switch ((int) raw) {
   98|    100|    case OFPRAW_OFPT10_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (98:5): [True: 100, False: 1.21k]
  ------------------
   99|    100|        qgcr10 = b.data;
  100|    100|        *port = u16_to_ofp(ntohs(qgcr10->port));
  101|    100|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|    100|#define OFPQ_ALL      0xffffffff
  ------------------
  102|    100|        break;
  103|       |
  104|    853|    case OFPRAW_OFPT11_QUEUE_GET_CONFIG_REQUEST:
  ------------------
  |  Branch (104:5): [True: 853, False: 460]
  ------------------
  105|    853|        qgcr11 = b.data;
  106|    853|        *queue = OFPQ_ALL;
  ------------------
  |  |  416|    853|#define OFPQ_ALL      0xffffffff
  ------------------
  107|    853|        enum ofperr error = ofputil_port_from_ofp11(qgcr11->port, port);
  108|    853|        if (error || *port == OFPP_ANY) {
  ------------------
  |  |   80|    571|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    571|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    571|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (108:13): [True: 282, False: 571]
  |  Branch (108:22): [True: 143, False: 428]
  ------------------
  109|    425|            return error;
  110|    425|        }
  111|    428|        break;
  112|       |
  113|    428|    case OFPRAW_OFPST14_QUEUE_DESC_REQUEST:
  ------------------
  |  Branch (113:5): [True: 360, False: 953]
  ------------------
  114|    360|        qdr14 = b.data;
  115|    360|        *queue = ntohl(qdr14->queue);
  116|    360|        return ofputil_port_from_ofp11(qdr14->port, port);
  117|       |
  118|      0|    default:
  ------------------
  |  Branch (118:5): [True: 0, False: 1.31k]
  ------------------
  119|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  120|  1.31k|    }
  121|       |
  122|    528|    return (ofp_to_u16(*port) < ofp_to_u16(OFPP_MAX)
  ------------------
  |  |   33|    528|#define OFPP_MAX        OFP_PORT_C(0xff00) /* Max # of switch ports. */
  |  |  ------------------
  |  |  |  |  157|    528|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (122:13): [True: 436, False: 92]
  ------------------
  123|    528|            ? 0
  124|    528|            : OFPERR_OFPQOFC_BAD_PORT);
  125|  1.31k|}
ofputil_queue_get_config_request_format:
  131|  1.31k|{
  132|  1.31k|    enum ofperr error;
  133|  1.31k|    ofp_port_t port;
  134|  1.31k|    uint32_t queue;
  135|       |
  136|  1.31k|    error = ofputil_decode_queue_get_config_request(oh, &port, &queue);
  137|  1.31k|    if (error) {
  ------------------
  |  Branch (137:9): [True: 481, False: 832]
  ------------------
  138|    481|        return error;
  139|    481|    }
  140|       |
  141|    832|    ds_put_cstr(string, " port=");
  142|    832|    ofputil_format_port(port, port_map, string);
  143|       |
  144|    832|    if (queue != OFPQ_ALL) {
  ------------------
  |  |  416|    832|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (144:9): [True: 253, False: 579]
  ------------------
  145|    253|        ds_put_cstr(string, " queue=");
  146|    253|        ofp_print_queue_name(string, queue);
  147|    253|    }
  148|       |
  149|    832|    return 0;
  150|  1.31k|}
ofputil_pull_queue_get_config_reply:
  430|  21.4k|{
  431|  21.4k|    enum ofpraw raw;
  432|  21.4k|    if (!msg->header) {
  ------------------
  |  Branch (432:9): [True: 11.5k, False: 9.93k]
  ------------------
  433|       |        /* Pull OpenFlow header. */
  434|  11.5k|        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|  11.5k|        if (raw == OFPRAW_OFPT10_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (438:13): [True: 1.44k, False: 10.0k]
  ------------------
  439|  1.44k|            ofpbuf_pull(msg, sizeof(struct ofp10_queue_get_config_reply));
  440|  10.0k|        } else if (raw == OFPRAW_OFPT11_QUEUE_GET_CONFIG_REPLY) {
  ------------------
  |  Branch (440:20): [True: 2.71k, False: 7.36k]
  ------------------
  441|  2.71k|            ofpbuf_pull(msg, sizeof(struct ofp11_queue_get_config_reply));
  442|  7.36k|        } else {
  443|  7.36k|            ovs_assert(raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY);
  ------------------
  |  |   62|  7.36k|#define ovs_assert ovs_ignore
  ------------------
  444|  7.36k|        }
  445|  11.5k|    } else {
  446|  9.93k|        raw = ofpraw_decode_assert(msg->header);
  447|  9.93k|    }
  448|       |
  449|  21.4k|    queue->min_rate = UINT16_MAX;
  450|  21.4k|    queue->max_rate = UINT16_MAX;
  451|       |
  452|  21.4k|    if (!msg->size) {
  ------------------
  |  Branch (452:9): [True: 1.10k, False: 20.3k]
  ------------------
  453|  1.10k|        return EOF;
  454|  20.3k|    } else if (raw == OFPRAW_OFPST14_QUEUE_DESC_REPLY) {
  ------------------
  |  Branch (454:16): [True: 10.1k, False: 10.2k]
  ------------------
  455|  10.1k|        return ofputil_pull_queue_get_config_reply14(msg, queue);
  456|  10.2k|    } else {
  457|  10.2k|        return ofputil_pull_queue_get_config_reply10(msg, queue);
  458|  10.2k|    }
  459|  21.4k|}
ofputil_queue_get_config_reply_format:
  493|  11.5k|{
  494|  11.5k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  495|       |
  496|  11.5k|    struct ofputil_queue_config *queues = NULL;
  497|  11.5k|    size_t allocated_queues = 0;
  498|  11.5k|    size_t n = 0;
  499|       |
  500|  11.5k|    int retval = 0;
  501|  21.4k|    for (;;) {
  502|  21.4k|        if (n >= allocated_queues) {
  ------------------
  |  Branch (502:13): [True: 19.5k, False: 1.90k]
  ------------------
  503|  19.5k|            queues = x2nrealloc(queues, &allocated_queues, sizeof *queues);
  504|  19.5k|        }
  505|  21.4k|        retval = ofputil_pull_queue_get_config_reply(&b, &queues[n]);
  506|  21.4k|        if (retval) {
  ------------------
  |  Branch (506:13): [True: 11.5k, False: 9.93k]
  ------------------
  507|  11.5k|            break;
  508|  11.5k|        }
  509|  9.93k|        n++;
  510|  9.93k|    }
  511|       |
  512|  11.5k|    qsort(queues, n, sizeof *queues, compare_queues);
  513|       |
  514|  11.5k|    ds_put_char(string, ' ');
  515|       |
  516|  11.5k|    ofp_port_t port = 0;
  517|  21.4k|    for (const struct ofputil_queue_config *q = queues; q < &queues[n]; q++) {
  ------------------
  |  Branch (517:57): [True: 9.93k, False: 11.5k]
  ------------------
  518|  9.93k|        if (q->port != port) {
  ------------------
  |  Branch (518:13): [True: 4.45k, False: 5.48k]
  ------------------
  519|  4.45k|            port = q->port;
  520|       |
  521|  4.45k|            ds_put_cstr(string, "port=");
  522|  4.45k|            ofputil_format_port(port, port_map, string);
  523|  4.45k|            ds_put_char(string, '\n');
  524|  4.45k|        }
  525|       |
  526|  9.93k|        ds_put_format(string, "queue %"PRIu32":", q->queue);
  527|  9.93k|        print_queue_rate(string, "min_rate", q->min_rate);
  528|  9.93k|        print_queue_rate(string, "max_rate", q->max_rate);
  529|  9.93k|        ds_put_char(string, '\n');
  530|  9.93k|    }
  531|       |
  532|  11.5k|    ds_chomp(string, ' ');
  533|  11.5k|    free(queues);
  534|       |
  535|  11.5k|    return retval != EOF ? retval : 0;
  ------------------
  |  Branch (535:12): [True: 10.4k, False: 1.10k]
  ------------------
  536|  11.5k|}
ofputil_decode_queue_stats_request:
  543|  2.04k|{
  544|  2.04k|    switch ((enum ofp_version)request->version) {
  545|    161|    case OFP15_VERSION:
  ------------------
  |  Branch (545:5): [True: 161, False: 1.88k]
  ------------------
  546|    543|    case OFP14_VERSION:
  ------------------
  |  Branch (546:5): [True: 382, False: 1.66k]
  ------------------
  547|    612|    case OFP13_VERSION:
  ------------------
  |  Branch (547:5): [True: 69, False: 1.97k]
  ------------------
  548|    679|    case OFP12_VERSION:
  ------------------
  |  Branch (548:5): [True: 67, False: 1.97k]
  ------------------
  549|  1.27k|    case OFP11_VERSION: {
  ------------------
  |  Branch (549:5): [True: 599, False: 1.44k]
  ------------------
  550|  1.27k|        const struct ofp11_queue_stats_request *qsr11 = ofpmsg_body(request);
  551|  1.27k|        oqsr->queue_id = ntohl(qsr11->queue_id);
  552|  1.27k|        return ofputil_port_from_ofp11(qsr11->port_no, &oqsr->port_no);
  553|    679|    }
  554|       |
  555|    767|    case OFP10_VERSION: {
  ------------------
  |  Branch (555:5): [True: 767, False: 1.27k]
  ------------------
  556|    767|        const struct ofp10_queue_stats_request *qsr10 = ofpmsg_body(request);
  557|    767|        oqsr->queue_id = ntohl(qsr10->queue_id);
  558|    767|        oqsr->port_no = u16_to_ofp(ntohs(qsr10->port_no));
  559|       |        /* OF 1.0 uses OFPP_ALL for OFPP_ANY */
  560|    767|        if (oqsr->port_no == OFPP_ALL) {
  ------------------
  |  |   44|    767|#define OFPP_ALL        OFP_PORT_C(0xfffc) /* All ports except input port. */
  |  |  ------------------
  |  |  |  |  157|    767|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  ------------------
  ------------------
  |  Branch (560:13): [True: 268, False: 499]
  ------------------
  561|    268|            oqsr->port_no = OFPP_ANY;
  ------------------
  |  |   80|    268|#define OFPP_ANY OFPP_NONE
  |  |  ------------------
  |  |  |  |   47|    268|#define OFPP_NONE       OFP_PORT_C(0xffff) /* Not associated with any port. */
  |  |  |  |  ------------------
  |  |  |  |  |  |  157|    268|#define OFP_PORT_C(X) ((OVS_FORCE ofp_port_t) (X))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  562|    268|        }
  563|    767|        return 0;
  564|    679|    }
  565|       |
  566|      0|    default:
  ------------------
  |  Branch (566:5): [True: 0, False: 2.04k]
  ------------------
  567|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  568|  2.04k|    }
  569|  2.04k|}
ofputil_queue_stats_request_format:
  615|  2.04k|{
  616|  2.04k|    struct ofputil_queue_stats_request oqsr;
  617|  2.04k|    enum ofperr error;
  618|       |
  619|  2.04k|    error = ofputil_decode_queue_stats_request(oh, &oqsr);
  620|  2.04k|    if (error) {
  ------------------
  |  Branch (620:9): [True: 577, False: 1.46k]
  ------------------
  621|    577|        return error;
  622|    577|    }
  623|       |
  624|  1.46k|    ds_put_cstr(string, " port=");
  625|  1.46k|    ofputil_format_port(oqsr.port_no, port_map, string);
  626|       |
  627|  1.46k|    ds_put_cstr(string, " queue=");
  628|  1.46k|    ofp_print_queue_name(string, oqsr.queue_id);
  629|       |
  630|  1.46k|    return 0;
  631|  2.04k|}
ofputil_count_queue_stats:
  637|  11.4k|{
  638|  11.4k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  639|  11.4k|    ofpraw_pull_assert(&b);
  640|       |
  641|  19.3k|    for (size_t n = 0; ; n++) {
  642|  19.3k|        struct ofputil_queue_stats qs;
  643|  19.3k|        if (ofputil_decode_queue_stats(&qs, &b)) {
  ------------------
  |  Branch (643:13): [True: 11.4k, False: 7.88k]
  ------------------
  644|  11.4k|            return n;
  645|  11.4k|        }
  646|  19.3k|    }
  647|  11.4k|}
ofputil_decode_queue_stats:
  731|  38.6k|{
  732|  38.6k|    enum ofperr error;
  733|  38.6k|    enum ofpraw raw;
  734|       |
  735|  38.6k|    error = (msg->header ? ofpraw_decode(&raw, msg->header)
  ------------------
  |  Branch (735:14): [True: 27.2k, False: 11.4k]
  ------------------
  736|  38.6k|             : ofpraw_pull(&raw, msg));
  737|  38.6k|    if (error) {
  ------------------
  |  Branch (737:9): [True: 0, False: 38.6k]
  ------------------
  738|      0|        return error;
  739|      0|    }
  740|       |
  741|  38.6k|    if (!msg->size) {
  ------------------
  |  Branch (741:9): [True: 5.16k, False: 33.4k]
  ------------------
  742|  5.16k|        return EOF;
  743|  33.4k|    } else if (raw == OFPRAW_OFPST14_QUEUE_REPLY) {
  ------------------
  |  Branch (743:16): [True: 20.4k, False: 13.0k]
  ------------------
  744|  20.4k|        return ofputil_pull_ofp14_queue_stats(qs, msg);
  745|  20.4k|    } else if (raw == OFPRAW_OFPST13_QUEUE_REPLY) {
  ------------------
  |  Branch (745:16): [True: 3.15k, False: 9.87k]
  ------------------
  746|  3.15k|        const struct ofp13_queue_stats *qs13;
  747|       |
  748|  3.15k|        qs13 = ofpbuf_try_pull(msg, sizeof *qs13);
  749|  3.15k|        if (!qs13) {
  ------------------
  |  Branch (749:13): [True: 0, False: 3.15k]
  ------------------
  750|      0|            goto bad_len;
  751|      0|        }
  752|  3.15k|        return ofputil_queue_stats_from_ofp13(qs, qs13);
  753|  9.87k|    } else if (raw == OFPRAW_OFPST11_QUEUE_REPLY) {
  ------------------
  |  Branch (753:16): [True: 1.88k, False: 7.99k]
  ------------------
  754|  1.88k|        const struct ofp11_queue_stats *qs11;
  755|       |
  756|  1.88k|        qs11 = ofpbuf_try_pull(msg, sizeof *qs11);
  757|  1.88k|        if (!qs11) {
  ------------------
  |  Branch (757:13): [True: 0, False: 1.88k]
  ------------------
  758|      0|            goto bad_len;
  759|      0|        }
  760|  1.88k|        return ofputil_queue_stats_from_ofp11(qs, qs11);
  761|  7.99k|    } else if (raw == OFPRAW_OFPST10_QUEUE_REPLY) {
  ------------------
  |  Branch (761:16): [True: 7.99k, False: 0]
  ------------------
  762|  7.99k|        const struct ofp10_queue_stats *qs10;
  763|       |
  764|  7.99k|        qs10 = ofpbuf_try_pull(msg, sizeof *qs10);
  765|  7.99k|        if (!qs10) {
  ------------------
  |  Branch (765:13): [True: 0, False: 7.99k]
  ------------------
  766|      0|            goto bad_len;
  767|      0|        }
  768|  7.99k|        return ofputil_queue_stats_from_ofp10(qs, qs10);
  769|  7.99k|    } else {
  770|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      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 "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  775|      0|                 "bytes at end", msg->size);
  776|      0|    return OFPERR_OFPBRC_BAD_LEN;
  777|  38.6k|}
ofputil_queue_stats_reply_format:
  885|  11.4k|{
  886|  11.4k|    ds_put_format(string, " %"PRIuSIZE" queues\n",
  887|  11.4k|                  ofputil_count_queue_stats(oh));
  888|  11.4k|    if (verbosity < 1) {
  ------------------
  |  Branch (888:9): [True: 0, False: 11.4k]
  ------------------
  889|      0|        return 0;
  890|      0|    }
  891|       |
  892|  11.4k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  893|  19.3k|    for (;;) {
  894|  19.3k|        struct ofputil_queue_stats qs;
  895|  19.3k|        int retval;
  896|       |
  897|  19.3k|        retval = ofputil_decode_queue_stats(&qs, &b);
  898|  19.3k|        if (retval) {
  ------------------
  |  Branch (898:13): [True: 11.4k, False: 7.88k]
  ------------------
  899|  11.4k|            return retval != EOF ? retval : 0;
  ------------------
  |  Branch (899:20): [True: 8.85k, False: 2.58k]
  ------------------
  900|  11.4k|        }
  901|       |
  902|  7.88k|        ds_put_cstr(string, "  port ");
  903|  7.88k|        ofputil_format_port(qs.port_no, port_map, string);
  904|  7.88k|        ds_put_cstr(string, " queue ");
  905|  7.88k|        ofp_print_queue_name(string, qs.queue_id);
  906|  7.88k|        ds_put_cstr(string, ": ");
  907|       |
  908|  7.88k|        print_queue_stat(string, "bytes=", qs.tx_bytes, 1);
  909|  7.88k|        print_queue_stat(string, "pkts=", qs.tx_packets, 1);
  910|  7.88k|        print_queue_stat(string, "errors=", qs.tx_errors, 1);
  911|       |
  912|  7.88k|        ds_put_cstr(string, "duration=");
  913|  7.88k|        if (qs.duration_sec != UINT32_MAX) {
  ------------------
  |  Branch (913:13): [True: 3.06k, False: 4.81k]
  ------------------
  914|  3.06k|            ofp_print_duration(string, qs.duration_sec, qs.duration_nsec);
  915|  4.81k|        } else {
  916|  4.81k|            ds_put_char(string, '?');
  917|  4.81k|        }
  918|  7.88k|        ds_put_char(string, '\n');
  919|  7.88k|    }
  920|  11.4k|}
ofp-queue.c:ofp_print_queue_name:
   35|  9.60k|{
   36|  9.60k|    if (queue_id == OFPQ_ALL) {
  ------------------
  |  |  416|  9.60k|#define OFPQ_ALL      0xffffffff
  ------------------
  |  Branch (36:9): [True: 2.94k, False: 6.65k]
  ------------------
   37|  2.94k|        ds_put_cstr(string, "ALL");
   38|  6.65k|    } else {
   39|       |        ds_put_format(string, "%"PRIu32, queue_id);
   40|  6.65k|    }
   41|  9.60k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply14:
  369|  10.1k|{
  370|  10.1k|    struct ofp14_queue_desc *oqd14 = ofpbuf_try_pull(msg, sizeof *oqd14);
  371|  10.1k|    if (!oqd14) {
  ------------------
  |  Branch (371:9): [True: 344, False: 9.79k]
  ------------------
  372|    344|        return OFPERR_OFPBRC_BAD_LEN;
  373|    344|    }
  374|  9.79k|    enum ofperr error = ofputil_port_from_ofp11(oqd14->port_no, &queue->port);
  375|  9.79k|    if (error) {
  ------------------
  |  Branch (375:9): [True: 3.15k, False: 6.63k]
  ------------------
  376|  3.15k|        return error;
  377|  3.15k|    }
  378|  6.63k|    queue->queue = ntohl(oqd14->queue_id);
  379|       |
  380|       |    /* Length check. */
  381|  6.63k|    unsigned int len = ntohs(oqd14->len);
  382|  6.63k|    if (len < sizeof *oqd14 || len > msg->size + sizeof *oqd14 || len % 8) {
  ------------------
  |  Branch (382:9): [True: 130, False: 6.50k]
  |  Branch (382:32): [True: 490, False: 6.01k]
  |  Branch (382:67): [True: 1.73k, False: 4.28k]
  ------------------
  383|  2.35k|        return OFPERR_OFPBRC_BAD_LEN;
  384|  2.35k|    }
  385|  4.28k|    len -= sizeof *oqd14;
  386|       |
  387|  4.28k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  388|  4.28k|                                                        len);
  389|  14.7k|    while (properties.size > 0) {
  ------------------
  |  Branch (389:12): [True: 11.6k, False: 3.03k]
  ------------------
  390|  11.6k|        struct ofpbuf payload;
  391|  11.6k|        uint64_t type;
  392|       |
  393|  11.6k|        error = ofpprop_pull(&properties, &payload, &type);
  394|  11.6k|        if (error) {
  ------------------
  |  Branch (394:13): [True: 1.22k, False: 10.4k]
  ------------------
  395|  1.22k|            return error;
  396|  1.22k|        }
  397|       |
  398|  10.4k|        switch (type) {
  399|  3.17k|        case OFPQDPT14_MIN_RATE:
  ------------------
  |  Branch (399:9): [True: 3.17k, False: 7.28k]
  ------------------
  400|  3.17k|            error = ofpprop_parse_u16(&payload, &queue->min_rate);
  401|  3.17k|            break;
  402|       |
  403|    771|        case OFPQDPT14_MAX_RATE:
  ------------------
  |  Branch (403:9): [True: 771, False: 9.69k]
  ------------------
  404|    771|            error = ofpprop_parse_u16(&payload, &queue->max_rate);
  405|    771|            break;
  406|       |
  407|  6.51k|        default:
  ------------------
  |  Branch (407:9): [True: 6.51k, False: 3.94k]
  ------------------
  408|  6.51k|            error = OFPPROP_UNKNOWN(true, "queue desc", type);
  ------------------
  |  |  144|  6.51k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  409|  6.51k|            break;
  410|  10.4k|        }
  411|       |
  412|  10.4k|        if (error) {
  ------------------
  |  Branch (412:13): [True: 14, False: 10.4k]
  ------------------
  413|     14|            return error;
  414|     14|        }
  415|  10.4k|    }
  416|       |
  417|  3.03k|    return 0;
  418|  4.28k|}
ofp-queue.c:ofputil_pull_queue_get_config_reply10:
  283|  10.2k|{
  284|  10.2k|    const struct ofp_header *oh = msg->header;
  285|  10.2k|    unsigned int opq_len;       /* Length of protocol-specific queue header. */
  286|  10.2k|    unsigned int len;           /* Total length of queue + properties. */
  287|       |
  288|       |    /* Obtain the port number from the message header. */
  289|  10.2k|    if (oh->version == OFP10_VERSION) {
  ------------------
  |  Branch (289:9): [True: 3.09k, False: 7.12k]
  ------------------
  290|  3.09k|        const struct ofp10_queue_get_config_reply *oqgcr10 = msg->msg;
  291|  3.09k|        queue->port = u16_to_ofp(ntohs(oqgcr10->port));
  292|  7.12k|    } else {
  293|  7.12k|        const struct ofp11_queue_get_config_reply *oqgcr11 = msg->msg;
  294|  7.12k|        enum ofperr error = ofputil_port_from_ofp11(oqgcr11->port,
  295|  7.12k|                                                    &queue->port);
  296|  7.12k|        if (error) {
  ------------------
  |  Branch (296:13): [True: 251, False: 6.87k]
  ------------------
  297|    251|            return error;
  298|    251|        }
  299|  7.12k|    }
  300|       |
  301|       |    /* Pull off the queue header and get the queue number and length. */
  302|  9.97k|    if (oh->version < OFP12_VERSION) {
  ------------------
  |  Branch (302:9): [True: 9.33k, False: 631]
  ------------------
  303|  9.33k|        const struct ofp10_packet_queue *opq10;
  304|  9.33k|        opq10 = ofpbuf_try_pull(msg, sizeof *opq10);
  305|  9.33k|        if (!opq10) {
  ------------------
  |  Branch (305:13): [True: 0, False: 9.33k]
  ------------------
  306|      0|            return OFPERR_OFPBRC_BAD_LEN;
  307|      0|        }
  308|  9.33k|        queue->queue = ntohl(opq10->queue_id);
  309|  9.33k|        len = ntohs(opq10->len);
  310|  9.33k|        opq_len = sizeof *opq10;
  311|  9.33k|    } else {
  312|    631|        const struct ofp12_packet_queue *opq12;
  313|    631|        opq12 = ofpbuf_try_pull(msg, sizeof *opq12);
  314|    631|        if (!opq12) {
  ------------------
  |  Branch (314:13): [True: 418, False: 213]
  ------------------
  315|    418|            return OFPERR_OFPBRC_BAD_LEN;
  316|    418|        }
  317|    213|        queue->queue = ntohl(opq12->queue_id);
  318|    213|        len = ntohs(opq12->len);
  319|    213|        opq_len = sizeof *opq12;
  320|    213|    }
  321|       |
  322|       |    /* Length check. */
  323|  9.55k|    if (len < opq_len || len > msg->size + opq_len || len % 8) {
  ------------------
  |  Branch (323:9): [True: 353, False: 9.19k]
  |  Branch (323:26): [True: 523, False: 8.67k]
  |  Branch (323:55): [True: 563, False: 8.11k]
  ------------------
  324|  1.43k|        return OFPERR_OFPBRC_BAD_LEN;
  325|  1.43k|    }
  326|  8.11k|    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|  10.3k|    while (len > 0) {
  ------------------
  |  Branch (330:12): [True: 3.49k, False: 6.90k]
  ------------------
  331|  3.49k|        const struct ofp10_queue_prop_header *hdr;
  332|  3.49k|        unsigned int property;
  333|  3.49k|        unsigned int prop_len;
  334|  3.49k|        enum ofperr error = 0;
  335|       |
  336|  3.49k|        hdr = ofpbuf_at_assert(msg, 0, sizeof *hdr);
  337|  3.49k|        prop_len = ntohs(hdr->len);
  338|  3.49k|        if (prop_len < sizeof *hdr || prop_len > len || prop_len % 8) {
  ------------------
  |  Branch (338:13): [True: 75, False: 3.41k]
  |  Branch (338:39): [True: 405, False: 3.01k]
  |  Branch (338:57): [True: 572, False: 2.44k]
  ------------------
  339|  1.05k|            return OFPERR_OFPBRC_BAD_LEN;
  340|  1.05k|        }
  341|       |
  342|  2.44k|        property = ntohs(hdr->property);
  343|  2.44k|        switch (property) {
  344|    158|        case OFPQT10_MIN_RATE:
  ------------------
  |  Branch (344:9): [True: 158, False: 2.28k]
  ------------------
  345|    158|            error = parse_ofp10_queue_rate(hdr, &queue->min_rate);
  346|    158|            break;
  347|       |
  348|    530|        case OFPQT11_MAX_RATE:
  ------------------
  |  Branch (348:9): [True: 530, False: 1.91k]
  ------------------
  349|    530|            error = parse_ofp10_queue_rate(hdr, &queue->max_rate);
  350|    530|            break;
  351|       |
  352|  1.75k|        default:
  ------------------
  |  Branch (352:9): [True: 1.75k, False: 688]
  ------------------
  353|  1.75k|            VLOG_INFO_RL(&rl, "unknown queue property %u", property);
  ------------------
  |  |  225|  1.75k|#define VLOG_INFO_RL(RL, ...) VLOG_RL(RL, VLL_INFO, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.75k|    do {                                                                \
  |  |  |  |  288|  1.75k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.75k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.75k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.75k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  354|  1.75k|            break;
  355|  2.44k|        }
  356|  2.44k|        if (error) {
  ------------------
  |  Branch (356:13): [True: 161, False: 2.28k]
  ------------------
  357|    161|            return error;
  358|    161|        }
  359|       |
  360|  2.28k|        ofpbuf_pull(msg, prop_len);
  361|  2.28k|        len -= prop_len;
  362|  2.28k|    }
  363|  6.90k|    return 0;
  364|  8.11k|}
ofp-queue.c:parse_ofp10_queue_rate:
  268|    688|{
  269|    688|    const struct ofp10_queue_prop_rate *oqpr;
  270|       |
  271|    688|    if (hdr->len == htons(sizeof *oqpr)) {
  ------------------
  |  Branch (271:9): [True: 527, False: 161]
  ------------------
  272|    527|        oqpr = (const struct ofp10_queue_prop_rate *) hdr;
  273|    527|        *rate = ntohs(oqpr->rate);
  274|    527|        return 0;
  275|    527|    } else {
  276|    161|        return OFPERR_OFPBRC_BAD_LEN;
  277|    161|    }
  278|    688|}
ofp-queue.c:compare_queues:
  474|  7.42k|{
  475|  7.42k|    const struct ofputil_queue_config *a = a_;
  476|  7.42k|    const struct ofputil_queue_config *b = b_;
  477|       |
  478|  7.42k|    uint16_t ap = ofp_to_u16(a->port);
  479|  7.42k|    uint16_t bp = ofp_to_u16(b->port);
  480|  7.42k|    if (ap != bp) {
  ------------------
  |  Branch (480:9): [True: 381, False: 7.04k]
  ------------------
  481|    381|        return ap < bp ? -1 : 1;
  ------------------
  |  Branch (481:16): [True: 203, False: 178]
  ------------------
  482|    381|    }
  483|       |
  484|  7.04k|    uint32_t aq = a->queue;
  485|  7.04k|    uint32_t bq = b->queue;
  486|  7.04k|    return aq < bq ? -1 : aq > bq;
  ------------------
  |  Branch (486:12): [True: 2.09k, False: 4.95k]
  ------------------
  487|  7.42k|}
ofp-queue.c:print_queue_rate:
  463|  19.8k|{
  464|  19.8k|    if (rate <= 1000) {
  ------------------
  |  Branch (464:9): [True: 2.75k, False: 17.1k]
  ------------------
  465|  2.75k|        ds_put_format(string, " %s:%u.%u%%", name, rate / 10, rate % 10);
  466|  17.1k|    } else if (rate < UINT16_MAX) {
  ------------------
  |  Branch (466:16): [True: 402, False: 16.7k]
  ------------------
  467|    402|        ds_put_format(string, " %s:(disabled)", name);
  468|    402|    }
  469|  19.8k|}
ofp-queue.c:ofputil_pull_ofp14_queue_stats:
  699|  20.4k|{
  700|  20.4k|    const struct ofp14_queue_stats *qs14;
  701|  20.4k|    size_t len;
  702|       |
  703|  20.4k|    qs14 = ofpbuf_try_pull(msg, sizeof *qs14);
  704|  20.4k|    if (!qs14) {
  ------------------
  |  Branch (704:9): [True: 1.31k, False: 19.1k]
  ------------------
  705|  1.31k|        return OFPERR_OFPBRC_BAD_LEN;
  706|  1.31k|    }
  707|       |
  708|  19.1k|    len = ntohs(qs14->length);
  709|  19.1k|    if (len < sizeof *qs14 || len - sizeof *qs14 > msg->size) {
  ------------------
  |  Branch (709:9): [True: 1.42k, False: 17.7k]
  |  Branch (709:31): [True: 3.00k, False: 14.7k]
  ------------------
  710|  4.42k|        return OFPERR_OFPBRC_BAD_LEN;
  711|  4.42k|    }
  712|  14.7k|    ofpbuf_pull(msg, len - sizeof *qs14);
  713|       |
  714|       |    /* No properties yet defined, so ignore them for now. */
  715|       |
  716|  14.7k|    return ofputil_queue_stats_from_ofp13(oqs, &qs14->qs);
  717|  19.1k|}
ofp-queue.c:ofputil_queue_stats_from_ofp13:
  686|  17.8k|{
  687|  17.8k|    enum ofperr error = ofputil_queue_stats_from_ofp11(oqs, &qs13->qs);
  688|  17.8k|    if (!error) {
  ------------------
  |  Branch (688:9): [True: 6.21k, False: 11.6k]
  ------------------
  689|  6.21k|        oqs->duration_sec = ntohl(qs13->duration_sec);
  690|  6.21k|        oqs->duration_nsec = ntohl(qs13->duration_nsec);
  691|  6.21k|    }
  692|       |
  693|  17.8k|    return error;
  694|  17.8k|}
ofp-queue.c:ofputil_queue_stats_from_ofp11:
  666|  19.7k|{
  667|  19.7k|    enum ofperr error;
  668|       |
  669|  19.7k|    error = ofputil_port_from_ofp11(qs11->port_no, &oqs->port_no);
  670|  19.7k|    if (error) {
  ------------------
  |  Branch (670:9): [True: 11.9k, False: 7.77k]
  ------------------
  671|  11.9k|        return error;
  672|  11.9k|    }
  673|       |
  674|  7.77k|    oqs->queue_id = ntohl(qs11->queue_id);
  675|  7.77k|    oqs->tx_bytes = ntohll(qs11->tx_bytes);
  676|  7.77k|    oqs->tx_packets = ntohll(qs11->tx_packets);
  677|  7.77k|    oqs->tx_errors = ntohll(qs11->tx_errors);
  678|  7.77k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  679|       |
  680|  7.77k|    return 0;
  681|  19.7k|}
ofp-queue.c:ofputil_queue_stats_from_ofp10:
  652|  7.99k|{
  653|  7.99k|    oqs->port_no = u16_to_ofp(ntohs(qs10->port_no));
  654|  7.99k|    oqs->queue_id = ntohl(qs10->queue_id);
  655|  7.99k|    oqs->tx_bytes = ntohll(get_32aligned_be64(&qs10->tx_bytes));
  656|  7.99k|    oqs->tx_packets = ntohll(get_32aligned_be64(&qs10->tx_packets));
  657|  7.99k|    oqs->tx_errors = ntohll(get_32aligned_be64(&qs10->tx_errors));
  658|  7.99k|    oqs->duration_sec = oqs->duration_nsec = UINT32_MAX;
  659|       |
  660|  7.99k|    return 0;
  661|  7.99k|}
ofp-queue.c:print_queue_stat:
  866|  23.6k|{
  867|  23.6k|    ds_put_cstr(string, leader);
  868|  23.6k|    if (stat != UINT64_MAX) {
  ------------------
  |  Branch (868:9): [True: 17.8k, False: 5.81k]
  ------------------
  869|  17.8k|        ds_put_format(string, "%"PRIu64, stat);
  870|  17.8k|    } else {
  871|  5.81k|        ds_put_char(string, '?');
  872|  5.81k|    }
  873|  23.6k|    if (more) {
  ------------------
  |  Branch (873:9): [True: 23.6k, False: 0]
  ------------------
  874|  23.6k|        ds_put_cstr(string, ", ");
  875|  23.6k|    } else {
  876|      0|        ds_put_cstr(string, "\n");
  877|      0|    }
  878|  23.6k|}

ofputil_pull_switch_features:
   71|  4.36k|{
   72|  4.36k|    const struct ofp_header *oh = b->data;
   73|  4.36k|    enum ofpraw raw = ofpraw_pull_assert(b);
   74|  4.36k|    const struct ofp_switch_features *osf = ofpbuf_pull(b, sizeof *osf);
   75|  4.36k|    features->datapath_id = ntohll(osf->datapath_id);
   76|  4.36k|    features->n_buffers = ntohl(osf->n_buffers);
   77|  4.36k|    features->n_tables = osf->n_tables;
   78|  4.36k|    features->auxiliary_id = 0;
   79|       |
   80|  4.36k|    features->capabilities = ntohl(osf->capabilities) &
   81|  4.36k|        ofputil_capabilities_mask(oh->version);
   82|       |
   83|  4.36k|    if (raw == OFPRAW_OFPT10_FEATURES_REPLY) {
  ------------------
  |  Branch (83:9): [True: 1.88k, False: 2.47k]
  ------------------
   84|  1.88k|        if (osf->capabilities & htonl(OFPC10_STP)) {
  ------------------
  |  Branch (84:13): [True: 646, False: 1.23k]
  ------------------
   85|    646|            features->capabilities |= OFPUTIL_C_STP;
   86|    646|        }
   87|  1.88k|        features->ofpacts = ofpact_bitmap_from_openflow(osf->actions,
   88|  1.88k|                                                        OFP10_VERSION);
   89|  2.47k|    } else if (raw == OFPRAW_OFPT11_FEATURES_REPLY
  ------------------
  |  Branch (89:16): [True: 839, False: 1.64k]
  ------------------
   90|  2.47k|               || raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (90:19): [True: 1.64k, False: 0]
  ------------------
   91|  2.47k|        if (osf->capabilities & htonl(OFPC11_GROUP_STATS)) {
  ------------------
  |  Branch (91:13): [True: 1.43k, False: 1.04k]
  ------------------
   92|  1.43k|            features->capabilities |= OFPUTIL_C_GROUP_STATS;
   93|  1.43k|        }
   94|  2.47k|        features->ofpacts = 0;
   95|  2.47k|        if (raw == OFPRAW_OFPT13_FEATURES_REPLY) {
  ------------------
  |  Branch (95:13): [True: 1.64k, False: 839]
  ------------------
   96|  1.64k|            features->auxiliary_id = osf->auxiliary_id;
   97|  1.64k|        }
   98|  2.47k|    } else {
   99|      0|        return OFPERR_OFPBRC_BAD_VERSION;
  100|      0|    }
  101|       |
  102|  4.36k|    return 0;
  103|  4.36k|}
ofputil_switch_features_format:
  255|  4.36k|{
  256|  4.36k|    ds_put_format(s, " dpid:%016"PRIx64"\n", features->datapath_id);
  257|       |
  258|  4.36k|    ds_put_format(s, "n_tables:%"PRIu8", n_buffers:%"PRIu32,
  259|  4.36k|                  features->n_tables, features->n_buffers);
  260|  4.36k|    if (features->auxiliary_id) {
  ------------------
  |  Branch (260:9): [True: 849, False: 3.51k]
  ------------------
  261|    849|        ds_put_format(s, ", auxiliary_id:%"PRIu8, features->auxiliary_id);
  262|    849|    }
  263|  4.36k|    ds_put_char(s, '\n');
  264|       |
  265|  4.36k|    ds_put_cstr(s, "capabilities: ");
  266|  4.36k|    ofp_print_bit_names(s, features->capabilities,
  267|  4.36k|                        ofputil_capabilities_to_name, ' ');
  268|  4.36k|    ds_put_char(s, '\n');
  269|       |
  270|  4.36k|    if (features->ofpacts) {
  ------------------
  |  Branch (270:9): [True: 1.84k, False: 2.51k]
  ------------------
  271|  1.84k|        ds_put_cstr(s, "actions: ");
  272|  1.84k|        ofpact_bitmap_format(features->ofpacts, s);
  273|  1.84k|        ds_put_char(s, '\n');
  274|  1.84k|    }
  275|  4.36k|}
ofputil_frag_handling_to_string:
  279|  3.89k|{
  280|  3.89k|    switch (frag) {
  ------------------
  |  Branch (280:13): [True: 3.89k, False: 0]
  ------------------
  281|    660|    case OFPUTIL_FRAG_NORMAL:   return "normal";
  ------------------
  |  Branch (281:5): [True: 660, False: 3.23k]
  ------------------
  282|    500|    case OFPUTIL_FRAG_DROP:     return "drop";
  ------------------
  |  Branch (282:5): [True: 500, False: 3.39k]
  ------------------
  283|  2.60k|    case OFPUTIL_FRAG_REASM:    return "reassemble";
  ------------------
  |  Branch (283:5): [True: 2.60k, False: 1.28k]
  ------------------
  284|    126|    case OFPUTIL_FRAG_NX_MATCH: return "nx-match";
  ------------------
  |  Branch (284:5): [True: 126, False: 3.76k]
  ------------------
  285|  3.89k|    }
  286|       |
  287|      0|    OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  288|  3.89k|}
ofputil_decode_get_config_reply:
  339|  3.47k|{
  340|  3.47k|    ofputil_decode_switch_config(oh, config);
  341|  3.47k|}
ofputil_decode_set_config:
  346|  3.34k|{
  347|  3.34k|    return (ofputil_decode_switch_config(oh, config)
  ------------------
  |  Branch (347:13): [True: 422, False: 2.92k]
  ------------------
  348|  3.34k|            ? 0
  349|  3.34k|            : OFPERR_OFPSCFC_BAD_FLAGS);
  350|  3.34k|}
ofputil_switch_config_format:
  386|  3.89k|{
  387|  3.89k|    ds_put_format(s, " frags=%s",
  388|  3.89k|                  ofputil_frag_handling_to_string(config->frag));
  389|       |
  390|  3.89k|    if (config->invalid_ttl_to_controller > 0) {
  ------------------
  |  Branch (390:9): [True: 423, False: 3.46k]
  ------------------
  391|    423|        ds_put_format(s, " invalid_ttl_to_controller");
  392|    423|    }
  393|       |
  394|  3.89k|    ds_put_format(s, " miss_send_len=%"PRIu16"\n", config->miss_send_len);
  395|  3.89k|}
ofp-switch.c:ofputil_capabilities_mask:
   44|  4.36k|{
   45|       |    /* Handle capabilities whose bit is unique for all OpenFlow versions */
   46|  4.36k|    switch (ofp_version) {
   47|  1.88k|    case OFP10_VERSION:
  ------------------
  |  Branch (47:5): [True: 1.88k, False: 2.47k]
  ------------------
   48|  2.38k|    case OFP11_VERSION:
  ------------------
  |  Branch (48:5): [True: 498, False: 3.86k]
  ------------------
   49|  2.38k|        return OFPC_COMMON | OFPC_ARP_MATCH_IP;
  ------------------
  |  |   30|  2.38k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  2.38k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   50|    341|    case OFP12_VERSION:
  ------------------
  |  Branch (50:5): [True: 341, False: 4.02k]
  ------------------
   51|    360|    case OFP13_VERSION:
  ------------------
  |  Branch (51:5): [True: 19, False: 4.34k]
  ------------------
   52|    360|        return OFPC_COMMON | OFPC12_PORT_BLOCKED;
  ------------------
  |  |   30|    360|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|    360|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   53|    274|    case OFP14_VERSION:
  ------------------
  |  Branch (53:5): [True: 274, False: 4.08k]
  ------------------
   54|  1.62k|    case OFP15_VERSION:
  ------------------
  |  Branch (54:5): [True: 1.34k, False: 3.01k]
  ------------------
   55|  1.62k|        return OFPC_COMMON | OFPC12_PORT_BLOCKED | OFPC14_BUNDLES
  ------------------
  |  |   30|  1.62k|#define OFPC_COMMON (OFPC_FLOW_STATS | OFPC_TABLE_STATS | OFPC_PORT_STATS | \
  |  |   31|  1.62k|                     OFPC_IP_REASM | OFPC_QUEUE_STATS)
  ------------------
   56|  1.62k|            | OFPC14_FLOW_MONITORING;
   57|      0|    default:
  ------------------
  |  Branch (57:5): [True: 0, False: 4.36k]
  ------------------
   58|       |        /* Caller needs to check osf->header.version itself */
   59|      0|        return 0;
   60|  4.36k|    }
   61|  4.36k|}
ofp-switch.c:ofputil_capabilities_to_name:
  232|  12.0k|{
  233|  12.0k|    enum ofputil_capabilities capabilities = bit;
  234|       |
  235|  12.0k|    switch (capabilities) {
  ------------------
  |  Branch (235:13): [True: 12.0k, False: 0]
  ------------------
  236|  2.10k|    case OFPUTIL_C_FLOW_STATS:   return "FLOW_STATS";
  ------------------
  |  Branch (236:5): [True: 2.10k, False: 9.92k]
  ------------------
  237|  1.48k|    case OFPUTIL_C_TABLE_STATS:  return "TABLE_STATS";
  ------------------
  |  Branch (237:5): [True: 1.48k, False: 10.5k]
  ------------------
  238|  1.53k|    case OFPUTIL_C_PORT_STATS:   return "PORT_STATS";
  ------------------
  |  Branch (238:5): [True: 1.53k, False: 10.4k]
  ------------------
  239|  1.95k|    case OFPUTIL_C_IP_REASM:     return "IP_REASM";
  ------------------
  |  Branch (239:5): [True: 1.95k, False: 10.0k]
  ------------------
  240|    889|    case OFPUTIL_C_QUEUE_STATS:  return "QUEUE_STATS";
  ------------------
  |  Branch (240:5): [True: 889, False: 11.1k]
  ------------------
  241|    694|    case OFPUTIL_C_ARP_MATCH_IP: return "ARP_MATCH_IP";
  ------------------
  |  Branch (241:5): [True: 694, False: 11.3k]
  ------------------
  242|    646|    case OFPUTIL_C_STP:          return "STP";
  ------------------
  |  Branch (242:5): [True: 646, False: 11.3k]
  ------------------
  243|  1.43k|    case OFPUTIL_C_GROUP_STATS:  return "GROUP_STATS";
  ------------------
  |  Branch (243:5): [True: 1.43k, False: 10.5k]
  ------------------
  244|    373|    case OFPUTIL_C_PORT_BLOCKED: return "PORT_BLOCKED";
  ------------------
  |  Branch (244:5): [True: 373, False: 11.6k]
  ------------------
  245|    604|    case OFPUTIL_C_BUNDLES:      return "BUNDLES";
  ------------------
  |  Branch (245:5): [True: 604, False: 11.4k]
  ------------------
  246|    312|    case OFPUTIL_C_FLOW_MONITORING: return "FLOW_MONITORING";
  ------------------
  |  Branch (246:5): [True: 312, False: 11.7k]
  ------------------
  247|  12.0k|    }
  248|       |
  249|      0|    return NULL;
  250|  12.0k|}
ofp-switch.c:ofputil_decode_switch_config:
  316|  6.81k|{
  317|  6.81k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
  318|  6.81k|    ofpraw_pull_assert(&b);
  319|       |
  320|  6.81k|    const struct ofp_switch_config *osc = ofpbuf_pull(&b, sizeof *osc);
  321|  6.81k|    config->frag = ntohs(osc->flags) & OFPC_FRAG_MASK;
  322|  6.81k|    config->miss_send_len = ntohs(osc->miss_send_len);
  323|       |
  324|  6.81k|    ovs_be16 valid_mask = htons(OFPC_FRAG_MASK);
  325|  6.81k|    if (oh->version < OFP13_VERSION) {
  ------------------
  |  Branch (325:9): [True: 777, False: 6.03k]
  ------------------
  326|    777|        const ovs_be16 ttl_bit = htons(OFPC_INVALID_TTL_TO_CONTROLLER);
  327|    777|        valid_mask |= ttl_bit;
  328|    777|        config->invalid_ttl_to_controller = (osc->flags & ttl_bit) != 0;
  329|  6.03k|    } else {
  330|  6.03k|        config->invalid_ttl_to_controller = -1;
  331|  6.03k|    }
  332|       |
  333|  6.81k|    return !(osc->flags & ~valid_mask);
  334|  6.81k|}

ofputil_table_miss_to_string:
   46|  21.0k|{
   47|  21.0k|    switch (miss) {
   48|      0|    case OFPUTIL_TABLE_MISS_DEFAULT: return "default";
  ------------------
  |  Branch (48:5): [True: 0, False: 21.0k]
  ------------------
   49|  16.6k|    case OFPUTIL_TABLE_MISS_CONTROLLER: return "controller";
  ------------------
  |  Branch (49:5): [True: 16.6k, False: 4.44k]
  ------------------
   50|  2.42k|    case OFPUTIL_TABLE_MISS_CONTINUE: return "continue";
  ------------------
  |  Branch (50:5): [True: 2.42k, False: 18.6k]
  ------------------
   51|  2.02k|    case OFPUTIL_TABLE_MISS_DROP: return "drop";
  ------------------
  |  Branch (51:5): [True: 2.02k, False: 19.0k]
  ------------------
   52|      0|    default: return "***error***";
  ------------------
  |  Branch (52:5): [True: 0, False: 21.0k]
  ------------------
   53|  21.0k|    }
   54|  21.0k|}
ofputil_table_eviction_to_string:
   58|  4.12k|{
   59|  4.12k|    switch (eviction) {
   60|      0|    case OFPUTIL_TABLE_EVICTION_DEFAULT: return "default";
  ------------------
  |  Branch (60:5): [True: 0, False: 4.12k]
  ------------------
   61|  1.04k|    case OFPUTIL_TABLE_EVICTION_ON: return "on";
  ------------------
  |  Branch (61:5): [True: 1.04k, False: 3.07k]
  ------------------
   62|  2.83k|    case OFPUTIL_TABLE_EVICTION_OFF: return "off";
  ------------------
  |  Branch (62:5): [True: 2.83k, False: 1.29k]
  ------------------
   63|    243|    default: return "***error***";
  ------------------
  |  Branch (63:5): [True: 243, False: 3.87k]
  ------------------
   64|  4.12k|    }
   65|  4.12k|}
ofputil_table_vacancy_to_string:
   69|  4.12k|{
   70|  4.12k|    switch (vacancy) {
   71|      0|    case OFPUTIL_TABLE_VACANCY_DEFAULT: return "default";
  ------------------
  |  Branch (71:5): [True: 0, False: 4.12k]
  ------------------
   72|  1.71k|    case OFPUTIL_TABLE_VACANCY_ON: return "on";
  ------------------
  |  Branch (72:5): [True: 1.71k, False: 2.40k]
  ------------------
   73|  2.40k|    case OFPUTIL_TABLE_VACANCY_OFF: return "off";
  ------------------
  |  Branch (73:5): [True: 2.40k, False: 1.71k]
  ------------------
   74|      0|    default: return "***error***";
  ------------------
  |  Branch (74:5): [True: 0, False: 4.12k]
  ------------------
   75|  4.12k|    }
   76|  4.12k|}
ofputil_table_map_get_name:
  123|   135k|{
  124|   135k|    struct namemap_node *node
  125|   135k|        = map ? namemap_find_by_number(&map->map, table_id) : NULL;
  ------------------
  |  Branch (125:11): [True: 0, False: 135k]
  ------------------
  126|   135k|    return node && !node->duplicate ? node->name : NULL;
  ------------------
  |  Branch (126:12): [True: 0, False: 135k]
  |  Branch (126:20): [True: 0, False: 0]
  ------------------
  127|   135k|}
ofputil_format_table:
  201|  78.5k|{
  202|  78.5k|    const char *table_name = ofputil_table_map_get_name(table_map, table);
  203|  78.5k|    if (table_name) {
  ------------------
  |  Branch (203:9): [True: 0, False: 78.5k]
  ------------------
  204|      0|        namemap_put_name(table_name, s);
  205|  78.5k|    } else {
  206|       |        ds_put_format(s, "%"PRIu8, table);
  207|  78.5k|    }
  208|  78.5k|}
ofputil_decode_table_features:
  375|  13.4k|{
  376|  13.4k|    bool loose = raw_properties != NULL;
  377|       |
  378|  13.4k|    memset(tf, 0, sizeof *tf);
  379|       |
  380|  13.4k|    if (!msg->header) {
  ------------------
  |  Branch (380:9): [True: 11.4k, False: 2.05k]
  ------------------
  381|  11.4k|        ofpraw_pull_assert(msg);
  382|  11.4k|    }
  383|       |
  384|  13.4k|    if (!msg->size) {
  ------------------
  |  Branch (384:9): [True: 260, False: 13.2k]
  ------------------
  385|    260|        return EOF;
  386|    260|    }
  387|       |
  388|  13.2k|    const struct ofp_header *oh = msg->header;
  389|  13.2k|    struct ofp13_table_features *otf = msg->data;
  390|  13.2k|    if (msg->size < sizeof *otf) {
  ------------------
  |  Branch (390:9): [True: 2.40k, False: 10.8k]
  ------------------
  391|  2.40k|        return OFPERR_OFPBPC_BAD_LEN;
  392|  2.40k|    }
  393|       |
  394|  10.8k|    unsigned int len = ntohs(otf->length);
  395|  10.8k|    if (len < sizeof *otf || len % 8 || len > msg->size) {
  ------------------
  |  Branch (395:9): [True: 298, False: 10.5k]
  |  Branch (395:30): [True: 175, False: 10.3k]
  |  Branch (395:41): [True: 446, False: 9.90k]
  ------------------
  396|    919|        return OFPERR_OFPBPC_BAD_LEN;
  397|    919|    }
  398|       |
  399|  9.90k|    if (oh->version >= OFP15_VERSION) {
  ------------------
  |  Branch (399:9): [True: 8.53k, False: 1.37k]
  ------------------
  400|  8.53k|        if (!ofp15_table_features_command_is_valid(otf->command)) {
  ------------------
  |  Branch (400:13): [True: 113, False: 8.41k]
  ------------------
  401|    113|            return OFPERR_OFPTFFC_BAD_COMMAND;
  402|    113|        }
  403|  8.41k|        tf->command = otf->command;
  404|  8.41k|    } else {
  405|  1.37k|        tf->command = OFPTFC15_REPLACE;
  406|  1.37k|    }
  407|       |
  408|  9.79k|    tf->table_id = otf->table_id;
  409|  9.79k|    if (tf->table_id == OFPTT_ALL) {
  ------------------
  |  Branch (409:9): [True: 38, False: 9.75k]
  ------------------
  410|     38|        return OFPERR_OFPTFFC_BAD_TABLE;
  411|     38|    }
  412|       |
  413|  9.75k|    ovs_strlcpy_arrays(tf->name, otf->name);
  ------------------
  |  |  209|  9.75k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  9.75k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 9.75k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  414|  9.75k|    tf->metadata_match = otf->metadata_match;
  415|  9.75k|    tf->metadata_write = otf->metadata_write;
  416|  9.75k|    tf->miss_config = OFPUTIL_TABLE_MISS_DEFAULT;
  417|  9.75k|    if (oh->version >= OFP14_VERSION) {
  ------------------
  |  Branch (417:9): [True: 9.70k, False: 57]
  ------------------
  418|  9.70k|        uint32_t caps = ntohl(otf->capabilities);
  419|  9.70k|        tf->supports_eviction = (caps & OFPTC14_EVICTION) != 0;
  420|  9.70k|        tf->supports_vacancy_events = (caps & OFPTC14_VACANCY_EVENTS) != 0;
  421|  9.70k|    } else {
  422|     57|        tf->supports_eviction = -1;
  423|     57|        tf->supports_vacancy_events = -1;
  424|     57|    }
  425|  9.75k|    tf->max_entries = ntohl(otf->max_entries);
  426|       |
  427|  9.75k|    struct ofpbuf properties = ofpbuf_const_initializer(ofpbuf_pull(msg, len),
  428|  9.75k|                                                        len);
  429|  9.75k|    ofpbuf_pull(&properties, sizeof *otf);
  430|  9.75k|    tf->any_properties = properties.size > 0;
  431|  9.75k|    if (raw_properties) {
  ------------------
  |  Branch (431:9): [True: 9.75k, False: 0]
  ------------------
  432|  9.75k|        *raw_properties = properties;
  433|  9.75k|    }
  434|  9.75k|    uint32_t seen = 0;
  435|  21.9k|    while (properties.size > 0) {
  ------------------
  |  Branch (435:12): [True: 18.0k, False: 3.89k]
  ------------------
  436|  18.0k|        struct ofpbuf payload;
  437|  18.0k|        enum ofperr error;
  438|  18.0k|        uint64_t type;
  439|       |
  440|  18.0k|        error = pull_table_feature_property(&properties, &payload, &type);
  441|  18.0k|        if (error) {
  ------------------
  |  Branch (441:13): [True: 1.82k, False: 16.1k]
  ------------------
  442|  1.82k|            return error;
  443|  1.82k|        }
  444|       |
  445|  16.1k|        if (type < 32) {
  ------------------
  |  Branch (445:13): [True: 12.5k, False: 3.66k]
  ------------------
  446|  12.5k|            uint32_t bit = 1u << type;
  447|  12.5k|            if (seen & bit) {
  ------------------
  |  Branch (447:17): [True: 329, False: 12.2k]
  ------------------
  448|    329|                return OFPERR_OFPTFFC_BAD_FEATURES;
  449|    329|            }
  450|  12.2k|            seen |= bit;
  451|  12.2k|        }
  452|       |
  453|  15.8k|        switch ((enum ofp13_table_feature_prop_type) type) {
  454|    839|        case OFPTFPT13_INSTRUCTIONS:
  ------------------
  |  Branch (454:9): [True: 839, False: 15.0k]
  ------------------
  455|    839|            error = parse_instruction_ids(&payload, loose,
  456|    839|                                          &tf->nonmiss.instructions);
  457|    839|            break;
  458|  2.16k|        case OFPTFPT13_INSTRUCTIONS_MISS:
  ------------------
  |  Branch (458:9): [True: 2.16k, False: 13.7k]
  ------------------
  459|  2.16k|            error = parse_instruction_ids(&payload, loose,
  460|  2.16k|                                          &tf->miss.instructions);
  461|  2.16k|            break;
  462|       |
  463|  2.43k|        case OFPTFPT13_NEXT_TABLES:
  ------------------
  |  Branch (463:9): [True: 2.43k, False: 13.4k]
  ------------------
  464|  2.43k|            error = parse_table_features_next_table(&payload,
  465|  2.43k|                                                    tf->nonmiss.next);
  466|  2.43k|            break;
  467|    604|        case OFPTFPT13_NEXT_TABLES_MISS:
  ------------------
  |  Branch (467:9): [True: 604, False: 15.2k]
  ------------------
  468|    604|            error = parse_table_features_next_table(&payload, tf->miss.next);
  469|    604|            break;
  470|       |
  471|     76|        case OFPTFPT13_WRITE_ACTIONS:
  ------------------
  |  Branch (471:9): [True: 76, False: 15.7k]
  ------------------
  472|     76|            error = parse_action_bitmap(&payload, oh->version,
  473|     76|                                        &tf->nonmiss.write.ofpacts);
  474|     76|            break;
  475|    129|        case OFPTFPT13_WRITE_ACTIONS_MISS:
  ------------------
  |  Branch (475:9): [True: 129, False: 15.7k]
  ------------------
  476|    129|            error = parse_action_bitmap(&payload, oh->version,
  477|    129|                                        &tf->miss.write.ofpacts);
  478|    129|            break;
  479|       |
  480|  1.11k|        case OFPTFPT13_APPLY_ACTIONS:
  ------------------
  |  Branch (480:9): [True: 1.11k, False: 14.7k]
  ------------------
  481|  1.11k|            error = parse_action_bitmap(&payload, oh->version,
  482|  1.11k|                                        &tf->nonmiss.apply.ofpacts);
  483|  1.11k|            break;
  484|    798|        case OFPTFPT13_APPLY_ACTIONS_MISS:
  ------------------
  |  Branch (484:9): [True: 798, False: 15.0k]
  ------------------
  485|    798|            error = parse_action_bitmap(&payload, oh->version,
  486|    798|                                        &tf->miss.apply.ofpacts);
  487|    798|            break;
  488|       |
  489|    739|        case OFPTFPT13_MATCH:
  ------------------
  |  Branch (489:9): [True: 739, False: 15.1k]
  ------------------
  490|    739|            error = parse_oxms(&payload, loose, &tf->match, &tf->mask);
  491|    739|            break;
  492|    711|        case OFPTFPT13_WILDCARDS:
  ------------------
  |  Branch (492:9): [True: 711, False: 15.1k]
  ------------------
  493|    711|            error = parse_oxms(&payload, loose, &tf->wildcard, NULL);
  494|    711|            break;
  495|       |
  496|    838|        case OFPTFPT13_WRITE_SETFIELD:
  ------------------
  |  Branch (496:9): [True: 838, False: 15.0k]
  ------------------
  497|    838|            error = parse_oxms(&payload, loose,
  498|    838|                               &tf->nonmiss.write.set_fields, NULL);
  499|    838|            break;
  500|    665|        case OFPTFPT13_WRITE_SETFIELD_MISS:
  ------------------
  |  Branch (500:9): [True: 665, False: 15.2k]
  ------------------
  501|    665|            error = parse_oxms(&payload, loose,
  502|    665|                               &tf->miss.write.set_fields, NULL);
  503|    665|            break;
  504|    300|        case OFPTFPT13_APPLY_SETFIELD:
  ------------------
  |  Branch (504:9): [True: 300, False: 15.5k]
  ------------------
  505|    300|            error = parse_oxms(&payload, loose,
  506|    300|                               &tf->nonmiss.apply.set_fields, NULL);
  507|    300|            break;
  508|    793|        case OFPTFPT13_APPLY_SETFIELD_MISS:
  ------------------
  |  Branch (508:9): [True: 793, False: 15.0k]
  ------------------
  509|    793|            error = parse_oxms(&payload, loose,
  510|    793|                               &tf->miss.apply.set_fields, NULL);
  511|    793|            break;
  512|       |
  513|      0|        case OFPTFPT13_EXPERIMENTER:
  ------------------
  |  Branch (513:9): [True: 0, False: 15.8k]
  ------------------
  514|      0|        case OFPTFPT13_EXPERIMENTER_MISS:
  ------------------
  |  Branch (514:9): [True: 0, False: 15.8k]
  ------------------
  515|  3.66k|        default:
  ------------------
  |  Branch (515:9): [True: 3.66k, False: 12.2k]
  ------------------
  516|  3.66k|            error = OFPPROP_UNKNOWN(loose, "table features", type);
  ------------------
  |  |  144|  3.66k|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  517|  3.66k|            break;
  518|  15.8k|        }
  519|  15.8k|        if (error) {
  ------------------
  |  Branch (519:13): [True: 3.71k, False: 12.1k]
  ------------------
  520|  3.71k|            return error;
  521|  3.71k|        }
  522|  15.8k|    }
  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|  3.89k|    unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  3.89k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  3.89k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  3.89k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  3.89k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  3.89k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  3.89k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  3.89k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  3.89k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
                  unsigned int missing = (seen & OFPTFPT13_REQUIRED) ^ OFPTFPT13_REQUIRED;
  ------------------
  |  |  276|  3.89k|#define OFPTFPT13_REQUIRED ((1u << OFPTFPT13_INSTRUCTIONS) |    \
  |  |  277|  3.89k|                            (1u << OFPTFPT13_NEXT_TABLES) |     \
  |  |  278|  3.89k|                            (1u << OFPTFPT13_WRITE_ACTIONS) |   \
  |  |  279|  3.89k|                            (1u << OFPTFPT13_APPLY_ACTIONS) |   \
  |  |  280|  3.89k|                            (1u << OFPTFPT13_MATCH) |           \
  |  |  281|  3.89k|                            (1u << OFPTFPT13_WILDCARDS) |       \
  |  |  282|  3.89k|                            (1u << OFPTFPT13_WRITE_SETFIELD) |  \
  |  |  283|  3.89k|                            (1u << OFPTFPT13_APPLY_SETFIELD))
  ------------------
  527|  3.89k|    if (missing && (tf->any_properties || oh->version < OFP15_VERSION)) {
  ------------------
  |  Branch (527:9): [True: 3.89k, False: 0]
  |  Branch (527:21): [True: 1.50k, False: 2.39k]
  |  Branch (527:43): [True: 336, False: 2.05k]
  ------------------
  528|  1.84k|        VLOG_WARN_RL(&rl,
  ------------------
  |  |  224|  1.84k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.84k|    do {                                                                \
  |  |  |  |  288|  1.84k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.84k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.84k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.84k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.84k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  529|  1.84k|                     "table features message missing %u required "
  530|  1.84k|                     "properties, including property %d",
  531|  1.84k|                     count_1bits(missing), rightmost_1bit_idx(missing));
  532|  1.84k|        return OFPERR_OFPTFFC_BAD_FEATURES;
  533|  1.84k|    }
  534|       |
  535|       |    /* Copy nonmiss to miss when appropriate. */
  536|  2.05k|    if (tf->any_properties) {
  ------------------
  |  Branch (536:9): [True: 0, False: 2.05k]
  ------------------
  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|  2.05k|    bitmap_or(tf->match.bm, tf->mask.bm, MFF_N_IDS);
  568|  2.05k|    bitmap_or(tf->wildcard.bm, tf->mask.bm, MFF_N_IDS);
  569|  2.05k|    bitmap_and(tf->wildcard.bm, tf->match.bm, MFF_N_IDS);
  570|       |
  571|  2.05k|    return 0;
  572|  3.89k|}
ofputil_decode_table_desc:
  729|  4.47k|{
  730|  4.47k|    memset(td, 0, sizeof *td);
  731|       |
  732|  4.47k|    if (!msg->header) {
  ------------------
  |  Branch (732:9): [True: 1.65k, False: 2.82k]
  ------------------
  733|  1.65k|        ofpraw_pull_assert(msg);
  734|  1.65k|    }
  735|       |
  736|  4.47k|    if (!msg->size) {
  ------------------
  |  Branch (736:9): [True: 516, False: 3.96k]
  ------------------
  737|    516|        return EOF;
  738|    516|    }
  739|       |
  740|  3.96k|    struct ofp14_table_desc *otd = ofpbuf_try_pull(msg, sizeof *otd);
  741|  3.96k|    if (!otd) {
  ------------------
  |  Branch (741:9): [True: 0, False: 3.96k]
  ------------------
  742|      0|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply has %"PRIu32" "
  ------------------
  |  |  224|      0|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|      0|    do {                                                                \
  |  |  |  |  288|      0|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|      0|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 0]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|      0|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 0]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  743|      0|                     "leftover bytes at end", msg->size);
  744|      0|        return OFPERR_OFPBRC_BAD_LEN;
  745|      0|    }
  746|       |
  747|  3.96k|    td->table_id = otd->table_id;
  748|  3.96k|    size_t length = ntohs(otd->length);
  749|  3.96k|    if (length < sizeof *otd || length - sizeof *otd > msg->size) {
  ------------------
  |  Branch (749:9): [True: 454, False: 3.50k]
  |  Branch (749:33): [True: 565, False: 2.94k]
  ------------------
  750|  1.01k|        VLOG_WARN_RL(&rl, "OFP14_TABLE_DESC reply claims invalid "
  ------------------
  |  |  224|  1.01k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  1.01k|    do {                                                                \
  |  |  |  |  288|  1.01k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  1.01k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 1.01k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  1.01k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 1.01k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  751|  1.01k|                     "length %"PRIuSIZE, length);
  752|  1.01k|        return OFPERR_OFPBRC_BAD_LEN;
  753|  1.01k|    }
  754|  2.94k|    length -= sizeof *otd;
  755|       |
  756|  2.94k|    td->eviction = ofputil_decode_table_eviction(otd->config, version);
  757|  2.94k|    td->vacancy = ofputil_decode_table_vacancy(otd->config, version);
  758|  2.94k|    td->eviction_flags = UINT32_MAX;
  759|       |
  760|  2.94k|    struct ofpbuf properties = ofpbuf_const_initializer(
  761|  2.94k|        ofpbuf_pull(msg, length), length);
  762|  3.48k|    while (properties.size > 0) {
  ------------------
  |  Branch (762:12): [True: 966, False: 2.51k]
  ------------------
  763|    966|        struct ofpbuf payload;
  764|    966|        enum ofperr error;
  765|    966|        uint64_t type;
  766|       |
  767|    966|        error = ofpprop_pull(&properties, &payload, &type);
  768|    966|        if (error) {
  ------------------
  |  Branch (768:13): [True: 232, False: 734]
  ------------------
  769|    232|            return error;
  770|    232|        }
  771|       |
  772|    734|        switch (type) {
  773|    202|        case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (773:9): [True: 202, False: 532]
  ------------------
  774|    202|            error = ofpprop_parse_u32(&payload, &td->eviction_flags);
  775|    202|            break;
  776|       |
  777|    267|        case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (777:9): [True: 267, False: 467]
  ------------------
  778|    267|            error = parse_table_desc_vacancy_property(&payload, td);
  779|    267|            break;
  780|       |
  781|    265|        default:
  ------------------
  |  Branch (781:9): [True: 265, False: 469]
  ------------------
  782|    265|            error = OFPPROP_UNKNOWN(true, "table_desc", type);
  ------------------
  |  |  144|    265|    ofpprop_unknown(&this_module, LOOSE, MSG, TYPE)
  ------------------
  783|    265|            break;
  784|    734|        }
  785|       |
  786|    734|        if (error) {
  ------------------
  |  Branch (786:13): [True: 197, False: 537]
  ------------------
  787|    197|            return error;
  788|    197|        }
  789|    734|    }
  790|       |
  791|  2.51k|    return 0;
  792|  2.94k|}
ofputil_table_desc_format:
  875|  2.51k|{
  876|  2.51k|    ds_put_format(s, "\n  table ");
  877|  2.51k|    ofputil_format_table(td->table_id, table_map, s);
  878|  2.51k|    ds_put_cstr(s, ":\n");
  879|  2.51k|    ds_put_format(s, "   eviction=%s eviction_flags=",
  880|  2.51k|                  ofputil_table_eviction_to_string(td->eviction));
  881|  2.51k|    ofputil_put_eviction_flags(s, td->eviction_flags);
  882|  2.51k|    ds_put_char(s, '\n');
  883|  2.51k|    ds_put_format(s, "   vacancy=%s",
  884|  2.51k|                  ofputil_table_vacancy_to_string(td->vacancy));
  885|  2.51k|    if (td->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (885:9): [True: 1.08k, False: 1.43k]
  ------------------
  886|  1.08k|        ds_put_format(s, " vacancy_down=%"PRIu8"%%",
  887|  1.08k|                      td->table_vacancy.vacancy_down);
  888|  1.08k|        ds_put_format(s, " vacancy_up=%"PRIu8"%%",
  889|  1.08k|                      td->table_vacancy.vacancy_up);
  890|  1.08k|        ds_put_format(s, " vacancy=%"PRIu8"%%",
  891|  1.08k|                      td->table_vacancy.vacancy);
  892|  1.08k|    }
  893|  2.51k|    ds_put_char(s, '\n');
  894|  2.51k|}
ofputil_decode_table_mod:
 1055|  5.41k|{
 1056|  5.41k|    memset(pm, 0, sizeof *pm);
 1057|  5.41k|    pm->miss = OFPUTIL_TABLE_MISS_DEFAULT;
 1058|  5.41k|    pm->eviction = OFPUTIL_TABLE_EVICTION_DEFAULT;
 1059|  5.41k|    pm->eviction_flags = UINT32_MAX;
 1060|  5.41k|    pm->vacancy = OFPUTIL_TABLE_VACANCY_DEFAULT;
 1061|       |
 1062|  5.41k|    struct ofpbuf b = ofpbuf_const_initializer(oh, ntohs(oh->length));
 1063|  5.41k|    enum ofpraw raw = ofpraw_pull_assert(&b);
 1064|  5.41k|    if (raw == OFPRAW_OFPT11_TABLE_MOD) {
  ------------------
  |  Branch (1064:9): [True: 1.43k, False: 3.97k]
  ------------------
 1065|  1.43k|        const struct ofp11_table_mod *otm = b.data;
 1066|       |
 1067|  1.43k|        pm->table_id = otm->table_id;
 1068|  1.43k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1069|  3.97k|    } else if (raw == OFPRAW_OFPT14_TABLE_MOD) {
  ------------------
  |  Branch (1069:16): [True: 3.97k, False: 0]
  ------------------
 1070|  3.97k|        const struct ofp14_table_mod *otm = ofpbuf_pull(&b, sizeof *otm);
 1071|       |
 1072|  3.97k|        pm->table_id = otm->table_id;
 1073|  3.97k|        pm->miss = ofputil_decode_table_miss(otm->config, oh->version);
 1074|  3.97k|        pm->eviction = ofputil_decode_table_eviction(otm->config, oh->version);
 1075|  3.97k|        pm->vacancy = ofputil_decode_table_vacancy(otm->config, oh->version);
 1076|  4.29k|        while (b.size > 0) {
  ------------------
  |  Branch (1076:16): [True: 2.68k, False: 1.60k]
  ------------------
 1077|  2.68k|            struct ofpbuf property;
 1078|  2.68k|            enum ofperr error;
 1079|  2.68k|            uint64_t type;
 1080|       |
 1081|  2.68k|            error = ofpprop_pull(&b, &property, &type);
 1082|  2.68k|            if (error) {
  ------------------
  |  Branch (1082:17): [True: 416, False: 2.27k]
  ------------------
 1083|    416|                return error;
 1084|    416|            }
 1085|       |
 1086|  2.27k|            switch (type) {
 1087|    254|            case OFPTMPT14_EVICTION:
  ------------------
  |  Branch (1087:13): [True: 254, False: 2.01k]
  ------------------
 1088|    254|                error = ofpprop_parse_u32(&property, &pm->eviction);
 1089|    254|                break;
 1090|       |
 1091|  1.41k|            case OFPTMPT14_VACANCY:
  ------------------
  |  Branch (1091:13): [True: 1.41k, False: 861]
  ------------------
 1092|  1.41k|                error = parse_table_mod_vacancy_property(&property, pm);
 1093|  1.41k|                break;
 1094|       |
 1095|    607|            default:
  ------------------
  |  Branch (1095:13): [True: 607, False: 1.66k]
  ------------------
 1096|    607|                error = OFPERR_OFPBRC_BAD_TYPE;
 1097|    607|                break;
 1098|  2.27k|            }
 1099|       |
 1100|  2.27k|            if (error) {
  ------------------
  |  Branch (1100:17): [True: 1.95k, False: 316]
  ------------------
 1101|  1.95k|                return error;
 1102|  1.95k|            }
 1103|  2.27k|        }
 1104|  3.97k|    } else {
 1105|      0|        return OFPERR_OFPBRC_BAD_TYPE;
 1106|      0|    }
 1107|       |
 1108|  3.04k|    return 0;
 1109|  5.41k|}
ofputil_table_mod_format:
 1171|  3.04k|{
 1172|  3.04k|    if (tm->table_id == 0xff) {
  ------------------
  |  Branch (1172:9): [True: 997, False: 2.04k]
  ------------------
 1173|    997|        ds_put_cstr(s, " table_id: ALL_TABLES");
 1174|  2.04k|    } else {
 1175|  2.04k|        ds_put_format(s, " table_id=");
 1176|  2.04k|        ofputil_format_table(tm->table_id, table_map, s);
 1177|  2.04k|    }
 1178|       |
 1179|  3.04k|    if (tm->miss != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1179:9): [True: 1.39k, False: 1.64k]
  ------------------
 1180|  1.39k|        ds_put_format(s, ", flow_miss_config=%s",
 1181|  1.39k|                      ofputil_table_miss_to_string(tm->miss));
 1182|  1.39k|    }
 1183|  3.04k|    if (tm->eviction != OFPUTIL_TABLE_EVICTION_DEFAULT) {
  ------------------
  |  Branch (1183:9): [True: 1.60k, False: 1.43k]
  ------------------
 1184|  1.60k|        ds_put_format(s, ", eviction=%s",
 1185|  1.60k|                      ofputil_table_eviction_to_string(tm->eviction));
 1186|  1.60k|    }
 1187|  3.04k|    if (tm->eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (1187:9): [True: 0, False: 3.04k]
  ------------------
 1188|      0|        ds_put_cstr(s, "eviction_flags=");
 1189|      0|        ofputil_put_eviction_flags(s, tm->eviction_flags);
 1190|      0|    }
 1191|  3.04k|    if (tm->vacancy != OFPUTIL_TABLE_VACANCY_DEFAULT) {
  ------------------
  |  Branch (1191:9): [True: 1.60k, False: 1.43k]
  ------------------
 1192|  1.60k|        ds_put_format(s, ", vacancy=%s",
 1193|  1.60k|                      ofputil_table_vacancy_to_string(tm->vacancy));
 1194|  1.60k|        if (tm->vacancy == OFPUTIL_TABLE_VACANCY_ON) {
  ------------------
  |  Branch (1194:13): [True: 637, False: 970]
  ------------------
 1195|    637|            ds_put_format(s, " vacancy:%"PRIu8""
 1196|    637|                          ",%"PRIu8"", tm->table_vacancy.vacancy_down,
 1197|    637|                          tm->table_vacancy.vacancy_up);
 1198|    637|        }
 1199|  1.60k|    }
 1200|  3.04k|}
ofputil_table_features_format:
 1707|  33.6k|{
 1708|  33.6k|    if (!prev_features && features->command != OFPTFC15_REPLACE) {
  ------------------
  |  Branch (1708:9): [True: 7.22k, False: 26.4k]
  |  Branch (1708:27): [True: 245, False: 6.98k]
  ------------------
 1709|    245|        ds_put_format(s, "\n  command: %s",
 1710|    245|                      ofp15_table_features_command_to_string(
 1711|    245|                          features->command));
 1712|    245|    }
 1713|       |
 1714|  33.6k|    int table = features->table_id;
 1715|  33.6k|    int prev_table = prev_features ? prev_features->table_id : 0;
  ------------------
  |  Branch (1715:22): [True: 26.4k, False: 7.22k]
  ------------------
 1716|       |
 1717|  33.6k|    bool same_stats = !stats || (prev_stats
  ------------------
  |  Branch (1717:23): [True: 2.05k, False: 31.6k]
  |  Branch (1717:34): [True: 24.9k, False: 6.62k]
  ------------------
 1718|  24.9k|                                 && table_stats_equal(stats, prev_stats));
  ------------------
  |  Branch (1718:37): [True: 4.13k, False: 20.8k]
  ------------------
 1719|  33.6k|    bool same_features = prev_features && table_features_equal(features,
  ------------------
  |  Branch (1719:26): [True: 26.4k, False: 7.22k]
  |  Branch (1719:43): [True: 5.40k, False: 21.0k]
  ------------------
 1720|  26.4k|                                                               prev_features);
 1721|  33.6k|    if (same_stats && same_features && !features->name[0]) {
  ------------------
  |  Branch (1721:9): [True: 6.18k, False: 27.4k]
  |  Branch (1721:23): [True: 1.89k, False: 4.28k]
  |  Branch (1721:40): [True: 857, False: 1.04k]
  ------------------
 1722|    857|        if (*first_ditto < 0) {
  ------------------
  |  Branch (1722:13): [True: 495, False: 362]
  ------------------
 1723|    495|            *first_ditto = table;
 1724|    495|        }
 1725|    857|        *last_ditto = table;
 1726|    857|        return;
 1727|    857|    }
 1728|  32.8k|    ofputil_table_features_format_finish(s, *first_ditto, *last_ditto);
 1729|  32.8k|    *first_ditto = -1;
 1730|       |
 1731|  32.8k|    ds_put_format(s, "\n  table %d", table);
 1732|  32.8k|    if (features->name[0]) {
  ------------------
  |  Branch (1732:9): [True: 20.5k, False: 12.2k]
  ------------------
 1733|  20.5k|        ds_put_format(s, " (\"%s\")", features->name);
 1734|  20.5k|    }
 1735|  32.8k|    ds_put_char(s, ':');
 1736|       |
 1737|  32.8k|    if (same_stats && same_features) {
  ------------------
  |  Branch (1737:9): [True: 5.32k, False: 27.4k]
  |  Branch (1737:23): [True: 1.04k, False: 4.28k]
  ------------------
 1738|  1.04k|        ds_put_cstr(s, " ditto");
 1739|  1.04k|        return;
 1740|  1.04k|    }
 1741|  31.7k|    ds_put_char(s, '\n');
 1742|  31.7k|    if (stats) {
  ------------------
  |  Branch (1742:9): [True: 30.0k, False: 1.68k]
  ------------------
 1743|  30.0k|        ds_put_format(s, "    active=%"PRIu32", ", stats->active_count);
 1744|  30.0k|        ds_put_format(s, "lookup=%"PRIu64", ", stats->lookup_count);
 1745|  30.0k|        ds_put_format(s, "matched=%"PRIu64"\n", stats->matched_count);
 1746|  30.0k|    }
 1747|  31.7k|    if (same_features) {
  ------------------
  |  Branch (1747:9): [True: 3.50k, False: 28.2k]
  ------------------
 1748|  3.50k|        if (!table_features_empty(features)) {
  ------------------
  |  Branch (1748:13): [True: 1.53k, False: 1.97k]
  ------------------
 1749|  1.53k|            ds_put_cstr(s, "    (same features)\n");
 1750|  1.53k|        }
 1751|  3.50k|        return;
 1752|  3.50k|    }
 1753|  28.2k|    if (features->metadata_match || features->metadata_write) {
  ------------------
  |  Branch (1753:9): [True: 12.6k, False: 15.6k]
  |  Branch (1753:37): [True: 1.45k, False: 14.1k]
  ------------------
 1754|  14.0k|        ds_put_format(s, "    metadata: match=%#"PRIx64" write=%#"PRIx64"\n",
 1755|  14.0k|                      ntohll(features->metadata_match),
 1756|  14.0k|                      ntohll(features->metadata_write));
 1757|  14.0k|    }
 1758|       |
 1759|  28.2k|    if (features->miss_config != OFPUTIL_TABLE_MISS_DEFAULT) {
  ------------------
  |  Branch (1759:9): [True: 19.6k, False: 8.58k]
  ------------------
 1760|  19.6k|        ds_put_format(s, "    config=%s\n",
 1761|  19.6k|                      ofputil_table_miss_to_string(features->miss_config));
 1762|  19.6k|    }
 1763|       |
 1764|  28.2k|    if (features->supports_eviction >= 0) {
  ------------------
  |  Branch (1764:9): [True: 1.68k, False: 26.5k]
  ------------------
 1765|  1.68k|        ds_put_format(s, "    eviction: %ssupported\n",
 1766|  1.68k|                      features->supports_eviction ? "" : "not ");
  ------------------
  |  Branch (1766:23): [True: 407, False: 1.27k]
  ------------------
 1767|       |
 1768|  1.68k|    }
 1769|  28.2k|    if (features->supports_vacancy_events >= 0) {
  ------------------
  |  Branch (1769:9): [True: 1.68k, False: 26.5k]
  ------------------
 1770|  1.68k|        ds_put_format(s, "    vacancy events: %ssupported\n",
 1771|  1.68k|                      features->supports_vacancy_events ? "" : "not ");
  ------------------
  |  Branch (1771:23): [True: 1.34k, False: 338]
  ------------------
 1772|       |
 1773|  1.68k|    }
 1774|       |
 1775|  28.2k|    if (features->max_entries) {
  ------------------
  |  Branch (1775:9): [True: 24.2k, False: 3.98k]
  ------------------
 1776|  24.2k|        ds_put_format(s, "    max_entries=%"PRIu32"\n", features->max_entries);
 1777|  24.2k|    }
 1778|       |
 1779|  28.2k|    const struct ofputil_table_instruction_features *prev_nonmiss
 1780|  28.2k|        = prev_features ? &prev_features->nonmiss : NULL;
  ------------------
  |  Branch (1780:11): [True: 21.0k, False: 7.22k]
  ------------------
 1781|  28.2k|    const struct ofputil_table_instruction_features *prev_miss
 1782|  28.2k|        = prev_features ? &prev_features->miss : NULL;
  ------------------
  |  Branch (1782:11): [True: 21.0k, False: 7.22k]
  ------------------
 1783|  28.2k|    if (prev_features
  ------------------
  |  Branch (1783:9): [True: 21.0k, False: 7.22k]
  ------------------
 1784|  21.0k|        && table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1784:12): [True: 7.73k, False: 13.2k]
  ------------------
 1785|  21.0k|                                            prev_nonmiss, prev_table)
 1786|  7.73k|        && table_instruction_features_equal(&features->miss, table,
  ------------------
  |  Branch (1786:12): [True: 7.73k, False: 0]
  ------------------
 1787|  7.73k|                                            prev_miss, prev_table)) {
 1788|  7.73k|        if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1788:13): [True: 1.41k, False: 6.32k]
  ------------------
 1789|  1.41k|            ds_put_cstr(s, "    (same instructions)\n");
 1790|  1.41k|        }
 1791|  20.5k|    } else if (!table_instruction_features_equal(&features->nonmiss, table,
  ------------------
  |  Branch (1791:16): [True: 0, False: 20.5k]
  ------------------
 1792|  20.5k|                                                 &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|  20.5k|    } else if (!table_instruction_features_empty(&features->nonmiss)) {
  ------------------
  |  Branch (1797:16): [True: 17.9k, False: 2.56k]
  ------------------
 1798|  17.9k|        ds_put_cstr(s, "    instructions (table miss and others):\n");
 1799|  17.9k|        print_table_instruction_features(s, &features->nonmiss, prev_nonmiss);
 1800|  17.9k|    }
 1801|       |
 1802|  28.2k|    if (!bitmap_is_all_zeros(features->match.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1802:9): [True: 24.9k, False: 3.25k]
  ------------------
 1803|  24.9k|        if (prev_features
  ------------------
  |  Branch (1803:13): [True: 18.9k, False: 6.01k]
  ------------------
 1804|  18.9k|            && bitmap_equal(features->match.bm, prev_features->match.bm,
  ------------------
  |  Branch (1804:16): [True: 4.02k, False: 14.9k]
  ------------------
 1805|  18.9k|                            MFF_N_IDS)) {
 1806|  4.02k|            ds_put_cstr(s, "    (same matching)\n");
 1807|  20.9k|        } else {
 1808|  20.9k|            ds_put_cstr(s, "    matching:\n");
 1809|       |
 1810|  20.9k|            print_matches(s, features, true, true, "arbitrary mask");
 1811|  20.9k|            print_matches(s, features, false, true, "exact match or wildcard");
 1812|  20.9k|            print_matches(s, features, false, false, "must exact match");
 1813|  20.9k|        }
 1814|  24.9k|    }
 1815|  28.2k|}
ofputil_table_features_format_finish:
 1820|  51.3k|{
 1821|  51.3k|    if (first_ditto < 0) {
  ------------------
  |  Branch (1821:9): [True: 50.8k, False: 495]
  ------------------
 1822|  50.8k|        return;
 1823|  50.8k|    }
 1824|       |
 1825|    495|    ds_put_char(s, '\n');
 1826|    495|    if (first_ditto == last_ditto) {
  ------------------
  |  Branch (1826:9): [True: 442, False: 53]
  ------------------
 1827|    442|        ds_put_format(s, "  table %d: ditto\n", first_ditto);
 1828|    442|    } else {
 1829|     53|        ds_put_format(s, "  tables %d...%d: ditto\n", first_ditto, last_ditto);
 1830|     53|    }
 1831|    495|}
ofputil_decode_table_stats_reply:
 2256|  38.6k|{
 2257|  38.6k|    const struct ofp_header *oh;
 2258|       |
 2259|  38.6k|    if (!msg->header) {
  ------------------
  |  Branch (2259:9): [True: 0, False: 38.6k]
  ------------------
 2260|      0|        ofpraw_pull_assert(msg);
 2261|      0|    }
 2262|  38.6k|    oh = msg->header;
 2263|       |
 2264|  38.6k|    if (!msg->size) {
  ------------------
  |  Branch (2264:9): [True: 7.08k, False: 31.6k]
  ------------------
 2265|  7.08k|        return EOF;
 2266|  7.08k|    }
 2267|       |
 2268|  31.6k|    memset(stats, 0, sizeof *stats);
 2269|  31.6k|    memset(features, 0, sizeof *features);
 2270|  31.6k|    features->supports_eviction = -1;
 2271|  31.6k|    features->supports_vacancy_events = -1;
 2272|       |
 2273|  31.6k|    switch ((enum ofp_version) oh->version) {
 2274|  7.57k|    case OFP10_VERSION:
  ------------------
  |  Branch (2274:5): [True: 7.57k, False: 24.0k]
  ------------------
 2275|  7.57k|        return ofputil_decode_ofp10_table_stats(msg, stats, features);
 2276|       |
 2277|  7.68k|    case OFP11_VERSION:
  ------------------
  |  Branch (2277:5): [True: 7.68k, False: 23.9k]
  ------------------
 2278|  7.68k|        return ofputil_decode_ofp11_table_stats(msg, stats, features);
 2279|       |
 2280|  13.2k|    case OFP12_VERSION:
  ------------------
  |  Branch (2280:5): [True: 13.2k, False: 18.3k]
  ------------------
 2281|  13.2k|        return ofputil_decode_ofp12_table_stats(msg, stats, features);
 2282|       |
 2283|    321|    case OFP13_VERSION:
  ------------------
  |  Branch (2283:5): [True: 321, False: 31.2k]
  ------------------
 2284|    987|    case OFP14_VERSION:
  ------------------
  |  Branch (2284:5): [True: 666, False: 30.9k]
  ------------------
 2285|  3.13k|    case OFP15_VERSION:
  ------------------
  |  Branch (2285:5): [True: 2.14k, False: 29.4k]
  ------------------
 2286|  3.13k|        return ofputil_decode_ofp13_table_stats(msg, stats, features);
 2287|       |
 2288|      0|    default:
  ------------------
  |  Branch (2288:5): [True: 0, False: 31.6k]
  ------------------
 2289|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
 2290|  31.6k|    }
 2291|  31.6k|}
ofp_table_reason_to_string:
 2299|    833|{
 2300|    833|    switch (reason) {
 2301|    429|    case OFPTR_VACANCY_DOWN:
  ------------------
  |  Branch (2301:5): [True: 429, False: 404]
  ------------------
 2302|    429|        return "vacancy_down";
 2303|       |
 2304|    404|    case OFPTR_VACANCY_UP:
  ------------------
  |  Branch (2304:5): [True: 404, False: 429]
  ------------------
 2305|    404|        return "vacancy_up";
 2306|       |
 2307|      0|    default:
  ------------------
  |  Branch (2307:5): [True: 0, False: 833]
  ------------------
 2308|      0|        snprintf(reasonbuf, bufsize, "%d", (int) reason);
 2309|      0|        return reasonbuf;
 2310|    833|    }
 2311|    833|}
ofputil_decode_table_status:
 2373|  1.02k|{
 2374|  1.02k|    const struct ofp14_table_status *ots;
 2375|  1.02k|    struct ofpbuf b;
 2376|  1.02k|    enum ofperr error;
 2377|  1.02k|    enum ofpraw raw;
 2378|       |
 2379|  1.02k|    ofpbuf_use_const(&b, oh, ntohs(oh->length));
 2380|  1.02k|    raw = ofpraw_pull_assert(&b);
 2381|  1.02k|    ots = ofpbuf_pull(&b, sizeof *ots);
 2382|       |
 2383|  1.02k|    if (raw == OFPRAW_OFPT14_TABLE_STATUS) {
  ------------------
  |  Branch (2383:9): [True: 1.02k, False: 0]
  ------------------
 2384|  1.02k|        if (ots->reason != OFPTR_VACANCY_DOWN
  ------------------
  |  Branch (2384:13): [True: 895, False: 128]
  ------------------
 2385|    895|            && ots->reason != OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2385:16): [True: 506, False: 389]
  ------------------
 2386|    506|            return OFPERR_OFPBPC_BAD_VALUE;
 2387|    506|        }
 2388|    517|        ts->reason = ots->reason;
 2389|       |
 2390|    517|        error = ofputil_decode_table_desc(&b, &ts->desc, oh->version);
 2391|    517|        return error;
 2392|  1.02k|    } else {
 2393|      0|        return OFPERR_OFPBRC_BAD_VERSION;
 2394|      0|    }
 2395|  1.02k|}
ofputil_format_table_status:
 2401|    210|{
 2402|    210|    if (ts->reason == OFPTR_VACANCY_DOWN) {
  ------------------
  |  Branch (2402:9): [True: 38, False: 172]
  ------------------
 2403|     38|        ds_put_format(string, " reason=VACANCY_DOWN");
 2404|    172|    } else if (ts->reason == OFPTR_VACANCY_UP) {
  ------------------
  |  Branch (2404:16): [True: 172, False: 0]
  ------------------
 2405|    172|        ds_put_format(string, " reason=VACANCY_UP");
 2406|    172|    }
 2407|       |
 2408|    210|    ds_put_format(string, "\ntable_desc:-");
 2409|    210|    ofputil_table_desc_format(string, &ts->desc, table_map);
 2410|    210|}
ofp-table.c:ofp15_table_features_command_is_valid:
   80|  8.53k|{
   81|  8.53k|    switch (cmd) {
   82|  6.80k|    case OFPTFC15_REPLACE:
  ------------------
  |  Branch (82:5): [True: 6.80k, False: 1.72k]
  ------------------
   83|  7.19k|    case OFPTFC15_MODIFY:
  ------------------
  |  Branch (83:5): [True: 395, False: 8.13k]
  ------------------
   84|  8.32k|    case OFPTFC15_ENABLE:
  ------------------
  |  Branch (84:5): [True: 1.12k, False: 7.40k]
  ------------------
   85|  8.41k|    case OFPTFC15_DISABLE:
  ------------------
  |  Branch (85:5): [True: 97, False: 8.43k]
  ------------------
   86|  8.41k|        return true;
   87|       |
   88|    113|    default:
  ------------------
  |  Branch (88:5): [True: 113, False: 8.41k]
  ------------------
   89|       |        return false;
   90|  8.53k|    }
   91|  8.53k|}
ofp-table.c:pull_table_feature_property:
  235|  18.0k|{
  236|  18.0k|    enum ofperr error;
  237|       |
  238|  18.0k|    error = ofpprop_pull(msg, payload, typep);
  239|  18.0k|    if (payload && !error) {
  ------------------
  |  Branch (239:9): [True: 18.0k, False: 0]
  |  Branch (239:20): [True: 16.1k, False: 1.82k]
  ------------------
  240|  16.1k|        ofpbuf_pull(payload, (char *)payload->msg - (char *)payload->header);
  241|  16.1k|    }
  242|  18.0k|    return error;
  243|  18.0k|}
ofp-table.c:parse_instruction_ids:
  270|  3.00k|{
  271|  3.00k|    *insts = 0;
  272|  4.71k|    while (payload->size > 0) {
  ------------------
  |  Branch (272:12): [True: 3.10k, False: 1.60k]
  ------------------
  273|  3.10k|        enum ovs_instruction_type inst;
  274|  3.10k|        enum ofperr error;
  275|  3.10k|        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|  3.10k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &ofpit);
  287|  3.10k|        if (error) {
  ------------------
  |  Branch (287:13): [True: 1.39k, False: 1.71k]
  ------------------
  288|  1.39k|            return error;
  289|  1.39k|        }
  290|       |
  291|  1.71k|        error = ovs_instruction_type_from_inst_type(&inst, ofpit);
  292|  1.71k|        if (!error) {
  ------------------
  |  Branch (292:13): [True: 277, False: 1.43k]
  ------------------
  293|    277|            *insts |= 1u << inst;
  294|  1.43k|        } else if (!loose) {
  ------------------
  |  Branch (294:20): [True: 0, False: 1.43k]
  ------------------
  295|      0|            return error;
  296|      0|        }
  297|  1.71k|    }
  298|  1.60k|    return 0;
  299|  3.00k|}
ofp-table.c:parse_table_features_next_table:
  304|  3.04k|{
  305|  3.04k|    size_t i;
  306|       |
  307|  3.04k|    memset(next_tables, 0, bitmap_n_bytes(255));
  308|  21.1k|    for (i = 0; i < payload->size; i++) {
  ------------------
  |  Branch (308:17): [True: 18.7k, False: 2.32k]
  ------------------
  309|  18.7k|        uint8_t id = ((const uint8_t *) payload->data)[i];
  310|  18.7k|        if (id >= 255) {
  ------------------
  |  Branch (310:13): [True: 712, False: 18.0k]
  ------------------
  311|    712|            return OFPERR_OFPBPC_BAD_VALUE;
  312|    712|        }
  313|  18.0k|        bitmap_set1(next_tables, id);
  314|  18.0k|    }
  315|  2.32k|    return 0;
  316|  3.04k|}
ofp-table.c:parse_action_bitmap:
  248|  2.11k|{
  249|  2.11k|    uint32_t types = 0;
  250|       |
  251|  3.39k|    while (payload->size > 0) {
  ------------------
  |  Branch (251:12): [True: 2.15k, False: 1.24k]
  ------------------
  252|  2.15k|        enum ofperr error;
  253|  2.15k|        uint64_t type;
  254|       |
  255|  2.15k|        error = ofpprop_pull__(payload, NULL, 1, 0x10000, &type);
  256|  2.15k|        if (error) {
  ------------------
  |  Branch (256:13): [True: 870, False: 1.28k]
  ------------------
  257|    870|            return error;
  258|    870|        }
  259|  1.28k|        if (type < CHAR_BIT * sizeof types) {
  ------------------
  |  Branch (259:13): [True: 1.00k, False: 278]
  ------------------
  260|  1.00k|            types |= 1u << type;
  261|  1.00k|        }
  262|  1.28k|    }
  263|       |
  264|  1.24k|    *ofpacts = ofpact_bitmap_from_openflow(htonl(types), ofp_version);
  265|  1.24k|    return 0;
  266|  2.11k|}
ofp-table.c:parse_oxms:
  321|  4.04k|{
  322|  4.04k|    struct mf_bitmap exact = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  4.04k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  323|  4.04k|    struct mf_bitmap masked = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  4.04k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
  324|       |
  325|  34.3k|    while (payload->size > 0) {
  ------------------
  |  Branch (325:12): [True: 30.4k, False: 3.92k]
  ------------------
  326|  30.4k|        const struct mf_field *field;
  327|  30.4k|        enum ofperr error;
  328|  30.4k|        bool hasmask;
  329|       |
  330|  30.4k|        error = nx_pull_header(payload, NULL, &field, &hasmask);
  331|  30.4k|        if (!error) {
  ------------------
  |  Branch (331:13): [True: 843, False: 29.6k]
  ------------------
  332|    843|            bitmap_set1(hasmask ? masked.bm : exact.bm, field->id);
  ------------------
  |  Branch (332:25): [True: 746, False: 97]
  ------------------
  333|  29.6k|        } else if (error != OFPERR_OFPBMC_BAD_FIELD || !loose) {
  ------------------
  |  Branch (333:20): [True: 120, False: 29.5k]
  |  Branch (333:56): [True: 0, False: 29.5k]
  ------------------
  334|    120|            return error;
  335|    120|        }
  336|  30.4k|    }
  337|  3.92k|    if (exactp) {
  ------------------
  |  Branch (337:9): [True: 3.92k, False: 0]
  ------------------
  338|  3.92k|        *exactp = exact;
  339|  3.92k|    } 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|  3.92k|    if (maskedp) {
  ------------------
  |  Branch (342:9): [True: 731, False: 3.19k]
  ------------------
  343|    731|        *maskedp = masked;
  344|  3.19k|    } else if (!bitmap_is_all_zeros(masked.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (344:16): [True: 613, False: 2.58k]
  ------------------
  345|    613|        return OFPERR_OFPBMC_BAD_MASK;
  346|    613|    }
  347|  3.31k|    return 0;
  348|  3.92k|}
ofp-table.c:parse_table_desc_vacancy_property:
  708|    267|{
  709|    267|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  710|       |
  711|    267|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (711:9): [True: 196, False: 71]
  ------------------
  712|    196|        return OFPERR_OFPBPC_BAD_LEN;
  713|    196|    }
  714|       |
  715|     71|    td->table_vacancy.vacancy_down = otv->vacancy_down;
  716|     71|    td->table_vacancy.vacancy_up = otv->vacancy_up;
  717|     71|    td->table_vacancy.vacancy = otv->vacancy;
  718|     71|    return 0;
  719|    267|}
ofp-table.c:ofputil_put_eviction_flags:
  863|  2.51k|{
  864|  2.51k|    if (eviction_flags != UINT32_MAX) {
  ------------------
  |  Branch (864:9): [True: 198, False: 2.31k]
  ------------------
  865|    198|        ofp_print_bit_names(string, eviction_flags,
  866|    198|                            ofputil_eviction_flag_to_string, '|');
  867|  2.31k|    } else {
  868|  2.31k|        ds_put_cstr(string, "(default)");
  869|  2.31k|    }
  870|  2.51k|}
ofp-table.c:ofputil_eviction_flag_to_string:
  847|  4.03k|{
  848|  4.03k|    enum ofp14_table_mod_prop_eviction_flag eviction_flag = bit;
  849|       |
  850|  4.03k|    switch (eviction_flag) {
  ------------------
  |  Branch (850:13): [True: 479, False: 3.55k]
  ------------------
  851|    188|    case OFPTMPEF14_OTHER:      return "OTHER";
  ------------------
  |  Branch (851:5): [True: 188, False: 3.84k]
  ------------------
  852|    184|    case OFPTMPEF14_IMPORTANCE: return "IMPORTANCE";
  ------------------
  |  Branch (852:5): [True: 184, False: 3.84k]
  ------------------
  853|    107|    case OFPTMPEF14_LIFETIME:   return "LIFETIME";
  ------------------
  |  Branch (853:5): [True: 107, False: 3.92k]
  ------------------
  854|  4.03k|    }
  855|       |
  856|  3.55k|    return NULL;
  857|  4.03k|}
ofp-table.c:ofputil_decode_table_vacancy:
  941|  6.92k|{
  942|  6.92k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_VACANCY_DEFAULT
  ------------------
  |  Branch (942:13): [True: 0, False: 6.92k]
  ------------------
  943|  6.92k|            : config & htonl(OFPTC14_VACANCY_EVENTS) ? OFPUTIL_TABLE_VACANCY_ON
  ------------------
  |  Branch (943:15): [True: 3.64k, False: 3.28k]
  ------------------
  944|  6.92k|            : OFPUTIL_TABLE_VACANCY_OFF);
  945|  6.92k|}
ofp-table.c:ofputil_decode_table_eviction:
  956|  6.92k|{
  957|  6.92k|    return (version < OFP14_VERSION ? OFPUTIL_TABLE_EVICTION_DEFAULT
  ------------------
  |  Branch (957:13): [True: 0, False: 6.92k]
  ------------------
  958|  6.92k|            : config & htonl(OFPTC14_EVICTION) ? OFPUTIL_TABLE_EVICTION_ON
  ------------------
  |  Branch (958:15): [True: 2.50k, False: 4.42k]
  ------------------
  959|  6.92k|            : OFPUTIL_TABLE_EVICTION_OFF);
  960|  6.92k|}
ofp-table.c:ofputil_decode_table_miss:
 1027|  26.3k|{
 1028|  26.3k|    uint32_t config = ntohl(config_);
 1029|       |
 1030|  26.3k|    if (version == OFP11_VERSION || version == OFP12_VERSION) {
  ------------------
  |  Branch (1030:9): [True: 8.73k, False: 17.5k]
  |  Branch (1030:37): [True: 13.5k, False: 4.01k]
  ------------------
 1031|  22.2k|        switch (config & OFPTC11_TABLE_MISS_MASK) {
 1032|  13.8k|        case OFPTC11_TABLE_MISS_CONTROLLER:
  ------------------
  |  Branch (1032:9): [True: 13.8k, False: 8.44k]
  ------------------
 1033|  13.8k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1034|       |
 1035|  2.62k|        case OFPTC11_TABLE_MISS_CONTINUE:
  ------------------
  |  Branch (1035:9): [True: 2.62k, False: 19.6k]
  ------------------
 1036|  2.62k|            return OFPUTIL_TABLE_MISS_CONTINUE;
 1037|       |
 1038|  2.17k|        case OFPTC11_TABLE_MISS_DROP:
  ------------------
  |  Branch (1038:9): [True: 2.17k, False: 20.1k]
  ------------------
 1039|  2.17k|            return OFPUTIL_TABLE_MISS_DROP;
 1040|       |
 1041|  3.64k|        default:
  ------------------
  |  Branch (1041:9): [True: 3.64k, False: 18.6k]
  ------------------
 1042|  3.64k|            VLOG_WARN_RL(&rl, "bad table miss config %d", config);
  ------------------
  |  |  224|  3.64k|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|  3.64k|    do {                                                                \
  |  |  |  |  288|  3.64k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|  3.64k|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 3.64k]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|  3.64k|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 3.64k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1043|  3.64k|            return OFPUTIL_TABLE_MISS_CONTROLLER;
 1044|  22.2k|        }
 1045|  22.2k|    } else {
 1046|  4.01k|        return OFPUTIL_TABLE_MISS_DEFAULT;
 1047|  4.01k|    }
 1048|  26.3k|}
ofp-table.c:parse_table_mod_vacancy_property:
  904|  1.41k|{
  905|  1.41k|    struct ofp14_table_mod_prop_vacancy *otv = property->data;
  906|       |
  907|  1.41k|    if (property->size != sizeof *otv) {
  ------------------
  |  Branch (907:9): [True: 142, False: 1.26k]
  ------------------
  908|    142|        return OFPERR_OFPBPC_BAD_LEN;
  909|    142|    }
  910|  1.26k|    tm->table_vacancy.vacancy_down = otv->vacancy_down;
  911|  1.26k|    tm->table_vacancy.vacancy_up = otv->vacancy_up;
  912|  1.26k|    if (tm->table_vacancy.vacancy_down > tm->table_vacancy.vacancy_up) {
  ------------------
  |  Branch (912:9): [True: 248, False: 1.02k]
  ------------------
  913|    248|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|    248|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    248|    do {                                                                \
  |  |  |  |  288|    496|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 248]
  |  |  |  |  ------------------
  |  |  |  |  289|    248|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 248]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    248|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 248]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  914|    248|                    "Value of vacancy_down is greater than vacancy_up");
  915|    248|        return OFPERR_OFPBPC_BAD_VALUE;
  916|    248|    }
  917|  1.02k|    if (tm->table_vacancy.vacancy_down > 100 ||
  ------------------
  |  Branch (917:9): [True: 462, False: 559]
  ------------------
  918|    871|        tm->table_vacancy.vacancy_up > 100) {
  ------------------
  |  Branch (918:9): [True: 409, False: 150]
  ------------------
  919|    871|        OFPPROP_LOG(&rl, false, "Vacancy threshold percentage "
  ------------------
  |  |  139|    871|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    871|    do {                                                                \
  |  |  |  |  288|  1.74k|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 871]
  |  |  |  |  ------------------
  |  |  |  |  289|    871|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 871]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    871|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 871]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  920|    871|                    "should not be greater than 100");
  921|    871|        return OFPERR_OFPBPC_BAD_VALUE;
  922|    871|    }
  923|    150|    tm->table_vacancy.vacancy = otv->vacancy;
  924|    150|    if (tm->table_vacancy.vacancy) {
  ------------------
  |  Branch (924:9): [True: 81, False: 69]
  ------------------
  925|     81|        OFPPROP_LOG(&rl, false,
  ------------------
  |  |  139|     81|    VLOG_RL(RL, (LOOSE) ? VLL_DBG : VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|     81|    do {                                                                \
  |  |  |  |  288|    162|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (288:35): [Folded, False: 81]
  |  |  |  |  ------------------
  |  |  |  |  289|     81|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 81]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|     81|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 81]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  926|     81|                    "Vacancy value should be zero for table-mod messages");
  927|     81|        return OFPERR_OFPBPC_BAD_VALUE;
  928|     81|    }
  929|     69|    return 0;
  930|    150|}
ofp-table.c:ofp15_table_features_command_to_string:
   95|    245|{
   96|    245|    switch (cmd) {
   97|      0|    case OFPTFC15_REPLACE: return "replace";
  ------------------
  |  Branch (97:5): [True: 0, False: 245]
  ------------------
   98|     91|    case OFPTFC15_MODIFY: return "modify";
  ------------------
  |  Branch (98:5): [True: 91, False: 154]
  ------------------
   99|     60|    case OFPTFC15_ENABLE: return "enable";
  ------------------
  |  Branch (99:5): [True: 60, False: 185]
  ------------------
  100|     94|    case OFPTFC15_DISABLE: return "disable";
  ------------------
  |  Branch (100:5): [True: 94, False: 151]
  ------------------
  101|      0|    default: return "***bad command***";
  ------------------
  |  Branch (101:5): [True: 0, False: 245]
  ------------------
  102|    245|    }
  103|    245|}
ofp-table.c:table_stats_equal:
 1693|  24.9k|{
 1694|  24.9k|    return (a->active_count == b->active_count
  ------------------
  |  Branch (1694:13): [True: 7.96k, False: 17.0k]
  ------------------
 1695|  7.96k|            && a->lookup_count == b->lookup_count
  ------------------
  |  Branch (1695:16): [True: 5.21k, False: 2.75k]
  ------------------
 1696|  5.21k|            && a->matched_count == b->matched_count);
  ------------------
  |  Branch (1696:16): [True: 4.13k, False: 1.08k]
  ------------------
 1697|  24.9k|}
ofp-table.c:table_features_equal:
 1662|  26.4k|{
 1663|  26.4k|    return (a->metadata_match == b->metadata_match
  ------------------
  |  Branch (1663:13): [True: 19.5k, False: 6.90k]
  ------------------
 1664|  19.5k|            && a->metadata_write == b->metadata_write
  ------------------
  |  Branch (1664:16): [True: 17.5k, False: 1.99k]
  ------------------
 1665|  17.5k|            && a->miss_config == b->miss_config
  ------------------
  |  Branch (1665:16): [True: 15.5k, False: 1.96k]
  ------------------
 1666|  15.5k|            && a->supports_eviction == b->supports_eviction
  ------------------
  |  Branch (1666:16): [True: 15.4k, False: 111]
  ------------------
 1667|  15.4k|            && a->supports_vacancy_events == b->supports_vacancy_events
  ------------------
  |  Branch (1667:16): [True: 15.3k, False: 74]
  ------------------
 1668|  15.3k|            && a->max_entries == b->max_entries
  ------------------
  |  Branch (1668:16): [True: 7.56k, False: 7.81k]
  ------------------
 1669|  7.56k|            && table_instruction_features_equal(&a->nonmiss, a->table_id,
  ------------------
  |  Branch (1669:16): [True: 5.92k, False: 1.63k]
  ------------------
 1670|  7.56k|                                                &b->nonmiss, b->table_id)
 1671|  5.92k|            && table_instruction_features_equal(&a->miss, a->table_id,
  ------------------
  |  Branch (1671:16): [True: 5.92k, False: 0]
  ------------------
 1672|  5.92k|                                                &b->miss, b->table_id)
 1673|  5.92k|            && bitmap_equal(a->match.bm, b->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1673:16): [True: 5.40k, False: 515]
  ------------------
 1674|  26.4k|}
ofp-table.c:table_features_empty:
 1678|  3.50k|{
 1679|  3.50k|    return (!tf->metadata_match
  ------------------
  |  Branch (1679:13): [True: 3.09k, False: 411]
  ------------------
 1680|  3.09k|            && !tf->metadata_write
  ------------------
  |  Branch (1680:16): [True: 3.01k, False: 85]
  ------------------
 1681|  3.01k|            && tf->miss_config == OFPUTIL_TABLE_MISS_DEFAULT
  ------------------
  |  Branch (1681:16): [True: 2.87k, False: 135]
  ------------------
 1682|  2.87k|            && tf->supports_eviction < 0
  ------------------
  |  Branch (1682:16): [True: 2.87k, False: 0]
  ------------------
 1683|  2.87k|            && tf->supports_vacancy_events < 0
  ------------------
  |  Branch (1683:16): [True: 2.87k, False: 0]
  ------------------
 1684|  2.87k|            && !tf->max_entries
  ------------------
  |  Branch (1684:16): [True: 2.22k, False: 652]
  ------------------
 1685|  2.22k|            && table_instruction_features_empty(&tf->nonmiss)
  ------------------
  |  Branch (1685:16): [True: 2.22k, False: 0]
  ------------------
 1686|  2.22k|            && table_instruction_features_empty(&tf->miss)
  ------------------
  |  Branch (1686:16): [True: 2.22k, False: 0]
  ------------------
 1687|  2.22k|            && bitmap_is_all_zeros(tf->match.bm, MFF_N_IDS));
  ------------------
  |  Branch (1687:16): [True: 1.97k, False: 255]
  ------------------
 1688|  3.50k|}
ofp-table.c:table_instruction_features_equal:
 1641|  62.7k|{
 1642|  62.7k|    return (table_instruction_features_next_equal(a->next, a_table_id,
  ------------------
  |  Branch (1642:13): [True: 62.7k, False: 0]
  ------------------
 1643|  62.7k|                                                  b->next, b_table_id)
 1644|  62.7k|            && a->instructions == b->instructions
  ------------------
  |  Branch (1644:16): [True: 54.8k, False: 7.92k]
  ------------------
 1645|  54.8k|            && table_action_features_equal(&a->write, &b->write)
  ------------------
  |  Branch (1645:16): [True: 49.3k, False: 5.48k]
  ------------------
 1646|  49.3k|            && table_action_features_equal(&a->apply, &b->apply));
  ------------------
  |  Branch (1646:16): [True: 47.8k, False: 1.52k]
  ------------------
 1647|  62.7k|}
ofp-table.c:table_instruction_features_next_equal:
 1615|  63.5k|{
 1616|  63.5k|    if (b_table_id == a_table_id + 1
  ------------------
  |  Branch (1616:9): [True: 1.28k, False: 62.2k]
  ------------------
 1617|  1.28k|        && bitmap_is_set(a, b_table_id)
  ------------------
  |  Branch (1617:12): [True: 0, False: 1.28k]
  ------------------
 1618|      0|        && !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++) {
  ------------------
  |  |  424|      0|#define BITMAP_N_LONGS(N_BITS) DIV_ROUND_UP(N_BITS, BITMAP_ULONG_BITS)
  |  |  ------------------
  |  |  |  |  300|      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) {
  ------------------
  |  |  423|      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|  63.5k|    } else if (a_table_id == b_table_id + 1) {
  ------------------
  |  Branch (1629:16): [True: 767, False: 62.7k]
  ------------------
 1630|    767|        return table_instruction_features_next_equal(b, b_table_id,
 1631|    767|                                                     a, a_table_id);
 1632|  62.7k|    } else {
 1633|  62.7k|        return bitmap_equal(a, b, 255);
 1634|  62.7k|    }
 1635|  63.5k|}
ofp-table.c:table_action_features_equal:
 1511|   137k|{
 1512|   137k|    return (a->ofpacts == b->ofpacts
  ------------------
  |  Branch (1512:13): [True: 116k, False: 21.0k]
  ------------------
 1513|   116k|            && bitmap_equal(a->set_fields.bm, b->set_fields.bm, MFF_N_IDS));
  ------------------
  |  Branch (1513:16): [True: 107k, False: 8.48k]
  ------------------
 1514|   137k|}
ofp-table.c:table_instruction_features_empty:
 1652|  32.7k|{
 1653|  32.7k|    return (bitmap_is_all_zeros(tif->next, 255)
  ------------------
  |  Branch (1653:13): [True: 32.7k, False: 0]
  ------------------
 1654|  32.7k|            && !tif->instructions
  ------------------
  |  Branch (1654:16): [True: 20.4k, False: 12.2k]
  ------------------
 1655|  20.4k|            && table_action_features_empty(&tif->write)
  ------------------
  |  Branch (1655:16): [True: 15.1k, False: 5.29k]
  ------------------
 1656|  15.1k|            && table_action_features_empty(&tif->apply));
  ------------------
  |  Branch (1656:16): [True: 13.3k, False: 1.78k]
  ------------------
 1657|  32.7k|}
ofp-table.c:table_action_features_empty:
 1518|  35.5k|{
 1519|  35.5k|    return !taf->ofpacts && bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS);
  ------------------
  |  Branch (1519:12): [True: 29.8k, False: 5.63k]
  |  Branch (1519:29): [True: 28.4k, False: 1.44k]
  ------------------
 1520|  35.5k|}
ofp-table.c:print_table_instruction_features:
 1527|  17.9k|{
 1528|  17.9k|    int start, end;
 1529|       |
 1530|  17.9k|    if (!bitmap_is_all_zeros(tif->next, 255)) {
  ------------------
  |  Branch (1530:9): [True: 0, False: 17.9k]
  ------------------
 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|  17.9k|    if (tif->instructions) {
  ------------------
  |  Branch (1548:9): [True: 11.7k, False: 6.22k]
  ------------------
 1549|  11.7k|        if (prev_tif && tif->instructions == prev_tif->instructions) {
  ------------------
  |  Branch (1549:13): [True: 8.46k, False: 3.27k]
  |  Branch (1549:25): [True: 2.65k, False: 5.80k]
  ------------------
 1550|  2.65k|            ds_put_cstr(s, "      (same instructions)\n");
 1551|  9.08k|        } else {
 1552|  9.08k|            ds_put_cstr(s, "      instructions: ");
 1553|  9.08k|            int i;
 1554|       |
 1555|   299k|            for (i = 0; i < 32; i++) {
  ------------------
  |  Branch (1555:25): [True: 290k, False: 9.08k]
  ------------------
 1556|   290k|                if (tif->instructions & (1u << i)) {
  ------------------
  |  Branch (1556:21): [True: 29.1k, False: 261k]
  ------------------
 1557|  29.1k|                    const char *name = ovs_instruction_name_from_type(i);
 1558|  29.1k|                    if (name) {
  ------------------
  |  Branch (1558:25): [True: 29.1k, False: 0]
  ------------------
 1559|  29.1k|                        ds_put_cstr(s, name);
 1560|  29.1k|                    } else {
 1561|      0|                        ds_put_format(s, "%d", i);
 1562|      0|                    }
 1563|  29.1k|                    ds_put_char(s, ' ');
 1564|  29.1k|                }
 1565|   290k|            }
 1566|  9.08k|            ds_chomp(s, ' ');
 1567|  9.08k|            ds_put_char(s, '\n');
 1568|  9.08k|        }
 1569|  11.7k|    }
 1570|       |
 1571|  17.9k|    if (prev_tif
  ------------------
  |  Branch (1571:9): [True: 13.1k, False: 4.84k]
  ------------------
 1572|  13.1k|        && table_action_features_equal(&tif->write, &prev_tif->write)
  ------------------
  |  Branch (1572:12): [True: 2.68k, False: 10.4k]
  ------------------
 1573|  2.68k|        && table_action_features_equal(&tif->apply, &prev_tif->apply)
  ------------------
  |  Branch (1573:12): [True: 977, False: 1.71k]
  ------------------
 1574|    977|        && !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1574:12): [True: 577, False: 400]
  ------------------
 1575|    577|        ds_put_cstr(s, "      (same actions)\n");
 1576|  17.3k|    } else if (!table_action_features_equal(&tif->write, &tif->apply)) {
  ------------------
  |  Branch (1576:16): [True: 10.4k, False: 6.95k]
  ------------------
 1577|  10.4k|        ds_put_cstr(s, "      Write-Actions features:\n");
 1578|  10.4k|        print_table_action_features(s, &tif->write);
 1579|  10.4k|        ds_put_cstr(s, "      Apply-Actions features:\n");
 1580|  10.4k|        print_table_action_features(s, &tif->apply);
 1581|  10.4k|    } else if (tif->write.ofpacts
  ------------------
  |  Branch (1581:16): [True: 6.53k, False: 421]
  ------------------
 1582|  6.65k|               || !bitmap_is_all_zeros(tif->write.set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1582:19): [True: 118, False: 303]
  ------------------
 1583|  6.65k|        ds_put_cstr(s, "      Write-Actions and Apply-Actions features:\n");
 1584|  6.65k|        print_table_action_features(s, &tif->write);
 1585|  6.65k|    }
 1586|  17.9k|}
ofp-table.c:print_table_action_features:
 1494|  27.4k|{
 1495|  27.4k|    if (taf->ofpacts) {
  ------------------
  |  Branch (1495:9): [True: 21.2k, False: 6.23k]
  ------------------
 1496|  21.2k|        ds_put_cstr(s, "        actions: ");
 1497|  21.2k|        ofpact_bitmap_format(taf->ofpacts, s);
 1498|  21.2k|        ds_put_char(s, '\n');
 1499|  21.2k|    }
 1500|       |
 1501|  27.4k|    if (!bitmap_is_all_zeros(taf->set_fields.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1501:9): [True: 17.5k, False: 9.98k]
  ------------------
 1502|  17.5k|        ds_put_cstr(s, "        supported on Set-Field:");
 1503|  17.5k|        print_mf_bitmap(s, &taf->set_fields);
 1504|  17.5k|        ds_put_char(s, '\n');
 1505|  17.5k|    }
 1506|  27.4k|}
ofp-table.c:print_mf_bitmap:
 1476|  45.7k|{
 1477|  45.7k|    const char *ids[MFF_N_IDS];
 1478|  45.7k|    size_t n = 0;
 1479|       |
 1480|  45.7k|    int i;
 1481|   374k|    BITMAP_FOR_EACH_1 (i, MFF_N_IDS, mfb->bm) {
  ------------------
  |  |  281|  45.7k|    BITMAP_FOR_EACH_1_RANGE(IDX, 0, SIZE, BITMAP)
  |  |  ------------------
  |  |  |  |  278|   420k|    for ((IDX) = bitmap_scan(BITMAP, true, BEGIN, END); (IDX) < (END);   \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (278:57): [True: 374k, False: 45.7k]
  |  |  |  |  ------------------
  |  |  |  |  279|   374k|         (IDX) = bitmap_scan(BITMAP, true, (IDX) + 1, END))
  |  |  ------------------
  ------------------
 1482|   374k|        ids[n++] = mf_from_id(i)->name;
 1483|   374k|    }
 1484|       |
 1485|  45.7k|    if (n > 0) {
  ------------------
  |  Branch (1485:9): [True: 45.7k, False: 0]
  ------------------
 1486|  45.7k|        ds_put_char(s, ' ');
 1487|  45.7k|        print_names(s, ids, n, 0);
 1488|  45.7k|    }
 1489|  45.7k|}
ofp-table.c:print_names:
 1439|   145k|{
 1440|   145k|    int group = 0;
 1441|   619k|    while (n > 0) {
  ------------------
  |  Branch (1441:12): [True: 473k, False: 145k]
  ------------------
 1442|   473k|        if (group++) {
  ------------------
  |  Branch (1442:13): [True: 328k, False: 145k]
  ------------------
 1443|   328k|            ds_put_char(s, prefix_len ? ',' : ' ');
  ------------------
  |  Branch (1443:28): [True: 126k, False: 201k]
  ------------------
 1444|   328k|        }
 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|   473k|        size_t extra_prefix_len;
 1453|   473k|        size_t prefix_run = count_common_prefix_run(ids, n, prefix_len,
 1454|   473k|                                                    &extra_prefix_len);
 1455|   473k|        size_t suffix_run = count_sequential_suffix_run(ids, n);
 1456|   473k|        size_t run = MAX(prefix_run, suffix_run);
  ------------------
  |  |   95|   473k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 99.7k, False: 374k]
  |  |  ------------------
  ------------------
 1457|   473k|        if (suffix_run >= prefix_run) {
  ------------------
  |  Branch (1457:13): [True: 374k, False: 99.7k]
  ------------------
 1458|   374k|            ds_put_format(s, "%s", ids[0] + prefix_len);
 1459|   374k|            if (run > 1) {
  ------------------
  |  Branch (1459:17): [True: 0, False: 374k]
  ------------------
 1460|      0|                ds_put_format(s, "...%s", ids[run - 1] + prefix_len);
 1461|      0|            }
 1462|   374k|        } else {
 1463|  99.7k|            ds_put_format(s, "%.*s{", (int) extra_prefix_len,
 1464|  99.7k|                          ids[0] + prefix_len);
 1465|  99.7k|            print_names(s, ids, run, prefix_len + extra_prefix_len);
 1466|  99.7k|            ds_put_char(s, '}');
 1467|  99.7k|        }
 1468|       |
 1469|   473k|        ids += run;
 1470|   473k|        n -= run;
 1471|   473k|    }
 1472|   145k|}
ofp-table.c:count_common_prefix_run:
 1400|   473k|{
 1401|   473k|    *extra_prefix_lenp = 0;
 1402|   473k|    if (n < 2) {
  ------------------
  |  Branch (1402:9): [True: 127k, False: 346k]
  ------------------
 1403|   127k|        return n;
 1404|   127k|    }
 1405|       |
 1406|   346k|    size_t extra_prefix_len = count_common_prefix(ids[0] + prefix_len,
 1407|   346k|                                                  ids[1] + prefix_len);
 1408|   346k|    if (!extra_prefix_len) {
  ------------------
  |  Branch (1408:9): [True: 246k, False: 99.7k]
  ------------------
 1409|   246k|        return 1;
 1410|   246k|    }
 1411|       |
 1412|  99.7k|    size_t i = 2;
 1413|   126k|    while (i < n) {
  ------------------
  |  Branch (1413:12): [True: 109k, False: 17.5k]
  ------------------
 1414|   109k|        size_t next = count_common_prefix(ids[0] + prefix_len,
 1415|   109k|                                          ids[i] + prefix_len);
 1416|   109k|        if (!next) {
  ------------------
  |  Branch (1416:13): [True: 82.1k, False: 27.0k]
  ------------------
 1417|  82.1k|            break;
 1418|  82.1k|        } else if (next < extra_prefix_len) {
  ------------------
  |  Branch (1418:20): [True: 0, False: 27.0k]
  ------------------
 1419|      0|            extra_prefix_len = next;
 1420|      0|        }
 1421|  27.0k|        i++;
 1422|  27.0k|    }
 1423|  99.7k|    *extra_prefix_lenp = extra_prefix_len;
 1424|  99.7k|    return i;
 1425|   346k|}
ofp-table.c:count_common_prefix:
 1378|   455k|{
 1379|   455k|    size_t retval = 0;
 1380|  1.03M|    for (size_t i = 0; ; i++) {
 1381|  1.03M|        if (a[i] != b[i] || !a[i]) {
  ------------------
  |  Branch (1381:13): [True: 455k, False: 581k]
  |  Branch (1381:29): [True: 0, False: 581k]
  ------------------
 1382|   455k|            return retval;
 1383|   581k|        } else if (a[i] == '_') {
  ------------------
  |  Branch (1383:20): [True: 126k, False: 454k]
  ------------------
 1384|   126k|            retval = i + 1;
 1385|   126k|        }
 1386|  1.03M|    }
 1387|   455k|}
ofp-table.c:count_sequential_suffix_run:
 1365|   473k|{
 1366|   473k|    for (size_t i = 1; ; i++) {
 1367|   473k|        if (i >= n || !are_names_sequential(ids[i - 1], ids[i])) {
  ------------------
  |  Branch (1367:13): [True: 127k, False: 346k]
  |  Branch (1367:23): [True: 346k, False: 0]
  ------------------
 1368|       |            /* "x0...x1" is worse than "x0 x1", so suppress it. */
 1369|   473k|            return i == 2 ? 1 : i;
  ------------------
  |  Branch (1369:20): [True: 0, False: 473k]
  ------------------
 1370|   473k|        }
 1371|   473k|    }
 1372|   473k|}
ofp-table.c:are_names_sequential:
 1345|   346k|{
 1346|       |    /* Skip common prefix. */
 1347|  1.33M|    for (; *a == *b; a++, b++) {
  ------------------
  |  Branch (1347:12): [True: 984k, False: 346k]
  ------------------
 1348|   984k|        if (!*a) {
  ------------------
  |  Branch (1348:13): [True: 0, False: 984k]
  ------------------
 1349|       |            /* 'a' and 'b' are the same.  Weird, but not sequential. */
 1350|      0|            return false;
 1351|      0|        }
 1352|   984k|    }
 1353|       |
 1354|   346k|    return (is_all_digits(a)
  ------------------
  |  Branch (1354:13): [True: 0, False: 346k]
  ------------------
 1355|      0|            && is_all_digits(b)
  ------------------
  |  Branch (1355:16): [True: 0, False: 0]
  ------------------
 1356|      0|            && strlen(a) < 10
  ------------------
  |  Branch (1356:16): [True: 0, False: 0]
  ------------------
 1357|      0|            && strlen(b) < 10
  ------------------
  |  Branch (1357:16): [True: 0, False: 0]
  ------------------
 1358|      0|            && atoi(a) + 1 == atoi(b));
  ------------------
  |  Branch (1358:16): [True: 0, False: 0]
  ------------------
 1359|   346k|}
ofp-table.c:is_all_digits:
 1337|   346k|{
 1338|   346k|    return s[0] && s[strspn(s, "0123456789")] == '\0';
  ------------------
  |  Branch (1338:12): [True: 346k, False: 0]
  |  Branch (1338:20): [True: 0, False: 346k]
  ------------------
 1339|   346k|}
ofp-table.c:print_matches:
 1591|  62.8k|{
 1592|  62.8k|    const struct mf_bitmap m = mask ? f->mask : mf_bitmap_not(f->mask);
  ------------------
  |  Branch (1592:32): [True: 20.9k, False: 41.9k]
  ------------------
 1593|  62.8k|    const struct mf_bitmap w = wc ? f->wildcard : mf_bitmap_not(f->wildcard);
  ------------------
  |  Branch (1593:32): [True: 41.9k, False: 20.9k]
  ------------------
 1594|  62.8k|    const struct mf_bitmap bm = mf_bitmap_and(f->match, mf_bitmap_and(m, w));
 1595|       |
 1596|  62.8k|    if (!bitmap_is_all_zeros(bm.bm, MFF_N_IDS)) {
  ------------------
  |  Branch (1596:9): [True: 28.2k, False: 34.6k]
  ------------------
 1597|  28.2k|        ds_put_format(s, "      %s:", title);
 1598|  28.2k|        print_mf_bitmap(s, &bm);
 1599|  28.2k|        ds_put_char(s, '\n');
 1600|  28.2k|    }
 1601|  62.8k|}
ofp-table.c:ofputil_decode_ofp10_table_stats:
 2128|  7.57k|{
 2129|  7.57k|    struct ofp10_table_stats *ots;
 2130|       |
 2131|  7.57k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2132|  7.57k|    if (!ots) {
  ------------------
  |  Branch (2132:9): [True: 0, False: 7.57k]
  ------------------
 2133|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2134|      0|    }
 2135|       |
 2136|  7.57k|    features->table_id = ots->table_id;
 2137|  7.57k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  7.57k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  7.57k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 7.57k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2138|  7.57k|    features->max_entries = ntohl(ots->max_entries);
 2139|  7.57k|    features->match = features->wildcard = mf_bitmap_from_of10(ots->wildcards);
 2140|       |
 2141|  7.57k|    stats->table_id = ots->table_id;
 2142|  7.57k|    stats->active_count = ntohl(ots->active_count);
 2143|  7.57k|    stats->lookup_count = ntohll(get_32aligned_be64(&ots->lookup_count));
 2144|  7.57k|    stats->matched_count = ntohll(get_32aligned_be64(&ots->matched_count));
 2145|       |
 2146|  7.57k|    return 0;
 2147|  7.57k|}
ofp-table.c:mf_bitmap_from_of10:
 1927|  7.57k|{
 1928|  7.57k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  7.57k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 1929|  7.57k|    const struct ofp10_wc_map *p;
 1930|  7.57k|    uint32_t wc10 = ntohl(wc10_);
 1931|       |
 1932|  98.4k|    for (p = ofp10_wc_map; p < &ofp10_wc_map[ARRAY_SIZE(ofp10_wc_map)]; p++) {
  ------------------
  |  |  297|  98.4k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  98.4k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  98.4k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  98.4k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  98.4k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  98.4k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (1932:28): [True: 90.8k, False: 7.57k]
  ------------------
 1933|  90.8k|        if (wc10 & p->wc10) {
  ------------------
  |  Branch (1933:13): [True: 35.8k, False: 55.0k]
  ------------------
 1934|  35.8k|            bitmap_set1(fields.bm, p->mf);
 1935|  35.8k|        }
 1936|  90.8k|    }
 1937|  7.57k|    return fields;
 1938|  7.57k|}
ofp-table.c:ofputil_decode_ofp11_table_stats:
 2153|  7.68k|{
 2154|  7.68k|    struct ofp11_table_stats *ots;
 2155|       |
 2156|  7.68k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2157|  7.68k|    if (!ots) {
  ------------------
  |  Branch (2157:9): [True: 0, False: 7.68k]
  ------------------
 2158|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2159|      0|    }
 2160|       |
 2161|  7.68k|    features->table_id = ots->table_id;
 2162|  7.68k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  7.68k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  7.68k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 7.68k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2163|  7.68k|    features->max_entries = ntohl(ots->max_entries);
 2164|  7.68k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2165|  7.68k|        ots->instructions, OFP11_VERSION);
 2166|  7.68k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2167|  7.68k|        ots->write_actions, OFP11_VERSION);
 2168|  7.68k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2169|  7.68k|        ots->write_actions, OFP11_VERSION);
 2170|  7.68k|    features->miss = features->nonmiss;
 2171|  7.68k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2172|  7.68k|                                                      OFP11_VERSION);
 2173|  7.68k|    features->match = mf_bitmap_from_of11(ots->match);
 2174|  7.68k|    features->wildcard = mf_bitmap_from_of11(ots->wildcards);
 2175|  7.68k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2176|       |
 2177|  7.68k|    stats->table_id = ots->table_id;
 2178|  7.68k|    stats->active_count = ntohl(ots->active_count);
 2179|  7.68k|    stats->lookup_count = ntohll(ots->lookup_count);
 2180|  7.68k|    stats->matched_count = ntohll(ots->matched_count);
 2181|       |
 2182|  7.68k|    return 0;
 2183|  7.68k|}
ofp-table.c:mf_bitmap_from_of11:
 1998|  15.3k|{
 1999|  15.3k|    struct mf_bitmap fields = MF_BITMAP_INITIALIZER;
  ------------------
  |  | 2053|  15.3k|#define MF_BITMAP_INITIALIZER { { [0] = 0 } }
  ------------------
 2000|  15.3k|    const struct ofp11_wc_map *p;
 2001|  15.3k|    uint32_t wc11 = ntohl(wc11_);
 2002|       |
 2003|   245k|    for (p = ofp11_wc_map; p < &ofp11_wc_map[ARRAY_SIZE(ofp11_wc_map)]; p++) {
  ------------------
  |  |  297|   245k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|   245k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|   245k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|   245k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|   245k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|   245k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (2003:28): [True: 230k, False: 15.3k]
  ------------------
 2004|   230k|        if (wc11 & p->wc11) {
  ------------------
  |  Branch (2004:13): [True: 103k, False: 127k]
  ------------------
 2005|   103k|            bitmap_set1(fields.bm, p->mf);
 2006|   103k|        }
 2007|   230k|    }
 2008|  15.3k|    return fields;
 2009|  15.3k|}
ofp-table.c:ofputil_decode_ofp12_table_stats:
 2189|  13.2k|{
 2190|  13.2k|    struct ofp12_table_stats *ots;
 2191|       |
 2192|  13.2k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2193|  13.2k|    if (!ots) {
  ------------------
  |  Branch (2193:9): [True: 0, False: 13.2k]
  ------------------
 2194|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2195|      0|    }
 2196|       |
 2197|  13.2k|    features->table_id = ots->table_id;
 2198|  13.2k|    ovs_strlcpy_arrays(features->name, ots->name);
  ------------------
  |  |  209|  13.2k|    ovs_strlcpy(DST, SRC, MIN(ARRAY_SIZE(DST), ARRAY_SIZE(SRC)))
  |  |  ------------------
  |  |  |  |   91|  13.2k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (91:20): [Folded, False: 13.2k]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 2199|  13.2k|    features->metadata_match = ots->metadata_match;
 2200|  13.2k|    features->metadata_write = ots->metadata_write;
 2201|  13.2k|    features->miss_config = ofputil_decode_table_miss(ots->config,
 2202|  13.2k|                                                      OFP12_VERSION);
 2203|  13.2k|    features->max_entries = ntohl(ots->max_entries);
 2204|       |
 2205|  13.2k|    features->nonmiss.instructions = ovsinst_bitmap_from_openflow(
 2206|  13.2k|        ots->instructions, OFP12_VERSION);
 2207|  13.2k|    features->nonmiss.write.ofpacts = ofpact_bitmap_from_openflow(
 2208|  13.2k|        ots->write_actions, OFP12_VERSION);
 2209|  13.2k|    features->nonmiss.apply.ofpacts = ofpact_bitmap_from_openflow(
 2210|  13.2k|        ots->apply_actions, OFP12_VERSION);
 2211|  13.2k|    features->nonmiss.write.set_fields = oxm_bitmap_to_mf_bitmap(
 2212|  13.2k|        ots->write_setfields, OFP12_VERSION);
 2213|  13.2k|    features->nonmiss.apply.set_fields = oxm_bitmap_to_mf_bitmap(
 2214|  13.2k|        ots->apply_setfields, OFP12_VERSION);
 2215|  13.2k|    features->miss = features->nonmiss;
 2216|       |
 2217|  13.2k|    features->match = oxm_bitmap_to_mf_bitmap(ots->match, OFP12_VERSION);
 2218|  13.2k|    features->wildcard = oxm_bitmap_to_mf_bitmap(ots->wildcards,
 2219|  13.2k|                                                 OFP12_VERSION);
 2220|  13.2k|    bitmap_or(features->match.bm, features->wildcard.bm, MFF_N_IDS);
 2221|       |
 2222|  13.2k|    stats->table_id = ots->table_id;
 2223|  13.2k|    stats->active_count = ntohl(ots->active_count);
 2224|  13.2k|    stats->lookup_count = ntohll(ots->lookup_count);
 2225|  13.2k|    stats->matched_count = ntohll(ots->matched_count);
 2226|       |
 2227|  13.2k|    return 0;
 2228|  13.2k|}
ofp-table.c:ofputil_decode_ofp13_table_stats:
 2234|  3.13k|{
 2235|  3.13k|    struct ofp13_table_stats *ots;
 2236|       |
 2237|  3.13k|    ots = ofpbuf_try_pull(msg, sizeof *ots);
 2238|  3.13k|    if (!ots) {
  ------------------
  |  Branch (2238:9): [True: 0, False: 3.13k]
  ------------------
 2239|      0|        return OFPERR_OFPBRC_BAD_LEN;
 2240|      0|    }
 2241|       |
 2242|  3.13k|    features->table_id = ots->table_id;
 2243|       |
 2244|  3.13k|    stats->table_id = ots->table_id;
 2245|  3.13k|    stats->active_count = ntohl(ots->active_count);
 2246|  3.13k|    stats->lookup_count = ntohll(ots->lookup_count);
 2247|  3.13k|    stats->matched_count = ntohll(ots->matched_count);
 2248|       |
 2249|  3.13k|    return 0;
 2250|  3.13k|}

ofputil_decode_hello:
  112|  45.8k|{
  113|  45.8k|    struct ofpbuf msg = ofpbuf_const_initializer(oh, ntohs(oh->length));
  114|  45.8k|    ofpbuf_pull(&msg, sizeof *oh);
  115|       |
  116|  45.8k|    *allowed_versions = version_bitmap_from_version(oh->version);
  117|       |
  118|  45.8k|    bool ok = true;
  119|  55.5k|    while (msg.size) {
  ------------------
  |  Branch (119:12): [True: 39.7k, False: 15.8k]
  ------------------
  120|  39.7k|        const struct ofp_hello_elem_header *oheh;
  121|  39.7k|        unsigned int len;
  122|       |
  123|  39.7k|        if (msg.size < sizeof *oheh) {
  ------------------
  |  Branch (123:13): [True: 716, False: 39.0k]
  ------------------
  124|    716|            return false;
  125|    716|        }
  126|       |
  127|  39.0k|        oheh = msg.data;
  128|  39.0k|        len = ntohs(oheh->length);
  129|  39.0k|        if (len < sizeof *oheh || !ofpbuf_try_pull(&msg, ROUND_UP(len, 8))) {
  ------------------
  |  |  303|  32.7k|#define ROUND_UP(X, Y) (DIV_ROUND_UP(X, Y) * (Y))
  |  |  ------------------
  |  |  |  |  300|  32.7k|#define DIV_ROUND_UP(X, Y) (((X) + ((Y) - 1)) / (Y))
  |  |  ------------------
  ------------------
  |  Branch (129:13): [True: 6.31k, False: 32.7k]
  |  Branch (129:35): [True: 22.9k, False: 9.77k]
  ------------------
  130|  29.2k|            return false;
  131|  29.2k|        }
  132|       |
  133|  9.77k|        if (oheh->type != htons(OFPHET_VERSIONBITMAP)
  ------------------
  |  Branch (133:13): [True: 8.76k, False: 1.00k]
  ------------------
  134|  9.43k|            || !ofputil_decode_hello_bitmap(oheh, allowed_versions)) {
  ------------------
  |  Branch (134:16): [True: 666, False: 343]
  ------------------
  135|  9.43k|            ok = false;
  136|  9.43k|        }
  137|  9.77k|    }
  138|       |
  139|  15.8k|    return ok;
  140|  45.8k|}
ofputil_hello_format:
  179|  45.8k|{
  180|  45.8k|    uint32_t allowed_versions;
  181|  45.8k|    bool ok;
  182|       |
  183|  45.8k|    ok = ofputil_decode_hello(oh, &allowed_versions);
  184|       |
  185|  45.8k|    ds_put_cstr(string, "\n version bitmap: ");
  186|  45.8k|    ofputil_format_version_bitmap(string, allowed_versions);
  187|       |
  188|  45.8k|    if (!ok) {
  ------------------
  |  Branch (188:9): [True: 30.4k, False: 15.3k]
  ------------------
  189|  30.4k|        ds_put_cstr(string, "\n unknown data in hello:\n");
  190|  30.4k|        ds_put_hex_dump(string, oh, ntohs(oh->length), 0, true);
  191|  30.4k|    }
  192|  45.8k|}
ofp-util.c:version_bitmap_from_version:
   99|  45.8k|{
  100|  45.8k|    return ((ofp_version < 32 ? 1u << ofp_version : 0) - 1) << 1;
  ------------------
  |  Branch (100:14): [True: 27.4k, False: 18.3k]
  ------------------
  101|  45.8k|}
ofp-util.c:ofputil_decode_hello_bitmap:
   64|  1.00k|{
   65|  1.00k|    uint16_t bitmap_len = ntohs(oheh->length) - sizeof *oheh;
   66|  1.00k|    const ovs_be32 *bitmap = ALIGNED_CAST(const ovs_be32 *, oheh + 1);
  ------------------
  |  |  434|  1.00k|#define ALIGNED_CAST(TYPE, ATTR) ((TYPE) (void *) (ATTR))
  ------------------
   67|  1.00k|    uint32_t allowed_versions;
   68|       |
   69|  1.00k|    if (!bitmap_len || bitmap_len % sizeof *bitmap) {
  ------------------
  |  Branch (69:9): [True: 18, False: 991]
  |  Branch (69:24): [True: 261, False: 730]
  ------------------
   70|    279|        return false;
   71|    279|    }
   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|    730|    allowed_versions = ntohl(bitmap[0]);
   79|       |
   80|    730|    if (allowed_versions & 1) {
  ------------------
  |  Branch (80:9): [True: 460, False: 270]
  ------------------
   81|       |        /* There's no OpenFlow version 0. */
   82|    460|        VLOG_WARN_RL(&bad_ofmsg_rl, "peer claims to support invalid OpenFlow "
  ------------------
  |  |  224|    460|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    460|    do {                                                                \
  |  |  |  |  288|    460|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    460|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 460]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    460|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 460]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   83|    460|                     "version 0x00");
   84|    460|        allowed_versions &= ~1u;
   85|    460|    }
   86|       |
   87|    730|    if (!allowed_versions) {
  ------------------
  |  Branch (87:9): [True: 387, False: 343]
  ------------------
   88|    387|        VLOG_WARN_RL(&bad_ofmsg_rl, "peer does not support any OpenFlow "
  ------------------
  |  |  224|    387|#define VLOG_WARN_RL(RL, ...) VLOG_RL(RL, VLL_WARN, __VA_ARGS__)
  |  |  ------------------
  |  |  |  |  287|    387|    do {                                                                \
  |  |  |  |  288|    387|        enum vlog_level level__ = LEVEL;                                \
  |  |  |  |  289|    387|        if (this_module.min_level >= level__) {                         \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (289:13): [True: 0, False: 387]
  |  |  |  |  ------------------
  |  |  |  |  290|      0|            vlog_rate_limit(&this_module, level__, RL, __VA_ARGS__);    \
  |  |  |  |  291|      0|        }                                                               \
  |  |  |  |  292|    387|    } while (0)
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (292:14): [Folded, False: 387]
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
   89|    387|                     "version (between 0x01 and 0x1f)");
   90|    387|        return false;
   91|    387|    }
   92|       |
   93|    343|    *allowed_versionsp = allowed_versions;
   94|       |    return true;
   95|    730|}

ofpbuf_use_const:
  114|   339k|{
  115|   339k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STACK);
  ------------------
  |  |   85|   339k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|   339k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|   339k|     (TYPE) (POINTER))
  ------------------
  116|   339k|}
ofpbuf_use_data:
  132|  88.4k|{
  133|  88.4k|    ofpbuf_use__(b, CONST_CAST(void *, data), size, size, OFPBUF_STUB);
  ------------------
  |  |   85|  88.4k|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|  88.4k|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|  88.4k|     (TYPE) (POINTER))
  ------------------
  134|  88.4k|}
ofpbuf_init:
  140|  1.02M|{
  141|  1.02M|    ofpbuf_use(b, size ? xmalloc(size) : NULL, size);
  ------------------
  |  Branch (141:19): [True: 468k, False: 560k]
  ------------------
  142|  1.02M|}
ofpbuf_uninit:
  147|   990k|{
  148|   990k|    if (b) {
  ------------------
  |  Branch (148:9): [True: 990k, False: 0]
  ------------------
  149|   990k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (149:13): [True: 859k, False: 131k]
  ------------------
  150|   859k|            free(b->base);
  151|   859k|        }
  152|   990k|    }
  153|   990k|}
ofpbuf_prealloc_tailroom:
  306|   519k|{
  307|   519k|    if (size > ofpbuf_tailroom(b)) {
  ------------------
  |  Branch (307:9): [True: 74.3k, False: 445k]
  ------------------
  308|  74.3k|        ofpbuf_resize__(b, ofpbuf_headroom(b), MAX(size, 64));
  ------------------
  |  |   95|  74.3k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 9.71k, False: 64.6k]
  |  |  ------------------
  ------------------
  309|  74.3k|    }
  310|   519k|}
ofpbuf_prealloc_headroom:
  317|  90.2k|{
  318|  90.2k|    if (size > ofpbuf_headroom(b)) {
  ------------------
  |  Branch (318:9): [True: 77.1k, False: 13.0k]
  ------------------
  319|  77.1k|        ofpbuf_resize__(b, MAX(size, 64), ofpbuf_tailroom(b));
  ------------------
  |  |   95|  77.1k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 1.02k, False: 76.1k]
  |  |  ------------------
  ------------------
  320|  77.1k|    }
  321|  90.2k|}
ofpbuf_trim:
  336|   432k|{
  337|   432k|    if (b->source == OFPBUF_MALLOC
  ------------------
  |  Branch (337:9): [True: 432k, False: 0]
  ------------------
  338|   432k|        && (ofpbuf_headroom(b) || ofpbuf_tailroom(b))) {
  ------------------
  |  Branch (338:13): [True: 73.4k, False: 359k]
  |  Branch (338:35): [True: 1.05k, False: 358k]
  ------------------
  339|  74.5k|        ofpbuf_resize__(b, 0, 0);
  340|  74.5k|    }
  341|   432k|}
ofpbuf_padto:
  368|  62.9k|{
  369|  62.9k|    if (b->size < length) {
  ------------------
  |  Branch (369:9): [True: 13.8k, False: 49.1k]
  ------------------
  370|  13.8k|        ofpbuf_put_zeros(b, length - b->size);
  371|  13.8k|    }
  372|  62.9k|}
ofpbuf_put_uninit:
  401|   519k|{
  402|   519k|    void *p;
  403|   519k|    ofpbuf_prealloc_tailroom(b, size);
  404|   519k|    p = ofpbuf_tail(b);
  405|   519k|    b->size += size;
  406|   519k|    return p;
  407|   519k|}
ofpbuf_put_zeros:
  414|  95.2k|{
  415|  95.2k|    void *dst = ofpbuf_put_uninit(b, size);
  416|  95.2k|    nullable_memset(dst, 0, size);
  417|  95.2k|    return dst;
  418|  95.2k|}
ofpbuf_put:
  425|   145k|{
  426|   145k|    if (!size) {
  ------------------
  |  Branch (426:9): [True: 21.0k, False: 124k]
  ------------------
  427|  21.0k|        return ofpbuf_tail(b);
  428|  21.0k|    }
  429|       |
  430|   124k|    void *dst = ofpbuf_put_uninit(b, size);
  431|   124k|    memcpy(dst, p, size);
  432|   124k|    return dst;
  433|   145k|}
ofpbuf_push_uninit:
  481|   455k|{
  482|   455k|    if (!size) {
  ------------------
  |  Branch (482:9): [True: 365k, False: 90.2k]
  ------------------
  483|   365k|        return b->data;
  484|   365k|    }
  485|       |
  486|  90.2k|    ofpbuf_prealloc_headroom(b, size);
  487|  90.2k|    b->data = (char*)b->data - size;
  488|  90.2k|    b->size += size;
  489|  90.2k|    return b->data;
  490|   455k|}
ofpbuf_push:
  508|   439k|{
  509|   439k|    void *dst = ofpbuf_push_uninit(b, size);
  510|   439k|    memcpy(dst, p, size);
  511|   439k|    return dst;
  512|   439k|}
ofpbuf_steal_data:
  537|   169k|{
  538|   169k|    void *p;
  539|       |
  540|   169k|    if (b->source == OFPBUF_MALLOC && b->data == b->base) {
  ------------------
  |  Branch (540:9): [True: 169k, False: 0]
  |  Branch (540:39): [True: 166k, False: 2.58k]
  ------------------
  541|   166k|        p = b->data;
  542|   166k|    } else {
  543|  2.58k|        p = xmemdup(b->data, b->size);
  544|  2.58k|        if (b->source == OFPBUF_MALLOC) {
  ------------------
  |  Branch (544:13): [True: 2.58k, False: 0]
  ------------------
  545|  2.58k|            free(b->base);
  546|  2.58k|        }
  547|  2.58k|    }
  548|   169k|    b->base = NULL;
  549|   169k|    b->data = NULL;
  550|   169k|    b->header = NULL;
  551|       |    b->msg = NULL;
  552|   169k|    return p;
  553|   169k|}
ofpbuf.c:ofpbuf_use__:
   37|  1.45M|{
   38|  1.45M|    b->base = base;
   39|  1.45M|    b->data = base;
   40|  1.45M|    b->size = size;
   41|       |
   42|  1.45M|    ofpbuf_init__(b, allocated, source);
   43|  1.45M|}
ofpbuf.c:ofpbuf_init__:
   26|  1.45M|{
   27|  1.45M|    b->allocated = allocated;
   28|  1.45M|    b->source = source;
   29|  1.45M|    b->header = NULL;
   30|       |    b->msg = NULL;
   31|  1.45M|    ovs_list_poison(&b->list_node);
   32|  1.45M|}
ofpbuf.c:ofpbuf_use:
   51|  1.02M|{
   52|  1.02M|    ofpbuf_use__(b, base, allocated, 0, OFPBUF_MALLOC);
   53|  1.02M|}
ofpbuf.c:ofpbuf_resize__:
  252|   226k|{
  253|   226k|    void *new_base, *new_data;
  254|   226k|    size_t new_allocated;
  255|       |
  256|   226k|    new_allocated = new_headroom + b->size + new_tailroom;
  257|       |
  258|   226k|    switch (b->source) {
  259|   226k|    case OFPBUF_MALLOC:
  ------------------
  |  Branch (259:5): [True: 226k, False: 0]
  ------------------
  260|   226k|        if (new_headroom == ofpbuf_headroom(b)) {
  ------------------
  |  Branch (260:13): [True: 75.4k, False: 150k]
  ------------------
  261|  75.4k|            new_base = xrealloc(b->base, new_allocated);
  262|   150k|        } else {
  263|   150k|            new_base = xmalloc(new_allocated);
  264|   150k|            ofpbuf_copy__(b, new_base, new_headroom, new_tailroom);
  265|   150k|            free(b->base);
  266|   150k|        }
  267|   226k|        break;
  268|       |
  269|      0|    case OFPBUF_STACK:
  ------------------
  |  Branch (269:5): [True: 0, False: 226k]
  ------------------
  270|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  271|       |
  272|      0|    case OFPBUF_STUB:
  ------------------
  |  Branch (272:5): [True: 0, False: 226k]
  ------------------
  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: 226k]
  ------------------
  279|      0|        OVS_NOT_REACHED();
  ------------------
  |  |  107|      0|#define OVS_NOT_REACHED() abort()
  ------------------
  280|   226k|    }
  281|       |
  282|   226k|    b->allocated = new_allocated;
  283|   226k|    b->base = new_base;
  284|       |
  285|   226k|    new_data = (char *) new_base + new_headroom;
  286|   226k|    if (b->data != new_data) {
  ------------------
  |  Branch (286:9): [True: 221k, False: 4.61k]
  ------------------
  287|   221k|        if (b->header) {
  ------------------
  |  Branch (287:13): [True: 56.6k, False: 164k]
  ------------------
  288|  56.6k|            ptrdiff_t header_offset = (char *) b->header - (char *) b->data;
  289|       |
  290|  56.6k|            b->header = (char *) new_data + header_offset;
  291|  56.6k|        }
  292|   221k|        if (b->msg) {
  ------------------
  |  Branch (292:13): [True: 0, False: 221k]
  ------------------
  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|   221k|        b->data = new_data;
  298|   221k|    }
  299|   226k|}
ofpbuf.c:ofpbuf_copy__:
  236|   150k|{
  237|   150k|    const uint8_t *old_base = b->base;
  238|   150k|    size_t old_headroom = ofpbuf_headroom(b);
  239|   150k|    size_t old_tailroom = ofpbuf_tailroom(b);
  240|   150k|    size_t copy_headroom = MIN(old_headroom, new_headroom);
  ------------------
  |  |   91|   150k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 77.1k, False: 73.4k]
  |  |  ------------------
  ------------------
  241|   150k|    size_t copy_tailroom = MIN(old_tailroom, new_tailroom);
  ------------------
  |  |   91|   150k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 0, False: 150k]
  |  |  ------------------
  ------------------
  242|       |
  243|   150k|    memcpy(&new_base[new_headroom - copy_headroom],
  244|   150k|           &old_base[old_headroom - copy_headroom],
  245|   150k|           copy_headroom + b->size + copy_tailroom);
  246|   150k|}

ovs_mutex_lock_at:
   58|    188|    { \
   59|    188|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   85|    188|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    188|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    188|     (TYPE) (POINTER))
  ------------------
   60|    188|        int error; \
   61|    188| \
   62|    188|        /* Verify that 'l' was initialized. */ \
   63|    188|        if (OVS_UNLIKELY(!l->where)) { \
  ------------------
  |  |   66|    188|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 188]
  |  |  ------------------
  ------------------
   64|      0|            VLOG_ABORT("%s: %s() passed uninitialized ovs_"#TYPE, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
   65|      0|                       where, __func__); \
   66|      0|        } \
   67|    188| \
   68|    188|        error = pthread_##TYPE##_##FUN(&l->lock); \
   69|    188|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   66|    188|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 188]
  |  |  ------------------
  ------------------
   70|      0|            VLOG_ABORT("%s: pthread_%s_%s failed: %s", where, #TYPE, #FUN, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
   71|      0|                       ovs_strerror(error)); \
   72|      0|        } \
   73|    188|        l->where = where; \
   74|    188| }
ovs_mutex_unlock:
  118|    188|    { \
  119|    188|        struct ovs_##TYPE *l = CONST_CAST(struct ovs_##TYPE *, l_); \
  ------------------
  |  |   85|    188|    (BUILD_ASSERT_TYPE(POINTER, TYPE),                          \
  |  |  ------------------
  |  |  |  |   80|    188|    ((void) sizeof ((int) ((POINTER) == (TYPE) (POINTER))))
  |  |  ------------------
  |  |   86|    188|     (TYPE) (POINTER))
  ------------------
  120|    188|        int error; \
  121|    188| \
  122|    188|        /* Verify that 'l' was initialized. */ \
  123|    188|        ovs_assert(l->where); \
  ------------------
  |  |   62|    188|#define ovs_assert ovs_ignore
  ------------------
  124|    188| \
  125|    188|        l->where = WHERE; \
  126|    188|        error = pthread_##TYPE##_##FUN(&l->lock); \
  127|    188|        if (OVS_UNLIKELY(error)) { \
  ------------------
  |  |   66|    188|#define OVS_UNLIKELY(CONDITION) __builtin_expect(!!(CONDITION), 0)
  |  |  ------------------
  |  |  |  Branch (66:33): [True: 0, False: 188]
  |  |  ------------------
  ------------------
  128|      0|            VLOG_ABORT("%s: pthread_%s_%s failed: %s", l->where, #TYPE, #FUN, \
  ------------------
  |  |  206|      0|#define VLOG_ABORT(...) vlog_abort(&this_module, __VA_ARGS__)
  ------------------
  129|      0|                       ovs_strerror(error)); \
  130|      0|        } \
  131|    188|    }
ovsthread_once_start__:
  495|      3|{
  496|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  497|       |    /* Mutex synchronizes memory, so we get the current value of 'done'. */
  498|      3|    if (!once->done) {
  ------------------
  |  Branch (498:9): [True: 3, False: 0]
  ------------------
  499|      3|        return true;
  500|      3|    }
  501|      0|    ovs_mutex_unlock(&once->mutex);
  502|       |    return false;
  503|      3|}
ovsthread_once_done:
  507|      3|{
  508|       |    /* We need release semantics here, so that the following store may not
  509|       |     * be moved ahead of any of the preceding initialization operations.
  510|       |     * A release atomic_thread_fence provides that prior memory accesses
  511|       |     * will not be reordered to take place after the following store. */
  512|      3|    atomic_thread_fence(memory_order_release);
  ------------------
  |  |   39|      3|#define atomic_thread_fence(ORDER) __c11_atomic_thread_fence(ORDER)
  ------------------
  513|       |    once->done = true;
  514|      3|    ovs_mutex_unlock(&once->mutex);
  515|      3|}

util.c:counter_util_xalloc_get:
  246|  9.88M|    {                                                                   \
  247|  9.88M|        return NAME##_get_unsafe();                                     \
  248|  9.88M|    }
util.c:counter_util_xalloc_get_unsafe:
  239|  9.88M|    {                                                                   \
  240|  9.88M|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  9.88M|        return &var;                                                    \
  242|  9.88M|    }                                                                   \
flow.c:counter_flow_extract_get:
  246|  49.6k|    {                                                                   \
  247|  49.6k|        return NAME##_get_unsafe();                                     \
  248|  49.6k|    }
flow.c:counter_flow_extract_get_unsafe:
  239|  49.6k|    {                                                                   \
  240|  49.6k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  49.6k|        return &var;                                                    \
  242|  49.6k|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get:
  246|    183|    {                                                                   \
  247|    183|        return NAME##_get_unsafe();                                     \
  248|    183|    }
flow.c:counter_miniflow_extract_ipv4_pkt_len_error_get_unsafe:
  239|    183|    {                                                                   \
  240|    183|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    183|        return &var;                                                    \
  242|    183|    }                                                                   \
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get:
  246|     70|    {                                                                   \
  247|     70|        return NAME##_get_unsafe();                                     \
  248|     70|    }
flow.c:counter_miniflow_extract_ipv4_pkt_too_short_get_unsafe:
  239|     70|    {                                                                   \
  240|     70|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     70|        return &var;                                                    \
  242|     70|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get:
  246|    350|    {                                                                   \
  247|    350|        return NAME##_get_unsafe();                                     \
  248|    350|    }
flow.c:counter_miniflow_extract_ipv6_pkt_len_error_get_unsafe:
  239|    350|    {                                                                   \
  240|    350|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|    350|        return &var;                                                    \
  242|    350|    }                                                                   \
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get:
  246|     69|    {                                                                   \
  247|     69|        return NAME##_get_unsafe();                                     \
  248|     69|    }
flow.c:counter_miniflow_extract_ipv6_pkt_too_short_get_unsafe:
  239|     69|    {                                                                   \
  240|     69|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     69|        return &var;                                                    \
  242|     69|    }                                                                   \
flow.c:counter_miniflow_malloc_get:
  246|  37.5k|    {                                                                   \
  247|  37.5k|        return NAME##_get_unsafe();                                     \
  248|  37.5k|    }
flow.c:counter_miniflow_malloc_get_unsafe:
  239|  37.5k|    {                                                                   \
  240|  37.5k|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|  37.5k|        return &var;                                                    \
  242|  37.5k|    }                                                                   \
hmap.c:counter_hmap_pathological_get:
  246|      6|    {                                                                   \
  247|      6|        return NAME##_get_unsafe();                                     \
  248|      6|    }
hmap.c:counter_hmap_pathological_get_unsafe:
  239|      6|    {                                                                   \
  240|      6|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|      6|        return &var;                                                    \
  242|      6|    }                                                                   \
hmap.c:counter_hmap_expand_get:
  246|     28|    {                                                                   \
  247|     28|        return NAME##_get_unsafe();                                     \
  248|     28|    }
hmap.c:counter_hmap_expand_get_unsafe:
  239|     28|    {                                                                   \
  240|     28|        static thread_local NAME##_type var = __VA_ARGS__;              \
  241|     28|        return &var;                                                    \
  242|     28|    }                                                                   \

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

set_mpls_lse_ttl:
  337|    143|{
  338|    143|    *lse &= ~htonl(MPLS_TTL_MASK);
  339|       |    *lse |= htonl((ttl << MPLS_TTL_SHIFT) & MPLS_TTL_MASK);
  340|    143|}
set_mpls_lse_tc:
  345|    636|{
  346|    636|    *lse &= ~htonl(MPLS_TC_MASK);
  347|       |    *lse |= htonl((tc << MPLS_TC_SHIFT) & MPLS_TC_MASK);
  348|    636|}
set_mpls_lse_label:
  353|  1.31k|{
  354|  1.31k|    *lse &= ~htonl(MPLS_LABEL_MASK);
  355|       |    *lse |= htonl((ntohl(label) << MPLS_LABEL_SHIFT) & MPLS_LABEL_MASK);
  356|  1.31k|}
set_mpls_lse_bos:
  361|    232|{
  362|    232|    *lse &= ~htonl(MPLS_BOS_MASK);
  363|       |    *lse |= htonl((bos << MPLS_BOS_SHIFT) & MPLS_BOS_MASK);
  364|    232|}
eth_format_masked:
  590|   129k|{
  591|   129k|    ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  370|   129k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                  ds_put_format(s, ETH_ADDR_FMT, ETH_ADDR_ARGS(eth));
  ------------------
  |  |  371|   129k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|   129k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  592|   129k|    if (mask && !eth_mask_is_exact(*mask)) {
  ------------------
  |  Branch (592:9): [True: 129k, False: 66]
  |  Branch (592:17): [True: 5.43k, False: 124k]
  ------------------
  593|  5.43k|        ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  370|  5.43k|    "%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8":%02"PRIx8
  ------------------
                      ds_put_format(s, "/"ETH_ADDR_FMT, ETH_ADDR_ARGS(*mask));
  ------------------
  |  |  371|  5.43k|#define ETH_ADDR_ARGS(EA) ETH_ADDR_BYTES_ARGS((EA).ea)
  |  |  ------------------
  |  |  |  |  373|  5.43k|         (EAB)[0], (EAB)[1], (EAB)[2], (EAB)[3], (EAB)[4], (EAB)[5]
  |  |  ------------------
  ------------------
  594|  5.43k|    }
  595|   129k|}
ip_count_cidr_bits:
  677|  8.00k|{
  678|       |    return 32 - ctz32(ntohl(netmask));
  679|  8.00k|}
ip_format_masked:
  683|  19.1k|{
  684|  19.1k|    ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  628|  19.1k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                  ds_put_format(s, IP_FMT, IP_ARGS(ip));
  ------------------
  |  |  630|  19.1k|    ntohl(ip) >> 24,                            \
  |  |  631|  19.1k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  19.1k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  19.1k|    ntohl(ip) & 0xff
  ------------------
  685|  19.1k|    if (mask != OVS_BE32_MAX) {
  ------------------
  |  |   43|  19.1k|#define OVS_BE32_MAX ((OVS_FORCE ovs_be32) 0xffffffff)
  ------------------
  |  Branch (685:9): [True: 9.64k, False: 9.54k]
  ------------------
  686|  9.64k|        if (ip_is_cidr(mask)) {
  ------------------
  |  Branch (686:13): [True: 8.00k, False: 1.63k]
  ------------------
  687|  8.00k|            ds_put_format(s, "/%d", ip_count_cidr_bits(mask));
  688|  8.00k|        } else {
  689|  1.63k|            ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  628|  1.63k|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
                          ds_put_format(s, "/"IP_FMT, IP_ARGS(mask));
  ------------------
  |  |  630|  1.63k|    ntohl(ip) >> 24,                            \
  |  |  631|  1.63k|    (ntohl(ip) >> 16) & 0xff,                   \
  |  |  632|  1.63k|    (ntohl(ip) >> 8) & 0xff,                    \
  |  |  633|  1.63k|    ntohl(ip) & 0xff
  ------------------
  690|  1.63k|        }
  691|  9.64k|    }
  692|  19.1k|}
ipv6_format_addr:
  903|  41.3k|{
  904|  41.3k|    char *dst;
  905|       |
  906|  41.3k|    ds_reserve(s, s->length + INET6_ADDRSTRLEN);
  907|       |
  908|  41.3k|    dst = s->string + s->length;
  909|  41.3k|    inet_ntop(AF_INET6, addr, dst, INET6_ADDRSTRLEN);
  910|  41.3k|    s->length += strlen(dst);
  911|  41.3k|}
ipv6_format_mapped:
  930|  20.0k|{
  931|  20.0k|    if (IN6_IS_ADDR_V4MAPPED(addr)) {
  ------------------
  |  Branch (931:9): [True: 441, False: 19.5k]
  ------------------
  932|    441|        ds_put_format(s, IP_FMT, addr->s6_addr[12], addr->s6_addr[13],
  ------------------
  |  |  628|    441|#define IP_FMT "%"PRIu32".%"PRIu32".%"PRIu32".%"PRIu32
  ------------------
  933|    441|                                 addr->s6_addr[14], addr->s6_addr[15]);
  934|  19.5k|    } else {
  935|  19.5k|        ipv6_format_addr(addr, s);
  936|  19.5k|    }
  937|  20.0k|}
ipv6_format_masked:
  942|  21.2k|{
  943|  21.2k|    ipv6_format_addr(addr, s);
  944|  21.2k|    if (mask && !ipv6_mask_is_exact(mask)) {
  ------------------
  |  Branch (944:9): [True: 21.2k, False: 42]
  |  Branch (944:17): [True: 1.10k, False: 20.1k]
  ------------------
  945|  1.10k|        if (ipv6_is_cidr(mask)) {
  ------------------
  |  Branch (945:13): [True: 642, False: 463]
  ------------------
  946|    642|            int cidr_bits = ipv6_count_cidr_bits(mask);
  947|    642|            ds_put_format(s, "/%d", cidr_bits);
  948|    642|        } else {
  949|    463|            ds_put_char(s, '/');
  950|    463|            ipv6_format_addr(mask, s);
  951|    463|        }
  952|  1.10k|    }
  953|  21.2k|}
ipv6_addr_bitand:
  980|  3.79k|{
  981|  3.79k|   struct in6_addr dst;
  982|  15.1k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  18.9k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 15.1k, False: 3.79k]
  |  |  ------------------
  ------------------
  983|  15.1k|       dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  15.1k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  15.1k|#define s6_addrX s6_addr32
  ------------------
                     dst.s6_addrX[i] = a->s6_addrX[i] & b->s6_addrX[i];
  ------------------
  |  |  971|  15.1k|#define s6_addrX s6_addr32
  ------------------
  984|  15.1k|   }
  985|  3.79k|   return dst;
  986|  3.79k|}
ipv6_is_zero:
 1000|  12.3k|{
 1001|  23.5k|   IPV6_FOR_EACH (i) {
  ------------------
  |  |  972|  24.1k|#define IPV6_FOR_EACH(VAR) for (int VAR = 0; VAR < 4; VAR++)
  |  |  ------------------
  |  |  |  Branch (972:46): [True: 23.5k, False: 651]
  |  |  ------------------
  ------------------
 1002|  23.5k|       if (a->s6_addrX[i]) {
  ------------------
  |  |  971|  23.5k|#define s6_addrX s6_addr32
  ------------------
  |  Branch (1002:12): [True: 11.7k, False: 11.7k]
  ------------------
 1003|  11.7k|           return false;
 1004|  11.7k|       }
 1005|  23.5k|   }
 1006|    651|   return true;
 1007|  12.3k|}
ipv6_count_cidr_bits:
 1039|    642|{
 1040|    642|    int i;
 1041|    642|    int count = 0;
 1042|    642|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1043|       |
 1044|  9.26k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1044:15): [True: 9.26k, False: 0]
  ------------------
 1045|  9.26k|        if (netmaskp[i] == 0xff) {
  ------------------
  |  Branch (1045:13): [True: 8.62k, False: 642]
  ------------------
 1046|  8.62k|            count += 8;
 1047|  8.62k|        } else {
 1048|    642|            uint8_t nm;
 1049|       |
 1050|  1.57k|            for(nm = netmaskp[i]; nm; nm <<= 1) {
  ------------------
  |  Branch (1050:35): [True: 932, False: 642]
  ------------------
 1051|    932|                count++;
 1052|    932|            }
 1053|    642|            break;
 1054|    642|        }
 1055|       |
 1056|  9.26k|    }
 1057|       |
 1058|    642|    return count;
 1059|    642|}
ipv6_is_cidr:
 1065|  1.10k|{
 1066|  1.10k|    const uint8_t *netmaskp = &netmask->s6_addr[0];
 1067|  1.10k|    int i;
 1068|       |
 1069|  11.4k|    for (i=0; i<16; i++) {
  ------------------
  |  Branch (1069:15): [True: 10.7k, False: 642]
  ------------------
 1070|  10.7k|        if (netmaskp[i] != 0xff) {
  ------------------
  |  Branch (1070:13): [True: 1.10k, False: 9.66k]
  ------------------
 1071|  1.10k|            uint8_t x = ~netmaskp[i];
 1072|  1.10k|            if (x & (x + 1)) {
  ------------------
  |  Branch (1072:17): [True: 183, False: 922]
  ------------------
 1073|    183|                return false;
 1074|    183|            }
 1075|  3.53k|            while (++i < 16) {
  ------------------
  |  Branch (1075:20): [True: 2.89k, False: 642]
  ------------------
 1076|  2.89k|                if (netmaskp[i]) {
  ------------------
  |  Branch (1076:21): [True: 280, False: 2.61k]
  ------------------
 1077|    280|                    return false;
 1078|    280|                }
 1079|  2.89k|            }
 1080|    922|        }
 1081|  10.7k|    }
 1082|       |
 1083|    642|    return true;
 1084|  1.10k|}
packet_tcp_flag_to_string:
 1717|  28.0k|{
 1718|  28.0k|    switch (flag) {
 1719|  1.70k|    case TCP_FIN:
  ------------------
  |  |  893|  1.70k|#define TCP_FIN 0x001
  ------------------
  |  Branch (1719:5): [True: 1.70k, False: 26.3k]
  ------------------
 1720|  1.70k|        return "fin";
 1721|    994|    case TCP_SYN:
  ------------------
  |  |  894|    994|#define TCP_SYN 0x002
  ------------------
  |  Branch (1721:5): [True: 994, False: 27.1k]
  ------------------
 1722|    994|        return "syn";
 1723|  2.99k|    case TCP_RST:
  ------------------
  |  |  895|  2.99k|#define TCP_RST 0x004
  ------------------
  |  Branch (1723:5): [True: 2.99k, False: 25.0k]
  ------------------
 1724|  2.99k|        return "rst";
 1725|  1.32k|    case TCP_PSH:
  ------------------
  |  |  896|  1.32k|#define TCP_PSH 0x008
  ------------------
  |  Branch (1725:5): [True: 1.32k, False: 26.7k]
  ------------------
 1726|  1.32k|        return "psh";
 1727|  2.74k|    case TCP_ACK:
  ------------------
  |  |  897|  2.74k|#define TCP_ACK 0x010
  ------------------
  |  Branch (1727:5): [True: 2.74k, False: 25.3k]
  ------------------
 1728|  2.74k|        return "ack";
 1729|  3.02k|    case TCP_URG:
  ------------------
  |  |  898|  3.02k|#define TCP_URG 0x020
  ------------------
  |  Branch (1729:5): [True: 3.02k, False: 25.0k]
  ------------------
 1730|  3.02k|        return "urg";
 1731|  1.68k|    case TCP_ECE:
  ------------------
  |  |  899|  1.68k|#define TCP_ECE 0x040
  ------------------
  |  Branch (1731:5): [True: 1.68k, False: 26.4k]
  ------------------
 1732|  1.68k|        return "ece";
 1733|  1.13k|    case TCP_CWR:
  ------------------
  |  |  900|  1.13k|#define TCP_CWR 0x080
  ------------------
  |  Branch (1733:5): [True: 1.13k, False: 26.9k]
  ------------------
 1734|  1.13k|        return "cwr";
 1735|  3.52k|    case TCP_NS:
  ------------------
  |  |  901|  3.52k|#define TCP_NS  0x100
  ------------------
  |  Branch (1735:5): [True: 3.52k, False: 24.5k]
  ------------------
 1736|  3.52k|        return "ns";
 1737|    752|    case 0x200:
  ------------------
  |  Branch (1737:5): [True: 752, False: 27.3k]
  ------------------
 1738|    752|        return "[200]";
 1739|  3.51k|    case 0x400:
  ------------------
  |  Branch (1739:5): [True: 3.51k, False: 24.5k]
  ------------------
 1740|  3.51k|        return "[400]";
 1741|  3.02k|    case 0x800:
  ------------------
  |  Branch (1741:5): [True: 3.02k, False: 25.0k]
  ------------------
 1742|  3.02k|        return "[800]";
 1743|  1.67k|    default:
  ------------------
  |  Branch (1743:5): [True: 1.67k, False: 26.4k]
  ------------------
 1744|       |        return NULL;
 1745|  28.0k|    }
 1746|  28.0k|}

dp-packet.c:pkt_metadata_init:
  165|  49.6k|{
  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|  49.6k|    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|  49.6k|    md->tunnel.ip_dst = 0;
  179|  49.6k|    md->tunnel.ipv6_dst = in6addr_any;
  180|  49.6k|    md->in_port.odp_port = port;
  181|  49.6k|    md->orig_in_port = port;
  182|       |    md->conn = NULL;
  183|  49.6k|}
flow.c:flow_tnl_dst_is_set:
   51|  99.3k|{
   52|  99.3k|    return tnl->ip_dst || ipv6_addr_is_set(&tnl->ipv6_dst);
  ------------------
  |  Branch (52:12): [True: 0, False: 99.3k]
  |  Branch (52:27): [True: 0, False: 99.3k]
  ------------------
   53|  99.3k|}
flow.c:eth_type_vlan:
  429|  18.5k|{
  430|  18.5k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 183, False: 18.3k]
  ------------------
  431|  18.3k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 1.76k, False: 16.5k]
  ------------------
  432|  18.5k|}
flow.c:pt_ns_type_be:
 1577|  49.3k|{
 1578|  49.3k|    return be32_to_be16(packet_type);
 1579|  49.3k|}
flow.c:eth_type_mpls:
  423|  62.2k|{
  424|  62.2k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 246, False: 61.9k]
  ------------------
  425|  61.9k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 880, False: 61.0k]
  ------------------
  426|  62.2k|}
flow.c:eth_addr_is_zero:
  246|    201|{
  247|    201|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|    201|}
flow.c:ipv6_addr_is_set:
 1205|  99.3k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|  99.3k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|  99.3k|}
flow.c:ipv6_addr_equals:
 1184|  99.3k|{
 1185|  99.3k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  99.3k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  99.3k|}
flow.c:pt_ns:
 1570|  33.4k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  33.4k|}
flow.c:pt_ns_type:
 1584|  33.3k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  33.3k|}
match.c:ipv6_mask_is_any:
 1193|   748k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|   748k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|   748k|}
match.c:ipv6_addr_equals:
 1184|   748k|{
 1185|   748k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   748k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   748k|}
match.c:pt_ns:
 1570|  31.8k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  31.8k|}
match.c:pt_ns_type_be:
 1577|  24.0k|{
 1578|  24.0k|    return be32_to_be16(packet_type);
 1579|  24.0k|}
match.c:vlan_tci_to_vid:
  507|  16.5k|{
  508|  16.5k|    return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  494|  16.5k|#define VLAN_VID_MASK 0x0fff
  ------------------
                  return (ntohs(vlan_tci) & VLAN_VID_MASK) >> VLAN_VID_SHIFT;
  ------------------
  |  |  495|  16.5k|#define VLAN_VID_SHIFT 0
  ------------------
  509|  16.5k|}
match.c:vlan_tci_to_pcp:
  515|  20.0k|{
  516|  20.0k|    return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  497|  20.0k|#define VLAN_PCP_MASK 0xe000
  ------------------
                  return (ntohs(vlan_tci) & VLAN_PCP_MASK) >> VLAN_PCP_SHIFT;
  ------------------
  |  |  498|  20.0k|#define VLAN_PCP_SHIFT 13
  ------------------
  517|  20.0k|}
match.c:eth_addr_is_zero:
  246|   369k|{
  247|   369k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|   369k|}
match.c:mpls_lse_to_label:
  568|    873|{
  569|    873|    return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  554|    873|#define MPLS_LABEL_MASK     0xfffff000
  ------------------
                  return (ntohl(mpls_lse) & MPLS_LABEL_MASK) >> MPLS_LABEL_SHIFT;
  ------------------
  |  |  555|    873|#define MPLS_LABEL_SHIFT    12
  ------------------
  570|    873|}
match.c:mpls_lse_to_tc:
  576|    864|{
  577|    864|    return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  551|    864|#define MPLS_TC_MASK        0x00000e00
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TC_MASK) >> MPLS_TC_SHIFT;
  ------------------
  |  |  552|    864|#define MPLS_TC_SHIFT       9
  ------------------
  578|    864|}
match.c:mpls_lse_to_ttl:
  584|    567|{
  585|    567|    return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  545|    567|#define MPLS_TTL_MASK       0x000000ff
  ------------------
                  return (ntohl(mpls_lse) & MPLS_TTL_MASK) >> MPLS_TTL_SHIFT;
  ------------------
  |  |  546|    567|#define MPLS_TTL_SHIFT      0
  ------------------
  586|    567|}
match.c:mpls_lse_to_bos:
  624|    624|{
  625|       |    return (mpls_lse & htonl(MPLS_BOS_MASK)) != 0;
  626|    624|}
match.c:dl_type_is_ip_any:
 1256|   181k|{
 1257|   181k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 7.41k, False: 173k]
  ------------------
 1258|   173k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 11.1k, False: 162k]
  ------------------
 1259|   181k|}
meta-flow.c:ipv6_mask_is_any:
 1193|  6.89k|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|  6.89k|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|  6.89k|}
meta-flow.c:ipv6_addr_equals:
 1184|  6.89k|{
 1185|  6.89k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  6.89k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  6.89k|}
meta-flow.c:eth_addr_is_zero:
  246|  4.33k|{
  247|  4.33k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  4.33k|}
meta-flow.c:pt_ns:
 1570|  15.1k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  15.1k|}
meta-flow.c:pt_ns_type_be:
 1577|  11.8k|{
 1578|  11.8k|    return be32_to_be16(packet_type);
 1579|  11.8k|}
meta-flow.c:eth_type_mpls:
  423|    170|{
  424|    170|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 11, False: 159]
  ------------------
  425|    159|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 117, False: 42]
  ------------------
  426|    170|}
meta-flow.c:ip_is_cidr:
  664|    393|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|    393|    return !(x & (x + 1));
  667|    393|}
meta-flow.c:dl_type_is_ip_any:
 1256|  4.69k|{
 1257|  4.69k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 644, False: 4.04k]
  ------------------
 1258|  4.04k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 2.80k, False: 1.24k]
  ------------------
 1259|  4.69k|}
ofp-actions.c:eth_type_vlan:
  429|  3.36k|{
  430|  3.36k|    return eth_type == htons(ETH_TYPE_VLAN_8021Q) ||
  ------------------
  |  Branch (430:12): [True: 106, False: 3.26k]
  ------------------
  431|  3.26k|        eth_type == htons(ETH_TYPE_VLAN_8021AD);
  ------------------
  |  Branch (431:9): [True: 2.65k, False: 607]
  ------------------
  432|  3.36k|}
ofp-actions.c:eth_type_mpls:
  423|  17.4k|{
  424|  17.4k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 4.75k, False: 12.6k]
  ------------------
  425|  12.6k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 3.47k, False: 9.18k]
  ------------------
  426|  17.4k|}
ofp-actions.c:ipv6_mask_is_any:
 1193|    925|static inline bool ipv6_mask_is_any(const struct in6_addr *mask) {
 1194|    925|    return ipv6_addr_equals(mask, &in6addr_any);
 1195|    925|}
ofp-actions.c:ipv6_addr_equals:
 1184|    925|{
 1185|    925|#ifdef IN6_ARE_ADDR_EQUAL
 1186|    925|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|    925|}
ofp-actions.c:pt_ns:
 1570|  21.0k|{
 1571|       |    return ntohl(packet_type) >> 16;
 1572|  21.0k|}
ofp-actions.c:pt_ns_type_be:
 1577|  15.5k|{
 1578|  15.5k|    return be32_to_be16(packet_type);
 1579|  15.5k|}
ofp-actions.c:dl_type_is_ip_any:
 1256|  26.8k|{
 1257|  26.8k|    return dl_type == htons(ETH_TYPE_IP)
  ------------------
  |  Branch (1257:12): [True: 9.19k, False: 17.6k]
  ------------------
 1258|  17.6k|        || dl_type == htons(ETH_TYPE_IPV6);
  ------------------
  |  Branch (1258:12): [True: 4.86k, False: 12.7k]
  ------------------
 1259|  26.8k|}
ofp-actions.c:pt_ns_type:
 1584|  8.07k|{
 1585|       |    return ntohs(pt_ns_type_be(packet_type));
 1586|  8.07k|}
ofp-flow.c:ipv6_addr_is_set:
 1205|   142k|static inline bool ipv6_addr_is_set(const struct in6_addr *addr) {
 1206|   142k|    return !ipv6_addr_equals(addr, &in6addr_any);
 1207|   142k|}
ofp-flow.c:ipv6_addr_equals:
 1184|   142k|{
 1185|   142k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|   142k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|   142k|}
ofp-match.c:eth_addr_is_zero:
  246|  5.81k|{
  247|  5.81k|    return !(a.be16[0] | a.be16[1] | a.be16[2]);
  248|  5.81k|}
ofp-match.c:eth_addr_invert:
  301|  10.7k|{
  302|  10.7k|    struct eth_addr dst;
  303|       |
  304|  43.1k|    for (int i = 0; i < ARRAY_SIZE(src.be16); i++) {
  ------------------
  |  |  297|  43.1k|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|  43.1k|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|  43.1k|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|  43.1k|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|  43.1k|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|  43.1k|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  |  Branch (304:21): [True: 32.3k, False: 10.7k]
  ------------------
  305|  32.3k|        dst.be16[i] = ~src.be16[i];
  306|  32.3k|    }
  307|       |
  308|  10.7k|    return dst;
  309|  10.7k|}
ofp-match.c:eth_type_mpls:
  423|  37.3k|{
  424|  37.3k|    return eth_type == htons(ETH_TYPE_MPLS) ||
  ------------------
  |  Branch (424:12): [True: 336, False: 37.0k]
  ------------------
  425|  37.0k|        eth_type == htons(ETH_TYPE_MPLS_MCAST);
  ------------------
  |  Branch (425:9): [True: 421, False: 36.6k]
  ------------------
  426|  37.3k|}
packets.c:eth_mask_is_exact:
  255|   129k|{
  256|       |    return (a.be16[0] & a.be16[1] & a.be16[2]) == htons(0xffff);
  257|   129k|}
packets.c:ip_is_cidr:
  664|  9.64k|{
  665|       |    uint32_t x = ~ntohl(netmask);
  666|  9.64k|    return !(x & (x + 1));
  667|  9.64k|}
packets.c:ipv6_mask_is_exact:
 1197|  21.2k|static inline bool ipv6_mask_is_exact(const struct in6_addr *mask) {
 1198|  21.2k|    return ipv6_addr_equals(mask, &in6addr_exact);
 1199|  21.2k|}
packets.c:ipv6_addr_equals:
 1184|  21.2k|{
 1185|  21.2k|#ifdef IN6_ARE_ADDR_EQUAL
 1186|  21.2k|    return IN6_ARE_ADDR_EQUAL(a, b);
 1187|       |#else
 1188|       |    return !memcmp(a, b, sizeof(*a));
 1189|       |#endif
 1190|  21.2k|}

tun_metadata_read:
  223|  25.3k|{
  224|  25.3k|    const struct tun_table *map = tnl->metadata.tab;
  225|  25.3k|    unsigned int idx = mf->id - MFF_TUN_METADATA0;
  226|  25.3k|    const struct tun_metadata_loc *loc;
  227|       |
  228|  25.3k|    if (!map) {
  ------------------
  |  Branch (228:9): [True: 25.3k, False: 0]
  ------------------
  229|  25.3k|        memset(value->tun_metadata, 0, mf->n_bytes);
  230|  25.3k|        return;
  231|  25.3k|    }
  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|  86.1k|{
  355|  86.1k|    const struct tun_table *map = match->flow.tunnel.metadata.tab;
  356|  86.1k|    const struct tun_metadata_loc *loc;
  357|  86.1k|    unsigned int idx = mf->id - MFF_TUN_METADATA0;
  358|  86.1k|    unsigned int field_len;
  359|  86.1k|    bool is_masked;
  360|  86.1k|    unsigned int data_offset;
  361|  86.1k|    union mf_value data;
  362|       |
  363|  86.1k|    field_len = mf_field_len(mf, value, mask, &is_masked);
  364|  86.1k|    loc = metadata_loc_from_match(map, match, mf->name, idx, field_len,
  365|  86.1k|                                  is_masked, err_str);
  366|  86.1k|    if (!loc) {
  ------------------
  |  Branch (366:9): [True: 1.17k, False: 84.9k]
  ------------------
  367|  1.17k|        return;
  368|  1.17k|    }
  369|       |
  370|  84.9k|    data_offset = mf->n_bytes - loc->len;
  371|       |
  372|  84.9k|    if (!value) {
  ------------------
  |  Branch (372:9): [True: 0, False: 84.9k]
  ------------------
  373|      0|        memset(data.tun_metadata, 0, loc->len);
  374|  84.9k|    } else if (!mask) {
  ------------------
  |  Branch (374:16): [True: 38.1k, False: 46.8k]
  ------------------
  375|  38.1k|        memcpy(data.tun_metadata, value->tun_metadata + data_offset, loc->len);
  376|  46.8k|    } else {
  377|  46.8k|        int i;
  378|   466k|        for (i = 0; i < loc->len; i++) {
  ------------------
  |  Branch (378:21): [True: 419k, False: 46.8k]
  ------------------
  379|   419k|            data.tun_metadata[i] = value->tun_metadata[data_offset + i] &
  380|   419k|                                   mask->tun_metadata[data_offset + i];
  381|   419k|        }
  382|  46.8k|    }
  383|  84.9k|    memcpy_to_metadata(&match->flow.tunnel.metadata, data.tun_metadata,
  384|  84.9k|                       loc, idx);
  385|       |
  386|  84.9k|    if (!value) {
  ------------------
  |  Branch (386:9): [True: 0, False: 84.9k]
  ------------------
  387|      0|        memset(data.tun_metadata, 0, loc->len);
  388|  84.9k|    } else if (!mask) {
  ------------------
  |  Branch (388:16): [True: 38.1k, False: 46.8k]
  ------------------
  389|  38.1k|        memset(data.tun_metadata, 0xff, loc->len);
  390|  46.8k|    } else {
  391|  46.8k|        memcpy(data.tun_metadata, mask->tun_metadata + data_offset, loc->len);
  392|  46.8k|    }
  393|  84.9k|    memcpy_to_metadata(&match->wc.masks.tunnel.metadata, data.tun_metadata,
  394|  84.9k|                       loc, idx);
  395|  84.9k|}
tun_metadata_match_format:
  904|   181k|{
  905|   181k|    int i;
  906|       |
  907|   181k|    if (match->flow.tunnel.flags & FLOW_TNL_F_UDPIF ||
  ------------------
  |  |   45|   362k|#define FLOW_TNL_F_UDPIF (1 << 4)
  ------------------
  |  Branch (907:9): [True: 0, False: 181k]
  ------------------
  908|   181k|        (!match->flow.tunnel.metadata.tab && !match->tun_md.valid)) {
  ------------------
  |  Branch (908:10): [True: 181k, False: 0]
  |  Branch (908:46): [True: 175k, False: 5.64k]
  ------------------
  909|   175k|        return;
  910|   175k|    }
  911|       |
  912|  6.89k|    ULLONG_FOR_EACH_1 (i, match->wc.masks.tunnel.metadata.present.map) {
  ------------------
  |  |  285|  5.64k|    for (uint64_t map__ = (MAP);                    \
  |  |  286|  12.5k|         map__ && (((IDX) = raw_ctz(map__)), true); \
  |  |  ------------------
  |  |  |  Branch (286:10): [True: 6.89k, False: 5.64k]
  |  |  |  Branch (286:19): [True: 6.89k, False: 0]
  |  |  ------------------
  |  |  287|  6.89k|         map__ = zero_rightmost_1bit(map__))
  ------------------
  913|  6.89k|        const struct tun_metadata_loc *loc;
  914|  6.89k|        bool is_masked;
  915|  6.89k|        union mf_value opts, mask_opts;
  916|       |
  917|  6.89k|        loc = metadata_loc_from_match_read(match->flow.tunnel.metadata.tab,
  918|  6.89k|                                           match, i, &match->wc.masks.tunnel,
  919|  6.89k|                                           &is_masked);
  920|       |
  921|  6.89k|        ds_put_format(s, "tun_metadata%u", i);
  922|  6.89k|        memcpy_from_metadata(mask_opts.tun_metadata,
  923|  6.89k|                             &match->wc.masks.tunnel.metadata, loc);
  924|       |
  925|  6.89k|        if (!ULLONG_GET(match->flow.tunnel.metadata.present.map, i)) {
  ------------------
  |  |  293|  6.89k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  ------------------
  |  Branch (925:13): [True: 0, False: 6.89k]
  ------------------
  926|       |            /* Indicate that we are matching on the field being not present. */
  927|      0|            ds_put_cstr(s, "=NP");
  928|  6.89k|        } else if (!(is_masked &&
  ------------------
  |  Branch (928:22): [True: 3.18k, False: 3.71k]
  ------------------
  929|  4.50k|                     is_all_zeros(mask_opts.tun_metadata, loc->len))) {
  ------------------
  |  Branch (929:22): [True: 2.38k, False: 797]
  ------------------
  930|  4.50k|            ds_put_char(s, '=');
  931|       |
  932|  4.50k|            memcpy_from_metadata(opts.tun_metadata,
  933|  4.50k|                                 &match->flow.tunnel.metadata, loc);
  934|  4.50k|            ds_put_hex(s, opts.tun_metadata, loc->len);
  935|       |
  936|  4.50k|            if (!is_all_ones(mask_opts.tun_metadata, loc->len)) {
  ------------------
  |  Branch (936:17): [True: 782, False: 3.72k]
  ------------------
  937|    782|                ds_put_char(s, '/');
  938|    782|                ds_put_hex(s, mask_opts.tun_metadata, loc->len);
  939|    782|            }
  940|  4.50k|        }
  941|  6.89k|        ds_put_char(s, ',');
  942|  6.89k|    }
  943|  5.64k|}
tun_metadata_allocation_clone:
  947|  37.5k|{
  948|  37.5k|    return src && src->valid ? xmemdup(src, sizeof *src) : NULL;
  ------------------
  |  Branch (948:12): [True: 37.5k, False: 0]
  |  Branch (948:19): [True: 1.47k, False: 36.0k]
  ------------------
  949|  37.5k|}
tun_metadata_allocation_copy:
  954|  37.5k|{
  955|  37.5k|    if (src && src->valid) {
  ------------------
  |  Branch (955:9): [True: 1.47k, False: 36.0k]
  |  Branch (955:16): [True: 1.47k, False: 0]
  ------------------
  956|  1.47k|        *dst = *src;
  957|  36.0k|    } else {
  958|  36.0k|        memset(dst, 0, sizeof *dst);
  959|  36.0k|    }
  960|  37.5k|}
tun-metadata.c:metadata_loc_from_match:
  285|  86.1k|{
  286|  86.1k|    ovs_assert(idx < TUN_METADATA_NUM_OPTS);
  ------------------
  |  |   62|  86.1k|#define ovs_assert ovs_ignore
  ------------------
                  ovs_assert(idx < TUN_METADATA_NUM_OPTS);
  ------------------
  |  |   26|  86.1k|#define TUN_METADATA_NUM_OPTS 64
  ------------------
  287|       |
  288|  86.1k|    if (err_str) {
  ------------------
  |  Branch (288:9): [True: 73.4k, False: 12.6k]
  ------------------
  289|  73.4k|        *err_str = NULL;
  290|  73.4k|    }
  291|       |
  292|  86.1k|    if (map) {
  ------------------
  |  Branch (292:9): [True: 0, False: 86.1k]
  ------------------
  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|  86.1k|    if (match->tun_md.alloc_offset + field_len > TUN_METADATA_TOT_OPT_SIZE) {
  ------------------
  |  |   27|  86.1k|#define TUN_METADATA_TOT_OPT_SIZE 256
  ------------------
  |  Branch (300:9): [True: 0, False: 86.1k]
  ------------------
  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|  86.1k|    if (ULLONG_GET(match->wc.masks.tunnel.metadata.present.map, idx)) {
  ------------------
  |  |  293|  86.1k|#define ULLONG_GET(MAP, OFFSET) !!((MAP) & (1ULL << (OFFSET)))
  |  |  ------------------
  |  |  |  Branch (293:33): [True: 1.17k, False: 84.9k]
  |  |  ------------------
  ------------------
  312|  1.17k|        if (err_str) {
  ------------------
  |  Branch (312:13): [True: 0, False: 1.17k]
  ------------------
  313|      0|            *err_str = xasprintf("field %s set multiple times", name);
  314|      0|        }
  315|       |
  316|  1.17k|        return NULL;
  317|  1.17k|    }
  318|       |
  319|  84.9k|    match->tun_md.entry[idx].loc.len = field_len;
  320|  84.9k|    match->tun_md.entry[idx].loc.c.offset = match->tun_md.alloc_offset;
  321|  84.9k|    match->tun_md.entry[idx].loc.c.len = field_len;
  322|  84.9k|    match->tun_md.entry[idx].loc.c.next = NULL;
  323|  84.9k|    match->tun_md.entry[idx].masked = masked;
  324|  84.9k|    match->tun_md.alloc_offset += field_len;
  325|  84.9k|    match->tun_md.valid = true;
  326|       |
  327|  84.9k|    return &match->tun_md.entry[idx].loc;
  328|  86.1k|}
tun-metadata.c:memcpy_to_metadata:
  445|   169k|{
  446|   169k|    const struct tun_metadata_loc_chain *chain = &loc->c;
  447|   169k|    int addr = 0;
  448|       |
  449|   339k|    while (chain) {
  ------------------
  |  Branch (449:12): [True: 169k, False: 169k]
  ------------------
  450|   169k|        memcpy(dst->opts.u8 + chain->offset, (uint8_t *)src + addr,
  451|   169k|               chain->len);
  452|   169k|        addr += chain->len;
  453|   169k|        chain = chain->next;
  454|   169k|    }
  455|       |
  456|   169k|    ULLONG_SET1(dst->present.map, idx);
  ------------------
  |  |  290|   169k|#define ULLONG_SET1(MAP, OFFSET) ((MAP) |= 1ULL << (OFFSET))
  ------------------
  457|   169k|}
tun-metadata.c:memcpy_from_metadata:
  462|  11.3k|{
  463|  11.3k|    const struct tun_metadata_loc_chain *chain = &loc->c;
  464|  11.3k|    int addr = 0;
  465|       |
  466|  22.7k|    while (chain) {
  ------------------
  |  Branch (466:12): [True: 11.3k, False: 11.3k]
  ------------------
  467|  11.3k|        memcpy((uint8_t *)dst + addr, src->opts.u8 + chain->offset,
  468|  11.3k|               chain->len);
  469|  11.3k|        addr += chain->len;
  470|  11.3k|        chain = chain->next;
  471|  11.3k|    }
  472|  11.3k|}
tun-metadata.c:metadata_loc_from_match_read:
  857|  6.89k|{
  858|  6.89k|    union mf_value mask_opts;
  859|       |
  860|  6.89k|    if (match->tun_md.valid) {
  ------------------
  |  Branch (860:9): [True: 6.89k, False: 0]
  ------------------
  861|  6.89k|        *is_masked = match->tun_md.entry[idx].masked;
  862|  6.89k|        return &match->tun_md.entry[idx].loc;
  863|  6.89k|    }
  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|  6.89k|}

ofp-print.c:get_16aligned_be32:
  246|    319|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|    319|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|    319|#endif
  252|    319|}
ofp-queue.c:get_32aligned_be64:
  270|  23.9k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  23.9k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  23.9k|#endif
  276|  23.9k|}
ofp-table.c:get_32aligned_be64:
  270|  15.1k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  15.1k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  15.1k|#endif
  276|  15.1k|}
flow.c:get_16aligned_be32:
  246|  13.7k|{
  247|       |#ifdef WORDS_BIGENDIAN
  248|       |    return ((ovs_be32) x->hi << 16) | x->lo;
  249|       |#else
  250|  13.7k|    return ((ovs_be32) x->lo << 16) | x->hi;
  251|  13.7k|#endif
  252|  13.7k|}
hash.c:get_unaligned_u32:
   74|    895|get_unaligned_##ABBREV(const TYPE *p)           \
   75|    895|{                                               \
   76|    895|    return unaligned_##ABBREV(p)->x;            \
   77|    895|}                                               \
hash.c:unaligned_u32:
   68|    895|unaligned_##ABBREV(const TYPE *p)               \
   69|    895|{                                               \
   70|    895|    return (struct unaligned_##ABBREV *) p;     \
   71|    895|}                                               \
nx-match.c:get_unaligned_be32:
   74|   372k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|   372k|{                                               \
   76|   372k|    return unaligned_##ABBREV(p)->x;            \
   77|   372k|}                                               \
nx-match.c:unaligned_be32:
   68|   372k|unaligned_##ABBREV(const TYPE *p)               \
   69|   372k|{                                               \
   70|   372k|    return (struct unaligned_##ABBREV *) p;     \
   71|   372k|}                                               \
nx-match.c:get_unaligned_be64:
   74|  19.1k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  19.1k|{                                               \
   76|  19.1k|    return unaligned_##ABBREV(p)->x;            \
   77|  19.1k|}                                               \
nx-match.c:unaligned_be64:
   68|  19.1k|unaligned_##ABBREV(const TYPE *p)               \
   69|  19.1k|{                                               \
   70|  19.1k|    return (struct unaligned_##ABBREV *) p;     \
   71|  19.1k|}                                               \
ofp-actions.c:get_unaligned_be32:
   74|  33.9k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  33.9k|{                                               \
   76|  33.9k|    return unaligned_##ABBREV(p)->x;            \
   77|  33.9k|}                                               \
ofp-actions.c:unaligned_be32:
   68|  33.9k|unaligned_##ABBREV(const TYPE *p)               \
   69|  33.9k|{                                               \
   70|  33.9k|    return (struct unaligned_##ABBREV *) p;     \
   71|  33.9k|}                                               \
ofp-flow.c:get_32aligned_be64:
  270|  4.71k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  4.71k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  4.71k|#endif
  276|  4.71k|}
ofp-port.c:get_unaligned_be64:
   74|  27.8k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  27.8k|{                                               \
   76|  27.8k|    return unaligned_##ABBREV(p)->x;            \
   77|  27.8k|}                                               \
ofp-port.c:unaligned_be64:
   68|  27.8k|unaligned_##ABBREV(const TYPE *p)               \
   69|  27.8k|{                                               \
   70|  27.8k|    return (struct unaligned_##ABBREV *) p;     \
   71|  27.8k|}                                               \
ofp-port.c:get_32aligned_be64:
  270|  96.7k|{
  271|       |#ifdef WORDS_BIGENDIAN
  272|       |    return ((ovs_be64) x->hi << 32) | x->lo;
  273|       |#else
  274|  96.7k|    return ((ovs_be64) x->lo << 32) | x->hi;
  275|  96.7k|#endif
  276|  96.7k|}
ofp-prop.c:get_32aligned_be128:
  294|  1.52k|{
  295|  1.52k|    ovs_be128 u;
  296|  1.52k|    u.be32[0] = x->be32[0];
  297|  1.52k|    u.be32[1] = x->be32[1];
  298|  1.52k|    u.be32[2] = x->be32[2];
  299|  1.52k|    u.be32[3] = x->be32[3];
  300|  1.52k|    return u;
  301|  1.52k|}
ox-stat.c:get_unaligned_be64:
   74|  1.00k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  1.00k|{                                               \
   76|  1.00k|    return unaligned_##ABBREV(p)->x;            \
   77|  1.00k|}                                               \
ox-stat.c:unaligned_be64:
   68|  1.00k|unaligned_##ABBREV(const TYPE *p)               \
   69|  1.00k|{                                               \
   70|  1.00k|    return (struct unaligned_##ABBREV *) p;     \
   71|  1.00k|}                                               \
ox-stat.c:get_unaligned_be32:
   74|  3.61k|get_unaligned_##ABBREV(const TYPE *p)           \
   75|  3.61k|{                                               \
   76|  3.61k|    return unaligned_##ABBREV(p)->x;            \
   77|  3.61k|}                                               \
ox-stat.c:unaligned_be32:
   68|  3.61k|unaligned_##ABBREV(const TYPE *p)               \
   69|  3.61k|{                                               \
   70|  3.61k|    return (struct unaligned_##ABBREV *) p;     \
   71|  3.61k|}                                               \

xcalloc__:
  121|  15.2k|{
  122|  15.2k|    void *p = count && size ? calloc(count, size) : malloc(1);
  ------------------
  |  Branch (122:15): [True: 15.1k, False: 74]
  |  Branch (122:24): [True: 15.1k, False: 0]
  ------------------
  123|  15.2k|    if (p == NULL) {
  ------------------
  |  Branch (123:9): [True: 0, False: 15.2k]
  ------------------
  124|      0|        out_of_memory();
  125|      0|    }
  126|  15.2k|    return p;
  127|  15.2k|}
xzalloc__:
  131|  10.8k|{
  132|  10.8k|    return xcalloc__(1, size);
  133|  10.8k|}
xmalloc__:
  137|   678k|{
  138|   678k|    void *p = malloc(size ? size : 1);
  ------------------
  |  Branch (138:22): [True: 677k, False: 1.26k]
  ------------------
  139|   678k|    if (p == NULL) {
  ------------------
  |  Branch (139:9): [True: 0, False: 678k]
  ------------------
  140|      0|        out_of_memory();
  141|      0|    }
  142|   678k|    return p;
  143|   678k|}
xrealloc__:
  147|  9.19M|{
  148|  9.19M|    p = realloc(p, size ? size : 1);
  ------------------
  |  Branch (148:20): [True: 9.19M, False: 0]
  ------------------
  149|  9.19M|    if (p == NULL) {
  ------------------
  |  Branch (149:9): [True: 0, False: 9.19M]
  ------------------
  150|      0|        out_of_memory();
  151|      0|    }
  152|  9.19M|    return p;
  153|  9.19M|}
xcalloc:
  157|  4.35k|{
  158|  4.35k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  4.35k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  4.35k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  159|  4.35k|    return xcalloc__(count, size);
  160|  4.35k|}
xzalloc:
  164|  10.8k|{
  165|  10.8k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  10.8k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  10.8k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  166|  10.8k|    return xzalloc__(size);
  167|  10.8k|}
xmalloc:
  171|   678k|{
  172|   678k|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|   678k|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|   678k|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  173|   678k|    return xmalloc__(size);
  174|   678k|}
xrealloc:
  178|  9.19M|{
  179|  9.19M|    COVERAGE_INC(util_xalloc);
  ------------------
  |  |   83|  9.19M|#define COVERAGE_INC(COUNTER) COVERAGE_ADD(COUNTER, 1)
  |  |  ------------------
  |  |  |  |   86|  9.19M|#define COVERAGE_ADD(COUNTER, AMOUNT) COUNTER##_add(AMOUNT)
  |  |  ------------------
  ------------------
  180|  9.19M|    return xrealloc__(p, size);
  181|  9.19M|}
xmemdup:
  185|  4.06k|{
  186|  4.06k|    void *p = xmalloc(size);
  187|  4.06k|    nullable_memcpy(p, p_, size);
  188|  4.06k|    return p;
  189|  4.06k|}
xmemdup0:
  193|      1|{
  194|      1|    char *p = xmalloc(length + 1);
  195|      1|    memcpy(p, p_, length);
  196|      1|    p[length] = '\0';
  197|      1|    return p;
  198|      1|}
xstrdup:
  202|      1|{
  203|      1|    return xmemdup0(s, strlen(s));
  204|      1|}
xvasprintf:
  220|  9.29k|{
  221|  9.29k|    va_list args2;
  222|  9.29k|    size_t needed;
  223|  9.29k|    char *s;
  224|       |
  225|  9.29k|    ovs_assert(format);
  ------------------
  |  |   62|  9.29k|#define ovs_assert ovs_ignore
  ------------------
  226|       |
  227|  9.29k|    va_copy(args2, args);
  228|  9.29k|    needed = vsnprintf(NULL, 0, format, args);
  229|       |
  230|  9.29k|    s = xmalloc(needed + 1);
  231|       |
  232|  9.29k|    vsnprintf(s, needed + 1, format, args2);
  233|  9.29k|    va_end(args2);
  234|       |
  235|  9.29k|    return s;
  236|  9.29k|}
x2nrealloc:
  240|  26.4k|{
  241|  26.4k|    *n = *n == 0 ? 1 : 2 * *n;
  ------------------
  |  Branch (241:10): [True: 17.1k, False: 9.32k]
  ------------------
  242|  26.4k|    return xrealloc(p, *n * s);
  243|  26.4k|}
ovs_strlcpy:
  381|  55.9k|{
  382|  55.9k|    if (size > 0) {
  ------------------
  |  Branch (382:9): [True: 55.9k, False: 0]
  ------------------
  383|  55.9k|        size_t len = strnlen(src, size - 1);
  384|  55.9k|        memcpy(dst, src, len);
  385|  55.9k|        dst[len] = '\0';
  386|  55.9k|    }
  387|  55.9k|}
ovs_ignore:
 1265|  32.0M|void ovs_ignore(bool x OVS_UNUSED) { }
is_all_byte:
 1356|   494k|{
 1357|   494k|    const uint8_t *p = p_;
 1358|   494k|    size_t i;
 1359|       |
 1360|  11.6M|    for (i = 0; i < n; i++) {
  ------------------
  |  Branch (1360:17): [True: 11.3M, False: 245k]
  ------------------
 1361|  11.3M|        if (p[i] != byte) {
  ------------------
  |  Branch (1361:13): [True: 248k, False: 11.1M]
  ------------------
 1362|   248k|            return false;
 1363|   248k|        }
 1364|  11.3M|    }
 1365|   245k|    return true;
 1366|   494k|}
is_all_zeros:
 1371|   219k|{
 1372|   219k|    return is_all_byte(p, n, 0);
 1373|   219k|}
is_all_ones:
 1378|   275k|{
 1379|   275k|    return is_all_byte(p, n, 0xff);
 1380|   275k|}
bitwise_copy:
 1414|  34.9k|{
 1415|  34.9k|    const uint8_t *src = src_;
 1416|  34.9k|    uint8_t *dst = dst_;
 1417|       |
 1418|  34.9k|    src += src_len - (src_ofs / 8 + 1);
 1419|  34.9k|    src_ofs %= 8;
 1420|       |
 1421|  34.9k|    dst += dst_len - (dst_ofs / 8 + 1);
 1422|  34.9k|    dst_ofs %= 8;
 1423|       |
 1424|  34.9k|    if (src_ofs == 0 && dst_ofs == 0) {
  ------------------
  |  Branch (1424:9): [True: 34.5k, False: 392]
  |  Branch (1424:25): [True: 21.2k, False: 13.2k]
  ------------------
 1425|  21.2k|        unsigned int n_bytes = n_bits / 8;
 1426|  21.2k|        if (n_bytes) {
  ------------------
  |  Branch (1426:13): [True: 16.3k, False: 4.83k]
  ------------------
 1427|  16.3k|            dst -= n_bytes - 1;
 1428|  16.3k|            src -= n_bytes - 1;
 1429|  16.3k|            memcpy(dst, src, n_bytes);
 1430|       |
 1431|  16.3k|            n_bits %= 8;
 1432|  16.3k|            src--;
 1433|  16.3k|            dst--;
 1434|  16.3k|        }
 1435|  21.2k|        if (n_bits) {
  ------------------
  |  Branch (1435:13): [True: 12.1k, False: 9.08k]
  ------------------
 1436|  12.1k|            uint8_t mask = (1 << n_bits) - 1;
 1437|  12.1k|            *dst = (*dst & ~mask) | (*src & mask);
 1438|  12.1k|        }
 1439|  21.2k|    } else {
 1440|  76.7k|        while (n_bits > 0) {
  ------------------
  |  Branch (1440:16): [True: 63.0k, False: 13.6k]
  ------------------
 1441|  63.0k|            unsigned int max_copy = 8 - MAX(src_ofs, dst_ofs);
  ------------------
  |  |   95|  63.0k|#define MAX(X, Y) ((X) > (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (95:20): [True: 27.3k, False: 35.6k]
  |  |  ------------------
  ------------------
 1442|  63.0k|            unsigned int chunk = MIN(n_bits, max_copy);
  ------------------
  |  |   91|  63.0k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 10.8k, False: 52.2k]
  |  |  ------------------
  ------------------
 1443|  63.0k|            uint8_t mask = ((1 << chunk) - 1) << dst_ofs;
 1444|       |
 1445|  63.0k|            *dst &= ~mask;
 1446|  63.0k|            *dst |= ((*src >> src_ofs) << dst_ofs) & mask;
 1447|       |
 1448|  63.0k|            src_ofs += chunk;
 1449|  63.0k|            if (src_ofs == 8) {
  ------------------
  |  Branch (1449:17): [True: 23.1k, False: 39.8k]
  ------------------
 1450|  23.1k|                src--;
 1451|  23.1k|                src_ofs = 0;
 1452|  23.1k|            }
 1453|  63.0k|            dst_ofs += chunk;
 1454|  63.0k|            if (dst_ofs == 8) {
  ------------------
  |  Branch (1454:17): [True: 29.0k, False: 34.0k]
  ------------------
 1455|  29.0k|                dst--;
 1456|  29.0k|                dst_ofs = 0;
 1457|  29.0k|            }
 1458|  63.0k|            n_bits -= chunk;
 1459|  63.0k|        }
 1460|  13.6k|    }
 1461|  34.9k|}
bitwise_one:
 1526|  27.4k|{
 1527|  27.4k|    uint8_t *dst = dst_;
 1528|       |
 1529|  27.4k|    if (!n_bits) {
  ------------------
  |  Branch (1529:9): [True: 0, False: 27.4k]
  ------------------
 1530|      0|        return;
 1531|      0|    }
 1532|       |
 1533|  27.4k|    dst += dst_len - (dst_ofs / 8 + 1);
 1534|  27.4k|    dst_ofs %= 8;
 1535|       |
 1536|  27.4k|    if (dst_ofs) {
  ------------------
  |  Branch (1536:9): [True: 12.3k, False: 15.1k]
  ------------------
 1537|  12.3k|        unsigned int chunk = MIN(n_bits, 8 - dst_ofs);
  ------------------
  |  |   91|  12.3k|#define MIN(X, Y) ((X) < (Y) ? (X) : (Y))
  |  |  ------------------
  |  |  |  Branch (91:20): [True: 1.17k, False: 11.2k]
  |  |  ------------------
  ------------------
 1538|       |
 1539|  12.3k|        *dst |= ((1 << chunk) - 1) << dst_ofs;
 1540|       |
 1541|  12.3k|        n_bits -= chunk;
 1542|  12.3k|        if (!n_bits) {
  ------------------
  |  Branch (1542:13): [True: 2.00k, False: 10.3k]
  ------------------
 1543|  2.00k|            return;
 1544|  2.00k|        }
 1545|       |
 1546|  10.3k|        dst--;
 1547|  10.3k|    }
 1548|       |
 1549|  69.7k|    while (n_bits >= 8) {
  ------------------
  |  Branch (1549:12): [True: 44.2k, False: 25.4k]
  ------------------
 1550|  44.2k|        *dst-- = 0xff;
 1551|  44.2k|        n_bits -= 8;
 1552|  44.2k|    }
 1553|       |
 1554|  25.4k|    if (n_bits) {
  ------------------
  |  Branch (1554:9): [True: 18.9k, False: 6.58k]
  ------------------
 1555|  18.9k|        *dst |= (1 << n_bits) - 1;
 1556|  18.9k|    }
 1557|  25.4k|}
bitwise_scan:
 1630|  5.55k|{
 1631|  5.55k|    unsigned int ofs;
 1632|       |
 1633|  1.19M|    for (ofs = start; ofs < end; ofs++) {
  ------------------
  |  Branch (1633:23): [True: 1.19M, False: 2.55k]
  ------------------
 1634|  1.19M|        if (bitwise_get_bit(p, len, ofs) == target) {
  ------------------
  |  Branch (1634:13): [True: 2.99k, False: 1.18M]
  ------------------
 1635|  2.99k|            break;
 1636|  2.99k|        }
 1637|  1.19M|    }
 1638|  5.55k|    return ofs;
 1639|  5.55k|}
bitwise_put:
 1719|  5.31k|{
 1720|  5.31k|    ovs_be64 n_value = htonll(value);
 1721|  5.31k|    bitwise_copy(&n_value, sizeof n_value, 0,
 1722|  5.31k|                 dst, dst_len, dst_ofs,
 1723|  5.31k|                 n_bits);
 1724|  5.31k|}
bitwise_get:
 1742|  2.10k|{
 1743|  2.10k|    ovs_be64 value = htonll(0);
 1744|       |
 1745|  2.10k|    bitwise_copy(src, src_len, src_ofs,
 1746|  2.10k|                 &value, sizeof value, 0,
 1747|  2.10k|                 n_bits);
 1748|  2.10k|    return ntohll(value);
 1749|  2.10k|}
bitwise_get_bit:
 1765|  1.19M|{
 1766|  1.19M|    const uint8_t *src = src_;
 1767|       |
 1768|  1.19M|    return (src[len - (ofs / 8 + 1)] & (1u << (ofs % 8))) != 0;
 1769|  1.19M|}

ofp-protocol.c:rightmost_1bit:
  382|  81.8k|{
  383|  81.8k|    return x & -x;
  384|  81.8k|}
ofp-protocol.c:zero_rightmost_1bit:
  390|   830k|{
  391|   830k|    return x & (x - 1);
  392|   830k|}
ofp-protocol.c:raw_ctz:
  261|   830k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|   830k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 830k, False: 0]
  |  Branch (265:54): [True: 830k, False: 0]
  ------------------
  266|   830k|            ? __builtin_ctz(n)
  267|   830k|            : __builtin_ctzll(n));
  268|   830k|}
ofp-table.c:raw_ctz:
  261|   448k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|   448k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 448k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   448k|            ? __builtin_ctz(n)
  267|   448k|            : __builtin_ctzll(n));
  268|   448k|}
ofpbuf.c:nullable_memset:
  198|  95.2k|{
  199|  95.2k|    if (n) {
  ------------------
  |  Branch (199:9): [True: 95.1k, False: 131]
  ------------------
  200|  95.1k|        memset(dst, c, n);
  201|  95.1k|    }
  202|  95.2k|}
util.c:nullable_memcpy:
  188|  4.06k|{
  189|  4.06k|    if (n) {
  ------------------
  |  Branch (189:9): [True: 4.06k, False: 0]
  ------------------
  190|  4.06k|        memcpy(dst, src, n);
  191|  4.06k|    }
  192|  4.06k|}
flow.c:ovs_u128_is_zero:
  488|  49.6k|{
  489|  49.6k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 0, False: 49.6k]
  |  Branch (489:28): [True: 0, False: 49.6k]
  ------------------
  490|  49.6k|}
flow.c:rightmost_1bit:
  382|  73.5k|{
  383|  73.5k|    return x & -x;
  384|  73.5k|}
flow.c:count_1bits:
  332|  75.1k|{
  333|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  334|       |    return __builtin_popcountll(x);
  335|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  336|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  337|       |#else
  338|       |    /* This portable implementation is the fastest one we know of for 64
  339|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  340|  75.1k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  75.1k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  75.1k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  75.1k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  75.1k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  75.1k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  75.1k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  75.1k|#endif
  349|  75.1k|}
flow.c:raw_ctz:
  261|   708k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|   708k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 708k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   708k|            ? __builtin_ctz(n)
  267|   708k|            : __builtin_ctzll(n));
  268|   708k|}
flow.c:zero_rightmost_1bit:
  390|   708k|{
  391|   708k|    return x & (x - 1);
  392|   708k|}
match.c:ovs_u128_and:
  515|  4.03k|{
  516|  4.03k|    ovs_u128 dst;
  517|       |
  518|  4.03k|    dst.u64.hi = a.u64.hi & b.u64.hi;
  519|  4.03k|    dst.u64.lo = a.u64.lo & b.u64.lo;
  520|       |
  521|  4.03k|    return dst;
  522|  4.03k|}
match.c:ovs_u128_is_zero:
  488|   181k|{
  489|   181k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 696, False: 180k]
  |  Branch (489:28): [True: 296, False: 180k]
  ------------------
  490|   181k|}
meta-flow.c:ovs_u128_is_zero:
  488|  4.67k|{
  489|  4.67k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 134, False: 4.54k]
  |  Branch (489:28): [True: 10, False: 4.53k]
  ------------------
  490|  4.67k|}
meta-flow.c:raw_ctz:
  261|  7.38k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  7.38k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 7.38k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  7.38k|            ? __builtin_ctz(n)
  267|  7.38k|            : __builtin_ctzll(n));
  268|  7.38k|}
nx-match.c:raw_ctz:
  261|  8.31k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  8.31k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 8.31k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  8.31k|            ? __builtin_ctz(n)
  267|  8.31k|            : __builtin_ctzll(n));
  268|  8.31k|}
ofp-actions.c:log_2_ceil:
  322|  5.37k|{
  323|  5.37k|    return log_2_floor(n) + !is_pow2(n);
  324|  5.37k|}
ofp-actions.c:log_2_floor:
  314|  5.37k|{
  315|  5.37k|    return 63 - raw_clz64(n);
  316|  5.37k|}
ofp-actions.c:raw_clz64:
  272|  5.37k|{
  273|  5.37k|    return __builtin_clzll(n);
  274|  5.37k|}
ofp-actions.c:rightmost_1bit_idx:
  398|   145k|{
  399|   145k|    return ctz64(x);
  400|   145k|}
ofp-actions.c:ctz64:
  291|   145k|{
  292|   145k|    return n ? raw_ctz(n) : 64;
  ------------------
  |  Branch (292:12): [True: 145k, False: 0]
  ------------------
  293|   145k|}
ofp-actions.c:raw_ctz:
  261|   145k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|   145k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 145k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|   145k|            ? __builtin_ctz(n)
  267|   145k|            : __builtin_ctzll(n));
  268|   145k|}
ofp-actions.c:zero_rightmost_1bit:
  390|   145k|{
  391|   145k|    return x & (x - 1);
  392|   145k|}
ofp-ct.c:ovs_u128_is_zero:
  488|  5.00k|{
  489|  5.00k|    return !(val.u64.hi || val.u64.lo);
  ------------------
  |  Branch (489:14): [True: 1.42k, False: 3.57k]
  |  Branch (489:28): [True: 87, False: 3.49k]
  ------------------
  490|  5.00k|}
ofp-ct.c:ovs_u128_is_ones:
  495|  1.51k|{
  496|  1.51k|    return ovs_u128_equals(val, OVS_U128_MAX);
  497|  1.51k|}
ofp-ct.c:ovs_u128_equals:
  481|  1.51k|{
  482|  1.51k|    return (a.u64.hi == b.u64.hi) && (a.u64.lo == b.u64.lo);
  ------------------
  |  Branch (482:12): [True: 715, False: 797]
  |  Branch (482:38): [True: 288, False: 427]
  ------------------
  483|  1.51k|}
ofp-group.c:count_1bits:
  332|  12.1k|{
  333|       |#if (__GNUC__ >= 4 && __POPCNT__) || (defined(__aarch64__) && __GNUC__ >= 7)
  334|       |    return __builtin_popcountll(x);
  335|       |#elif defined(__aarch64__) && __GNUC__ >= 6
  336|       |    return vaddv_u8(vcnt_u8(vcreate_u8(x)));
  337|       |#else
  338|       |    /* This portable implementation is the fastest one we know of for 64
  339|       |     * bits, and about 3x faster than GCC 4.7 __builtin_popcountll(). */
  340|  12.1k|    const uint64_t h55 = UINT64_C(0x5555555555555555);
  341|  12.1k|    const uint64_t h33 = UINT64_C(0x3333333333333333);
  342|  12.1k|    const uint64_t h0F = UINT64_C(0x0F0F0F0F0F0F0F0F);
  343|       |    const uint64_t h01 = UINT64_C(0x0101010101010101);
  344|  12.1k|    x -= (x >> 1) & h55;               /* Count of each 2 bits in-place. */
  345|  12.1k|    x = (x & h33) + ((x >> 2) & h33);  /* Count of each 4 bits in-place. */
  346|  12.1k|    x = (x + (x >> 4)) & h0F;          /* Count of each 8 bits in-place. */
  347|  12.1k|    return (x * h01) >> 56;            /* Sum of all bytes. */
  348|  12.1k|#endif
  349|  12.1k|}
packets.c:ctz32:
  284|  8.00k|{
  285|  8.00k|    return n ? raw_ctz(n) : 32;
  ------------------
  |  Branch (285:12): [True: 8.00k, False: 0]
  ------------------
  286|  8.00k|}
packets.c:raw_ctz:
  261|  8.00k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  8.00k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 8.00k, False: 0]
  |  Branch (265:54): [True: 8.00k, False: 0]
  ------------------
  266|  8.00k|            ? __builtin_ctz(n)
  267|  8.00k|            : __builtin_ctzll(n));
  268|  8.00k|}
tun-metadata.c:raw_ctz:
  261|  6.89k|{
  262|       |    /* With GCC 4.7 on 32-bit x86, if a 32-bit integer is passed as 'n', using
  263|       |     * a plain __builtin_ctzll() here always generates an out-of-line function
  264|       |     * call.  The test below helps it to emit a single 'bsf' instruction. */
  265|  6.89k|    return (__builtin_constant_p(n <= UINT32_MAX) && n <= UINT32_MAX
  ------------------
  |  Branch (265:13): [True: 0, False: 6.89k]
  |  Branch (265:54): [True: 0, False: 0]
  ------------------
  266|  6.89k|            ? __builtin_ctz(n)
  267|  6.89k|            : __builtin_ctzll(n));
  268|  6.89k|}
tun-metadata.c:zero_rightmost_1bit:
  390|  6.89k|{
  391|  6.89k|    return x & (x - 1);
  392|  6.89k|}

uuid_is_zero:
  204|  48.6k|{
  205|  48.6k|    return (!uuid->parts[0] && !uuid->parts[1]
  ------------------
  |  Branch (205:13): [True: 48.5k, False: 85]
  |  Branch (205:32): [True: 48.1k, False: 380]
  ------------------
  206|  48.1k|            && !uuid->parts[2] && !uuid->parts[3]);
  ------------------
  |  Branch (206:16): [True: 48.0k, False: 173]
  |  Branch (206:35): [True: 47.9k, False: 28]
  ------------------
  207|  48.6k|}

vlog_get_level_val:
  189|      2|{
  190|      2|    return search_name_array(name, level_names, ARRAY_SIZE(level_names));
  ------------------
  |  |  297|      2|#define ARRAY_SIZE(ARRAY) __ARRAY_SIZE(ARRAY)
  |  |  ------------------
  |  |  |  |   46|      2|    __builtin_choose_expr(__ARRAY_CHECK(ARRAY),			\
  |  |  |  |  ------------------
  |  |  |  |  |  |   41|      2|    !__builtin_types_compatible_p(typeof(ARRAY), typeof(&ARRAY[0]))
  |  |  |  |  ------------------
  |  |  |  |   47|      2|        __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   37|      2|#define __ARRAY_SIZE_NOCHECK(ARRAY) (sizeof(ARRAY) / sizeof((ARRAY)[0]))
  |  |  |  |  ------------------
  |  |  |  |                       __ARRAY_SIZE_NOCHECK(ARRAY), __ARRAY_FAIL(ARRAY))
  |  |  |  |  ------------------
  |  |  |  |  |  |   44|      2|#define __ARRAY_FAIL(ARRAY) (sizeof(char[-2*!__ARRAY_CHECK(ARRAY)]))
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  191|      2|}
vlog_get_destination_val:
  205|      1|{
  206|      1|    size_t i;
  207|       |
  208|      4|    for (i = 0; i < VLF_N_DESTINATIONS; i++) {
  ------------------
  |  Branch (208:17): [True: 3, False: 1]
  ------------------
  209|      3|        if (!strcasecmp(destinations[i].name, name)) {
  ------------------
  |  Branch (209:13): [True: 0, False: 3]
  ------------------
  210|      0|            break;
  211|      0|        }
  212|      3|    }
  213|      1|    return i;
  214|      1|}
vlog_insert_module:
  218|    182|{
  219|    182|    ovs_mutex_lock(&log_file_mutex);
  ------------------
  |  |   71|    182|        ovs_mutex_lock_at(mutex, OVS_SOURCE_LOCATOR)
  |  |  ------------------
  |  |  |  |   37|    182|#define OVS_SOURCE_LOCATOR __FILE__ ":" OVS_STRINGIZE(__LINE__)
  |  |  |  |  ------------------
  |  |  |  |  |  |   38|    182|#define OVS_STRINGIZE(ARG) OVS_STRINGIZE2(ARG)
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |   39|    182|#define OVS_STRINGIZE2(ARG) #ARG
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  220|    182|    ovs_list_insert(&vlog_modules, vlog);
  221|    182|    ovs_mutex_unlock(&log_file_mutex);
  222|    182|}
vlog_set_levels:
  303|      1|{
  304|      1|    assert(destination < VLF_N_DESTINATIONS ||
  305|      1|           destination == VLF_ANY_DESTINATION);
  306|      1|    if (destination == VLF_ANY_DESTINATION) {
  ------------------
  |  Branch (306:9): [True: 1, False: 0]
  ------------------
  307|      4|        for (destination = 0; destination < VLF_N_DESTINATIONS;
  ------------------
  |  Branch (307:31): [True: 3, False: 1]
  ------------------
  308|      3|             destination++) {
  309|      3|            set_destination_level(destination, module, level);
  310|      3|        }
  311|      1|    } else {
  312|      0|        set_destination_level(destination, module, level);
  313|      0|    }
  314|      1|}
vlog_set_levels_from_string:
  513|      1|{
  514|      1|    char *s = xstrdup(s_);
  515|      1|    char *save_ptr = NULL;
  516|      1|    char *msg = NULL;
  517|      1|    char *word;
  518|       |
  519|      1|    word = strtok_r(s, " ,:\t", &save_ptr);
  520|      1|    if (word && !strcasecmp(word, "PATTERN")) {
  ------------------
  |  Branch (520:9): [True: 1, False: 0]
  |  Branch (520:17): [True: 0, False: 1]
  ------------------
  521|      0|        enum vlog_destination destination;
  522|       |
  523|      0|        word = strtok_r(NULL, " ,:\t", &save_ptr);
  524|      0|        if (!word) {
  ------------------
  |  Branch (524:13): [True: 0, False: 0]
  ------------------
  525|      0|            msg = xstrdup("missing destination");
  526|      0|            goto exit;
  527|      0|        }
  528|       |
  529|      0|        destination = (!strcasecmp(word, "ANY")
  ------------------
  |  Branch (529:24): [True: 0, False: 0]
  ------------------
  530|      0|                       ? VLF_ANY_DESTINATION
  531|      0|                       : vlog_get_destination_val(word));
  532|      0|        if (destination == VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (532:13): [True: 0, False: 0]
  ------------------
  533|      0|            msg = xasprintf("unknown destination \"%s\"", word);
  534|      0|            goto exit;
  535|      0|        }
  536|      0|        vlog_set_pattern(destination, save_ptr);
  537|      1|    } else if (word && !strcasecmp(word, "FACILITY")) {
  ------------------
  |  Branch (537:16): [True: 1, False: 0]
  |  Branch (537:24): [True: 0, False: 1]
  ------------------
  538|      0|        int value;
  539|       |
  540|      0|        if (!vlog_facility_exists(save_ptr, &value)) {
  ------------------
  |  Branch (540:13): [True: 0, False: 0]
  ------------------
  541|      0|            msg = xstrdup("invalid facility");
  542|      0|            goto exit;
  543|      0|        }
  544|      0|        atomic_store_explicit(&log_facility, value, memory_order_relaxed);
  ------------------
  |  |   45|      0|    __c11_atomic_store(DST, SRC, ORDER)
  ------------------
  545|      1|    } else {
  546|      1|        struct vlog_module *module = NULL;
  547|      1|        enum vlog_level level = VLL_N_LEVELS;
  548|      1|        enum vlog_destination destination = VLF_N_DESTINATIONS;
  549|       |
  550|      2|        for (; word != NULL; word = strtok_r(NULL, " ,:\t", &save_ptr)) {
  ------------------
  |  Branch (550:16): [True: 1, False: 1]
  ------------------
  551|      1|            if (!strcasecmp(word, "ANY")) {
  ------------------
  |  Branch (551:17): [True: 0, False: 1]
  ------------------
  552|      0|                continue;
  553|      1|            } else if (vlog_get_destination_val(word) != VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (553:24): [True: 0, False: 1]
  ------------------
  554|      0|                if (destination != VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (554:21): [True: 0, False: 0]
  ------------------
  555|      0|                    msg = xstrdup("cannot specify multiple destinations");
  556|      0|                    goto exit;
  557|      0|                }
  558|      0|                destination = vlog_get_destination_val(word);
  559|      1|            } else if (vlog_get_level_val(word) != VLL_N_LEVELS) {
  ------------------
  |  Branch (559:24): [True: 1, False: 0]
  ------------------
  560|      1|                if (level != VLL_N_LEVELS) {
  ------------------
  |  Branch (560:21): [True: 0, False: 1]
  ------------------
  561|      0|                    msg = xstrdup("cannot specify multiple levels");
  562|      0|                    goto exit;
  563|      0|                }
  564|      1|                level = vlog_get_level_val(word);
  565|      1|            } else if (vlog_module_from_name(word)) {
  ------------------
  |  Branch (565:24): [True: 0, False: 0]
  ------------------
  566|      0|                if (module) {
  ------------------
  |  Branch (566:21): [True: 0, False: 0]
  ------------------
  567|      0|                    msg = xstrdup("cannot specify multiple modules");
  568|      0|                    goto exit;
  569|      0|                }
  570|      0|                module = vlog_module_from_name(word);
  571|      0|            } else {
  572|      0|                msg = xasprintf("no destination, level, or module \"%s\"",
  573|      0|                                word);
  574|      0|                goto exit;
  575|      0|            }
  576|      1|        }
  577|       |
  578|      1|        if (destination == VLF_N_DESTINATIONS) {
  ------------------
  |  Branch (578:13): [True: 1, False: 0]
  ------------------
  579|      1|            destination = VLF_ANY_DESTINATION;
  580|      1|        }
  581|      1|        if (level == VLL_N_LEVELS) {
  ------------------
  |  Branch (581:13): [True: 0, False: 1]
  ------------------
  582|      0|            level = VLL_DBG;
  583|      0|        }
  584|      1|        vlog_set_levels(module, destination, level);
  585|      1|    }
  586|       |
  587|      1|exit:
  588|      1|    free(s);
  589|      1|    return msg;
  590|      1|}
vlog_set_verbosity:
  606|      1|{
  607|      1|    if (arg) {
  ------------------
  |  Branch (607:9): [True: 1, False: 0]
  ------------------
  608|      1|        char *msg = vlog_set_levels_from_string(arg);
  609|      1|        if (msg) {
  ------------------
  |  Branch (609:13): [True: 0, False: 1]
  ------------------
  610|      0|            ovs_fatal(0, "processing \"%s\": %s", arg, msg);
  611|      0|        }
  612|      1|    } else {
  613|       |        vlog_set_levels(NULL, VLF_ANY_DESTINATION, VLL_DBG);
  614|      0|    }
  615|      1|}
vlog_is_enabled:
 1000|   610k|{
 1001|   610k|    return module->min_level >= level;
 1002|   610k|}
vlog_should_drop:
 1330|   610k|{
 1331|   610k|    if (!module->honor_rate_limits) {
  ------------------
  |  Branch (1331:9): [True: 0, False: 610k]
  ------------------
 1332|      0|        return false;
 1333|      0|    }
 1334|       |
 1335|   610k|    if (!vlog_is_enabled(module, level)) {
  ------------------
  |  Branch (1335:9): [True: 610k, False: 0]
  ------------------
 1336|   610k|        return true;
 1337|   610k|    }
 1338|       |
 1339|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
 1340|      0|    if (!token_bucket_withdraw(&rl->token_bucket, VLOG_MSG_TOKENS)) {
  ------------------
  |  |  105|      0|#define VLOG_MSG_TOKENS (60 * 1000)
  ------------------
  |  Branch (1340:9): [True: 0, False: 0]
  ------------------
 1341|      0|        time_t now = time_now();
 1342|      0|        if (!rl->n_dropped) {
  ------------------
  |  Branch (1342:13): [True: 0, False: 0]
  ------------------
 1343|      0|            rl->first_dropped = now;
 1344|      0|        }
 1345|      0|        rl->last_dropped = now;
 1346|      0|        rl->n_dropped++;
 1347|      0|        ovs_mutex_unlock(&rl->mutex);
 1348|      0|        return true;
 1349|      0|    }
 1350|       |
 1351|      0|    if (!rl->n_dropped) {
  ------------------
  |  Branch (1351:9): [True: 0, False: 0]
  ------------------
 1352|      0|        ovs_mutex_unlock(&rl->mutex);
 1353|      0|    } else {
 1354|      0|        time_t now = time_now();
 1355|      0|        unsigned int n_dropped = rl->n_dropped;
 1356|      0|        unsigned int first_dropped_elapsed = now - rl->first_dropped;
 1357|      0|        unsigned int last_dropped_elapsed = now - rl->last_dropped;
 1358|      0|        rl->n_dropped = 0;
 1359|      0|        ovs_mutex_unlock(&rl->mutex);
 1360|       |
 1361|      0|        vlog(module, level,
 1362|      0|             "Dropped %u log messages in last %u seconds (most recently, "
 1363|      0|             "%u seconds ago) due to excessive rate",
 1364|      0|             n_dropped, first_dropped_elapsed, last_dropped_elapsed);
 1365|      0|    }
 1366|       |
 1367|       |    return false;
 1368|      0|}
vlog_rate_limit:
 1373|  30.9k|{
 1374|  30.9k|    if (!vlog_should_drop(module, level, rl)) {
  ------------------
  |  Branch (1374:9): [True: 0, False: 30.9k]
  ------------------
 1375|      0|        va_list args;
 1376|       |
 1377|      0|        va_start(args, message);
 1378|      0|        vlog_valist(module, level, message, args);
 1379|       |        va_end(args);
 1380|      0|    }
 1381|  30.9k|}
vlog.c:search_name_array:
  165|      2|{
  166|      2|    size_t i;
  167|       |
  168|      2|    for (i = 0; i < n_names; i++) {
  ------------------
  |  Branch (168:17): [True: 2, False: 0]
  ------------------
  169|      2|        assert(names[i]);
  170|      2|        if (!strcasecmp(names[i], target)) {
  ------------------
  |  Branch (170:13): [True: 2, False: 0]
  ------------------
  171|      2|            break;
  172|      2|        }
  173|      2|    }
  174|      2|    return i;
  175|      2|}
vlog.c:set_destination_level:
  279|      3|{
  280|      3|    assert(destination >= 0 && destination < VLF_N_DESTINATIONS);
  281|      3|    assert(level < VLL_N_LEVELS);
  282|       |
  283|      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
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  284|      3|    if (!module) {
  ------------------
  |  Branch (284:9): [True: 3, False: 0]
  ------------------
  285|      3|        struct vlog_module *mp;
  286|    273|        LIST_FOR_EACH (mp, list, &vlog_modules) {
  ------------------
  |  |   76|      3|    for (INIT_MULTIVAR(VAR, MEMBER, (LIST)->next, struct ovs_list);           \
  |  |  ------------------
  |  |  |  |  171|      3|    INIT_MULTIVAR_EXP(VAR, MEMBER, POINTER, ITER_TYPE, (void) 0)
  |  |  |  |  ------------------
  |  |  |  |  |  |  174|      3|    ITER_TYPE *ITER_VAR(VAR) = ( __VA_ARGS__ , (ITER_TYPE *) POINTER)
  |  |  |  |  ------------------
  |  |  ------------------
  |  |   77|    276|         CONDITION_MULTIVAR(VAR, MEMBER, ITER_VAR(VAR) != (LIST));            \
  |  |  ------------------
  |  |  |  |  185|    276|    ((EXPR) ?                                                                 \
  |  |  |  |  ------------------
  |  |  |  |  |  Branch (185:5): [True: 273, False: 3]
  |  |  |  |  |  Branch (185:6): [True: 273, False: 3]
  |  |  |  |  ------------------
  |  |  |  |  186|    276|     (((VAR) = OBJECT_CONTAINING(ITER_VAR(VAR), VAR, MEMBER)), 1) :           \
  |  |  |  |  ------------------
  |  |  |  |  |  |  134|    273|    ((OVS_TYPEOF(OBJECT)) (void *)                                      \
  |  |  |  |  |  |  135|    273|     ((char *) (POINTER) - OBJECT_OFFSETOF(OBJECT, MEMBER)))
  |  |  |  |  |  |  ------------------
  |  |  |  |  |  |  |  |  108|    273|#define OBJECT_OFFSETOF(OBJECT, MEMBER) offsetof(typeof(*(OBJECT)), MEMBER)
  |  |  |  |  |  |  ------------------
  |  |  |  |  ------------------
  |  |  |  |  187|    276|     (((VAR) = NULL), 0))
  |  |  ------------------
  |  |   78|    273|         UPDATE_MULTIVAR(VAR, ITER_VAR(VAR)->next))
  |  |  ------------------
  |  |  |  |  193|    273|    (ITER_VAR(VAR) = NEXT_ITER)
  |  |  |  |  ------------------
  |  |  |  |  |  |  162|    273|#define ITER_VAR(NAME) NAME ## __iterator__
  |  |  |  |  ------------------
  |  |  ------------------
  ------------------
  287|    273|            mp->levels[destination] = level;
  288|    273|            update_min_level(mp);
  289|    273|        }
  290|      3|    } else {
  291|      0|        module->levels[destination] = level;
  292|      0|        update_min_level(module);
  293|      0|    }
  294|      3|    ovs_mutex_unlock(&log_file_mutex);
  295|      3|}
vlog.c:update_min_level:
  262|    273|{
  263|    273|    enum vlog_destination destination;
  264|       |
  265|    273|    module->min_level = VLL_OFF;
  266|  1.09k|    for (destination = 0; destination < VLF_N_DESTINATIONS; destination++) {
  ------------------
  |  Branch (266:27): [True: 819, False: 273]
  ------------------
  267|    819|        if (log_fd >= 0 || destination != VLF_FILE) {
  ------------------
  |  Branch (267:13): [True: 0, False: 819]
  |  Branch (267:28): [True: 546, False: 273]
  ------------------
  268|    546|            enum vlog_level level = module->levels[destination];
  269|    546|            if (level > module->min_level) {
  ------------------
  |  Branch (269:17): [True: 91, False: 455]
  ------------------
  270|     91|                module->min_level = level;
  271|     91|            }
  272|    546|        }
  273|    819|    }
  274|    273|}

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

